FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID

This commit is contained in:
Soma Sörös
2025-08-19 14:45:19 +02:00
committed by Adam Saghy
parent b9a75cf9cc
commit 7285a958fe
7 changed files with 186 additions and 6 deletions
@@ -78,7 +78,7 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche
validateRescheduleReasonId(fromJsonHelper, jsonElement, dataValidatorBuilder);
validateRescheduleReasonComment(fromJsonHelper, jsonElement, dataValidatorBuilder);
LocalDate adjustedDueDate = validateAndRetrieveAdjustedDate(fromJsonHelper, jsonElement, rescheduleFromDate, dataValidatorBuilder);
BigDecimal interestRate = validateInterestRate(fromJsonHelper, jsonElement, dataValidatorBuilder);
BigDecimal interestRate = validateInterestRate(fromJsonHelper, jsonElement, dataValidatorBuilder, loan);
validateUnsupportedParams(jsonElement, dataValidatorBuilder);
boolean hasInterestRateChange = interestRate != null;
@@ -199,11 +199,21 @@ public class ProgressiveLoanRescheduleRequestDataValidator implements LoanResche
}
private BigDecimal validateInterestRate(final FromJsonHelper fromJsonHelper, final JsonElement jsonElement,
DataValidatorBuilder dataValidatorBuilder) {
DataValidatorBuilder dataValidatorBuilder, Loan loan) {
final BigDecimal interestRate = fromJsonHelper
.extractBigDecimalWithLocaleNamed(RescheduleLoansApiConstants.newInterestRateParamName, jsonElement);
dataValidatorBuilder.reset().parameter(RescheduleLoansApiConstants.newInterestRateParamName).value(interestRate).ignoreIfNull()
.zeroOrPositiveAmount();
DataValidatorBuilder interestRateDataValidatorBuilder = dataValidatorBuilder.reset()
.parameter(RescheduleLoansApiConstants.newInterestRateParamName).value(interestRate).ignoreIfNull().zeroOrPositiveAmount();
BigDecimal minNominalInterestRatePerPeriod = loan.getLoanProduct().getMinNominalInterestRatePerPeriod();
if (minNominalInterestRatePerPeriod != null) {
interestRateDataValidatorBuilder.notLessThanMin(minNominalInterestRatePerPeriod);
}
BigDecimal maxNominalInterestRatePerPeriod = loan.getLoanProduct().getMaxNominalInterestRatePerPeriod();
if (maxNominalInterestRatePerPeriod != null) {
interestRateDataValidatorBuilder.notGreaterThanMax(maxNominalInterestRatePerPeriod);
}
return interestRate;
}
}