This is an automated email from the ASF dual-hosted git repository. adamsaghy pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract.git
commit d6797a0ab1c5e476a79bdf29ddfde88f9801af51 Merge: d6c7df9f23 6504a2da19 Author: Adam Saghy <[email protected]> AuthorDate: Mon Jul 20 11:20:30 2026 +0200 Merge pull request #6111 FINERACT-2455: working capital charges after maturity .../WorkingCapitalLoanChargeAfterMaturity.feature | 295 ++++++++++++ ...gCapitalLoanGoodwillCreditBackdatedUndo.feature | 4 +- .../calc/ProjectedAmortizationScheduleModel.java | 12 + .../WorkingCapitalLoanLifecycleStateMachine.java | 34 +- .../WorkingCapitalLoanChargeDataValidator.java | 25 + ...gCapitalLoanChargeWritePlatformServiceImpl.java | 149 +++++- .../WorkingCapitalLoanTransactionProcessor.java | 2 +- ...WorkingCapitalLoanWritePlatformServiceImpl.java | 5 +- .../helpers/FeignWorkingCapitalLoanHelper.java | 5 + ...nWorkingCapitalLoanChargeAfterMaturityTest.java | 502 +++++++++++++++++++++ ...orkingCapitalLoanPaymentAllocationRuleTest.java | 5 +- 11 files changed, 1007 insertions(+), 31 deletions(-) diff --cc fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java index 6c662d794b,4762569054..99d17b1548 --- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java +++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java @@@ -588,10 -586,9 +588,11 @@@ public class WorkingCapitalLoanWritePla amortizationScheduleWriteService.applyDiscountFeeAdjustment(loan); updateBalanceForDiscountChange(loan, amount, true); + // The principal change moves the remaining-balance cap, so the delinquency schedule must be re-derived. + delinquencyRangeScheduleService.reprocessDelinquencySchedule(loan); - stateMachine.determineAndTransition(loan, transactionDate); + final List<WorkingCapitalLoanCharge> activeCharges = chargeRepository.findByLoanIdAndActiveTrueOrderByDueDateAscIdAsc(loan.getId()); + stateMachine.determineAndTransition(loan, transactionDate, activeCharges); transactionProcessor.triggerInlineAmortizationIfLoanClosed(loan, transactionDate); changes.put("status", loan.getLoanStatus());
