- Hide Family Members tab/section for non-individual entities in client view, create flow, and preview - Hide Financial & Classification section for non-individual entities in personal data and preview - Fix legal form column in clients list — fetch legalForm from client API for correct display - Add person/business icon before client name in list rows - Remove unsupportedNpd filter — send authorizedSignatory, additionalInfo, dateOfRegistration to API - Add registration number format hint (mat-hint) based on constitution type - Add spacing between verification row and constitution type dropdowns - Reduce table cell padding and prevent action buttons from being clipped - Add missing MPL-2.0 license headers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
150 lines
7.4 KiB
SQL
150 lines
7.4 KiB
SQL
-- ============================================================
|
|
-- CBS Nexora — Client Schema Extensions
|
|
-- Fineract DB Migration Script
|
|
-- Run this AFTER backing up your database
|
|
-- ============================================================
|
|
|
|
-- ─── 1. m_client — New columns ───
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS nationality VARCHAR(20) DEFAULT 'INDIAN';
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS annual_turnover DECIMAL(18,2);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS credit_limit DECIMAL(18,2);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS is_minor TINYINT(1) DEFAULT 0;
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS age_years INT;
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS age_months INT;
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS age_days INT;
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS guardian_name VARCHAR(200);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS guardian_relation VARCHAR(50);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS guardian_mobile VARCHAR(15);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS guardian_id_number VARCHAR(50);
|
|
ALTER TABLE m_client ADD COLUMN IF NOT EXISTS guardian_address TEXT;
|
|
|
|
-- ─── 2. m_client_non_person — New columns ───
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS date_of_registration DATE;
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS enterprise_pan VARCHAR(10);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS cin_number VARCHAR(21);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS authorized_signatory VARCHAR(200);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS additional_info VARCHAR(500);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS credit_limit DECIMAL(18,2);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS is_msme TINYINT(1) DEFAULT 0;
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS udyam_number VARCHAR(19);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS enterprise_name VARCHAR(300);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS business_sector VARCHAR(50);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS msme_turnover DECIMAL(18,2);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS msme_investment DECIMAL(18,2);
|
|
ALTER TABLE m_client_non_person ADD COLUMN IF NOT EXISTS msme_type VARCHAR(20);
|
|
|
|
-- ─── 3. m_client_kyc — New columns ───
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS has_pan TINYINT(1) DEFAULT 1;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS pan_aadhaar_link_status VARCHAR(20);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS kyc_document_name VARCHAR(100);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS kyc_document_number VARCHAR(100);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS kyc_doc_issue_date DATE;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS kyc_doc_expiry_date DATE;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS kyc_expiry_date DATE;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS aml_check_status VARCHAR(20) DEFAULT 'CLEAR';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS banned_entity_match VARCHAR(20) DEFAULT 'NO';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS willful_defaulter VARCHAR(5) DEFAULT 'NO';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS ecgc_sal_flag VARCHAR(5) DEFAULT 'NO';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS dormant_flag VARCHAR(20) DEFAULT 'ACTIVE';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS account_status VARCHAR(20) DEFAULT 'ACTIVE';
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS freeze_reason VARCHAR(50);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS freeze_authority VARCHAR(50);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS form60_type VARCHAR(10);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS form60_date DATE;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS form15_applicable TINYINT(1) DEFAULT 0;
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS form15_type VARCHAR(5);
|
|
ALTER TABLE m_client_kyc ADD COLUMN IF NOT EXISTS form15_fy VARCHAR(10);
|
|
|
|
-- ─── 4. m_client_entity_kyc — New table ───
|
|
CREATE TABLE IF NOT EXISTS m_client_entity_kyc (
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
client_id BIGINT NOT NULL,
|
|
constitution_type VARCHAR(50),
|
|
-- MSME
|
|
is_msme TINYINT(1) DEFAULT 0,
|
|
udyam_number VARCHAR(19),
|
|
enterprise_name VARCHAR(300),
|
|
business_sector VARCHAR(50),
|
|
msme_turnover DECIMAL(18,2),
|
|
msme_investment DECIMAL(18,2),
|
|
msme_type VARCHAR(20),
|
|
-- Entity KYC Document
|
|
entity_kyc_doc_type VARCHAR(100),
|
|
entity_kyc_doc_number VARCHAR(100),
|
|
entity_kyc_doc_issue_date DATE,
|
|
entity_kyc_doc_expiry_date DATE,
|
|
-- Authorized Signatory
|
|
signatory_name VARCHAR(200),
|
|
signatory_designation VARCHAR(100),
|
|
signatory_pan VARCHAR(10),
|
|
signatory_aadhaar_masked VARCHAR(12),
|
|
signatory_kyc_doc_type VARCHAR(100),
|
|
signatory_kyc_doc_number VARCHAR(100),
|
|
-- Authorization Document
|
|
authorization_doc_type VARCHAR(100),
|
|
authorization_doc_number VARCHAR(100),
|
|
authorization_date DATE,
|
|
-- Risk
|
|
entity_risk_category INT DEFAULT 1,
|
|
entity_remarks TEXT,
|
|
-- Audit
|
|
created_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
last_modified_date DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (client_id) REFERENCES m_client(id) ON DELETE CASCADE,
|
|
UNIQUE KEY uk_client_entity_kyc (client_id)
|
|
);
|
|
|
|
-- ─── 5. m_client_address_india — New table ───
|
|
CREATE TABLE IF NOT EXISTS m_client_address_india (
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
client_id BIGINT NOT NULL,
|
|
address_type ENUM('PERMANENT','CURRENT','OFFICE','CORRESPONDENCE') NOT NULL,
|
|
address_line_1 VARCHAR(500),
|
|
address_line_2 VARCHAR(500),
|
|
pin_code VARCHAR(6),
|
|
locality VARCHAR(200),
|
|
city VARCHAR(200),
|
|
district VARCHAR(200),
|
|
state VARCHAR(200),
|
|
country VARCHAR(100) DEFAULT 'India',
|
|
landmark VARCHAR(300),
|
|
-- Permanent-specific
|
|
proof_type VARCHAR(100),
|
|
proof_doc_number VARCHAR(100),
|
|
-- Current-specific
|
|
residence_type VARCHAR(50),
|
|
years_at_address INT,
|
|
same_as_permanent TINYINT(1) DEFAULT 0,
|
|
-- Office-specific
|
|
org_name VARCHAR(300),
|
|
department VARCHAR(200),
|
|
office_phone VARCHAR(20),
|
|
employment_type VARCHAR(100),
|
|
employee_id VARCHAR(50),
|
|
years_with_org INT,
|
|
-- Correspondence-specific
|
|
comm_mode VARCHAR(50),
|
|
contact_number VARCHAR(20),
|
|
-- Audit
|
|
created_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
last_modified_date DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (client_id) REFERENCES m_client(id) ON DELETE CASCADE,
|
|
UNIQUE KEY uk_client_address_type (client_id, address_type)
|
|
);
|
|
|
|
-- ─── 6. Constitution Type code values (if not using API-driven options) ───
|
|
-- Find Gender code and add missing values
|
|
SET @gender_code_id = (SELECT id FROM m_code WHERE code_name = 'Gender' LIMIT 1);
|
|
INSERT IGNORE INTO m_code_value (code_id, code_value, order_position, is_active)
|
|
VALUES
|
|
(@gender_code_id, 'Transgender', 3, 1),
|
|
(@gender_code_id, 'Other', 4, 1);
|
|
|
|
-- ─── 7. Indexes for performance ───
|
|
CREATE INDEX IF NOT EXISTS idx_client_entity_kyc_client ON m_client_entity_kyc(client_id);
|
|
CREATE INDEX IF NOT EXISTS idx_client_address_india_client ON m_client_address_india(client_id);
|
|
CREATE INDEX IF NOT EXISTS idx_client_address_india_type ON m_client_address_india(client_id, address_type);
|
|
CREATE INDEX IF NOT EXISTS idx_client_kyc_expiry ON m_client_kyc(kyc_expiry_date);
|
|
CREATE INDEX IF NOT EXISTS idx_client_kyc_aml ON m_client_kyc(aml_check_status);
|
|
CREATE INDEX IF NOT EXISTS idx_client_minor ON m_client(is_minor);
|