/** * Copyright since 2025 Mifos Initiative * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** A rule computed automatically from data already entered in the wizard (age, LTV). */ export type RbiRuleCheckType = 'AUTO' | 'MANUAL'; /** HARD rules are legal prohibitions with no override path; SOFT rules require a written * override reason to proceed past a failure. */ export type RbiRuleBlockLevel = 'HARD' | 'SOFT'; export interface RbiComplianceRule { code: string; title: string; rbiReference: string; statement: string; checkType: RbiRuleCheckType; blockLevel: RbiRuleBlockLevel; } /** * RBI-circular-based loan origination checklist. Age is the only rule computed from data this * app already tracks (client date of birth) -- area of operation, PSL classification, * director/related-party status, and wilful-defaulter/credit-bureau status have no backing data * anywhere in this system yet, so those are officer manual attestations rather than automated * checks. See CBS_UPDATE plan notes for the underlying RBI source for each rule. */ export const RBI_COMPLIANCE_RULES: RbiComplianceRule[] = [ { code: 'AGE_AT_MATURITY', title: 'Age at Loan Maturity', rbiReference: 'Bank credit policy (standard practice, formalised for pension loans under RBI Master Circular on Pension Loans)', statement: "Borrower's age at loan maturity must not exceed the bank's policy threshold.", checkType: 'AUTO', blockLevel: 'SOFT' }, { code: 'AREA_OF_OPERATION', title: 'Area of Operation / Local Membership', rbiReference: "RBI Licensing Framework for UCBs -- a bank's area of operation is confined to its registered district(s)", statement: "I confirm the borrower's registered/communication address falls within this bank's declared area of operation.", checkType: 'MANUAL', blockLevel: 'SOFT' }, { code: 'PSL_CLASSIFICATION', title: 'Priority Sector Lending (PSL) Classification', rbiReference: 'RBI Master Directions -- Priority Sector Lending (Targets and Classification), 2025', statement: "Select this loan's PSL category, if any. Portfolio-level RBI targets: Agriculture 18% of ANBC (10% sub-target for small/marginal farmers within it), Weaker Sections 12%, and a UCB-specific Small Value Loan target of 50% of aggregate loans by 31 Mar 2026 (40% interim by 31 Mar 2025).", checkType: 'MANUAL', blockLevel: 'SOFT' }, { code: 'DIRECTOR_RELATED_PARTY', title: 'Lending to Directors / Related Parties', rbiReference: 'Section 20, Banking Regulation Act 1949 + RBI (UCBs -- Lending to Related Parties) Directions', statement: 'I confirm the borrower and any guarantor are NOT a director, senior officer, or relative thereof of this bank -- or, if they are, that this loan falls within a board-approved permitted exception.', checkType: 'MANUAL', blockLevel: 'HARD' }, { code: 'WILFUL_DEFAULTER', title: 'Wilful Defaulter / Credit Information Check', rbiReference: 'RBI Master Direction on Treatment of Wilful Defaulters and Large Defaulters', statement: 'I confirm a credit bureau (CIBIL) check has been run and the applicant is NOT listed as a wilful defaulter.', checkType: 'MANUAL', blockLevel: 'HARD' }, { code: 'EXPOSURE_NORMS', title: 'Single / Group Borrower Exposure Limit', rbiReference: 'RBI Master Circular -- Exposure Norms and Statutory/Other Restrictions for UCBs', statement: "This borrower's total exposure (existing + this loan) must not exceed 15% of the bank's Tier-I capital (25% for a borrower group).", checkType: 'AUTO', blockLevel: 'SOFT' }, { code: 'LTV_MARGIN', title: 'Loan-to-Value / Margin Requirement', rbiReference: 'RBI LTV norms -- Gold Loans (75-85% tiered by loan size) and Housing Loans (80-90% tiered by property value)', statement: 'For a gold or housing loan, the loan amount must stay within the RBI-prescribed LTV cap for the collateral value entered.', checkType: 'AUTO', blockLevel: 'SOFT' }, { code: 'FAIR_PRACTICES_CODE', title: 'Fair Practices Code / Key Facts Statement', rbiReference: 'RBI Fair Practices Code for Lenders + Key Facts Statement (KFS) circular, 2024', statement: 'I confirm the borrower has been, or will be, given the Key Facts Statement disclosing interest rate, fees and charges before sanction.', checkType: 'MANUAL', blockLevel: 'SOFT' }, { code: 'PREPAYMENT_CHARGES', title: 'No Prepayment / Foreclosure Charges (Floating Rate)', rbiReference: 'RBI (Pre-payment Charges on Loans) Directions, 2025 -- applies to loans sanctioned/renewed on or after 1 Jan 2026', statement: 'I confirm that if this is a floating-rate loan to an individual or MSE, no prepayment or foreclosure charge is included in its terms for full or part prepayment, regardless of source of funds or co-obligants -- no exception is permitted.', checkType: 'MANUAL', blockLevel: 'HARD' }, { code: 'OWN_SHARES_SECURITY', title: "Loan Against the Bank's Own Shares", rbiReference: 'Section 20(1), Banking Regulation Act 1949', statement: "I confirm this loan's collateral does NOT include shares of this bank itself, or of its subsidiary -- absolutely prohibited, no exception is permitted.", checkType: 'MANUAL', blockLevel: 'HARD' }, { code: 'INSURANCE_BUNDLING', title: 'No Compulsory Insurance / Third-Party Product Bundling', rbiReference: 'RBI (Commercial Banks -- Responsible Business Conduct) Second Amendment Directions, 2026', statement: 'I confirm the borrower has not been required to buy insurance or any third-party financial product from a specific tied provider as a condition for this loan -- any credit-linked cover the bank requires must let the borrower choose their own provider.', checkType: 'MANUAL', blockLevel: 'SOFT' } ]; /** Reuses the same PSL category taxonomy already shown in the bank's PSL achievement dashboard * (see psl-report-dialog.component.ts) so the two screens speak the same vocabulary. */ export const PSL_CATEGORY_OPTIONS: { code: string; name: string }[] = [ { code: 'NOT_APPLICABLE', name: 'Not Applicable' }, { code: 'AGRI', name: 'Agriculture' }, { code: 'AGRI-SMF', name: 'Agriculture -- Small & Marginal Farmers' }, { code: 'MSME-MICRO', name: 'MSME -- Micro Enterprises' }, { code: 'MSME-SMALL', name: 'MSME -- Small Enterprises' }, { code: 'MSME-MED', name: 'MSME -- Medium Enterprises' }, { code: 'EDU', name: 'Education' }, { code: 'HOUSE', name: 'Housing' }, { code: 'SOC-INFRA', name: 'Social Infrastructure' }, { code: 'REN-ENERGY', name: 'Renewable Energy' }, { code: 'EXPORT', name: 'Export Credit' }, { code: 'WEAKER', name: 'Weaker Sections' } ]; /** Collateral type drives which RBI LTV/margin cap table applies. */ export const COLLATERAL_TYPE_OPTIONS: { code: string; name: string }[] = [ { code: 'NONE', name: 'Not Applicable / Unsecured' }, { code: 'GOLD', name: 'Gold Loan' }, { code: 'HOUSING', name: 'Housing Loan' }, { code: 'SHARES_PHYSICAL', name: 'Shares / Debentures (Physical Form)' }, { code: 'SHARES_DEMAT', name: 'Shares / Debentures (Demat Form)' } ]; /** Gold Loan LTV cap, tiered by loan amount (RBI circular, effective April 2026). */ export function goldLoanLtvCapPct(loanAmount: number): number { if (loanAmount <= 250000) { return 85; } if (loanAmount <= 500000) { return 80; } return 75; } /** Housing Loan LTV cap, tiered by property (collateral) value. */ export function housingLoanLtvCapPct(collateralValue: number): number { return collateralValue < 3000000 ? 90 : 80; } /** Max LTV against shares/debentures is the inverse of RBI's minimum margin -- 50% margin on * physical-form securities caps the loan at 50% of market value; 25% margin on demat-form * securities caps it at 75%. */ export function sharesLoanLtvCapPct(isDemat: boolean): number { return isDemat ? 75 : 50; }