public EndOfDayBalance toEndOfDayBalance( final Money openingBalance, final LocalDate nextTransactionDate) { MonetaryCurrency currency = openingBalance.getCurrency(); Money endOfDayBalance = openingBalance.copy(); if (isDeposit()) { endOfDayBalance = openingBalance.plus(getAmount(currency)); } else if (isWithdrawal() || isWithdrawalFee()) { endOfDayBalance = openingBalance.minus(getAmount(currency)); } int numberOfDays = LocalDateInterval.create(getTransactionLocalDate(), nextTransactionDate) .daysInPeriodInclusiveOfEndDate(); if (!openingBalance.isEqualTo(endOfDayBalance) && numberOfDays > 1) { numberOfDays = numberOfDays - 1; } return EndOfDayBalance.from( getTransactionLocalDate(), openingBalance, endOfDayBalance, numberOfDays); }