[
https://issues.apache.org/jira/browse/FINERACT-3023?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
김다연 updated FINERACT-3023:
--------------------------
Affects Version/s: 1.16.1
> 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)