FINERACT-2312: Reverse of Accruals to adjust late deposits

This commit is contained in:
JohnAlva
2025-09-04 10:25:51 +02:00
committed by Adam Saghy
parent a6fa1adc99
commit fb8f2f7cb6
3 changed files with 102 additions and 3 deletions
@@ -158,13 +158,19 @@ public class SavingsAccrualWritePlatformServiceImpl implements SavingsAccrualWri
final List<LocalDate> accrualTransactionDates = savingsAccount.retrieveOrderedAccrualTransactions().stream()
.map(transaction -> transaction.getTransactionDate()).toList();
final List<LocalDate> reversedAccrualTransactionDates = savingsAccount.retrieveOrderedAccrualTransactions().stream()
.filter(transaction -> transaction.isReversed()).map(transaction -> transaction.getTransactionDate()).toList();
LocalDate accruedTillDate = fromDate;
for (PostingPeriod period : allPostingPeriods) {
LocalDate valueDate = period.getPeriodInterval().endDate();
List<LocalDate> matchingAccrualDates = reversedAccrualTransactionDates.stream()
.filter(accrualDate -> accrualDate.equals(valueDate)).toList();
period.calculateInterest(compoundInterestValues);
final LocalDate endDate = period.getPeriodInterval().endDate();
if (!accrualTransactionDates.contains(period.getPeriodInterval().endDate())
&& !MathUtil.isZero(period.closingBalance().getAmount())) {
&& (!MathUtil.isZero(period.closingBalance().getAmount()) || !matchingAccrualDates.isEmpty())) {
String refNo = (refNoProvider != null) ? refNoProvider.apply(endDate) : null;
SavingsAccountTransaction savingsAccountTransaction = SavingsAccountTransaction.accrual(savingsAccount,
savingsAccount.office(), period.getPeriodInterval().endDate(), period.getInterestEarned().abs(), false, refNo);