FINERACT-2354: Fourth step - Chargeback before re-age edge case for Interest bearing loans - Default Behavior, interestRecalculation = true, without dueDate change
This commit is contained in:
committed by
Adam Saghy
parent
0d737b21cd
commit
4c238801ac
+1
-1
@@ -142,7 +142,7 @@ public interface EMICalculator {
|
||||
void applyInterestPause(ProgressiveLoanInterestScheduleModel scheduleModel, LocalDate fromDate, LocalDate endDate);
|
||||
|
||||
void updateModelRepaymentPeriodsDuringReAge(ProgressiveLoanInterestScheduleModel ctx, LocalDate loanTransaction,
|
||||
LocalDate reageFirstDueDate, LocalDate transactionDate, LoanApplicationTerms loanApplicationTerms, MathContext mc);
|
||||
LocalDate reAgeFirstDueDate, LocalDate transactionDate, LoanApplicationTerms loanApplicationTerms, MathContext mc);
|
||||
|
||||
boolean recalculateModelOverdueAmountsTillDate(ProgressiveLoanInterestScheduleModel ctx, LocalDate targetDate, boolean prepayAttempt);
|
||||
|
||||
|
||||
+1
@@ -777,6 +777,7 @@ public final class ProgressiveEMICalculator implements EMICalculator {
|
||||
final InterestPeriod lastInterestPeriod = rp.getInterestPeriods().getLast();
|
||||
lastInterestPeriod.addBalanceCorrectionAmount(rp.getOutstandingPrincipal().negated());
|
||||
rp.setEmi(rp.getTotalPaidAmount());
|
||||
rp.setOutstandingMovedDueToReAging(true);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+8
-1
@@ -88,6 +88,10 @@ public class RepaymentPeriod {
|
||||
@JsonExclude
|
||||
private MonetaryCurrency currency;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean isOutstandingMovedDueToReAging = false;
|
||||
|
||||
protected RepaymentPeriod(RepaymentPeriod previous, LocalDate fromDate, LocalDate dueDate, List<InterestPeriod> interestPeriods,
|
||||
Money emi, Money originalEmi, Money paidPrincipal, Money paidInterest, Money futureUnrecognizedInterest, MathContext mc,
|
||||
ILoanConfigurationDetails loanProductRelatedDetail) {
|
||||
@@ -123,6 +127,7 @@ public class RepaymentPeriod {
|
||||
repaymentPeriod.getDueDate(), new ArrayList<>(), repaymentPeriod.getEmi(), repaymentPeriod.getOriginalEmi(),
|
||||
repaymentPeriod.getPaidPrincipal(), repaymentPeriod.getPaidInterest(), repaymentPeriod.getFutureUnrecognizedInterest(), mc,
|
||||
repaymentPeriod.getLoanProductRelatedDetail());
|
||||
newRepaymentPeriod.setOutstandingMovedDueToReAging(repaymentPeriod.isOutstandingMovedDueToReAging());
|
||||
// There is always at least 1 interest period, by default with same from-due date as repayment period
|
||||
for (InterestPeriod interestPeriod : repaymentPeriod.getInterestPeriods()) {
|
||||
newRepaymentPeriod.getInterestPeriods().add(InterestPeriod.copy(newRepaymentPeriod, interestPeriod, mc));
|
||||
@@ -135,6 +140,7 @@ public class RepaymentPeriod {
|
||||
final RepaymentPeriod newRepaymentPeriod = new RepaymentPeriod(previous, repaymentPeriod.getFromDate(),
|
||||
repaymentPeriod.getDueDate(), new ArrayList<>(), repaymentPeriod.getEmi(), repaymentPeriod.getOriginalEmi(), zero, zero,
|
||||
zero, mc, repaymentPeriod.getLoanProductRelatedDetail());
|
||||
newRepaymentPeriod.setOutstandingMovedDueToReAging(repaymentPeriod.isOutstandingMovedDueToReAging());
|
||||
// There is always at least 1 interest period, by default with same from-due date as repayment period
|
||||
for (InterestPeriod interestPeriod : repaymentPeriod.getInterestPeriods()) {
|
||||
var interestPeriodCopy = InterestPeriod.copy(newRepaymentPeriod, interestPeriod);
|
||||
@@ -282,7 +288,8 @@ public class RepaymentPeriod {
|
||||
* @return
|
||||
*/
|
||||
public Money getTotalCreditedAmount() {
|
||||
return getCreditedPrincipal().plus(getCreditedInterest(), getMc());
|
||||
return isOutstandingMovedDueToReAging ? Money.zero(getCurrency(), getMc())
|
||||
: getCreditedPrincipal().plus(getCreditedInterest(), getMc());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user