[ 
https://issues.apache.org/jira/browse/FINERACT-3023?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18134677#comment-18134677
 ] 

김다연 commented on FINERACT-3023:
-------------------------------

PR: https://github.com/apache/fineract/pull/6789

It also documents transferToSavingsId on the fixed deposit application request, 
so the test can open a deposit with the "transfer to savings" instruction 
through the generated client.

> Fixed deposit maturity job posts the journal entries of the maturity payout 
> two or three times
> ----------------------------------------------------------------------------------------------
>
>                 Key: FINERACT-3023
>                 URL: https://issues.apache.org/jira/browse/FINERACT-3023
>             Project: Apache Fineract
>          Issue Type: Bug
>          Components: Savings
>    Affects Versions: 1.15.0, 1.16.1
>            Reporter: 김다연
>            Priority: Major
>
> When the "Update Deposit Accounts Maturity details" job matures a fixed 
> deposit with a maturity instruction, the journal entries of the payout 
> transaction are posted more than once, so the savings control account no 
> longer matches the account balances.
> *Steps to reproduce* (develop 755657010b, PostgreSQL)
> # Fixed deposit product with cash based accounting. For instruction 200, also 
> map the "Liability Transfer" financial activity to a GL account and set 
> {{transferToSavingsId}} on the deposit.
> # Fixed deposit of 100,000 for 14 months with {{"maturityInstructionId"}} 
> 300, 400 or 200, submitted, approved and activated on 2026-01-01.
> # Enable the business date, set it to 2027-03-01 and run "Update Deposit 
> Accounts Maturity details".
> # Read the journal entries of the payout ({{GET 
> /journalentries?savingsId=...}}).
> Actual result:
> ||Maturity instruction||Payout||Journal entries of the payout||
> |Reinvest principal and interest (300)|withdrawal 108,445.72|*3 times* 
> (debits 325,337.15)|
> |Reinvest principal only (400)|withdrawal 100,000.00|*3 times* (debits 
> 300,000.00)|
> |Transfer to savings (200)|transfer 108,445.72|*2 times* (debits 216,891.43)|
> Expected result: one debit and one credit for the payout.
> With 300, the savings control account gets 208,445.72 in credits (deposit, 
> interest, new deposit) and 325,337.15 in debits, so it shows -116,891.43 
> while the client holds 100,000 in the new deposit.
> {{JournalEntryWritePlatformServiceImpl#createJournalEntriesForSavings}} posts 
> whatever it is given, so the payout is posted once by each of these calls:
> * Reinvest (300, 400): {{handleWithdrawal}}, then {{postJournalEntries}} at 
> the end of {{DepositAccountDomainServiceJpa#handleFDAccountMaturityClosure}} 
> (its existing transaction ids were taken before the withdrawal), then 
> {{postJournalEntries}} at the end of 
> {{DepositAccountWritePlatformServiceJpaRepositoryImpl#updateMaturityDetails}} 
> (ids taken before the closure).
> * Transfer (200): {{transferFunds}}, then {{postJournalEntries}} in 
> {{updateMaturityDetails}}. The closure itself skips the transfer, as 
> {{updateAlreadyPostedTransactions}} marks it posted.
> *History*
> FINERACT-1401 fixed the same double posting for a manual close 
> ({{handleFDAccountClosure}}, PR #1885). {{handleFDAccountMaturityClosure}} 
> and the posting in {{updateMaturityDetails}} were not changed.
> *Suggested fix*
> Post the payout once in the job path, and add a test that runs the job for 
> 200, 300 and 400 and checks the journal entries of the payout.
> Related: FINERACT-3022 (new deposit funded with the principal only).
> I'd like to work on this and will open a PR.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to