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());
  

Reply via email to