FINERACT-2382: Repayment schedule for Flat-Cumulative-Multi Disbursement

This commit is contained in:
Jose Alberto Hernandez
2025-10-27 10:14:46 +01:00
committed by Adam Saghy
parent 567b12170b
commit 2269d616dc
5 changed files with 75 additions and 37 deletions
@@ -214,8 +214,6 @@ public final class LoanApplicationValidator {
expectedFirstRepaymentOnDate);
}
validateCumulativeMultiDisburse(loan);
validateLoanTermAndRepaidEveryValues(loan.getTermFrequency(), loan.getTermPeriodFrequencyType().getValue(),
loan.getLoanProductRelatedDetail().getNumberOfRepayments(), loan.getLoanProductRelatedDetail().getRepayEvery(),
loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType().getValue(), loan);
@@ -230,8 +228,6 @@ public final class LoanApplicationValidator {
expectedFirstRepaymentOnDate);
}
validateCumulativeMultiDisburse(loan);
validateLoanTermAndRepaidEveryValues(loan.getTermFrequency(), loan.getTermPeriodFrequencyType().getValue(),
loan.getLoanProductRelatedDetail().getNumberOfRepayments(), loan.getLoanProductRelatedDetail().getRepayEvery(),
loan.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType().getValue(), loan);
@@ -1742,16 +1738,8 @@ public final class LoanApplicationValidator {
if (transactionProcessingStrategyCode != null) {
final Integer interestType = this.fromApiJsonHelper.extractIntegerNamed(LoanApiConstants.interestTypeParameterName,
element, Locale.getDefault());
String processorCode = loanRepaymentScheduleTransactionProcessorFactory
.determineProcessor(transactionProcessingStrategyCode).getCode();
boolean isProgressive = "advanced-payment-allocation-strategy".equals(processorCode);
if (isProgressive) {
baseDataValidator.reset().parameter(LoanApiConstants.interestTypeParameterName).value(interestType)
.ignoreIfNull().inMinMaxRange(0, 1);
} else {
baseDataValidator.reset().parameter(LoanApiConstants.interestTypeParameterName).value(interestType)
.ignoreIfNull().integerSameAsNumber(InterestMethod.DECLINING_BALANCE.getValue());
}
baseDataValidator.reset().parameter(LoanApiConstants.interestTypeParameterName).value(interestType).ignoreIfNull()
.inMinMaxRange(0, 1);
}
} else {
if (loan.isCumulativeSchedule()) {
@@ -2208,19 +2196,6 @@ public final class LoanApplicationValidator {
}
}
private static void validateCumulativeMultiDisburse(Loan loan) {
if (loan.isCumulativeSchedule() && loan.isMultiDisburmentLoan()
&& loan.getLoanProductRelatedDetail().getInterestMethod().isFlat()) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
final ApiParameterError error = ApiParameterError.generalError(
"validation.msg.loan.cumulative.multidisburse.does.not.support.flat.interest.mode",
"Cumulative multidisburse loan does NOT support FLAT interest mode.");
dataValidationErrors.add(error);
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.",
dataValidationErrors);
}
}
private Calendar getCalendarInstance(Loan loan) {
CalendarInstance calendarInstance = calendarInstanceRepository.findCalendarInstanceByEntityId(loan.getId(),
CalendarEntityType.LOANS.getValue());
@@ -1059,13 +1059,7 @@ public final class LoanProductDataValidator {
final Integer interestType = this.fromApiJsonHelper.extractIntegerNamed(INTEREST_TYPE, element, Locale.getDefault());
boolean isProgressive = isProgressive(element, loanProduct);
if (isProgressive) {
baseDataValidator.reset().parameter(INTEREST_TYPE).value(interestType).ignoreIfNull().inMinMaxRange(0, 1);
} else {
baseDataValidator.reset().parameter(INTEREST_TYPE).value(interestType).ignoreIfNull()
.integerSameAsNumber(InterestMethod.DECLINING_BALANCE.getValue());
}
baseDataValidator.reset().parameter(INTEREST_TYPE).value(interestType).ignoreIfNull().inMinMaxRange(0, 1);
}
final String overAppliedCalculationType = this.fromApiJsonHelper.extractStringNamed(OVER_APPLIED_CALCULATION_TYPE, element);