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 65b74ee87b5cdcd918cf982cd78d2cb2c9644f07
Author: Rustam Zeinalov <[email protected]>
AuthorDate: Wed Mar 26 15:10:41 2025 +0100

    FINERACT-2148: added e2e test covering charge-off after backdated repayment 
for cumulative loan
---
 .../test/data/loanproduct/DefaultLoanProduct.java  |  1 +
 .../global/LoanProductGlobalInitializerStep.java   | 12 +++
 .../fineract/test/support/TestContextKey.java      |  1 +
 .../test/resources/features/LoanChargeOff.feature  | 93 ++++++++++++++++++++++
 4 files changed, 107 insertions(+)

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 2968027252..b8dde51b8d 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
@@ -40,6 +40,7 @@ public enum DefaultLoanProduct implements LoanProduct {
     
LP1_PAYMENT_STRATEGY_DUE_IN_ADVANCE_PENALTY_INTEREST_PRINCIPAL_FEE_INTEREST_FLAT,
 //
     LP1_INTEREST_FLAT_OVERDUE_FROM_AMOUNT, //
     LP1_INTEREST_FLAT_OVERDUE_FROM_AMOUNT_INTEREST, //
+    LP1_INTEREST_360_30_DECLINING_BALANCE_PERIOD_DAILY_INT_RECALC, //
     LP2_DOWNPAYMENT, //
     LP2_DOWNPAYMENT_AUTO, //
     LP2_DOWNPAYMENT_AUTO_ADVANCED_PAYMENT_ALLOCATION, //
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 89ab6432eb..5a34fb376d 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
@@ -1961,6 +1961,18 @@ public class LoanProductGlobalInitializerStep implements 
FineractGlobalInitializ
                 
.createLoanProduct(loanProductsRequestInterestDecliningPeriodDailyIntRecalc).execute();
         
TestContext.INSTANCE.set(TestContextKey.DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_PERIOD_DAILY_INT_RECALC,
                 responseInterestDecliningPeriodDailyIntRecalc);
+
+        // LP1 with 12% DECLINING BALANCE interest, interest period: Daily, 
interest recalculation enabled, 360/30
+        // (LP1_INTEREST_DECLINING_BALANCE_PERIOD_DAILY_INT_RECALC)
+        final String name82 = 
DefaultLoanProduct.LP1_INTEREST_360_30_DECLINING_BALANCE_PERIOD_DAILY_INT_RECALC.getName();
+        final PostLoanProductsRequest 
loanProductsRequestInterest36030DecliningPeriodDailyIntRecalc = 
loanProductsRequestFactory
+                
.defaultLoanProductsRequestLP1InterestDeclining().name(name82).isInterestRecalculationEnabled(false)
+                
.daysInYearType(DaysInYearType.DAYS360.value).daysInMonthType(DaysInMonthType.DAYS30.value)
+                
.interestCalculationPeriodType(InterestCalculationPeriodTime.DAILY.value).allowPartialPeriodInterestCalcualtion(false);
+        final Response<PostLoanProductsResponse> 
responseInterest36030DecliningPeriodDailyIntRecalc = loanProductsApi
+                
.createLoanProduct(loanProductsRequestInterest36030DecliningPeriodDailyIntRecalc).execute();
+        
TestContext.INSTANCE.set(TestContextKey.DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_360_30__DECLINING_PERIOD_DAILY_INT_RECALC,
+                responseInterest36030DecliningPeriodDailyIntRecalc);
     }
 
     public static AdvancedPaymentData createPaymentAllocation(String 
transactionType, String futureInstallmentAllocationRule,
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 0ad79a2822..51b118d425 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
@@ -69,6 +69,7 @@ public abstract class TestContextKey {
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_RESCHEDULE_NEXT_REPAYMENTS
 = 
"loanProductCreateResponseLP1InterestDecliningBalanceDailyRecalculationCompoundingNoneRescheduleNextRepayments";
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_PERIOD_DAILY = 
"loanProductCreateResponseLP1InterestDecliningPeriodDaily";
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_PERIOD_DAILY_INT_RECALC
 = "loanProductCreateResponseLP1InterestDecliningPeriodDailyIntRecalc";
+    public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_360_30__DECLINING_PERIOD_DAILY_INT_RECALC
 = "loanProductCreateResponseLP1Interest36030DecliningPeriodDailyIntRecalc";
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_PERIOD_DAILY_ACCRUAL_ACTIVITY
 = "loanProductCreateResponseLP1InterestDecliningPeriodDailyAccrualActivity";
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP1_INTEREST_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_ACCRUAL_ACTIVITY
 = 
"loanProductCreateResponseLP1InterestDecliningBalanceRecalculationCompoundingNoneAccrualActivity";
     public static final String 
DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_DOWNPAYMENT_AUTO_ADVANCED_PAYMENT_ALLOCATION
 = "loanProductCreateResponseLP2DownPaymentAutoAdvancedPaymentAllocation";
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 0059dbac85..9de439ff74 100644
--- 
a/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature
+++ 
b/fineract-e2e-tests-runner/src/test/resources/features/LoanChargeOff.feature
@@ -1311,6 +1311,7 @@ Feature: Charge-off
       | 04 January 2023  | Charge-off       | 1010.19 | 1000.0    | 10.19    | 
0.0  | 0.0       | 0.0          |
       | 06 January 2023  | Repayment        | 1010.19 | 1000.0    | 10.19    | 
0.0  | 0.0       | 0.0          |
 
+  @TestRailId:C3545
   Scenario: Accrual handling in case of charged-off loan when charge-off 
behavior is regular, interestRecalculation = true, cumulative loan
     When Admin sets the business date to "1 January 2024"
     And Admin creates a client with random data
@@ -7449,3 +7450,95 @@ Feature: Charge-off
       | 14 February 2024 | Accrual Adjustment | 0.04   | 0.0       | 0.04     
| 0.0  | 0.0       | 0.0          | false    | false    |
       | 14 February 2024 | Charge-off         | 83.79  | 83.57     | 0.22     
| 0.0  | 0.0       | 0.0          | false    | true     |
     Then LoanAccrualAdjustmentTransactionBusinessEvent is raised on "14 
February 2024"
+
+  @TestRailId:C3559
+  Scenario: Reverse-replay Charge-off with accrual adjustment due to backdated 
payment
+    When Admin sets the business date to "1 January 2024"
+    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                        |
+      | LP1_INTEREST_360_30_DECLINING_BALANCE_PERIOD_DAILY_INT_RECALC | 01 
January 2024   | 1000           | 26                     | DECLINING_BALANCE | 
DAILY                       | EQUAL_INSTALLMENTS | 4                 | MONTHS   
             | 1              | MONTHS                 | 4                  | 0 
                      | 0                      | 0                    | 
PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
+    And Admin successfully approves the loan on "1 January 2024" with "1000" 
amount and expected disbursement date on "1 January 2024"
+    And Admin successfully disburse the loan on "1 January 2024" with "1000" 
EUR transaction amount
+    Then Loan Repayment schedule has 4 periods, with the following data for 
periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal 
due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | 
Outstanding |
+      |    |      | 01 January 2024  |           | 1000.0          |           
    |          | 0.0  |           | 0.0    | 0.0  |            |      |         
    |
+      | 1  | 31   | 01 February 2024 |           | 757.67          | 242.33    
    | 21.67    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 2  | 29   | 01 March 2024    |           | 510.09          | 247.58    
    | 16.42    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 3  | 31   | 01 April 2024    |           | 257.14          | 252.95    
    | 11.05    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 4  | 30   | 01 May 2024      |           | 0.0             | 257.14    
    | 5.57     | 0.0  | 0.0       | 262.71 | 0.0  | 0.0        | 0.0  | 262.71  
    |
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due     | Paid | In 
advance | Late | Outstanding |
+      | 1000          | 54.71    | 0    | 0         | 1054.71 | 0.0  | 0.0     
   | 0.0  | 1054.71     |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2024  | Disbursement     | 1000.0 | 0.0       | 0.0      | 
0.0  | 0.0       | 1000.0       | false    | false    |
+    # Run COB for each day from Jan 1 to Jan 19 to create accrual entries
+    When Admin sets the business date to "3 January 2024"
+    When Admin runs inline COB job for Loan
+    Then Loan Repayment schedule has 4 periods, with the following data for 
periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal 
due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | 
Outstanding |
+      |    |      | 01 January 2024  |           | 1000.0          |           
    |          | 0.0  |           | 0.0    | 0.0  |            |      |         
    |
+      | 1  | 31   | 01 February 2024 |           | 757.67          | 242.33    
    | 21.67    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 2  | 29   | 01 March 2024    |           | 510.09          | 247.58    
    | 16.42    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 3  | 31   | 01 April 2024    |           | 257.14          | 252.95    
    | 11.05    | 0.0  | 0.0       | 264.0  | 0.0  | 0.0        | 0.0  | 264.0   
    |
+      | 4  | 30   | 01 May 2024      |           | 0.0             | 257.14    
    | 5.57     | 0.0  | 0.0       | 262.71 | 0.0  | 0.0        | 0.0  | 262.71  
    |
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due     | Paid | In 
advance | Late | Outstanding |
+      | 1000          | 54.71    | 0    | 0         | 1054.71 | 0.0  | 0.0     
   | 0.0  | 1054.71     |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | 
Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2024  | Disbursement     | 1000.0 | 0.0       | 0.0      | 
0.0  | 0.0       | 1000.0       | false    | false    |
+      | 02 January 2024  | Accrual          | 0.7    | 0.0       | 0.7      | 
0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "20 January 2024"
+    When Admin runs inline COB job for Loan
+    When Admin sets the business date to "15 January 2024"
+    And Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on 
"15 January 2024" with 264 EUR transaction amount and system-generated 
Idempotency key and check external owner
+    Then Loan Repayment schedule has 4 periods, with the following data for 
periods:
+      | Nr | Days | Date             | Paid date       | Balance of loan | 
Principal due | Interest | Fees | Penalties | Due    | Paid  | In advance | 
Late | Outstanding |
+      |    |      | 01 January 2024  |                 | 1000.0          |     
          |          | 0.0  |           | 0.0    | 0.0   |            |      |  
           |
+      | 1  | 31   | 01 February 2024 | 15 January 2024 | 757.67          | 
242.33        | 21.67    | 0.0  | 0.0       | 264.0  | 264.0 | 264.0      | 0.0 
 | 0.0         |
+      | 2  | 29   | 01 March 2024    |                 | 510.09          | 
247.58        | 16.42    | 0.0  | 0.0       | 264.0  | 0.0   | 0.0        | 0.0 
 | 264.0       |
+      | 3  | 31   | 01 April 2024    |                 | 257.14          | 
252.95        | 11.05    | 0.0  | 0.0       | 264.0  | 0.0   | 0.0        | 0.0 
 | 264.0       |
+      | 4  | 30   | 01 May 2024      |                 | 0.0             | 
257.14        | 5.57     | 0.0  | 0.0       | 262.71 | 0.0   | 0.0        | 0.0 
 | 262.71      |
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due     | Paid  | In 
advance | Late | Outstanding |
+      | 1000          | 54.71    | 0    | 0         | 1054.71 | 264.0 | 264.0  
    | 0.0  | 790.71     |
+    When Admin sets the business date to "20 January 2024"
+    And Admin does charge-off the loan on "20 January 2024"
+    Then Loan Repayment schedule has 4 periods, with the following data for 
periods:
+      | Nr | Days | Date             | Paid date       | Balance of loan | 
Principal due | Interest | Fees | Penalties | Due    | Paid  | In advance | 
Late | Outstanding |
+      |    |      | 01 January 2024  |                 | 1000.0          |     
          |          | 0.0  |           | 0.0    | 0.0   |            |      |  
           |
+      | 1  | 31   | 01 February 2024 | 15 January 2024 | 757.67          | 
242.33        | 21.67    | 0.0  | 0.0       | 264.0  | 264.0 | 264.0      | 0.0 
 | 0.0         |
+      | 2  | 29   | 01 March 2024    |                 | 510.09          | 
247.58        | 16.42    | 0.0  | 0.0       | 264.0  | 0.0   | 0.0        | 0.0 
 | 264.0       |
+      | 3  | 31   | 01 April 2024    |                 | 257.14          | 
252.95        | 11.05    | 0.0  | 0.0       | 264.0  | 0.0   | 0.0        | 0.0 
 | 264.0       |
+      | 4  | 30   | 01 May 2024      |                 | 0.0             | 
257.14        | 5.57     | 0.0  | 0.0       | 262.71 | 0.0   | 0.0        | 0.0 
 | 262.71      |
+    Then Loan Repayment schedule has the following data in Total row:
+      | Principal due | Interest | Fees | Penalties | Due     | Paid  | In 
advance | Late | Outstanding |
+      | 1000          | 54.71    | 0    | 0         | 1054.71 | 264.0 | 264.0  
    | 0.0  | 790.71     |
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type   | Amount | Principal | Interest 
| Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2024  | Disbursement       | 1000.0 | 0.0       | 0.0      
| 0.0  | 0.0       | 1000.0       | false    | false    |
+      | 02 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 05 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 06 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 07 January 2024  | Accrual            | 0.69   | 0.0       | 0.69     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 08 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 09 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 10 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 12 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 13 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 14 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 15 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 15 January 2024  | Repayment          | 264.0  | 242.33    | 21.67    
| 0.0  | 0.0       | 757.67       | false    | false    |
+      | 16 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 17 January 2024  | Accrual            | 0.69   | 0.0       | 0.69     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 18 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 19 January 2024  | Accrual            | 0.7    | 0.0       | 0.7      
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 20 January 2024  | Accrual Adjustment | 12.58  | 0.0       | 12.58    
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 20 January 2024  | Charge-off         | 790.71 | 757.67    | 33.04    
| 0.0  | 0.0       | 0.0          | false    | false    |
+    Then Loan marked as charged-off on "20 January 2024"
+    Then LoanAccrualAdjustmentTransactionBusinessEvent is raised on "20 
January 2024"
\ No newline at end of file

Reply via email to