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
@@ -61,6 +61,7 @@ import org.apache.fineract.infrastructure.codes.domain.CodeValue;
import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom;
import org.apache.fineract.infrastructure.core.domain.ExternalId;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.infrastructure.core.service.MathUtil;
import org.apache.fineract.infrastructure.security.service.RandomPasswordGenerator;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money;
@@ -1352,7 +1353,10 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
}
public boolean isInterestBearing() {
return BigDecimal.ZERO.compareTo(getLoanRepaymentScheduleDetail().getAnnualNominalInterestRate()) < 0;
return BigDecimal.ZERO.compareTo(getLoanRepaymentScheduleDetail().getAnnualNominalInterestRate()) < 0
|| (isProgressiveSchedule() && !getLoanTermVariations().isEmpty()
&& loanTermVariations.stream().anyMatch(ltv -> ltv.getTermType().isInterestRateFromInstallment()
&& ltv.getTermValue() != null && MathUtil.isGreaterThanZero(ltv.getTermValue())));
}
public boolean isInterestBearingAndInterestRecalculationEnabled() {