Abhishek Chaudhary created FINERACT-2705:
--------------------------------------------
Summary: Post Interest For Savings job aborts all interest
postings when one transaction's GL account is unresolved
Key: FINERACT-2705
URL: https://issues.apache.org/jira/browse/FINERACT-2705
Project: Apache Fineract
Issue Type: Bug
Components: Accounting, Savings
Affects Versions: 1.13.0
Reporter: Abhishek Chaudhary
The scheduled job *Post Interest For Saving* writes all journal entries for a
posting cycle in a single JDBC batch inside one transaction.
{{SavingsSchedularInterestPoster.batchUpdateJournalEntries}} decides whether to
write journal entries using the *product-level* {{SAVINGS_CONTROL}} and
{{INTEREST_ON_SAVINGS}} mappings, but the inserted rows use the
*transaction-level* accounts chosen by
{{SavingsAccountWritePlatformServiceJpaRepositoryImpl.selectAccountId}}, which
resolves accrual-only mappings ({{INTEREST_PAYABLE}}, {{INTEREST_RECEIVABLE}} -
introduced in FINERACT-2312). For a cash-based product these mappings do not
exist, so the resolved account id is {{0}} and the batch INSERT fails with:
{code}
ERROR: insert or update on table "acc_gl_journal_entry" violates foreign key
constraint "FK_acc_gl_journal_entry_acc_gl_account"
Detail: Key (account_id)=(0) is not present in table "acc_gl_account".
{code}
Because the whole batch shares one transaction, a *single* account with an
unresolved GL mapping rolls back interest posting for *every* savings account
in the tenant.
This was observed deterministically in [PR
#6124|https://github.com/apache/fineract/pull/6124] CI on all three databases
(MySQL, MariaDB, PostgreSQL), where test sharding co-located a cash-based
accounting test ({{AccountTransferTest}}) with {{SavingsInterestPostingTest}}.
PR #6124 fixes the cash-based fallback in {{selectAccountId}} for regular
interest posting; this ticket makes the job itself resilient:
* validate the transaction-level GL accounts before enqueueing journal entries
* skip (with a WARN log) transactions whose accounts are unresolved - e.g.
overdraft interest on cash-based products - instead of failing the whole batch
for all accounts
Unit tests included. PR follows.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)