feat(investment): maker-checker on all investment actions
Fineract Build & Cucumber tests (without E2E tests) / verify (main, build-core) (push) Waiting to run
Fineract Build & Cucumber tests (without E2E tests) / verify (main, cucumber) (push) Waiting to run
Fineract Build & Cucumber tests (without E2E tests) / verify (progressive-loan, build-progressive-loan) (push) Waiting to run
Fineract Docker Builds / build (false, docker-compose-postgresql.yml, postgresql) (push) Waiting to run
Fineract Docker Builds / build (true, docker-compose.yml, mariadb) (push) Waiting to run
Fineract Documentation build / build (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 10 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 2 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 3 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 1 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 4 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 5 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 6 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 7 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 8 of 10) (push) Waiting to run
Fineract E2E Tests / E2E Tests (Shard 9 of 10) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-1) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-2) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-3) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-4) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MariaDB / test (test-core-5) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-3) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-4) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-5) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-1) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-2) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-3) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-4) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - MySQL / test (test-core-5) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-1) (push) Waiting to run
Fineract Cargo & Unit- & Integration tests - PostgreSQL / test (test-core-2) (push) Waiting to run
Fineract Liquibase Only mode - PostgreSQL / test (push) Waiting to run
Fineract Messaging Smoke Tests / Smoke Test with ActiveMQ (push) Waiting to run
Fineract Messaging Smoke Tests / Smoke Test with Kafka (push) Waiting to run

This commit is contained in:
2026-10-27 17:21:16 +05:30
parent 8db4fc7fee
commit ff772d03b1
3 changed files with 63 additions and 1 deletions
@@ -169,12 +169,26 @@ public class CommandSourceService {
|| "RECURRINGDEPOSITPRODUCT".equalsIgnoreCase(commandSource.getEntityName())
|| "USER".equalsIgnoreCase(commandSource.getEntityName())
|| "ROLE".equalsIgnoreCase(commandSource.getEntityName())
|| isDdsEntity(commandSource.getEntityName())) {
|| isDdsEntity(commandSource.getEntityName())
|| isInvestmentEntity(commandSource.getEntityName())) {
return false;
}
return true;
}
/**
* The Investment module's maker-checker entities. Deals, settlements and their vouchers are entered by one person and
* approved by another, so a super user's investment work goes to a checker as well. Unlike DDS, a super user may still
* check an entry they made themselves. Daily rates are not here: they are entered without approval.
*/
public static boolean isInvestmentEntity(final String entityName) {
return entityName != null && switch (entityName.toUpperCase()) {
case "INVESTMENTPARTY", "INVESTMENTSCRIPT", "INVESTMENTPURCHASE", "INVESTMENTSALE", "INVESTMENTFD", "INVESTMENTTRANSFER",
"INVESTMENTINTEREST", "INVESTMENTVALUATION" -> true;
default -> false;
};
}
/**
* The DDS module's maker-checker entities. A super user's DDS work goes to a checker like anyone
* else's: DDS moves customers' money, and every such move is to be approved by a second person.
@@ -202,4 +202,5 @@
<include file="parts/0608_apply_rd_base_chart_to_rd_products.xml" relativeToChangelogFile="true"/>
<include file="parts/0609_investment_script_rating.xml" relativeToChangelogFile="true"/>
<include file="parts/0610_investment_valuation_and_fund_switch.xml" relativeToChangelogFile="true"/>
<include file="parts/0611_investment_maker_checker.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
@@ -0,0 +1,47 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd">
<!--
Maker-checker on every Investment command (Jitendra Sir, 27-10-2026): masters, deal entry, settlement, sale,
redemption, write-off, amortisation, GOI transfer, mutual fund switch, interest vouchers (no longer auto-passed),
FDs, the deposit base and the market valuation. Each lands in the Checker Inbox and takes effect only when a
checker approves it; super users included (CommandSourceService.isInvestmentEntity). Daily rates / NAVs stay
without approval. The matching *_CHECKER permissions were added with the commands.
-->
<changeSet author="cbs-anshul" id="0611-1-investment-maker-checker">
<sql>
UPDATE m_permission
SET can_maker_checker = TRUE
WHERE code IN ('CREATE_INVESTMENTPARTY', 'UPDATE_INVESTMENTPARTY', 'DELETE_INVESTMENTPARTY',
'CREATE_INVESTMENTSCRIPT', 'UPDATE_INVESTMENTSCRIPT',
'CREATE_INVESTMENTPURCHASE', 'SETTLE_INVESTMENTPURCHASE', 'DELETE_INVESTMENTPURCHASE',
'CREATE_INVESTMENTSALE', 'SETTLE_INVESTMENTSALE', 'DELETE_INVESTMENTSALE', 'REDEEM_INVESTMENTSALE',
'WRITEOFF_INVESTMENTSALE', 'AMORTISE_INVESTMENTSALE', 'SWITCH_INVESTMENTSALE',
'CREATE_INVESTMENTFD', 'MATURE_INVESTMENTFD', 'PREMATURE_INVESTMENTFD', 'RENEW_INVESTMENTFD',
'POSTINTEREST_INVESTMENTFD', 'SETBASE_INVESTMENTFD',
'CREATE_INVESTMENTTRANSFER', 'CREATE_INVESTMENTINTEREST', 'CREATE_INVESTMENTVALUATION')
</sql>
</changeSet>
</databaseChangeLog>