The lending model starts when a lead becomes an application and ends only after the loan, collateral, charges, regulatory reports and post-closure document release are complete. It deliberately separates origination records from live account records. The LOS can propose terms; the LMS owns booked terms, dues, receipts, DPD, SMA/NPA and closure.
Types use PostgreSQL conventions. Money is numeric(18,2), rates are annual decimal percentages in numeric(9,6), dates that affect interest or DPD are date, and operational timestamps are timestamptz. Every table has standard audit fields: created_at, created_by, updated_at, updated_by, version, and an immutable audit_event_id for material changes. They are omitted below.
| Field | Type | Constraints | Nullable | References |
|---|
application_id | uuid | Primary key | No | None |
application_number | text | Unique human-readable id | No | None |
lead_id | uuid | Required when originated from CRM | Yes | lead.lead_id |
product_code | text | Active product master | No | product.product_code |
product_variant_code | text | Variant or program | Yes | product_variant.code |
channel_type | enum | branch, dsa, connector, digital_direct, lsp, anchor, co_lending, renewal, top_up | No | None |
source_partner_id | uuid | Required for DSA/LSP/anchor/co-lending channel | Yes | party.party_id |
primary_applicant_party_id | uuid | Must have application role primary_applicant | No | party.party_id |
requested_amount | numeric(18,2) | Greater than 0 | No | None |
requested_tenor_months | int | Greater than 0 | Yes | None |
requested_purpose | enum | working_capital, business_expansion, machinery, invoice_finance, lap, debt_consolidation, top_up, other_business | No | None |
application_state | enum | See state machines | No | None |
state_effective_at | timestamptz | Required | No | None |
assigned_branch_code | text | Required for branchable products | Yes | branch.branch_code |
assigned_rm_id | uuid | Sales owner | Yes | user.user_id |
co_lending_flag | boolean | Default false | No | None |
digital_lending_flag | boolean | Default false; true for DLA/LSP digital journey | No | None |
withdrawal_reason_code | text | Required when withdrawn | Yes | reason_code.code |
reject_reason_code | text | Required when rejected | Yes | reason_code.code |
| Field | Type | Constraints | Nullable | References |
|---|
credit_assessment_id | uuid | Primary key | No | None |
application_id | uuid | One active assessment per application version | No | application.application_id |
assessment_version | int | Starts at 1; increments on material refresh | No | None |
financial_method | enum | audited_financials, itr, gst_surrogate, banking_surrogate, cash_flow, anchor_data, scorecard_only, manual_hybrid | No | None |
annual_turnover_assessed | numeric(18,2) | Non-negative | Yes | None |
monthly_income_assessed | numeric(18,2) | Non-negative | Yes | None |
foir_percent | numeric(9,6) | 0-100 | Yes | None |
dscr | numeric(9,4) | Greater than 0 when computed | Yes | None |
abb_6m | numeric(18,2) | Average bank balance | Yes | None |
bureau_score | int | Bureau range or null for no-hit | Yes | None |
commercial_rank | text | CMR or equivalent | Yes | None |
internal_risk_grade | text | Grade master | No | risk_grade.code |
recommended_amount | numeric(18,2) | Greater than or equal to 0 | No | None |
recommended_tenor_months | int | Greater than 0 when approved/recommended | Yes | None |
recommended_rate | numeric(9,6) | Annual reducing rate | Yes | None |
recommendation | enum | approve, approve_with_conditions, reject, refer, defer | No | None |
cam_document_id | uuid | Frozen CAM | Yes | document_instance.document_id |
| Field | Type | Constraints | Nullable | References |
|---|
bre_result_id | uuid | Primary key | No | None |
application_id | uuid | Application evaluated | No | application.application_id |
rule_set_id | uuid | Rule set | No | rule_set.rule_set_id |
rule_version_id | uuid | Immutable version | No | rule_version.rule_version_id |
execution_type | enum | prescreen, eligibility, pricing, deviation, renewal, monitoring | No | None |
decision | enum | pass, fail, refer, manual_review, error | No | None |
max_eligible_amount | numeric(18,2) | Non-negative | Yes | None |
max_tenor_months | int | Positive | Yes | None |
price_floor_rate | numeric(9,6) | Annual rate | Yes | None |
result_json | jsonb | Full rule tree | No | None |
executed_at | timestamptz | Required | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
deviation_id | uuid | Primary key | No | None |
application_id | uuid | Application context | No | application.application_id |
deviation_type | enum | policy, pricing, documentation, kyc, collateral, financial, bureau, geography, exposure, process, regulatory | No | None |
rule_code | text | Rule breached | No | policy_rule.code |
severity | enum | low, medium, high, critical | No | None |
description | text | Specific breach | No | None |
mitigant | text | Required before approval | Yes | None |
status | enum | raised, approved, rejected, withdrawn, expired | No | None |
required_authority_level | text | Resolved DoA level | No | authority_level.code |
approved_by | uuid | Required when approved | Yes | user.user_id |
approved_at | timestamptz | Required when approved/rejected | Yes | None |
| Field | Type | Constraints | Nullable | References |
|---|
sanction_id | uuid | Primary key | No | None |
application_id | uuid | One or more versions per application | No | application.application_id |
sanction_number | text | Unique | No | None |
sanction_version | int | Starts at 1 | No | None |
sanction_status | enum | draft, pending_approval, approved, approved_with_modification, rejected, deferred, expired, accepted, cancelled | No | None |
sanctioned_amount | numeric(18,2) | Greater than 0 when approved | Yes | None |
tenor_months | int | Positive when approved | Yes | None |
interest_rate_type | enum | fixed, floating, hybrid, discount, cash_credit | No | None |
annual_interest_rate | numeric(9,6) | Annual reducing or equivalent | Yes | None |
apr_percent | numeric(9,6) | Required for KFS-covered loans; computed, not manually typed | Yes | None |
repayment_frequency | enum | daily, weekly, fortnightly, monthly, quarterly, bullet, on_demand, revolving | No | None |
emi_amount | numeric(18,2) | Required for EMI products | Yes | None |
valid_until | date | Must be after approval date | Yes | None |
approval_authority_id | uuid | Resolved authority | Yes | approval_authority.authority_id |
kfs_version_id | uuid | Required for covered retail/MSME term loans under RBI KFS circular | Yes | kfs_version.kfs_version_id |
borrower_acceptance_at | timestamptz | Required when accepted | Yes | None |
| Field | Type | Constraints | Nullable | References |
|---|
condition_id | uuid | Primary key | No | None |
sanction_id | uuid | Parent sanction | No | sanction.sanction_id |
condition_type | enum | condition_precedent, condition_subsequent, covenant, monitoring_requirement, disbursement_condition, documentation_condition | No | None |
condition_code | text | Controlled library where possible | No | condition_master.code |
condition_text | text | Borrower/ops-readable text | No | None |
owner_role | text | Role responsible for closure | No | role.role_code |
due_date | date | Required for CS/covenant/monitoring condition | Yes | None |
blocks_disbursement | boolean | True for CPs | No | None |
status | enum | open, submitted, verified, waiver_requested, waived, breached, closed | No | None |
closure_evidence_document_id | uuid | Required for verified closure where evidence exists | Yes | document_instance.document_id |
waiver_deviation_id | uuid | Required when waived | Yes | deviation.deviation_id |
| Field | Type | Constraints | Nullable | References |
|---|
loan_account_id | uuid | Primary key | No | None |
loan_account_number | text | Unique customer-facing account number | No | None |
application_id | uuid | Originating application | No | application.application_id |
sanction_id | uuid | Accepted sanction | No | sanction.sanction_id |
borrower_party_id | uuid | Legal borrower | No | party.party_id |
product_code | text | Product booked | No | product.product_code |
booking_date | date | LMS booking date | No | None |
first_disbursement_date | date | Required after first disbursement | Yes | None |
maturity_date | date | Required for term loans | Yes | None |
account_state | enum | See state machines | No | None |
principal_sanctioned | numeric(18,2) | Greater than 0 | No | None |
principal_disbursed | numeric(18,2) | 0 to sanctioned amount | No | None |
principal_outstanding | numeric(18,2) | Non-negative | No | None |
interest_rate_type | enum | fixed, floating, hybrid, discount, cash_credit | No | None |
current_annual_rate | numeric(9,6) | Required for interest-bearing facilities | Yes | None |
repayment_frequency | enum | daily, weekly, fortnightly, monthly, quarterly, bullet, on_demand, revolving | No | None |
current_dpd | int | Computed; non-negative | No | None |
asset_classification | enum | standard, sma_0, sma_1, sma_2, npa_substandard, npa_doubtful_1, npa_doubtful_2, npa_doubtful_3, loss | No | None |
classification_effective_date | date | Required | No | None |
co_lending_account_flag | boolean | Default false | No | None |
closure_date | date | Required when closed/preclosed/written off closure | Yes | None |
| Field | Type | Constraints | Nullable | References |
|---|
facility_id | uuid | Primary key | No | None |
loan_account_id | uuid | Parent account | No | loan_account.loan_account_id |
facility_type | enum | term_loan, cash_credit, overdraft, invoice_discounting, dealer_finance, guarantee, letter_of_credit, machinery_loan, lap | No | None |
limit_amount | numeric(18,2) | Greater than 0 | No | None |
drawing_power_amount | numeric(18,2) | Required for CC/OD and receivable-backed products | Yes | None |
limit_expiry_date | date | Required for revolving/working-capital limits | Yes | None |
review_due_date | date | Required for working-capital renewal | Yes | None |
available_amount | numeric(18,2) | Non-negative | Yes | None |
facility_state | enum | approved, available, frozen, expired, recalled, closed | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
disbursement_id | uuid | Primary key | No | None |
loan_account_id | uuid | Target account | No | loan_account.loan_account_id |
tranche_number | int | Starts at 1 | No | None |
disbursement_amount | numeric(18,2) | Greater than 0 | No | None |
beneficiary_type | enum | borrower, supplier, dealer, invoice_seller, escrow, statutory_authority | No | None |
beneficiary_party_id | uuid | Required for non-borrower beneficiary | Yes | party.party_id |
beneficiary_bank_account_id | uuid | Verified bank account | No | bank_account.bank_account_id |
disbursement_date | date | Value date | No | None |
payment_reference | text | Bank/UPI/NEFT/RTGS reference | Yes | None |
status | enum | initiated, posted, failed, reversed, cancelled | No | None |
failure_reason_code | text | Required when failed | Yes | reason_code.code |
| Field | Type | Constraints | Nullable | References |
|---|
schedule_version_id | uuid | Primary key | No | None |
loan_account_id | uuid | Parent loan | No | loan_account.loan_account_id |
version_number | int | Starts at 1 | No | None |
schedule_type | enum | original, rate_reset, part_prepayment, moratorium, restructure, correction, settlement | No | None |
effective_from | date | Required | No | None |
effective_to | date | Null for active schedule | Yes | None |
generated_by_event_id | uuid | Event that created version | No | audit_event.audit_event_id |
status | enum | draft, active, superseded, cancelled | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
due_id | uuid | Primary key | No | None |
schedule_version_id | uuid | Schedule | No | schedule_version.schedule_version_id |
loan_account_id | uuid | Parent loan | No | loan_account.loan_account_id |
installment_number | int | Positive for installment products | Yes | None |
due_date | date | Contractual due date | No | None |
principal_due | numeric(18,2) | Non-negative | No | None |
interest_due | numeric(18,2) | Non-negative | No | None |
charge_due | numeric(18,2) | Non-negative | No | None |
tax_due | numeric(18,2) | Non-negative | No | None |
total_due | numeric(18,2) | Sum of components | No | None |
amount_paid | numeric(18,2) | Non-negative and not above total unless overpayment allocated | No | None |
due_status | enum | future, presented, part_paid, paid, overdue, waived, reversed | No | None |
paid_date | date | Required when paid | Yes | None |
| Field | Type | Constraints | Nullable | References |
|---|
loan_transaction_id | uuid | Primary key | No | None |
loan_account_id | uuid | Parent loan | No | loan_account.loan_account_id |
transaction_type | enum | disbursement, demand, receipt, bounce, charge, tax, waiver, refund, reversal, interest_accrual, interest_reversal, write_off, recovery_after_writeoff, foreclosure | No | None |
value_date | date | Accounting value date | No | None |
posting_timestamp | timestamptz | System posting time | No | None |
amount | numeric(18,2) | Positive; sign comes from type and accounting rule | No | None |
principal_component | numeric(18,2) | Non-negative | No | None |
interest_component | numeric(18,2) | Non-negative | No | None |
charge_component | numeric(18,2) | Non-negative | No | None |
tax_component | numeric(18,2) | Non-negative | No | None |
payment_mode | enum | nach, enach, upi, neft, rtgs, cash, cheque, payment_gateway, escrow, adjustment, not_applicable | No | None |
external_reference | text | Bank/payment reference where present | Yes | None |
reversal_of_transaction_id | uuid | Required for reversal | Yes | loan_transaction.loan_transaction_id |
status | enum | pending, posted, reversed, failed, cancelled | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
allocation_id | uuid | Primary key | No | None |
receipt_transaction_id | uuid | Receipt being allocated | No | loan_transaction.loan_transaction_id |
due_id | uuid | Due being cleared | Yes | repayment_due.due_id |
component | enum | principal, interest, charge, tax, legal_cost, excess | No | None |
amount_allocated | numeric(18,2) | Greater than 0 | No | None |
allocation_order | int | Shows appropriation sequence | No | None |
rule_version_id | uuid | Appropriation rule used | No | rule_version.rule_version_id |
| Field | Type | Constraints | Nullable | References |
|---|
collateral_id | uuid | Primary key | No | None |
application_id | uuid | Original application | Yes | application.application_id |
loan_account_id | uuid | Linked after booking | Yes | loan_account.loan_account_id |
collateral_type | enum | residential_property, commercial_property, industrial_property, land, machinery, vehicle_equipment, stock, book_debt, invoice, fixed_deposit, guarantee, other_movable | No | None |
description | text | Specific asset description | No | None |
address_id | uuid | Required for immovable property and asset location | Yes | address.address_id |
asset_identifier | text | Survey no, serial no, invoice no, policy no | Yes | None |
declared_value | numeric(18,2) | Non-negative | Yes | None |
eligible_value | numeric(18,2) | Lower of policy/valuation values | Yes | None |
latest_valuation_id | uuid | Required when valued | Yes | valuation_report.valuation_id |
insurance_policy_id | uuid | Required where insurance is condition | Yes | insurance_policy.insurance_policy_id |
collateral_status | enum | proposed, documents_pending, under_legal_review, under_valuation, approved, approved_with_conditions, rejected, charged, released | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
valuation_id | uuid | Primary key | No | None |
collateral_id | uuid | Valued asset | No | collateral_asset.collateral_id |
valuer_party_id | uuid | Empanelled valuer | No | party.party_id |
inspection_date | date | Required | No | None |
market_value | numeric(18,2) | Non-negative | No | None |
realizable_value | numeric(18,2) | Non-negative | Yes | None |
distress_sale_value | numeric(18,2) | Non-negative | Yes | None |
valuation_method | enum | market_comparable, cost, income, circle_rate, invoice_cost, engineer_estimate, hybrid | No | None |
report_document_id | uuid | Report file | No | document_instance.document_id |
status | enum | draft, submitted, accepted, rework, rejected, expired | No | None |
| Field | Type | Constraints | Nullable | References |
|---|
security_charge_id | uuid | Primary key | No | None |
loan_account_id | uuid | Secured loan account | No | loan_account.loan_account_id |
collateral_id | uuid | Charged asset | No | collateral_asset.collateral_id |
charge_type | enum | hypothecation, equitable_mortgage, registered_mortgage, pledge, assignment, lien, guarantee, negative_lien | No | None |
charge_rank | enum | exclusive_first, pari_passu_first, second, subservient, unsecured_support | No | None |
charge_amount | numeric(18,2) | Greater than 0 | No | None |
created_date | date | Date of security creation | No | None |
perfection_status | enum | pending, created, cersai_pending, roc_pending, perfected, exception_approved, satisfied, released | No | None |
cersai_filing_id | uuid | Required where CERSAI filing applies | Yes | cersai_filing.cersai_filing_id |
roc_charge_filing_id | uuid | Required for company borrower charge where Companies Act filing applies | Yes | roc_charge_filing.roc_charge_filing_id |
release_date | date | Required when released/satisfied | Yes | None |
| Field | Type | Constraints | Nullable | References |
|---|
mandate_id | uuid | Primary key | No | None |
loan_account_id | uuid | Parent loan | No | loan_account.loan_account_id |
party_id | uuid | Bank account owner | No | party.party_id |
bank_account_id | uuid | Debit account | No | bank_account.bank_account_id |
mandate_type | enum | physical_nach, enach, upi_autopay, standing_instruction, post_dated_cheque | No | None |
umrn | text | Required for registered NACH/eNACH | Yes | None |
max_amount | numeric(18,2) | Greater than or equal to EMI or policy amount | No | None |
frequency | enum | daily, weekly, fortnightly, monthly, quarterly, ad_hoc | No | None |
start_date | date | Required | No | None |
end_date | date | After start date | No | None |
mandate_status | enum | created, submitted, accepted, active, rejected, suspended, cancelled, expired | No | None |
rejection_reason_code | text | Required when rejected | Yes | reason_code.code |
| Entity | Required fields | Build rule |
|---|
co_lending_arrangement | cla_id, originating_re_party_id, partner_re_party_id, product_scope, originator_share_percent, partner_share_percent, effective_date, escrow_bank_account_id, customer_interface_party_id, status | Each RE share must be at least 10 percent under RBI CLA Directions, 2025. |
partner_share | partner_share_id, loan_account_id, cla_id, re_party_id, share_percent, principal_share, interest_rate, booked_at, status | Share must be booked without delay and no later than 15 calendar days from originator disbursement under RBI CLA Directions, 2025. |
escrow_movement | movement_id, loan_account_id, escrow_account_id, movement_type, amount, value_date, originating_re_amount, partner_re_amount, reconciliation_status | All CLA disbursement and repayment movements must route through bank escrow. |
dlg_set | dlg_set_id, provider_party_id, beneficiary_re_party_id, portfolio_identifier, upfront_portfolio_amount, cap_amount, form, valid_from, valid_to, status | Cap must not exceed 5 percent of the fixed DLG loan portfolio under RBI Digital Lending Directions. |
- RBI, Key Facts Statement (KFS) for Loans & Advances, April 15, 2024
- RBI, Reserve Bank of India (Digital Lending) Directions, 2025
- RBI, Reserve Bank of India (Co-Lending Arrangements) Directions, 2025
- RBI, Prudential norms on IRACP - Clarifications, November 12, 2021