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 21425f50c4 FINERACT-2275: Review whether reprocessing accruals are in 
fact needed or not after recalculated interest on loan
21425f50c4 is described below

commit 21425f50c4eae4a2331162f3128a67dc03ba7422
Author: Soma Sörös <[email protected]>
AuthorDate: Thu May 29 14:15:03 2025 +0200

    FINERACT-2275: Review whether reprocessing accruals are in fact needed or 
not after recalculated interest on loan
---
 .../resources/features/LoanAccrualActivity.feature | 171 +++++++++++++++++++++
 .../loanaccount/service/LoanScheduleService.java   |  11 +-
 .../LoanWritePlatformServiceJpaRepositoryImpl.java |  35 +++--
 3 files changed, 200 insertions(+), 17 deletions(-)

diff --git 
a/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
 
b/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
index 1ab6ee6559..d766312ace 100644
--- 
a/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
+++ 
b/fineract-e2e-tests-runner/src/test/resources/features/LoanAccrualActivity.feature
@@ -1813,6 +1813,177 @@ Feature: LoanAccrualActivity
       | 06 January 2024  | Accrual          | 0.24   | 0.0       | 0.24     | 
0.0  | 0.0       | 0.0          | false    | false    |
       | 07 January 2024  | Accrual          | 0.26   | 0.0       | 0.26     | 
0.0  | 0.0       | 0.0          | false    | false    |
 
+  @TestRailId:3709
+  Scenario: Verify accrual and accrual activity after backdated payoff with 
overdue installments on progressive loan
+    When Admin sets the business date to "01 January 2024"
+    When Admin creates a client with random data
+    When 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_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_ACCRUAL_ACTIVITY_POSTING
 | 01 January 2024   | 1000           | 49.99                  | 
DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 4        
         | WEEKS                 | 1              | WEEKS                  | 4  
                | 0                       | 0                      | 0          
          | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2024" with "1000" 
amount and expected disbursement date on "01 January 2024"
+    When Admin successfully disburse the loan on "01 January 2024" with "1000" 
EUR transaction amount
+    When Admin sets the business date to "02 January 2024"
+    When Admin runs inline COB job for Loan
+    When Admin sets the business date to "19 January 2024"
+    When Admin runs inline COB job for Loan
+    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           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 03 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 04 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 05 January 2024   | Accrual           | 1.38    | 0.0        | 1.38    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 07 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual Activity  | 9.72    | 0.0        | 9.72    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 09 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 10 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 12 January 2024   | Accrual           | 1.38    | 0.0        | 1.38    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 13 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 14 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 15 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 15 January 2024   | Accrual Activity  | 9.72    | 0.0        | 9.72    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 16 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 17 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 18 January 2024   | Accrual           | 1.39    | 0.0        | 1.39    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+    When Loan Pay-off is made on "11 January 2024"
+    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             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 03 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 04 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 05 January 2024   | Accrual             | 1.38     | 0.0        | 1.38 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 07 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual Activity    | 9.72     | 0.0        | 9.72 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 09 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 10 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual Activity    | 4.17     | 0.0        | 4.17 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Repayment           | 1013.89  | 1000.0     | 
13.89     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 12 January 2024   | Accrual             | 1.38     | 0.0        | 1.38 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 13 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 14 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 15 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 16 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 17 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 18 January 2024   | Accrual             | 1.39     | 0.0        | 1.39 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 19 January 2024   | Accrual Adjustment  | 9.72     | 0.0        | 9.72 
     | 0.0   | 0.0        | 0.0           | false     | false     |
+
+  @TestRailId:3710
+  Scenario: Verify accrual and accrual activity after backdated payoff with 
overdue installments on cumulative loan
+    When Admin sets the business date to "01 January 2024"
+    When Admin creates a client with random data
+    When 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_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_ACCRUAL_ACTIVITY
 | 01 January 2024   | 1000           | 12                     | 
DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 20       
         | DAYS                  | 5              | DAYS                   | 4  
                | 0                       | 0                      | 0          
          | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
+    And Admin successfully approves the loan on "01 January 2024" with "1000" 
amount and expected disbursement date on "01 January 2024"
+    When Admin successfully disburse the loan on "01 January 2024" with "1000" 
EUR transaction amount
+    When Admin sets the business date to "02 January 2024"
+    When Admin runs inline COB job for Loan
+    When Admin sets the business date to "16 January 2024"
+    When Admin runs inline COB job for Loan
+    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.33    | 0.0        | 0.33    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 03 January 2024   | Accrual           | 0.33    | 0.0        | 0.33    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 04 January 2024   | Accrual           | 0.32    | 0.0        | 0.32    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 05 January 2024   | Accrual           | 0.33    | 0.0        | 0.33    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual           | 0.33    | 0.0        | 0.33    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual Activity  | 1.64    | 0.0        | 1.64    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 07 January 2024   | Accrual           | 0.28    | 0.0        | 0.28    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual           | 0.31    | 0.0        | 0.31    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 09 January 2024   | Accrual           | 0.35    | 0.0        | 0.35    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 10 January 2024   | Accrual           | 0.37    | 0.0        | 0.37    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual           | 0.33    | 0.0        | 0.33    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual Activity  | 1.64    | 0.0        | 1.64    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 12 January 2024   | Accrual           | 0.23    | 0.0        | 0.23    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 13 January 2024   | Accrual           | 0.3     | 0.0        | 0.3     
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 14 January 2024   | Accrual           | 0.36    | 0.0        | 0.36    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 15 January 2024   | Accrual           | 0.42    | 0.0        | 0.42    
  | 0.0   | 0.0        | 0.0           | false     | false     |
+    When Loan Pay-off is made on "11 January 2024"
+    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.33     | 0.0        | 0.33   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 03 January 2024   | Accrual           | 0.33     | 0.0        | 0.33   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 04 January 2024   | Accrual           | 0.32     | 0.0        | 0.32   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 05 January 2024   | Accrual           | 0.33     | 0.0        | 0.33   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual           | 0.33     | 0.0        | 0.33   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 06 January 2024   | Accrual Activity  | 1.64     | 0.0        | 1.64   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 07 January 2024   | Accrual           | 0.28     | 0.0        | 0.28   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 08 January 2024   | Accrual           | 0.31     | 0.0        | 0.31   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 09 January 2024   | Accrual           | 0.35     | 0.0        | 0.35   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 10 January 2024   | Accrual           | 0.37     | 0.0        | 0.37   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual           | 0.33     | 0.0        | 0.33   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Accrual Activity  | 1.64     | 0.0        | 1.64   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+      | 11 January 2024   | Repayment         | 1003.28  | 1000.0     | 3.28   
   | 0.0   | 0.0        | 0.0           | false     | false     |
+
+  @TestRailId:3711
+  Scenario: Verify accrual and accrual activity after backdated payoff on 
cumulative loan
+    When Admin sets the business date to "01 January 2024"
+    When Admin creates a client with random data
+    When 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_DECLINING_BALANCE_DAILY_RECALCULATION_COMPOUNDING_NONE_ACCRUAL_ACTIVITY
 | 01 January 2024   | 1000           | 12                     | 
DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 20       
         | DAYS                  | 5              | DAYS                   | 4  
                | 0                       | 0                      | 0          
          | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
+    And Admin successfully approves the loan on "01 January 2024" with "1000" 
amount and expected disbursement date on "01 January 2024"
+    When Admin successfully disburse the loan on "01 January 2024" with "1000" 
EUR transaction amount
+    When Admin sets the business date to "02 January 2024"
+    When Admin runs inline COB job for Loan
+    When Admin sets the business date to "06 January 2024"
+    When Admin runs inline COB job for Loan
+    And Customer makes "AUTOPAY" repayment on "06 January 2024" with 251.0 EUR 
transaction amount
+    When Admin sets the business date to "11 January 2024"
+    When Admin runs inline COB job for Loan
+    And Customer makes "AUTOPAY" repayment on "11 January 2024" with 251.0 EUR 
transaction amount
+    When Admin sets the business date to "16 January 2024"
+    When Admin runs inline COB job for Loan
+    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.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2024   | Accrual           | 0.32   | 0.0       | 0.32     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 05 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 06 January 2024   | Repayment         | 251.0  | 249.36    | 1.64     
| 0.0  | 0.0       | 750.64       | false    | false    |
+      | 06 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 06 January 2024   | Accrual Activity  | 1.64   | 0.0       | 1.64     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 07 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 08 January 2024   | Accrual           | 0.24   | 0.0       | 0.24     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 09 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 10 January 2024   | Accrual           | 0.24   | 0.0       | 0.24     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024   | Repayment         | 251.0  | 249.77    | 1.23     
| 0.0  | 0.0       | 500.87       | false    | false    |
+      | 11 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024   | Accrual Activity  | 1.23   | 0.0       | 1.23     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 12 January 2024   | Accrual           | 0.16   | 0.0       | 0.16     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 13 January 2024   | Accrual           | 0.17   | 0.0       | 0.17     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 14 January 2024   | Accrual           | 0.16   | 0.0       | 0.16     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 15 January 2024   | Accrual           | 0.17   | 0.0       | 0.17     
| 0.0  | 0.0       | 0.0          | false    | false    |
+    When Loan Pay-off is made on "11 January 2024"
+    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.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2024   | Accrual           | 0.32   | 0.0       | 0.32     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 05 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 06 January 2024   | Repayment         | 251.0  | 249.36    | 1.64     
| 0.0  | 0.0       | 750.64       | false    | false    |
+      | 06 January 2024   | Accrual           | 0.33   | 0.0       | 0.33     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 06 January 2024   | Accrual Activity  | 1.64   | 0.0       | 1.64     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 07 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 08 January 2024   | Accrual           | 0.24   | 0.0       | 0.24     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 09 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 10 January 2024   | Accrual           | 0.24   | 0.0       | 0.24     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024   | Repayment         | 251.0  | 249.77    | 1.23     
| 0.0  | 0.0       | 500.87       | false    | false    |
+      | 11 January 2024   | Accrual           | 0.25   | 0.0       | 0.25     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024   | Accrual Activity  | 1.23   | 0.0       | 1.23     
| 0.0  | 0.0       | 0.0          | false    | false    |
+      | 11 January 2024   | Repayment         | 500.87 | 500.87    | 0.0      
| 0.0  | 0.0       | 0.0          | false    | false    |
+
   @TestRailId:C3190
   Scenario: Verify accrual activity reverse/replay - UC04: Early repayment 
with interest recalculation enabled
     When Admin sets the business date to "01 January 2024"
diff --git 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
index fd6cfa918d..ce488c26e1 100644
--- 
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
+++ 
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanScheduleService.java
@@ -71,8 +71,15 @@ public class LoanScheduleService {
 
     public void recalculateScheduleFromLastTransaction(final Loan loan, final 
ScheduleGeneratorDTO generatorDTO,
             final List<Long> existingTransactionIds, final List<Long> 
existingReversedTransactionIds) {
-        
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
-        
existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
+        recalculateScheduleFromLastTransaction(loan, generatorDTO, 
existingTransactionIds, existingReversedTransactionIds, false);
+    }
+
+    public void recalculateScheduleFromLastTransaction(final Loan loan, final 
ScheduleGeneratorDTO generatorDTO,
+            final List<Long> existingTransactionIds, final List<Long> 
existingReversedTransactionIds, boolean skipTransactionIdCollecting) {
+        if (!skipTransactionIdCollecting) {
+            
existingTransactionIds.addAll(loanTransactionRepository.findTransactionIdsByLoan(loan));
+            
existingReversedTransactionIds.addAll(loanTransactionRepository.findReversedTransactionIdsByLoan(loan));
+        }
         if (!loan.isProgressiveSchedule()) {
             if (loan.isInterestBearingAndInterestRecalculationEnabled() && 
!loan.isChargedOff()) {
                 regenerateRepaymentScheduleWithInterestRecalculation(loan, 
generatorDTO);
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index e5afb435d4..8ff3142a82 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -2404,28 +2404,33 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
     @Transactional
     @Override
     public Loan recalculateInterest(Loan loan) {
-        LocalDate recalculateFrom = loan.fetchInterestRecalculateFromDate();
         businessEventNotifierService.notifyPreBusinessEvent(new 
LoanInterestRecalculationBusinessEvent(loan));
         final List<Long> existingTransactionIds = new ArrayList<>();
         final List<Long> existingReversedTransactionIds = new ArrayList<>();
 
-        ScheduleGeneratorDTO generatorDTO = 
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
+        if (loan.isCumulativeSchedule()) {
+            LocalDate recalculateFrom = 
loan.fetchInterestRecalculateFromDate();
+            ScheduleGeneratorDTO generatorDTO = 
this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom);
+            loanScheduleService.recalculateScheduleFromLastTransaction(loan, 
generatorDTO, existingTransactionIds,
+                    existingReversedTransactionIds);
+            loanAccrualsProcessingService.reprocessExistingAccruals(loan);
+            if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
+                
loanAccrualsProcessingService.processIncomePostingAndAccruals(loan);
+            }
 
-        loanScheduleService.recalculateScheduleFromLastTransaction(loan, 
generatorDTO, existingTransactionIds,
-                existingReversedTransactionIds);
+            loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
+            
loanAccrualsProcessingService.processAccrualsOnInterestRecalculation(loan,
+                    loan.isInterestBearingAndInterestRecalculationEnabled(), 
false);
+            businessEventNotifierService.notifyPostBusinessEvent(new 
LoanInterestRecalculationBusinessEvent(loan));
 
-        loanAccrualsProcessingService.reprocessExistingAccruals(loan);
-        if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
-            
loanAccrualsProcessingService.processIncomePostingAndAccruals(loan);
+            journalEntryPoster.postJournalEntries(loan, 
existingTransactionIds, existingReversedTransactionIds);
+            
loanAccrualTransactionBusinessEventService.raiseBusinessEventForAccrualTransactions(loan,
 existingTransactionIds);
+        } else {
+            loanScheduleService.recalculateScheduleFromLastTransaction(loan, 
null, existingTransactionIds, existingReversedTransactionIds,
+                    true);
+            loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
+            businessEventNotifierService.notifyPostBusinessEvent(new 
LoanInterestRecalculationBusinessEvent(loan));
         }
-
-        loan = saveAndFlushLoanWithDataIntegrityViolationChecks(loan);
-        
loanAccrualsProcessingService.processAccrualsOnInterestRecalculation(loan, 
loan.isInterestBearingAndInterestRecalculationEnabled(),
-                false);
-        businessEventNotifierService.notifyPostBusinessEvent(new 
LoanInterestRecalculationBusinessEvent(loan));
-
-        journalEntryPoster.postJournalEntries(loan, existingTransactionIds, 
existingReversedTransactionIds);
-        
loanAccrualTransactionBusinessEventService.raiseBusinessEventForAccrualTransactions(loan,
 existingTransactionIds);
         return loan;
     }
 

Reply via email to