FINERACT-2354: Chargeback handling with backdated re-age - with default re-aging behaviour

This commit is contained in:
mariiaKraievska
2025-12-16 12:38:36 +01:00
committed by Adam Saghy
parent 352ef6317c
commit f070ff4f5d
3 changed files with 360 additions and 12 deletions
@@ -3163,6 +3163,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
installment.setReAged(true);
}
installment.setAdditional(false);
installment.setCreditedPrincipal(rp.getCreditedPrincipal().getAmount());
installment.updateObligationsMet(ctx.getCurrency(), transactionDate);
}
} else {
@@ -3178,6 +3179,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
newInstallment.addToInterest(transactionDate, rp.getDueInterest());
}
newInstallment.setCreditedPrincipal(rp.getCreditedPrincipal().getAmount());
newInstallment.updateObligationsMet(ctx.getCurrency(), transactionDate);
iterator.add(newInstallment);
}
@@ -3227,6 +3229,7 @@ public class AdvancedPaymentScheduleTransactionProcessor extends AbstractLoanRep
newInstallment.setTotalPaidInAdvance(paidInAdvanceBalances.getPaidInAdvance().getAmount());
newInstallment.setTotalPaidLate(paidInAdvanceBalances.getPaidLate());
paidInAdvanceBalances.loanTransactionToRepaymentScheduleMappings.forEach(m -> m.setInstallment(newInstallment));
newInstallment.setCreditedPrincipal(rp.getCreditedPrincipal().getAmount());
newInstallment.updateObligationsMet(currency, transactionDate);
return newInstallment;
@@ -570,13 +570,19 @@ public final class ProgressiveEMICalculator implements EMICalculator {
public void updateModelRepaymentPeriodsDuringReAge(final ProgressiveLoanInterestScheduleModel scheduleModel,
final LocalDate reAgePeriodStartDate, final LocalDate reAgeFirstDueDate, final LocalDate targetDate,
final LoanApplicationTerms loanApplicationTerms, final MathContext mc) {
moveOutstandingAmountsFromPeriodsBeforeTransactionDate(scheduleModel.repaymentPeriods(), targetDate);
final Money futureCreditedPrincipals = scheduleModel.repaymentPeriods().stream()
.filter(rp -> !rp.getFromDate().isBefore(targetDate)).filter(rp -> rp.getDueDate().isAfter(targetDate))
.map(RepaymentPeriod::getCreditedPrincipal).reduce(scheduleModel.zero(), Money::add);
// calculate already paid balances from transaction date
final OutstandingDetails paidBalancesFromTransactionDate = calculatePaidBalancesAfterDate(scheduleModel, targetDate);
accelerateMaturityDateTo(scheduleModel, targetDate);
addCredit(scheduleModel, targetDate, futureCreditedPrincipals, scheduleModel.zero());
moveOutstandingAmountsFromPeriodsBeforeTransactionDate(scheduleModel.repaymentPeriods(), targetDate);
final ProgressiveLoanInterestScheduleModel temporaryReAgedScheduleModel = generateTemporaryReAgedScheduleModel(loanApplicationTerms,
mc, reAgePeriodStartDate);