[ 
https://issues.apache.org/jira/browse/FINERACT-2861?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Adam Saghy resolved FINERACT-2861.
----------------------------------
    Resolution: Fixed

> Waiving interest under creocore-strategy posts double the waived amount to 
> the GL
> ---------------------------------------------------------------------------------
>
>                 Key: FINERACT-2861
>                 URL: https://issues.apache.org/jira/browse/FINERACT-2861
>             Project: Apache Fineract
>          Issue Type: Bug
>          Components: Accounting, Loan
>            Reporter: Foo Developer
>            Assignee: Foo Developer
>            Priority: Critical
>             Fix For: 1.16.0
>
>
> h3. Summary
> With the {{creocore-strategy}} (and {{heavensfamily-strategy}}) repayment 
> strategy, waiving interest on a loan records the waiver transaction's 
> interest portion as *twice* the waived amount, so the accounting journal 
> entries post double the waived interest.
> h3. Steps to reproduce
> # Create a loan product with accounting enabled (cash or accrual) and 
> {{transactionProcessingStrategyCode}} = {{creocore-strategy}}.
> # Create, approve and disburse a loan on it.
> # Waive part of the interest of the first installment: {{POST 
> /fineract-provider/api/v1/loans/{loanId}/transactions?command=waiveinterest}} 
> with {{{"transactionDate": "<date>", "transactionAmount": 10, "locale": "en", 
> "dateFormat": "dd MMMM yyyy"}}}
> # Read the transaction back ({{GET /loans/{loanId}/transactions/{txnId}}}) 
> and its journal entries ({{GET /journalentries?transactionId=L{txnId}}}).
> h3. Expected
> The waiver transaction has {{amount}} 10 and {{interestPortion}} 10, and the 
> journal entries post one pair of 10.
> h3. Actual
> {{amount}} is 10 but {{interestPortion}} is 20, and the journal entries post 
> 20 on each side. The installment's waived interest and the repayment schedule 
> are correct; only the transaction's interest portion, and therefore the GL, 
> is doubled.
> h3. Root cause
> {{LoanTransaction.updateComponents(...)}} accumulates onto the portions 
> already set on the transaction. In 
> {{CreocoreLoanRepaymentScheduleTransactionProcessor.handleTransactionThatIsOnTimePaymentOfInstallment}}
>  it is called inside the {{isInterestWaiver()}} branch *and* again 
> unconditionally after the if/else chain, so the waived interest is added 
> twice. {{HeavensFamilyLoanRepaymentScheduleTransactionProcessor}} has the 
> same double call in two methods 
> ({{handleTransactionThatIsPaymentInAdvanceOfInstallment}} and 
> {{handleTransactionThatIsOnTimePaymentOfInstallment}}; the late-payment path 
> delegates to the latter). 
> {{FineractStyleLoanRepaymentScheduleTransactionProcessor}} is correct: it 
> calls {{updateComponents}} once per branch with no trailing call.
> h3. Proposed fix
> Remove the redundant {{updateComponents(...)}} call from the interest-waiver 
> branch in the three methods, leaving the single trailing call. Unit tests for 
> both processors assert that a waiver of X leaves the transaction's interest 
> portion at X (they fail with 2X before the fix).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to