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


The following commit(s) were added to refs/heads/develop by this push:
     new 47e8674fa0 FINERACT-2405: totalUnpaidPayableNotDueInterest resets to 0 
on Charge-Off
47e8674fa0 is described below

commit 47e8674fa06d2cadf1e31c9ca7ed2eb8edd1fa08
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Tue Nov 11 20:48:14 2025 -0500

    FINERACT-2405: totalUnpaidPayableNotDueInterest resets to 0 on Charge-Off
---
 .../test/data/loanproduct/DefaultLoanProduct.java  |   1 +
 .../fineract/test/helper/ErrorMessageHelper.java   |   8 ++
 .../global/LoanProductGlobalInitializerStep.java   |  20 +++-
 .../fineract/test/stepdef/loan/LoanStepDef.java    |  17 +++
 .../fineract/test/support/TestContextKey.java      |   1 +
 .../test/resources/features/LoanChargeOff.feature  | 127 +++++++++++++++++++++
 .../ProgressiveLoanSummaryDataProvider.java        |   7 +-
 7 files changed, 177 insertions(+), 4 deletions(-)

diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/data/loanproduct/DefaultLoanProduct.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/data/loanproduct/DefaultLoanProduct.java
index 887c731b41..fe01229cb4 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/data/loanproduct/DefaultLoanProduct.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/data/loanproduct/DefaultLoanProduct.java
@@ -177,6 +177,7 @@ public enum DefaultLoanProduct implements LoanProduct {
     
LP2_ADV_CUSTOM_PMT_ALLOC_INTEREST_DAILY_EMI_ACTUAL_ACTUAL_INTEREST_RECALC_ZERO_CHARGE_OFF_ACCRUAL,
 //
     LP1_INTEREST_FLAT_DAILY_RECALCULATION_SAR_MULTIDISB_EXPECT_TRANCHES, //
     LP1_INTEREST_FLAT_DAILY_ACTUAL_ACTUAL_MULTIDISB_EXPECT_TRANCHES, //
+    LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY, //
     ;
 
     @Override
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
index d86062705e..a687fdedad 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/ErrorMessageHelper.java
@@ -403,6 +403,14 @@ public final class ErrorMessageHelper {
                 actualToStr, expectedToStr);
     }
 
+    public static String wrongAmountInTotalUnpaidPayableNotDueInterest(Double 
actual, Double expected) {
+        String actualToStr = actual.toString();
+        String expectedToStr = expected.toString();
+        return String.format(
+                "Wrong amount in Loan total unpaid payable not due interest. 
Actual amount is: %s - But expected amount is: %s",
+                actualToStr, expectedToStr);
+    }
+
     public static String wrongAmountInTotalOverdue(Double actual, Double 
expected) {
         String actualToStr = actual.toString();
         String expectedToStr = expected.toString();
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/LoanProductGlobalInitializerStep.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/LoanProductGlobalInitializerStep.java
index fd27debcee..4884c28811 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/LoanProductGlobalInitializerStep.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/LoanProductGlobalInitializerStep.java
@@ -4172,10 +4172,9 @@ public class LoanProductGlobalInitializerStep implements 
FineractGlobalInitializ
 
         // LP2 advanced + progressive loan schedule + horizontal + interest 
recalculation
         // Frequency for recalculate Outstanding Principal: Daily, Frequency 
Interval for recalculation: 1
-        String name150 = 
DefaultLoanProduct.LP2_ADV_INTEREST_DAILY_EMI_ACTUAL_ACTUAL_INTEREST_RECALC_ZERO_CHARGE_OF_ACCRUAL.getName();
         PostLoanProductsRequest 
loanProductsResponseAdvCustomPaymentAllocationProgressiveLoanInterestDailyEmiActualInterestRecalcZeroChargeOffChargebackAccruals
 = loanProductsRequestFactory
                 .defaultLoanProductsRequestLP2Emi()//
-                .name(name150)//
+                
.name(DefaultLoanProduct.LP2_ADV_INTEREST_DAILY_EMI_ACTUAL_ACTUAL_INTEREST_RECALC_ZERO_CHARGE_OF_ACCRUAL.getName())//
                 
.supportedInterestRefundTypes(supportedInterestRefundTypes).installmentAmountInMultiplesOf(null)
 //
                 .daysInYearType(DaysInYearType.ACTUAL.value)//
                 .daysInMonthType(DaysInMonthType.ACTUAL.value)//
@@ -4218,6 +4217,23 @@ public class LoanProductGlobalInitializerStep implements 
FineractGlobalInitializ
         
TestContext.INSTANCE.set(TestContextKey.LP1_INTEREST_FLAT_DAILY_RECALCULATION_SAR_MULTIDISB_EXPECT_TRANCHES,
                 
responseLoanProductsRequestInterestFlatSaRRecalculationSameAsRepaymentMultiDisbursementExpectsTranches);
 
+        // LP2 + zero-interest chargeOff behaviour + progressive loan schedule 
+ horizontal
+        // (LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY)
+        final PostLoanProductsRequest 
loanProductsRequestAdvZeroInterestChargeOffBehaviourAccrualActivity = 
loanProductsRequestFactory
+                .defaultLoanProductsRequestLP2Emi()//
+                
.name(DefaultLoanProduct.LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY.getName())//
+                .daysInYearType(DaysInYearType.DAYS360.value)//
+                .daysInMonthType(DaysInMonthType.DAYS30.value)//
+                .paymentAllocation(List.of(//
+                        createPaymentAllocation("DEFAULT", 
"NEXT_INSTALLMENT")))
+                .enableAccrualActivityPosting(true)//
+                .chargeOffBehaviour("ZERO_INTEREST");//
+        final Response<PostLoanProductsResponse> 
responseLoanProductsRequestAdvZeroInterestChargeOffBehaviourAccrualActivity = 
loanProductsApi
+                
.createLoanProduct(loanProductsRequestAdvZeroInterestChargeOffBehaviourAccrualActivity).execute();
+        TestContext.INSTANCE.set(
+                
TestContextKey.DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY,
+                
responseLoanProductsRequestAdvZeroInterestChargeOffBehaviourAccrualActivity);
+
         // LP1 with 12% Flat interest, interest period: Daily, Interest 
recalculation- Actual
         // Multi-disbursement that expects tranches
         PostLoanProductsRequest 
loanProductsRequestInterestFlatActualActualMultiDisbursementExpectsTranches = 
loanProductsRequestFactory
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java
index 34061c7176..3ae76794fa 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java
@@ -6060,6 +6060,23 @@ public class LoanStepDef extends AbstractStepDef {
         checkLoanAmortizationAllocationMappingData(resourceId, 
loanAmortizationAllocationResponse.body(), table);
     }
 
+    @Then("Loan has {double} total unpaid payable not due interest")
+    public void loanTotalUnpaidPayableNotDueInterest(double 
totalUnpaidPayableNotDueInterestExpected) throws IOException {
+        Response<PostLoansResponse> loanCreateResponse = 
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
+        long loanId = loanCreateResponse.body().getLoanId();
+
+        Response<GetLoansLoanIdResponse> loanDetailsResponse = 
loansApi.retrieveLoan(loanId, false, "repaymentSchedule", "", "").execute();
+        ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse);
+        testContext().set(TestContextKey.LOAN_RESPONSE, loanDetailsResponse);
+
+        Double totalUnpaidPayableNotDueInterestActual = 
loanDetailsResponse.body().getSummary().getTotalUnpaidPayableNotDueInterest()
+                .doubleValue();
+        assertThat(totalUnpaidPayableNotDueInterestActual)
+                
.as(ErrorMessageHelper.wrongAmountInTotalUnpaidPayableNotDueInterest(totalUnpaidPayableNotDueInterestActual,
+                        totalUnpaidPayableNotDueInterestExpected))
+                .isEqualTo(totalUnpaidPayableNotDueInterestExpected);
+    }
+
     private void checkLoanAmortizationAllocationMappingData(final String 
resourceId,
             final LoanAmortizationAllocationResponse 
amortizationAllocationResponse, final DataTable table) {
         final List<List<String>> data = table.asLists();
diff --git 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/support/TestContextKey.java
 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/support/TestContextKey.java
index 5cbd10966f..4e1c6d28d8 100644
--- 
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/support/TestContextKey.java
+++ 
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/support/TestContextKey.java
@@ -284,4 +284,5 @@ public abstract class TestContextKey {
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_CUSTOM_PMT_ALLOC_INTEREST_DAILY_EMI_ACTUAL_ACTUAL_INTEREST_RECALC_ZERO_CHARGE_OFF_ACCRUAL
 = 
"loanProductCreateResponseLP2AdvancedPaymentCustomAllocationInterestDailyEmiActualInterestRecalcChargeOffAccruals";
     public static final String 
LP1_INTEREST_FLAT_DAILY_RECALCULATION_SAR_MULTIDISB_EXPECT_TRANCHES = 
"loanProductCreateResponseLP1InterestFlatDailyRecalculationSameAsRepaymentMultiDisbursementExpectTranches";
     public static final String 
LP1_INTEREST_FLAT_DAILY_ACTUAL_ACTUAL_MULTIDISB_EXPECT_TRANCHES = 
"loanProductCreateResponseLP1InterestFlatDailyActualActualMultiDisbursementExpectTranches";
+    public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY
 = 
"loanProductCreateResponseLP2AdvancedPaymentZeroInterestChargeOffBehaviourAccrualActivity";
 }
diff --git 
a/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature 
b/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature
index cbc4f9d336..a20f8c5fa4 100644
--- 
a/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature
+++ 
b/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature
@@ -9949,3 +9949,130 @@ Feature: Charge-off
     Then Loan Repayment schedule has the following data in Total row:
       | Principal due | Interest | Fees | Penalties | Due    | Paid   | In 
advance | Late | Outstanding |
       | 546.14        | 24.69    | 0.0  | 10.0      | 580.83 | 308.59 | 308.59 
    | 0.0  | 272.24      |
+
+  @TestRailId:C4153
+  Scenario: Verify that totalUnpaidPayableNotDueInterest doesn't get reset to 
0 on the charge-off date
+    When Admin sets the business date to "01 May 2025"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                    | 
submitted on date | with Principal | ANNUAL interest rate % | interest type     
| interest calculation period | amortization type  | loanTermFrequency | 
loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | 
numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | 
interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY | 01 
May 2025       | 423.38         | 12.25                  | DECLINING_BALANCE | 
DAILY                       | EQUAL_INSTALLMENTS | 24                | MONTHS   
             | 1              | MONTHS                 | 24                 | 0 
                      | 0                      | 0                    | 
ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 May 2025" with "423.38" 
amount and expected disbursement date on "01 May 2025"
+    And Admin successfully disburse the loan on "01 May 2025" with "423.38" 
EUR transaction amount
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 0.0  | 0.0      
  | 0.0  | 479.51      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+    When Admin sets the business date to "01 June 2025"
+    When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on 
"01 June 2025" with 19.98 EUR transaction amount and system-generated 
Idempotency key
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 19.98 | 0.0     
   | 0.0  | 459.53      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025     | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+    When Admin sets the business date to "01 July 2025"
+    When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on 
"01 July 2025" with 19.98 EUR transaction amount and system-generated 
Idempotency key
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 39.96 | 0.0     
   | 0.0  | 439.55      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025     | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+      | 01 July 2025     | Repayment        | 19.98  | 15.82     | 4.16     | 
0.0  | 0.0       | 391.9        |
+    When Admin sets the business date to "08 October 2025"
+    When Admin runs inline COB job for Loan
+    Then Loan has 11.51 total unpaid payable due interest
+    Then Loan has 0.79 total unpaid payable not due interest
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 39.96 | 0.0     
   | 0.0  | 439.55      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date  | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025       | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025      | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+      | 01 June 2025      | Accrual Activity | 4.32   | 0.0       | 4.32     | 
0.0  | 0.0       | 0.0          |
+      | 01 July 2025      | Repayment        | 19.98  | 15.82     | 4.16     | 
0.0  | 0.0       | 391.9        |
+      | 01 July 2025      | Accrual Activity | 4.16   | 0.0       | 4.16     | 
0.0  | 0.0       | 0.0          |
+      | 01 August 2025    | Accrual Activity | 4.0    | 0.0       | 4.0      | 
0.0  | 0.0       | 0.0          |
+      | 01 September 2025 | Accrual Activity | 3.84   | 0.0       | 3.84     | 
0.0  | 0.0       | 0.0          |
+      | 01 October 2025   | Accrual Activity | 3.67   | 0.0       | 3.67     | 
0.0  | 0.0       | 0.0          |
+      | 07 October 2025   | Accrual          | 20.67  | 0.0       | 20.67    | 
0.0  | 0.0       | 0.0          |
+    And Admin does charge-off the loan on "08 October 2025"
+    Then Loan has 11.51 total unpaid payable due interest
+    Then Loan has 0.79 total unpaid payable not due interest
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 20.78    | 0.0  | 0.0       | 444.16 | 39.96 | 0.0     
   | 0.0  | 404.2       |
+    Then Loan Transactions tab has the following data:
+      | Transaction date  | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025       | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025      | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+      | 01 June 2025      | Accrual Activity | 4.32   | 0.0       | 4.32     | 
0.0  | 0.0       | 0.0          |
+      | 01 July 2025      | Repayment        | 19.98  | 15.82     | 4.16     | 
0.0  | 0.0       | 391.9        |
+      | 01 July 2025      | Accrual Activity | 4.16   | 0.0       | 4.16     | 
0.0  | 0.0       | 0.0          |
+      | 01 August 2025    | Accrual Activity | 4.0    | 0.0       | 4.0      | 
0.0  | 0.0       | 0.0          |
+      | 01 September 2025 | Accrual Activity | 3.84   | 0.0       | 3.84     | 
0.0  | 0.0       | 0.0          |
+      | 01 October 2025   | Accrual Activity | 3.67   | 0.0       | 3.67     | 
0.0  | 0.0       | 0.0          |
+      | 07 October 2025   | Accrual          | 20.67  | 0.0       | 20.67    | 
0.0  | 0.0       | 0.0          |
+      | 08 October 2025   | Accrual          | 0.11   | 0.0       | 0.11     | 
0.0  | 0.0       | 0.0          |
+      | 08 October 2025   | Charge-off       | 404.2  | 391.9     | 12.3     | 
0.0  | 0.0       | 0.0          |
+
+  @TestRailId:C4228
+  Scenario: Verify that totalUnpaidPayableNotDueInterest is correct when 
charge-off falls on a due date of an open repayment period
+    When Admin sets the business date to "01 May 2025"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                    | 
submitted on date | with Principal | ANNUAL interest rate % | interest type     
| interest calculation period | amortization type  | loanTermFrequency | 
loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | 
numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | 
interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_360_30_ZERO_INTEREST_CHARGE_OFF_ACCRUAL_ACTIVITY | 01 
May 2025       | 423.38         | 12.25                  | DECLINING_BALANCE | 
DAILY                       | EQUAL_INSTALLMENTS | 24                | MONTHS   
             | 1              | MONTHS                 | 24                 | 0 
                      | 0                      | 0                    | 
ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 May 2025" with "423.38" 
amount and expected disbursement date on "01 May 2025"
+    And Admin successfully disburse the loan on "01 May 2025" with "423.38" 
EUR transaction amount
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 0.0  | 0.0      
  | 0.0  | 479.51      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+    When Admin sets the business date to "01 June 2025"
+    When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on 
"01 June 2025" with 19.98 EUR transaction amount and system-generated 
Idempotency key
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 19.98 | 0.0     
   | 0.0  | 459.53      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025     | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+    When Admin sets the business date to "01 July 2025"
+    When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on 
"01 July 2025" with 19.98 EUR transaction amount and system-generated 
Idempotency key
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 39.96 | 0.0     
   | 0.0  | 439.55      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025      | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025     | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+      | 01 July 2025     | Repayment        | 19.98  | 15.82     | 4.16     | 
0.0  | 0.0       | 391.9        |
+    When Admin sets the business date to "01 October 2025"
+    When Admin runs inline COB job for Loan
+    Then Loan has 11.51 total unpaid payable due interest
+    Then Loan has 0.0 total unpaid payable not due interest
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due    | Paid  | In 
advance | Late | Outstanding |
+      | 423.38        | 56.13    | 0.0  | 0.0       | 479.51 | 39.96 | 0.0     
   | 0.0  | 439.55      |
+    Then Loan Transactions tab has the following data:
+      | Transaction date  | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance |
+      | 01 May 2025       | Disbursement     | 423.38 | 0.0       | 0.0      | 
0.0  | 0.0       | 423.38       |
+      | 01 June 2025      | Repayment        | 19.98  | 15.66     | 4.32     | 
0.0  | 0.0       | 407.72       |
+      | 01 June 2025      | Accrual Activity | 4.32   | 0.0       | 4.32     | 
0.0  | 0.0       | 0.0          |
+      | 01 July 2025      | Repayment        | 19.98  | 15.82     | 4.16     | 
0.0  | 0.0       | 391.9        |
+      | 01 July 2025      | Accrual Activity | 4.16   | 0.0       | 4.16     | 
0.0  | 0.0       | 0.0          |
+      | 01 August 2025    | Accrual Activity | 4.0    | 0.0       | 4.0      | 
0.0  | 0.0       | 0.0          |
+      | 01 September 2025 | Accrual Activity | 3.84   | 0.0       | 3.84     | 
0.0  | 0.0       | 0.0          |
+      | 30 September 2025 | Accrual          | 19.87  | 0.0       | 19.87    | 
0.0  | 0.0       | 0.0          |
+    And Admin does charge-off the loan on "01 October 2025"
+    Then Loan has 11.51 total unpaid payable due interest
+    Then Loan has 0.0 total unpaid payable not due interest
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanSummaryDataProvider.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanSummaryDataProvider.java
index e2233bd919..9532baa362 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanSummaryDataProvider.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ProgressiveLoanSummaryDataProvider.java
@@ -84,8 +84,11 @@ public class ProgressiveLoanSummaryDataProvider extends 
CommonLoanSummaryDataPro
 
         if (currentRepaymentPeriod.isPresent()) {
             if (loan.isChargedOff() || 
loan.hasContractTerminationTransaction()) {
-                return 
MathUtil.subtractToZero(currentRepaymentPeriod.get().getInterestOutstanding(loan.getCurrency()).getAmount(),
-                        totalUnpaidPayableDueInterest);
+                if 
(currentRepaymentPeriod.get().getDueDate().isEqual(businessDate)) {
+                    return BigDecimal.ZERO;
+                } else {
+                    return 
currentRepaymentPeriod.get().getInterestOutstanding(loan.getCurrency()).getAmount();
+                }
             } else {
 
                 Optional<ProgressiveLoanInterestScheduleModel> savedModel = 
modelRepository.getSavedModel(loan, businessDate);

Reply via email to