Merge remote-tracking branch 'self-hosted/feature/merge-updates' into feature/reports-products

# Conflicts:
#	fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
This commit is contained in:
Aditya
2026-04-29 19:23:21 +05:30
180 changed files with 233213 additions and 270090 deletions
@@ -44,7 +44,7 @@ fineract.security.oauth2.client.registrations.frontend-client.require-authorizat
fineract.tenant.host=${FINERACT_DEFAULT_TENANTDB_HOSTNAME:localhost}
fineract.tenant.port=${FINERACT_DEFAULT_TENANTDB_PORT:5432}
fineract.tenant.username=${FINERACT_DEFAULT_TENANTDB_UID:postgres}
fineract.tenant.password=${FINERACT_DEFAULT_TENANTDB_PWD:root}
fineract.tenant.password=${FINERACT_DEFAULT_TENANTDB_PWD:313863}
fineract.tenant.parameters=${FINERACT_DEFAULT_TENANTDB_CONN_PARAMS:}
fineract.tenant.timezone=${FINERACT_DEFAULT_TENANTDB_TIMEZONE:Asia/Kolkata}
fineract.tenant.identifier=${FINERACT_DEFAULT_TENANTDB_IDENTIFIER:default}
@@ -405,7 +405,7 @@ server.tomcat.mbeanregistry.enabled=${FINERACT_SERVER_TOMCAT_MBEANREGISTRY_ENABL
spring.datasource.hikari.driverClassName=${FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME:org.postgresql.Driver}
spring.datasource.hikari.jdbcUrl=${FINERACT_HIKARI_JDBC_URL:jdbc:postgresql://localhost:5432/fineract_tenants}
spring.datasource.hikari.username=${FINERACT_HIKARI_USERNAME:postgres}
spring.datasource.hikari.password=${FINERACT_HIKARI_PASSWORD:root}
spring.datasource.hikari.password=${FINERACT_HIKARI_PASSWORD:313863}
spring.datasource.hikari.minimumIdle=${FINERACT_HIKARI_MINIMUM_IDLE:3}
spring.datasource.hikari.maximumPoolSize=${FINERACT_HIKARI_MAXIMUM_POOL_SIZE:10}
spring.datasource.hikari.idleTimeout=${FINERACT_HIKARI_IDLE_TIMEOUT:60000}
@@ -268,6 +268,14 @@
<include file="parts/0247_add_huf_client_classification.xml" relativeToChangelogFile="true"/>
<include file="parts/0248_add_cin_din_verification_fields.xml" relativeToChangelogFile="true"/>
<include file="parts/0249_add_non_person_extended_fields.xml" relativeToChangelogFile="true"/>
<include file="parts/0251_add_savings_product_enhanced_fields.xml" relativeToChangelogFile="true"/>
<include file="parts/0255_create_current_product_tables.xml" relativeToChangelogFile="true"/>
<include file="parts/0256_add_recurring_deposit_product_codes.xml" relativeToChangelogFile="true"/>
<include file="parts/0257_create_rd_interest_rate_tables.xml" relativeToChangelogFile="true"/>
<include file="parts/0267_seed_rd_interest_rate_data.xml" relativeToChangelogFile="true"/>
<include file="parts/0270_add_rd_product_extra_fields.xml" relativeToChangelogFile="true"/>
<include file="parts/0271_create_rd_base_interest_rate_tables.xml" relativeToChangelogFile="true"/>
<include file="parts/0272_seed_rd_base_interest_rate_data.xml" relativeToChangelogFile="true"/>
<include file="parts/0250_add_kyc_director_fields.xml" relativeToChangelogFile="true"/>
<include file="parts/0251_add_kyc_proof_type_codes.xml" relativeToChangelogFile="true"/>
<include file="parts/0252_add_ckyc_uploaded_on.xml" relativeToChangelogFile="true"/>
@@ -278,4 +286,7 @@
<include file="parts/0257_add_religion_social_category_codes.xml" relativeToChangelogFile="true"/>
<include file="parts/0258_add_agriculture_non_agriculture_income.xml" relativeToChangelogFile="true"/>
<include file="parts/0259_add_ckyc_report_indexes.xml" relativeToChangelogFile="true"/>
<include file="parts/0273_add_gl_account_id_to_current_product.xml" relativeToChangelogFile="true"/>
<include file="parts/0276_create_current_account_tables.xml" relativeToChangelogFile="true"/>
<include file="parts/0277_fix_current_account_audit_columns.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.1.xsd">
<changeSet author="fineract" id="0250_add_period_frequency_options">
<insert tableName="m_code">
<column name="code_name" value="PeriodFrequency"/>
<column name="is_system_defined" valueBoolean="true"/>
</insert>
<insert tableName="m_code_value">
<column name="code_id" valueComputed="(SELECT id FROM m_code WHERE code_name = 'PeriodFrequency')"/>
<column name="code_value" value="Monthly"/>
<column name="code_description" value="Monthly"/>
<column name="order_position" valueNumeric="1"/>
<column name="is_active" valueBoolean="true"/>
<column name="is_mandatory" valueBoolean="false"/>
</insert>
<insert tableName="m_code_value">
<column name="code_id" valueComputed="(SELECT id FROM m_code WHERE code_name = 'PeriodFrequency')"/>
<column name="code_value" value="Quarterly"/>
<column name="code_description" value="Quarterly"/>
<column name="order_position" valueNumeric="2"/>
<column name="is_active" valueBoolean="true"/>
<column name="is_mandatory" valueBoolean="false"/>
</insert>
<insert tableName="m_code_value">
<column name="code_id" valueComputed="(SELECT id FROM m_code WHERE code_name = 'PeriodFrequency')"/>
<column name="code_value" value="Half Yearly"/>
<column name="code_description" value="Half Yearly"/>
<column name="order_position" valueNumeric="3"/>
<column name="is_active" valueBoolean="true"/>
<column name="is_mandatory" valueBoolean="false"/>
</insert>
<insert tableName="m_code_value">
<column name="code_id" valueComputed="(SELECT id FROM m_code WHERE code_name = 'PeriodFrequency')"/>
<column name="code_value" value="Yearly"/>
<column name="code_description" value="Yearly"/>
<column name="order_position" valueNumeric="4"/>
<column name="is_active" valueBoolean="true"/>
<column name="is_mandatory" valueBoolean="false"/>
</insert>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.1.xsd">
<!-- Add new columns to m_savings_product table -->
<changeSet id="0251_add_savings_product_enhanced_fields" author="system">
<addColumn tableName="m_savings_product">
<column name="account_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="customer_segment" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="product_code" type="varchar(20)">
<constraints nullable="true" unique="true"/>
</column>
<column name="effective_date" type="date">
<constraints nullable="true"/>
</column>
<column name="effective_to" type="date">
<constraints nullable="true"/>
</column>
<column name="end_date" type="date">
<constraints nullable="true"/>
</column>
<column name="introducer_required" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="share_linking_enabled" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="nomination_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="dormancy_alert" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="interest_calculate_selector" type="int">
<constraints nullable="true"/>
</column>
<column name="average_period" type="varchar(20)">
<constraints nullable="true"/>
</column>
<column name="auto_post" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="frequency_fix_day" type="int">
<constraints nullable="true"/>
</column>
<column name="last_interest_date" type="date">
<constraints nullable="true"/>
</column>
<column name="enable_lockin_period" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<!-- Create m_savings_product_facility_config table -->
<changeSet id="0252_create_savings_product_facility_config_table" author="system">
<createTable tableName="m_savings_product_facility_config">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="savings_product_id" type="bigint">
<constraints nullable="false" unique="true"/>
</column>
<column name="atm_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="atm_withdrawal_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="upi_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="pos_transactions_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="cheque_book" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="imps_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="sms_alerts" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="bbps_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="insurance_cover" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="bepg_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="neft_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="rtgs_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="inter_bank_total_cap_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="withdrawal_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="deposit_facility_kyc" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="virtual_debit_card" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="created_date" type="datetime" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint
baseTableName="m_savings_product_facility_config"
baseColumnNames="savings_product_id"
referencedTableName="m_savings_product"
referencedColumnNames="id"
constraintName="fk_savings_product_facility_config_product_id"
onDelete="CASCADE"/>
</changeSet>
<!-- Create m_savings_product_facility_limits table -->
<changeSet id="0253_create_savings_product_facility_limits_table" author="system">
<createTable tableName="m_savings_product_facility_limits">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="savings_product_id" type="bigint">
<constraints nullable="false"/>
</column>
<column name="limit_type" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="general_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_account_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="small_saving_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="created_date" type="datetime" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint
baseTableName="m_savings_product_facility_limits"
baseColumnNames="savings_product_id"
referencedTableName="m_savings_product"
referencedColumnNames="id"
constraintName="fk_savings_product_facility_limits_product_id"
onDelete="CASCADE"/>
<createIndex tableName="m_savings_product_facility_limits" indexName="idx_savings_product_facility_limits_product_type">
<column name="savings_product_id"/>
<column name="limit_type"/>
</createIndex>
</changeSet>
<!-- Create m_savings_product_deposit_limit_kyc table -->
<changeSet id="0254_create_savings_product_deposit_limit_kyc_table" author="system">
<createTable tableName="m_savings_product_deposit_limit_kyc">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="savings_product_id" type="bigint">
<constraints nullable="false" unique="true"/>
</column>
<column name="general_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="general_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_limit" type="bigint">
<constraints nullable="true"/>
</column>
<column name="small_saving_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="small_saving_limit" type="bigint">
<constraints nullable="true"/>
</column>
<column name="created_date" type="datetime" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint
baseTableName="m_savings_product_deposit_limit_kyc"
baseColumnNames="savings_product_id"
referencedTableName="m_savings_product"
referencedColumnNames="id"
constraintName="fk_savings_product_deposit_limit_kyc_product_id"
onDelete="CASCADE"/>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,390 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.1.xsd">
<!-- Create m_current_product table (same structure as m_savings_product) -->
<changeSet id="0255_create_current_product_table" author="system">
<createTable tableName="m_current_product">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(100)">
<constraints nullable="false" unique="true" uniqueConstraintName="cp_unq_name"/>
</column>
<column name="short_name" type="varchar(4)">
<constraints nullable="false" unique="true" uniqueConstraintName="cp_unq_short_name"/>
</column>
<column name="description" type="varchar(500)">
<constraints nullable="false"/>
</column>
<column name="deposit_type_enum" type="smallint" defaultValue="400">
<constraints nullable="false"/>
</column>
<column name="currency_code" type="varchar(3)">
<constraints nullable="false"/>
</column>
<column name="currency_digits" type="smallint">
<constraints nullable="false"/>
</column>
<column name="currency_multiplesof" type="smallint">
<constraints nullable="true"/>
</column>
<column name="nominal_annual_interest_rate" type="decimal(19,6)">
<constraints nullable="false"/>
</column>
<column name="interest_compounding_period_enum" type="smallint">
<constraints nullable="false"/>
</column>
<column name="interest_posting_period_enum" type="smallint" defaultValue="4">
<constraints nullable="false"/>
</column>
<column name="interest_calculation_type_enum" type="smallint">
<constraints nullable="false"/>
</column>
<column name="interest_calculation_days_in_year_type_enum" type="smallint">
<constraints nullable="false"/>
</column>
<column name="min_required_opening_balance" type="decimal(19,6)">
<constraints nullable="true"/>
</column>
<column name="lockin_period_frequency" type="int">
<constraints nullable="true"/>
</column>
<column name="lockin_period_frequency_enum" type="smallint">
<constraints nullable="true"/>
</column>
<column name="accounting_type" type="smallint">
<constraints nullable="false"/>
</column>
<column name="withdrawal_fee_for_transfer" type="boolean" defaultValue="true">
<constraints nullable="false"/>
</column>
<column name="allow_overdraft" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="overdraft_limit" type="decimal(19,6)">
<constraints nullable="true"/>
</column>
<column name="nominal_annual_interest_rate_overdraft" type="decimal(19,6)" defaultValue="0.000000">
<constraints nullable="true"/>
</column>
<column name="min_overdraft_for_interest_calculation" type="decimal(19,6)" defaultValue="0.000000">
<constraints nullable="true"/>
</column>
<column name="enforce_min_required_balance" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="min_required_balance" type="decimal(19,6)">
<constraints nullable="true"/>
</column>
<column name="is_lien_allowed" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="max_allowed_lien_limit" type="decimal(19,6)">
<constraints nullable="true"/>
</column>
<column name="min_balance_for_interest_calculation" type="decimal(19,6)">
<constraints nullable="true"/>
</column>
<column name="withhold_tax" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="tax_group_id" type="bigint">
<constraints nullable="true"/>
</column>
<column name="is_dormancy_tracking_active" type="boolean">
<constraints nullable="true"/>
</column>
<column name="days_to_inactive" type="int">
<constraints nullable="true"/>
</column>
<column name="days_to_dormancy" type="int">
<constraints nullable="true"/>
</column>
<column name="days_to_escheat" type="int">
<constraints nullable="true"/>
</column>
<column name="other_gl_mappings" type="longtext">
<constraints nullable="true"/>
</column>
<!-- Enhanced fields -->
<column name="account_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="customer_segment" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="product_code" type="varchar(20)">
<constraints nullable="true" unique="true" uniqueConstraintName="cp_unq_product_code"/>
</column>
<column name="effective_date" type="date">
<constraints nullable="true"/>
</column>
<column name="effective_to" type="date">
<constraints nullable="true"/>
</column>
<column name="end_date" type="date">
<constraints nullable="true"/>
</column>
<column name="introducer_required" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="share_linking_enabled" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="nomination_facility" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="dormancy_alert" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="interest_calculate_selector" type="int">
<constraints nullable="true"/>
</column>
<column name="average_period" type="varchar(20)">
<constraints nullable="true"/>
</column>
<column name="auto_post" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="frequency_fix_day" type="int">
<constraints nullable="true"/>
</column>
<column name="last_interest_date" type="date">
<constraints nullable="true"/>
</column>
<column name="enable_lockin_period" type="boolean" defaultValue="false">
<constraints nullable="false"/>
</column>
<column name="balance_frequency" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="account_closed_zero_balance_in_day_closing" type="boolean" defaultValue="false">
<constraints nullable="true"/>
</column>
</createTable>
<addForeignKeyConstraint baseTableName="m_current_product" baseColumnNames="tax_group_id"
constraintName="fk_current_product_tax_group"
referencedTableName="m_tax_group" referencedColumnNames="id"/>
</changeSet>
<!-- Create m_current_product_charge join table -->
<changeSet id="0256_create_current_product_charge_table" author="system">
<createTable tableName="m_current_product_charge">
<column name="current_product_id" type="bigint">
<constraints nullable="false"/>
</column>
<column name="charge_id" type="bigint">
<constraints nullable="false"/>
</column>
</createTable>
<addPrimaryKey tableName="m_current_product_charge" columnNames="current_product_id,charge_id"
constraintName="pk_current_product_charge"/>
<addForeignKeyConstraint baseTableName="m_current_product_charge" baseColumnNames="current_product_id"
constraintName="fk_current_product_charge_product"
referencedTableName="m_current_product" referencedColumnNames="id"/>
<addForeignKeyConstraint baseTableName="m_current_product_charge" baseColumnNames="charge_id"
constraintName="fk_current_product_charge_charge"
referencedTableName="m_charge" referencedColumnNames="id"/>
</changeSet>
<!-- Create m_current_product_facility_config table -->
<changeSet id="0257_create_current_product_facility_config_table" author="system">
<createTable tableName="m_current_product_facility_config">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_product_id" type="bigint">
<constraints nullable="false" unique="true" uniqueConstraintName="uq_current_product_facility_config_product_id"/>
</column>
<column name="atm_facility" type="boolean" defaultValue="false"/>
<column name="atm_withdrawal_facility" type="boolean" defaultValue="false"/>
<column name="upi_facility" type="boolean" defaultValue="false"/>
<column name="pos_transactions_facility" type="boolean" defaultValue="false"/>
<column name="cheque_book" type="boolean" defaultValue="false"/>
<column name="imps_facility" type="boolean" defaultValue="false"/>
<column name="sms_alerts" type="boolean" defaultValue="false"/>
<column name="bbps_facility" type="boolean" defaultValue="false"/>
<column name="insurance_cover" type="boolean" defaultValue="false"/>
<column name="bepg_facility" type="boolean" defaultValue="false"/>
<column name="neft_facility" type="boolean" defaultValue="false"/>
<column name="rtgs_facility" type="boolean" defaultValue="false"/>
<column name="inter_bank_total_cap_facility" type="boolean" defaultValue="false"/>
<column name="withdrawal_facility" type="boolean" defaultValue="false"/>
<column name="deposit_facility_kyc" type="boolean" defaultValue="false"/>
<column name="virtual_debit_card" type="boolean" defaultValue="false"/>
<column name="created_date" type="datetime">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint baseTableName="m_current_product_facility_config" baseColumnNames="current_product_id"
constraintName="fk_current_product_facility_config_product_id"
referencedTableName="m_current_product" referencedColumnNames="id"
onDelete="CASCADE"/>
</changeSet>
<!-- Create m_current_product_facility_limits table -->
<changeSet id="0258_create_current_product_facility_limits_table" author="system">
<createTable tableName="m_current_product_facility_limits">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_product_id" type="bigint">
<constraints nullable="false"/>
</column>
<column name="limit_type" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="general_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_account_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="small_saving_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="created_date" type="datetime">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint baseTableName="m_current_product_facility_limits" baseColumnNames="current_product_id"
constraintName="fk_current_product_facility_limits_product_id"
referencedTableName="m_current_product" referencedColumnNames="id"
onDelete="CASCADE"/>
<createIndex tableName="m_current_product_facility_limits" indexName="idx_current_product_facility_limits_product_type">
<column name="current_product_id"/>
<column name="limit_type"/>
</createIndex>
</changeSet>
<!-- Create m_current_product_deposit_limit_kyc table -->
<changeSet id="0259_create_current_product_deposit_limit_kyc_table" author="system">
<createTable tableName="m_current_product_deposit_limit_kyc">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_product_id" type="bigint">
<constraints nullable="false" unique="true" uniqueConstraintName="uq_current_product_deposit_limit_kyc_product_id"/>
</column>
<column name="general_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="general_limit" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="minor_limit" type="bigint">
<constraints nullable="true"/>
</column>
<column name="small_saving_kyc_type" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="small_saving_limit" type="bigint">
<constraints nullable="true"/>
</column>
<column name="created_date" type="datetime">
<constraints nullable="false"/>
</column>
</createTable>
<addForeignKeyConstraint baseTableName="m_current_product_deposit_limit_kyc" baseColumnNames="current_product_id"
constraintName="fk_current_product_deposit_limit_kyc_product_id"
referencedTableName="m_current_product" referencedColumnNames="id"
onDelete="CASCADE"/>
</changeSet>
<!-- Add new UI fields to m_current_product -->
<changeSet id="0262_add_current_product_new_ui_fields" author="system">
<addColumn tableName="m_current_product">
<column name="balance_swap_option" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="msme" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="auto_debit_facility" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="avg_balance_calc_period" type="varchar(10)">
<constraints nullable="true"/>
</column>
<column name="valid_for_period" type="varchar(10)">
<constraints nullable="true"/>
</column>
<column name="od_account_closed_zero_balance_in_day_closing" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<!-- Insert CurrentProductAccountType code and values (separate from SavingsProductAccountType) -->
<changeSet id="0260_add_current_product_account_type_code" author="system">
<sql>
INSERT INTO m_code (code_name, is_system_defined)
SELECT 'CurrentProductAccountType', false
WHERE NOT EXISTS (SELECT 1 FROM m_code WHERE code_name = 'CurrentProductAccountType');
</sql>
<sql>
INSERT INTO m_code_value (code_id, code_value, order_position, is_active, is_mandatory)
SELECT c.id, v.code_value, v.order_position, true, false
FROM m_code c,
(VALUES
('Standard Account', 1),
('Basic Account', 2),
('Premium Current Account', 3)
) AS v(code_value, order_position)
WHERE c.code_name = 'CurrentProductAccountType'
AND NOT EXISTS (
SELECT 1 FROM m_code_value cv
WHERE cv.code_id = c.id AND cv.code_value = v.code_value
);
</sql>
</changeSet>
<!-- Insert CurrentProductCustomerSegment code and values (separate from SavingsProductCustomerSegment) -->
<changeSet id="0261_add_current_product_customer_segment_code" author="system">
<sql>
INSERT INTO m_code (code_name, is_system_defined)
SELECT 'CurrentProductCustomerSegment', false
WHERE NOT EXISTS (SELECT 1 FROM m_code WHERE code_name = 'CurrentProductCustomerSegment');
</sql>
<sql>
INSERT INTO m_code_value (code_id, code_value, order_position, is_active, is_mandatory)
SELECT c.id, v.code_value, v.order_position, true, false
FROM m_code c,
(VALUES
('Non Individual', 1)
) AS v(code_value, order_position)
WHERE c.code_name = 'CurrentProductCustomerSegment'
AND NOT EXISTS (
SELECT 1 FROM m_code_value cv
WHERE cv.code_id = c.id AND cv.code_value = v.code_value
);
</sql>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.1.xsd">
<!-- RecurringDepositProductAccountType code and values -->
<changeSet id="0262_add_rd_product_account_type_code" author="system">
<sql>
INSERT INTO m_code (code_name, is_system_defined)
SELECT 'RecurringDepositProductAccountType', false
WHERE NOT EXISTS (SELECT 1 FROM m_code WHERE code_name = 'RecurringDepositProductAccountType');
</sql>
<sql>
INSERT INTO m_code_value (code_id, code_value, order_position, is_active, is_mandatory)
SELECT c.id, v.code_value, v.order_position, true, false
FROM m_code c,
(VALUES
('Rd Account', 1)
) AS v(code_value, order_position)
WHERE c.code_name = 'RecurringDepositProductAccountType'
AND NOT EXISTS (
SELECT 1 FROM m_code_value cv
WHERE cv.code_id = c.id AND cv.code_value = v.code_value
);
</sql>
</changeSet>
<!-- RecurringDepositProductCustomerSegment code and values -->
<changeSet id="0263_add_rd_product_customer_segment_code" author="system">
<sql>
INSERT INTO m_code (code_name, is_system_defined)
SELECT 'RecurringDepositProductCustomerSegment', false
WHERE NOT EXISTS (SELECT 1 FROM m_code WHERE code_name = 'RecurringDepositProductCustomerSegment');
</sql>
<sql>
INSERT INTO m_code_value (code_id, code_value, order_position, is_active, is_mandatory)
SELECT c.id, v.code_value, v.order_position, true, false
FROM m_code c,
(VALUES
('Individual', 1),
('Non-Individual', 2)
) AS v(code_value, order_position)
WHERE c.code_name = 'RecurringDepositProductCustomerSegment'
AND NOT EXISTS (
SELECT 1 FROM m_code_value cv
WHERE cv.code_id = c.id AND cv.code_value = v.code_value
);
</sql>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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
-->
<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.1.xsd">
<!--
m_rd_interest_rate_effective — one row per rate-version per product.
m_rd_interest_rate_slab_history — slabs for every version (immutable once written).
Period Type Enum: 1 = Days, 2 = Months, 3 = Years
-->
<changeSet id="0257a_create_rd_interest_rate_effective" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="m_rd_interest_rate_effective"/></not>
</preConditions>
<createTable tableName="m_rd_interest_rate_effective">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="product_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="version_label" type="VARCHAR(100)">
<constraints nullable="false"/>
</column>
<column name="effective_from_date" type="DATE">
<constraints nullable="false"/>
</column>
<column name="effective_to_date" type="DATE"/>
<column name="is_active" type="BOOLEAN" defaultValueBoolean="true">
<constraints nullable="false"/>
</column>
<column name="remarks" type="VARCHAR(500)"/>
<column name="created_by_id" type="BIGINT"/>
<column name="created_date" type="DATE"/>
</createTable>
<addForeignKeyConstraint
baseTableName="m_rd_interest_rate_effective"
baseColumnNames="product_id"
referencedTableName="m_savings_product"
referencedColumnNames="id"
constraintName="fk_rd_rate_effective_product"/>
</changeSet>
<changeSet id="0257b_create_rd_interest_rate_slab_history" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="m_rd_interest_rate_slab_history"/></not>
</preConditions>
<createTable tableName="m_rd_interest_rate_slab_history">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="effective_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="sr_no" type="INT">
<constraints nullable="false"/>
</column>
<column name="description" type="VARCHAR(200)"/>
<column name="period_type_enum" type="INT" defaultValueNumeric="1">
<constraints nullable="false"/>
</column>
<column name="from_period" type="INT">
<constraints nullable="false"/>
</column>
<column name="to_period" type="INT"/>
<column name="annual_interest_rate" type="DECIMAL(19,6)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="DATE"/>
</createTable>
<addForeignKeyConstraint
baseTableName="m_rd_interest_rate_slab_history"
baseColumnNames="effective_id"
referencedTableName="m_rd_interest_rate_effective"
referencedColumnNames="id"
constraintName="fk_rd_rate_slab_effective"/>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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
-->
<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.1.xsd">
<!--
Seed RD Interest Rate Data (runs only if both tables are empty)
Sr Particular Rate
1 0 Days to 29 Days 3.00%
2 30 Days to 45 Days 3.00%
3 46 Days to 90 Days 3.00%
4 91 Days to 180 Days 4.50%
5 181 Days to below 1 Year 5.50%
6 1 Year to Below 2 Year 7.00%
7 444 Days 7.00%
8 400 Days 7.00%
9 500 Days 7.00%
10 2 Year to Below 3 Year 7.00%
11 3 Year to Below 5 Year 7.25%
12 5 Year &amp; Above 6.50%
-->
<changeSet id="0267_insert_rd_rate_version" author="fineract">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">SELECT COUNT(*) FROM m_rd_interest_rate_effective</sqlCheck>
</preConditions>
<sql>
INSERT INTO m_rd_interest_rate_effective
(product_id, version_label, effective_from_date, effective_to_date, is_active, remarks, created_by_id, created_date)
SELECT id, 'Initial Rate Version', '2025-01-01', NULL, TRUE,
'Standard interest rate card published for RD products', 1, CURRENT_DATE
FROM m_savings_product
WHERE deposit_type_enum = 300
ORDER BY id LIMIT 1;
</sql>
</changeSet>
<changeSet id="0268_insert_rd_rate_slabs" author="fineract">
<validCheckSum>9:e35a0696046940f370f7cfb55c20740b</validCheckSum>
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">SELECT COUNT(*) FROM m_rd_interest_rate_slab_history</sqlCheck>
</preConditions>
<sql>
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 1, '0 Days to 29 Days', 1, 0, 29, 3.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 2, '30 Days to 45 Days', 1, 30, 45, 3.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 3, '46 Days to 90 Days', 1, 46, 90, 3.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 4, '91 Days to 180 Days', 1, 91, 180, 4.500000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 5, '181 Days to below 1 Year', 1, 181, 364, 5.500000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 6, '1 Year to Below 2 Year', 1, 365, 729, 7.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 7, '444 Days', 1, 444, 444, 7.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 8, '400 Days', 1, 400, 400, 7.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 9, '500 Days', 1, 500, 500, 7.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 10, '2 Year to Below 3 Year', 1, 730, 1094, 7.000000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 11, '3 Year to Below 5 Year', 1, 1095, 1824, 7.250000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
INSERT INTO m_rd_interest_rate_slab_history (effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT e.id, 12, '5 Year &amp; Above', 1, 1825, NULL, 6.500000, CURRENT_DATE FROM m_rd_interest_rate_effective e WHERE e.version_label='Initial Rate Version' AND e.product_id=(SELECT id FROM m_savings_product WHERE deposit_type_enum=300 ORDER BY id LIMIT 1);
</sql>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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
-->
<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.1.xsd">
<!-- balance_frequency — may already exist from a prior manual migration -->
<changeSet id="0270a_add_balance_frequency" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><columnExists tableName="m_savings_product" columnName="balance_frequency"/></not>
</preConditions>
<addColumn tableName="m_savings_product">
<column name="balance_frequency" type="varchar(50)">
<constraints nullable="true"/>
</column>
</addColumn>
</changeSet>
<!-- account_closed_zero_balance_in_day_closing — may already exist -->
<changeSet id="0270b_add_account_closed_zero_balance" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><columnExists tableName="m_savings_product" columnName="account_closed_zero_balance_in_day_closing"/></not>
</preConditions>
<addColumn tableName="m_savings_product">
<column name="account_closed_zero_balance_in_day_closing" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<!-- 14 new RD-specific boolean flags -->
<changeSet id="0270c_add_rd_product_flags" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><columnExists tableName="m_savings_product" columnName="balance_swap_option"/></not>
</preConditions>
<addColumn tableName="m_savings_product">
<column name="balance_swap_option" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="msme" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="auto_debit_facility" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="loan_facility" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="premature_withdrawal_option" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="tenure_flexibility" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="lien_marked" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="maturity_instructions" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="credit_maturity_proceeds" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="penalty_grace_period_missed_installments" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="panel_request_applicable" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="no_penalty_nominee_heir_closure" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="deceased_settlement" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
<column name="allow_debit_txn_after_due_date" type="boolean" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.1.xsd">
<changeSet id="0271a_create_rd_base_interest_rate_effective" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="m_rd_base_interest_rate_effective"/></not>
</preConditions>
<createTable tableName="m_rd_base_interest_rate_effective">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="version_label" type="VARCHAR(100)">
<constraints nullable="false"/>
</column>
<column name="effective_from_date" type="DATE">
<constraints nullable="false"/>
</column>
<column name="effective_to_date" type="DATE"/>
<column name="is_active" type="BOOLEAN" defaultValueBoolean="true">
<constraints nullable="false"/>
</column>
<column name="remarks" type="VARCHAR(500)"/>
<column name="created_by_id" type="BIGINT"/>
<column name="created_date" type="DATE"/>
</createTable>
</changeSet>
<changeSet id="0271b_create_rd_base_interest_rate_slab_history" author="fineract">
<validCheckSum>ANY</validCheckSum>
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="m_rd_base_interest_rate_slab_history"/></not>
</preConditions>
<createTable tableName="m_rd_base_interest_rate_slab_history">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="effective_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="sr_no" type="INT">
<constraints nullable="false"/>
</column>
<column name="description" type="VARCHAR(200)"/>
<column name="period_type_enum" type="INT" defaultValueNumeric="1">
<constraints nullable="false"/>
</column>
<column name="from_period" type="INT">
<constraints nullable="false"/>
</column>
<column name="to_period" type="INT"/>
<column name="annual_interest_rate" type="DECIMAL(19,6)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="DATE"/>
</createTable>
<addForeignKeyConstraint
baseTableName="m_rd_base_interest_rate_slab_history"
baseColumnNames="effective_id"
referencedTableName="m_rd_base_interest_rate_effective"
referencedColumnNames="id"
constraintName="fk_rd_base_rate_slab_effective"/>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.1.xsd">
<changeSet id="0272_insert_rd_base_rate_version" author="fineract">
<validCheckSum>9:4cb4d062d4ee9464fe5a4e32023580c2</validCheckSum>
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">SELECT COUNT(*) FROM m_rd_base_interest_rate_effective</sqlCheck>
</preConditions>
<sql>
INSERT INTO m_rd_base_interest_rate_effective
(version_label, effective_from_date, effective_to_date, is_active, remarks, created_by_id, created_date)
VALUES
('CBS Base Rate Version', '2025-01-01', NULL, TRUE, 'Central RD base chart', 1, CURRENT_DATE);
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 1, '0 Days to 29 Days', 1, 0, 29, 3.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 2, '30 Days to 45 Days', 1, 30, 45, 3.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 3, '46 Days to 90 Days', 1, 46, 90, 3.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 4, '91 Days to 180 Days', 1, 91, 180, 4.500000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 5, '181 Days to below 1 Year', 1, 181, 364, 5.500000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 6, '1 Year to Below 2 Year', 1, 365, 729, 7.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 7, '444 Days', 1, 444, 444, 7.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 8, '400 Days', 1, 400, 400, 7.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 9, '500 Days', 1, 500, 500, 7.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 10, '2 Year to Below 3 Year', 1, 730, 1094, 7.000000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 11, '3 Year to Below 5 Year', 1, 1095, 1824, 7.250000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
INSERT INTO m_rd_base_interest_rate_slab_history
(effective_id, sr_no, description, period_type_enum, from_period, to_period, annual_interest_rate, created_date)
SELECT id, 12, '5 Year &amp; Above', 1, 1825, NULL, 6.500000, CURRENT_DATE
FROM m_rd_base_interest_rate_effective WHERE version_label = 'CBS Base Rate Version';
</sql>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.1.xsd">
<changeSet author="fineract" id="0273-add-gl-account-id-to-current-product">
<addColumn tableName="m_current_product">
<column name="gl_account_id" type="BIGINT">
<constraints nullable="true"
foreignKeyName="fk_current_product_gl_account"
references="acc_gl_account(id)"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,393 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.3.xsd">
<!-- =========================================================
m_current_account — main current account table
(fully separate from m_savings_account)
========================================================= -->
<changeSet id="0276_create_current_account_tables" author="system">
<createTable tableName="m_current_account">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="account_no" type="varchar(20)">
<constraints nullable="false" unique="true" uniqueConstraintName="ca_unq_account_no"/>
</column>
<column name="external_id" type="varchar(100)">
<constraints nullable="true" unique="true" uniqueConstraintName="ca_unq_external_id"/>
</column>
<!-- Ownership -->
<column name="client_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_client" referencedTableName="m_client" referencedColumnNames="id"/>
</column>
<column name="group_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_group" referencedTableName="m_group" referencedColumnNames="id"/>
</column>
<column name="product_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_ca_product" referencedTableName="m_current_product" referencedColumnNames="id"/>
</column>
<column name="office_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_ca_office" referencedTableName="m_office" referencedColumnNames="id"/>
</column>
<column name="staff_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_staff" referencedTableName="m_staff" referencedColumnNames="id"/>
</column>
<!-- Status -->
<column name="status_enum" type="smallint" defaultValue="100">
<constraints nullable="false"/>
</column>
<!-- 100=Submitted, 200=Approved, 300=Active, 400=Withdrawn, 500=Rejected, 600=Closed -->
<column name="sub_status_enum" type="smallint" defaultValue="0">
<constraints nullable="false"/>
</column>
<!-- 0=None, 100=Inactive, 200=Dormant, 300=Escheat, 400=Block, 500=BlockDebit, 600=BlockCredit -->
<column name="account_type_enum" type="smallint" defaultValue="1">
<constraints nullable="false"/>
</column>
<!-- 1=Individual, 2=Group, 3=JLG -->
<!-- Lifecycle dates -->
<column name="submittedon_date" type="date"><constraints nullable="true"/></column>
<column name="submittedon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_submit_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<column name="approvedon_date" type="date"><constraints nullable="true"/></column>
<column name="approvedon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_approve_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<column name="activatedon_date" type="date"><constraints nullable="true"/></column>
<column name="activatedon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_activate_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<column name="rejectedon_date" type="date"><constraints nullable="true"/></column>
<column name="rejectedon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_reject_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<column name="withdrawnon_date" type="date"><constraints nullable="true"/></column>
<column name="withdrawnon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_withdraw_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<column name="closedon_date" type="date"><constraints nullable="true"/></column>
<column name="closedon_userid" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_close_user" referencedTableName="m_appuser" referencedColumnNames="id"/>
</column>
<!-- Currency (copied from product at account creation) -->
<column name="currency_code" type="varchar(3)"><constraints nullable="false"/></column>
<column name="currency_digits" type="smallint"><constraints nullable="false"/></column>
<column name="currency_multiplesof" type="smallint"><constraints nullable="true"/></column>
<!-- Interest settings (copied from product) -->
<column name="nominal_annual_interest_rate" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="interest_compounding_period_enum" type="smallint"><constraints nullable="false"/></column>
<column name="interest_posting_period_enum" type="smallint"><constraints nullable="false"/></column>
<column name="interest_calculation_type_enum" type="smallint"><constraints nullable="false"/></column>
<column name="interest_calculation_days_in_year_type_enum" type="smallint"><constraints nullable="false"/></column>
<column name="min_balance_for_interest_calculation" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="start_interest_calculation_date" type="date"><constraints nullable="true"/></column>
<column name="accrued_till_date" type="date"><constraints nullable="true"/></column>
<column name="last_interest_calculation_date" type="date"><constraints nullable="true"/></column>
<column name="last_closed_business_date" type="date"><constraints nullable="true"/></column>
<!-- Tax -->
<column name="withhold_tax" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="tax_group_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_ca_tax_group" referencedTableName="m_tax_group" referencedColumnNames="id"/>
</column>
<!-- Balance rules (copied from product) -->
<column name="min_required_opening_balance" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="lockin_period_frequency" type="smallint"><constraints nullable="true"/></column>
<column name="lockin_period_frequency_enum" type="smallint"><constraints nullable="true"/></column>
<column name="lockedin_until_date_derived" type="date"><constraints nullable="true"/></column>
<column name="enforce_min_required_balance" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="min_required_balance" type="decimal(19,6)"><constraints nullable="true"/></column>
<!-- Overdraft (copied from product) -->
<column name="allow_overdraft" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="overdraft_limit" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="nominal_annual_interest_rate_overdraft" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="min_overdraft_for_interest_calculation" type="decimal(19,6)"><constraints nullable="true"/></column>
<!-- Lien -->
<column name="is_lien_allowed" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="max_allowed_lien_limit" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="on_hold_funds_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<!-- Running balance summary -->
<column name="account_balance_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_deposits_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_withdrawals_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_interest_earned_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_interest_posted_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_overdraft_interest_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_withhold_tax_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="total_savings_amount_on_hold" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="withdrawal_fee_for_transfer" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<!-- Block reason -->
<column name="reason_for_block" type="varchar(500)"><constraints nullable="true"/></column>
<!-- Current-account-specific fields -->
<column name="msme" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="auto_debit_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="balance_swap_option" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="establishment_date" type="date"><constraints nullable="true"/></column>
<column name="start_operation_date" type="date"><constraints nullable="true"/></column>
<column name="is_non_individual_client" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="signatory_rights" type="varchar(100)"><constraints nullable="true"/></column>
<!-- CBS account type / segment -->
<column name="cbs_account_type" type="varchar(100)"><constraints nullable="true"/></column>
<column name="customer_segment" type="varchar(100)"><constraints nullable="true"/></column>
<column name="account_status" type="varchar(50)"><constraints nullable="true"/></column>
<column name="mode_of_operation" type="varchar(50)"><constraints nullable="true"/></column>
<column name="special_category" type="varchar(100)"><constraints nullable="true"/></column>
<!-- Introducer -->
<column name="introducer_client_id" type="bigint"><constraints nullable="true"/></column>
<column name="introducer_name" type="varchar(200)"><constraints nullable="true"/></column>
<column name="introducer_cif_number" type="varchar(50)"><constraints nullable="true"/></column>
<!-- Nominee (JSON) -->
<column name="nominee_data" type="text"><constraints nullable="true"/></column>
<!-- Interest calculation settings from product -->
<column name="interest_calculate_selector" type="smallint"><constraints nullable="true"/></column>
<column name="average_period" type="varchar(20)"><constraints nullable="true"/></column>
<column name="auto_post" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="frequency_fix_day" type="smallint"><constraints nullable="true"/></column>
<column name="enable_lockin_period" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="balance_frequency" type="varchar(50)"><constraints nullable="true"/></column>
<column name="avg_balance_calc_period" type="varchar(10)"><constraints nullable="true"/></column>
<!-- Audit -->
<column name="created_by" type="bigint"><constraints nullable="true"/></column>
<column name="created_date" type="datetime"><constraints nullable="true"/></column>
<column name="last_modified_by" type="bigint"><constraints nullable="true"/></column>
<column name="last_modified_date" type="datetime"><constraints nullable="true"/></column>
</createTable>
<!-- =========================================================
m_current_account_transaction
========================================================= -->
<createTable tableName="m_current_account_transaction">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cat_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="office_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cat_office" referencedTableName="m_office" referencedColumnNames="id"/>
</column>
<column name="payment_detail_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_cat_payment" referencedTableName="m_payment_detail" referencedColumnNames="id"/>
</column>
<!-- Type: 1=Deposit, 2=Withdrawal, 3=Interest, 4=Charge, 5=ChargeWaiver, 6=Transfer, 7=Reversal -->
<column name="transaction_type_enum" type="smallint"><constraints nullable="false"/></column>
<column name="transaction_date" type="date"><constraints nullable="false"/></column>
<column name="amount" type="decimal(19,6)"><constraints nullable="false"/></column>
<column name="ref_no" type="varchar(100)"><constraints nullable="true"/></column>
<column name="remarks" type="varchar(500)"><constraints nullable="true"/></column>
<!-- State -->
<column name="is_reversed" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="is_reversal" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="original_transaction_id" type="bigint"><constraints nullable="true"/></column>
<column name="is_manual" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<!-- Balance -->
<column name="running_balance_derived" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="cumulative_balance_derived" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="balance_end_date_derived" type="date"><constraints nullable="true"/></column>
<column name="balance_number_of_days_derived" type="integer"><constraints nullable="true"/></column>
<column name="overdraft_amount_derived" type="decimal(19,6)"><constraints nullable="true"/></column>
<!-- Lien / Hold -->
<column name="is_lien_transaction" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="release_id_of_hold_amount_transaction" type="bigint"><constraints nullable="true"/></column>
<column name="reason_for_block" type="varchar(200)"><constraints nullable="true"/></column>
<column name="submitted_on_date" type="date"><constraints nullable="true"/></column>
<column name="created_date" type="datetime"><constraints nullable="true"/></column>
<column name="created_by" type="bigint"><constraints nullable="true"/></column>
</createTable>
<!-- =========================================================
m_current_account_charge
========================================================= -->
<createTable tableName="m_current_account_charge">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cac_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="charge_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cac_charge" referencedTableName="m_charge" referencedColumnNames="id"/>
</column>
<column name="charge_time_enum" type="smallint"><constraints nullable="false"/></column>
<column name="charge_due_date" type="date"><constraints nullable="true"/></column>
<column name="fee_on_month" type="smallint"><constraints nullable="true"/></column>
<column name="fee_on_day" type="smallint"><constraints nullable="true"/></column>
<column name="fee_interval" type="smallint"><constraints nullable="true"/></column>
<column name="charge_calculation_enum" type="smallint"><constraints nullable="false"/></column>
<column name="calculation_percentage" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="calculation_on_amount" type="decimal(19,6)"><constraints nullable="true"/></column>
<column name="amount" type="decimal(19,6)"><constraints nullable="false"/></column>
<column name="amount_paid_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="amount_waived_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="amount_writtenoff_derived" type="decimal(19,6)" defaultValue="0"><constraints nullable="false"/></column>
<column name="amount_outstanding_derived" type="decimal(19,6)"><constraints nullable="false"/></column>
<column name="is_paid_derived" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="waived" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="is_penalty" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="is_active" type="boolean" defaultValueBoolean="true"><constraints nullable="false"/></column>
<column name="inactivated_on_date" type="date"><constraints nullable="true"/></column>
<column name="free_withdrawal_count" type="integer"><constraints nullable="true"/></column>
<column name="charge_reset_date" type="date"><constraints nullable="true"/></column>
</createTable>
<!-- =========================================================
m_current_account_facility_config
ATM / NEFT / RTGS / Cheque Book etc.
========================================================= -->
<createTable tableName="m_current_account_facility_config">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" unique="true" uniqueConstraintName="ca_fac_unq_account"
foreignKeyName="fk_cafac_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="atm_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="atm_withdrawal_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="upi_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="pos_transactions_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="cheque_book" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="imps_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="sms_alerts" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="bbps_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="insurance_cover" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="bepg_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="neft_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="rtgs_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="inter_bank_total_cap_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="withdrawal_facility" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="deposit_facility_kyc" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="virtual_debit_card" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="internet_banking" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
<column name="mobile_banking" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
</createTable>
<!-- =========================================================
m_current_account_joint_holder
Joint account holders
========================================================= -->
<createTable tableName="m_current_account_joint_holder">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cajh_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="client_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_cajh_client" referencedTableName="m_client" referencedColumnNames="id"/>
</column>
<column name="cif_number" type="varchar(50)"><constraints nullable="true"/></column>
<column name="display_name" type="varchar(200)"><constraints nullable="true"/></column>
<column name="share_percentage" type="decimal(5,2)"><constraints nullable="true"/></column>
<column name="signing_authority" type="varchar(100)"><constraints nullable="true"/></column>
<column name="role" type="varchar(100)"><constraints nullable="true"/></column>
<column name="is_primary" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
</createTable>
<!-- =========================================================
m_current_account_partner
Partners for non-individual (business) current accounts
========================================================= -->
<createTable tableName="m_current_account_partner">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_cap_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="client_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_cap_client" referencedTableName="m_client" referencedColumnNames="id"/>
</column>
<column name="client_cif" type="varchar(50)"><constraints nullable="true"/></column>
<column name="client_name" type="varchar(200)"><constraints nullable="true"/></column>
<column name="share_percentage" type="decimal(5,2)"><constraints nullable="true"/></column>
<column name="is_mandatory" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
</createTable>
<!-- =========================================================
m_current_account_officer_history
Officer assignment history
========================================================= -->
<createTable tableName="m_current_account_officer_history">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_caoh_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="staff_id" type="bigint">
<constraints nullable="true" foreignKeyName="fk_caoh_staff" referencedTableName="m_staff" referencedColumnNames="id"/>
</column>
<column name="start_date" type="date"><constraints nullable="false"/></column>
<column name="end_date" type="date"><constraints nullable="true"/></column>
<column name="created_by_id" type="bigint"><constraints nullable="true"/></column>
</createTable>
<!-- =========================================================
m_current_account_on_hold_transaction
On-hold / lien funds
========================================================= -->
<createTable tableName="m_current_account_on_hold_transaction">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="current_account_id" type="bigint">
<constraints nullable="false" foreignKeyName="fk_caoht_account" referencedTableName="m_current_account" referencedColumnNames="id"/>
</column>
<column name="amount" type="decimal(19,6)"><constraints nullable="false"/></column>
<!-- 1=Hold, 2=Release -->
<column name="transaction_type_enum" type="smallint"><constraints nullable="false"/></column>
<column name="transaction_date" type="date"><constraints nullable="false"/></column>
<column name="is_reversed" type="boolean" defaultValueBoolean="false"><constraints nullable="false"/></column>
</createTable>
<!-- Indexes for fast lookup -->
<createIndex indexName="idx_ca_client_id" tableName="m_current_account">
<column name="client_id"/>
</createIndex>
<createIndex indexName="idx_ca_product_id" tableName="m_current_account">
<column name="product_id"/>
</createIndex>
<createIndex indexName="idx_ca_status" tableName="m_current_account">
<column name="status_enum"/>
</createIndex>
<createIndex indexName="idx_cat_account_id" tableName="m_current_account_transaction">
<column name="current_account_id"/>
</createIndex>
<createIndex indexName="idx_cat_date" tableName="m_current_account_transaction">
<column name="transaction_date"/>
</createIndex>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.3.xsd">
<!-- Rename audit columns in m_current_account to match AbstractAuditableCustom mappings -->
<changeSet id="0277_fix_current_account_audit_columns" author="system">
<renameColumn tableName="m_current_account" oldColumnName="created_by" newColumnName="createdby_id" columnDataType="bigint"/>
<renameColumn tableName="m_current_account" oldColumnName="last_modified_by" newColumnName="lastmodifiedby_id" columnDataType="bigint"/>
<renameColumn tableName="m_current_account" oldColumnName="last_modified_date" newColumnName="lastmodified_date" columnDataType="datetime"/>
</changeSet>
</databaseChangeLog>
@@ -151,6 +151,15 @@
<class>org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMapping</class>
<class>org.apache.fineract.portfolio.self.registration.domain.SelfServiceRegistration</class>
<!-- Current Account Entities -->
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccount</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountTransaction</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountCharge</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountFacilityConfig</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountJointHolder</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountPartner</class>
<class>org.apache.fineract.portfolio.currentaccount.domain.CurrentAccountOfficerHistory</class>
<!-- Charge Module Entities -->
<class>org.apache.fineract.portfolio.charge.domain.Charge</class>
@@ -260,6 +269,11 @@
<class>org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsProduct</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsProductDepositLimitKyc</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsProductFacilityConfig</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsProductFacilityLimit</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsAccountFacilityConfig</class>
<class>org.apache.fineract.portfolio.savings.domain.SavingsAccountJointHolder</class>
<!-- Progressive Loan Module Entities -->
<class>org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeBalance</class>
@@ -4667,6 +4667,7 @@ CREATE TABLE IF NOT EXISTS `m_savings_product` (
`days_to_inactive` INT DEFAULT NULL,
`days_to_dormancy` INT DEFAULT NULL,
`days_to_escheat` INT DEFAULT NULL,
`other_gl_mappings` LONGTEXT DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sp_unq_name` (`name`),
UNIQUE KEY `sp_unq_short_name` (`short_name`),
@@ -4918,6 +4918,7 @@ CREATE TABLE IF NOT EXISTS `m_savings_product` (
`days_to_inactive` INT DEFAULT NULL,
`days_to_dormancy` INT DEFAULT NULL,
`days_to_escheat` INT DEFAULT NULL,
`other_gl_mappings` LONGTEXT DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sp_unq_name` (`name`),
UNIQUE KEY `sp_unq_short_name` (`short_name`),
@@ -4927,8 +4928,8 @@ CREATE TABLE IF NOT EXISTS `m_savings_product` (
-- Dumping data for table mifostenant-reference.m_savings_product: ~1 rows (approximately)
/*!40000 ALTER TABLE `m_savings_product` DISABLE KEYS */;
INSERT INTO `m_savings_product` (`id`, `name`, `short_name`, `description`, `deposit_type_enum`, `currency_code`, `currency_digits`, `currency_multiplesof`, `nominal_annual_interest_rate`, `interest_compounding_period_enum`, `interest_posting_period_enum`, `interest_calculation_type_enum`, `interest_calculation_days_in_year_type_enum`, `min_required_opening_balance`, `lockin_period_frequency`, `lockin_period_frequency_enum`, `accounting_type`, `withdrawal_fee_amount`, `withdrawal_fee_type_enum`, `withdrawal_fee_for_transfer`, `allow_overdraft`, `overdraft_limit`, `nominal_annual_interest_rate_overdraft`, `min_overdraft_for_interest_calculation`, `min_required_balance`, `enforce_min_required_balance`, `min_balance_for_interest_calculation`, `withhold_tax`, `tax_group_id`, `is_dormancy_tracking_active`, `days_to_inactive`, `days_to_dormancy`, `days_to_escheat`) VALUES
(1, 'Voluntary savings', 'VS', 'Save money', 100, 'USD', 2, 0, 9.500000, 1, 4, 1, 365, 1000.000000, 1.000000, 1, 2, NULL, NULL, 0, 0, NULL, 0.000000, 0.000000, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `m_savings_product` (`id`, `name`, `short_name`, `description`, `deposit_type_enum`, `currency_code`, `currency_digits`, `currency_multiplesof`, `nominal_annual_interest_rate`, `interest_compounding_period_enum`, `interest_posting_period_enum`, `interest_calculation_type_enum`, `interest_calculation_days_in_year_type_enum`, `min_required_opening_balance`, `lockin_period_frequency`, `lockin_period_frequency_enum`, `accounting_type`, `withdrawal_fee_amount`, `withdrawal_fee_type_enum`, `withdrawal_fee_for_transfer`, `allow_overdraft`, `overdraft_limit`, `nominal_annual_interest_rate_overdraft`, `min_overdraft_for_interest_calculation`, `min_required_balance`, `enforce_min_required_balance`, `min_balance_for_interest_calculation`, `withhold_tax`, `tax_group_id`, `is_dormancy_tracking_active`, `days_to_inactive`, `days_to_dormancy`, `days_to_escheat`, `other_gl_mappings`) VALUES
(1, 'Voluntary savings', 'VS', 'Save money', 100, 'USD', 2, 0, 9.500000, 1, 4, 1, 365, 1000.000000, 1.000000, 1, 2, NULL, NULL, 0, 0, NULL, 0.000000, 0.000000, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
/*!40000 ALTER TABLE `m_savings_product` ENABLE KEYS */;