FINERACT-2456: Fix charge off after repayment reversal with merchant refunds and credit balance refund

This commit is contained in:
Oleksii Novikov
2026-02-02 18:55:17 +01:00
committed by Adam Saghy
parent 0a113fd42d
commit 3b0d053d52
2 changed files with 74 additions and 2 deletions
@@ -2189,12 +2189,21 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
}
});
final Money amountToEditLastInstallment = loanTransaction.getLoan().getPrincipal().minus(installments.stream() //
.filter(i -> i.getPrincipal() != null) //
final BigDecimal totalCreditedPrincipal = installments.stream() //
.filter(i -> !i.isAdditional()) //
.map(i -> MathUtil.nullToZero(i.getCreditedPrincipal())) //
.reduce(ZERO, BigDecimal::add);
final Money scheduledPrincipal = Money.of(currency, installments.stream() //
.filter(i -> i.getPrincipal() != null && !i.isAdditional()) //
.map(LoanRepaymentScheduleInstallment::getPrincipal) //
.reduce(ZERO, BigDecimal::add));
final Money totalPrincipal = loanTransaction.getLoan().getPrincipal() //
.plus(Money.of(currency, totalCreditedPrincipal));
final Money amountToEditLastInstallment = totalPrincipal.minus(scheduledPrincipal);
BigDecimal principalBalance = amountToEditLastInstallment.getAmount();
for (int i = installments.size() - 1; i > 0 && BigDecimal.ZERO.compareTo(principalBalance) != 0; i--) {
final LoanRepaymentScheduleInstallment installment = installments.get(i);