feat: separate kyc/aml risk rules, dormancy clock, and savings daily interest fixes
Fineract Build & Cucumber tests (without E2E tests) / verify (main, cucumber) (push) Canceled after 0s
Fineract Build & Cucumber tests (without E2E tests) / verify (progressive-loan, build-progressive-loan) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 8 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 9 of 10) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-1) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-2) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-3) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-4) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-5) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-1) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-2) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-3) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-4) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-5) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-1) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-2) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-3) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-4) (push) Canceled after 0s
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-5) (push) Canceled after 0s
Fineract Build & Cucumber tests (without E2E tests) / verify (main, build-core) (push) Canceled after 0s
Fineract Docker Builds / build (true, docker-compose.yml, mariadb) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 10 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 2 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 6 of 10) (push) Canceled after 0s
Fineract Docker Builds / build (false, docker-compose-postgresql.yml, postgresql) (push) Canceled after 0s
Fineract Documentation build / build (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 1 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 3 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 4 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 5 of 10) (push) Canceled after 0s
Fineract E2E Tests / E2E Tests (Shard 7 of 10) (push) Canceled after 0s
Fineract Liquibase Only mode - PostgreSQL / test (push) Canceled after 0s
Fineract Messaging Smoke Tests / Smoke Test with ActiveMQ (push) Canceled after 0s
Fineract Messaging Smoke Tests / Smoke Test with Kafka (push) Canceled after 0s

This commit is contained in:
2026-09-10 18:27:50 +05:30
parent 6aa655a8a3
commit 5cc5d680f2
34 changed files with 1777 additions and 159 deletions
@@ -293,4 +293,52 @@
</sql>
</changeSet>
<!--
Clear the income GL these charges were seeded with, and let each product's own mapping decide.
Every insert above picks its income account with
SELECT id FROM acc_gl_account
WHERE classification_enum = 4 AND account_usage = 1 AND disabled = false
ORDER BY id LIMIT 1
which is "whichever income account happens to have the lowest id". That is not a choice, it is an
accident of the order the chart of accounts was created in, and it lands somewhere different on
every database: on one tenant it resolved to 400101 INCOME FROM LOAN, so savings facility charges
were booked as loan income; on a tenant whose chart was seeded in another order it resolved to
400103 DD Issuance Charges Income, so an ATM charge was booked against demand drafts. Neither is
the account a bank would name for an ATM fee, and no screen shows the reader which one was picked.
A charge's own account overrides the product's Income from Fees mapping — see
AccountingProcessorHelper.getLinkedGLAccountForSavingsCharges, which reads the charge's account
first and only falls back to the product mapping when it is null. So while these values stand, the
account an administrator chose on the product's Accounting tab is silently ignored. Setting them
null restores that mapping as the answer, which is where a bank configures this and the only place
it can be seen and changed.
Only rows still carrying the seeded value are touched: the account is compared against what that
same query resolves to now, so a charge an administrator has since pointed at a real account keeps
it. 0500_reset_facility_charge_mappings_to_unmapped.xml already decided these seeds are not an
administrator's choice and deactivated the mappings for the same reason.
-->
<changeSet id="2011-19" author="cbs-nitesh">
<preConditions onFail="MARK_RAN">
<tableExists tableName="m_charge"/>
</preConditions>
<sql>
UPDATE m_charge
SET income_or_liability_account_id = NULL
WHERE income_or_liability_account_id = (
SELECT id FROM acc_gl_account
WHERE classification_enum = 4 AND account_usage = 1 AND disabled = false
ORDER BY id LIMIT 1)
AND name IN ('ATM Facility Charge', 'ATM Withdrawal Charge', 'UPI Facility Charge',
'POS Transaction Charge', 'Cheque Book Charge', 'IMPS Facility Charge',
'SMS Alert Monthly Charge', 'BBPS Facility Charge', 'Insurance Cover Charge',
'BEPG Facility Charge', 'NEFT Facility Charge', 'RTGS Facility Charge',
'Inter-Bank Cap Charge', 'Withdrawal Facility Charge', 'Deposit KYC Charge',
'Virtual Debit Card Charge');
</sql>
</changeSet>
</databaseChangeLog>