Skip to content

Part 10 — System Blueprint

Compliance Hooks

Compliance hooks are not reports added after launch. They are events, immutable versions and control tables that must be written at the moment the regulated action happens. If sanction, kfs_version, loan_transaction, asset_classification, consent_artifact, partner_share or audit_event is incomplete, downstream reports will be unreliable.

RBI’s KFS circular applies to all new retail and MSME term loans sanctioned on or after October 1, 2024 and requires a standardised Key Facts Statement, APR computation sheet, amortisation schedule and explicit borrower acknowledgement (RBI KFS circular, April 15, 2024). RBI’s Digital Lending Directions require explicit consent audit trail, DLA reporting on CIMS, direct fund flows, CIC reporting for digital lending and grievance controls (RBI Digital Lending Directions, 2025).

Every material business action writes one immutable audit_event. Business tables may store the current status, but audit events preserve who did what, when, from where, using which evidence and approval.

FieldTypeConstraintsNullableReferences
audit_event_iduuidPrimary keyNoNone
event_typeenumSee event catalogue belowNoNone
subject_typeenumparty, application, kyc_profile, beneficial_owner, document_instance, external_verification, credit_assessment, deviation, sanction, kfs_version, sanction_condition, disbursement, loan_account, loan_transaction, asset_classification, security_charge, mandate, collection_case, settlement_proposal, partner_profile, co_lending_arrangement, partner_share, dlg_set, consent_artifact, user_accessNoNone
subject_iduuidId of subject recordNoNone
application_iduuidRequired when event relates to originationYesapplication.application_id
loan_account_iduuidRequired after bookingYesloan_account.loan_account_id
party_iduuidAffected borrower/partner/user party where applicableYesparty.party_id
actor_typeenumhuman_user, borrower_user, partner_api_client, system_service, vendor_user, batch_jobNoNone
actor_iduuidUser id, API client id or service idNoNone
actor_roletextActor code such as credit_analyst, ops_checker, partner_api_clientNorole.role_code
event_timestamptimestamptzServer timeNoNone
business_effective_datedateRequired for DPD, NPA, transaction, charge, disbursement and closure eventsYesNone
source_channelenumbranch, dsa_app, customer_portal, dla, partner_api, batch, admin_console, vendor_portalNoNone
request_idtextAPI/request correlation idYesNone
idempotency_keytextRequired for external/API/batch eventsYesNone
before_hashchar(64)Hash of previous material JSON stateYesNone
after_hashchar(64)Hash of new material JSON stateYesNone
evidence_uritextEncrypted evidence packet pathYesNone
reason_codetextRequired for rejection, override, waiver, hold, withdrawal, cancellation and correctionYesreason_code.code
approval_request_iduuidRequired where action needs DoA or maker-checkerYesapproval_request.approval_request_id
ip_addressinetRequired for user/API actionsYesNone
device_fingerprint_hashchar(64)Required for DLA/customer actions where availableYesNone
signature_hashchar(64)HMAC/signature over event bodyNoNone
Event typeRequired subjectRequired evidenceCompliance reason
consent_granted, consent_revoked, consent_expiredconsent_artifactConsent text version, scope, purpose, channel, OTP/clickwrap/recording/AA artefactDigital lending consent, privacy and purpose limitation.
kyc_verified, kyc_rejected, bo_added, sanctions_hit_clearedkyc_profile, beneficial_owner, screening_hitKYC docs, BO declaration, registry result, screening reportRBI KYC Master Direction CDD, BO and AML/CFT evidence.
document_uploaded, document_verified, document_pack_locked, documents_executeddocument_instanceFile hash, verification note, checker id, document pack versionImmutable document evidence.
bre_executed, deviation_raised, deviation_approved, credit_approved, credit_rejectedbre_result, deviation, credit_assessmentRule version, CAM, approver level, decision noteDoA and credit-policy auditability.
kfs_generated, kfs_accepted, sanction_letter_generated, borrower_acceptance_recordedkfs_version, sanctionKFS PDF/hash, APR computation JSON, amortisation schedule, borrower acknowledgementKFS and digital disclosure duties.
cp_cleared, esign_completed, stamp_paid, mandate_activatedsanction_condition, signature_event, stamp_certificate, mandateCP evidence, signature certificate, stamp certificate, UMRN/statusDocumentation and disbursement control.
payment_initiated, disbursement_posted, disbursement_faileddisbursement, payment_instructionBeneficiary verification, payment reference, checker approvalDirect fund-flow and wrong-beneficiary control.
loan_booked, demand_generated, receipt_posted, reversal_posted, waiver_postedloan_account, loan_transactionSchedule, due ledger, bank reference, approvalLMS/GL/CIC evidence.
dpd_changed, asset_classification_event, npa_classified, npa_upgradedloan_account, asset_classificationDue ledger, DPD recomputation, effective dateIRAC, provisioning and CIC reporting.
case_opened, ptp_recorded, field_visit_completed, settlement_approved, writeoff_postedcollection_case, ptp, settlement_proposal, loan_transactionAllocation, call/visit evidence, OTS approval, write-off noteCollections conduct and recovery governance.
partner_share_booked, escrow_reconciled, partner_dpd_sent, dlg_invokedpartner_share, escrow_movement, partner_status_event, dlg_setPartner ack, escrow statement, DPD payload, DLG invocation fileCLA and DLG compliance.
role_granted, role_revoked, break_glass_started, access_review_completeduser_accessTicket, approver, expiry, review resultPrivileged access and audit control.
FieldTypeConstraintsNullableReferences
kfs_version_iduuidPrimary keyNoNone
application_iduuidParent applicationNoapplication.application_id
sanction_iduuidPopulated when sanction existsYessanction.sanction_id
proposal_numbertextUnique KFS proposal numberNoNone
kfs_version_numberintStarts at 1; increments on economics changeNoNone
product_codetextProduct masterNoproduct.product_code
loan_amountnumeric(18,2)Amount offeredNoNone
tenor_monthsintRequired for term loanNoNone
annual_interest_ratenumeric(9,6)Contract rateNoNone
apr_percentnumeric(9,6)Computed annual percentage rateNoNone
repayment_frequencyenumSame as sanction.repayment_frequencyNoNone
emi_amountnumeric(18,2)Required for EMI productsYesNone
fee_jsonjsonbProcessing, insurance, legal, valuation, documentation, stamp, platform, bounce, penal charge fieldsNoNone
third_party_charges_jsonjsonbActual-basis charges recovered through REYesNone
cooling_off_period_daysintMinimum 1 for digital loansYesNone
grievance_jsonjsonbRE and LSP nodal grievance contact, RBI CMS link where applicableNoNone
amortisation_schedule_uritextRequired for amortising term loansYesNone
apr_computation_uritextAPR input/output evidenceNoNone
document_uritextRendered KFS pathNoNone
sha256_hashchar(64)Hash of rendered KFSNoNone
valid_fromtimestamptzRequiredNoNone
valid_untiltimestamptzAt least 3 working days for tenor >= 7 days; 1 working day for tenor < 7 daysNoNone
statusenumdraft, issued, accepted, expired, superseded, cancelledNoNone
TriggerRequired action
credit_approved_without_deviation or all_deviations_approvedGenerate KFS before sanction_letter_generated.
Any change to amount, tenor, rate, fee, repayment frequency, EMI, cooling-off, co-lending split, third-party charges or penalty termsSupersede prior KFS; create new kfs_version; require fresh borrower acceptance.
Borrower clicks accept in customer_portal, dla or assisted branch flowWrite kfs_accepted audit event with evidence; set sanction.borrower_acceptance_at.
KFS validity expires before borrower acceptanceEmit sanction_expired or regenerate with current terms if credit policy permits.
Co-lending loanKFS must show blended rate, partner RE disclosure, customer interface, fees/charges and APR.

Credit Information Company (CIC) reporting must be reproducible from LMS and party records. It must not be built from spreadsheet exports.

FieldTypeConstraintsNullableReferences
cic_submission_iduuidPrimary keyNoNone
cic_nameenumtransunion_cibil, experian, equifax, crif_highmarkNoNone
segmentenumconsumer, commercial, mfiNoNone
reference_datedateReporting as-of dateNoNone
cycle_typeenumscheduled, correction, dispute_resolution, closure_update, ad_hoc_regulatoryNoNone
file_formatenumucrf_consumer, ucrf_commercial, ucrf_mfi, cic_legacyNoNone
record_countintNon-negativeNoNone
file_uritextEncrypted output file pathNoNone
sha256_hashchar(64)File hashNoNone
generated_attimestamptzRequiredNoNone
submitted_attimestamptzRequired once sentYesNone
ack_received_attimestamptzRequired once ack receivedYesNone
accepted_countintRequired after ackYesNone
rejected_countintRequired after ackYesNone
statusenumdraft, generated, submitted, accepted, accepted_with_rejects, rejected, corrected, cancelledNoNone
RuleBuild requirement
Current cycleSupport at least fortnightly reference dates, 15th and last day of the month, and submission within 7 calendar days where applicable under RBI CIC reporting instructions.
July 2026 readinessMake the cycle calendar configurable by RE type because RBI’s 2025/2026 credit-information reporting directions introduced more granular schedules for certain credit institutions from July 1, 2026. The scheduler must support 9th, 16th, 23rd and last-day reference dates, monthly full-file by the 5th day of next month, and incremental/correction files if the applicable RE direction requires them.
Co-lendingEach RE reports its own partner_share; borrower-facing account numbers and partner references must not create duplicate borrower identities.
Commercial borrowerUse business_entity.pan, gstin_primary, cin, llpin, udyam_registration_number, relationship data and beneficial-owner links where applicable.
Individual proprietor/promoter/guarantorUse natural_person.pan, DOB, address, mobile and relationship segment.
DPD and asset classSource from LMS loan_account.current_dpd and asset_classification, not collections notes.
Rejected recordsCreate correction task with reject reason; unresolved reject older than one cycle escalates to compliance and data owner.
DisputesA borrower dispute creates correction workflow; if data is wrong, submit correction in next permissible cycle and store dispute resolution evidence.

The RBI CIC Directions list TransUnion CIBIL, Experian, Equifax and CRIF High Mark as registered CICs and prescribe standardised UCRF segments for consumer, commercial and MFI reporting in the CIC framework (RBI CIC Directions, 2025 public mirror).

FieldTypeConstraintsNullableReferences
regulatory_report_run_iduuidPrimary keyNoNone
report_codetextControlled return codeNoregulatory_return_master.report_code
report_nametextHuman-readable nameNoNone
regulatorenumrbi, cic, ckyc, fiu_ind, cersai, ibbi_nesl, gst, income_tax, mcaNoNone
period_startdateRequiredNoNone
period_enddateRequiredNoNone
due_datedateRequiredNoNone
source_snapshot_uritextImmutable source extractNoNone
output_file_uritextReturn file pathYesNone
validation_statusenumnot_started, generated, validation_failed, validated, submitted, accepted, rejected, correctedNoNone
maker_user_iduuidRequired after generationYesuser.user_id
checker_user_iduuidRequired before submissionYesuser.user_id
submitted_attimestamptzRequired once submittedYesNone
ack_referencetextPortal or regulator ackYesNone
Return familyTrigger/sourceMinimum data inputsOwnerControl
DLA reporting on RBI CIMSDLA deployed, joined, changed or ceasedDLA name, owner, website/app-store link, grievance officer, RE website, compliance certificationcompliance_officerDigital Lending Directions require RE reporting and certification; RBI publishes submitted data without validation.
NBFC supervisory returns on RBI CIMS/XBRLPeriodic NBFC return calendarBalance sheet, P&L, exposure, NPA, provisioning, ALM, concentration, public funds, capital, related-party dataFinance/complianceReturn calendar configurable; maker-checker mandatory.
PSL returns where applicablePriority sector eligible shareMSME classification, Udyam, product, sector, loan amount, outstanding, co-lending shareCompliance/financeCLA PSL claim only for each RE’s share.
CIC submissionsScheduled reporting cycleParty, loan, DPD, asset class, co-borrowers, guarantors, closure, write-off, suit-filed/wilful defaultCompliance/data opsReconcile accepted/rejected counts.
CKYC upload/updateNew or updated CDDKYC template fields, document metadata, CKYC id, legal entity dataKYC opsRequired under KYC/CKYCR framework.
FIU-IND STR/CTR supportAML alert or cash thresholdTransaction, party, KYC, alert narrative, branch, source of fundsAML/complianceSeparate confidential workflow; limited access.
CERSAI charge filing/satisfactionSecurity creation, modification, closuresecurity_charge, collateral, borrower, charge amount, filing referencesLegal/opsFiling must block or condition secured disbursement according to product policy.
NeSL IU record/default evidenceDebt record authentication and defaultSanction, agreement, schedule, borrower auth, default recordLegal/opsUsed for debt evidence and insolvency/legal readiness.
RBI Ombudsman/internal complaintsComplaint rejected, unresolved, escalated or closedComplaint category, borrower, loan, date received, response date, compensation/refundGrievance/compliance30-day unresolved/rejected complaint path must be visible to borrower for RBI CMS.

RBI’s Master Direction on Filing of Supervisory Returns gives standard periodicity timelines such as weekly, fortnightly, monthly, quarterly, half-yearly and yearly submission windows, with return-specific exceptions in annexes (RBI Filing of Supervisory Returns Directions, 2024).

consent_artifact is already defined in domain model core. The compliance hook adds lifecycle controls.

Consent typePurpose examplesRequired scope fieldsRevocation effect
contactCall/SMS/email/WhatsApp for application and servicingChannel, language, validity, sourceStops future non-essential contact except legal/regulatory notices.
bureau_pullConsumer/commercial bureau enquiry for underwriting or monitoring where allowedCIC, enquiry purpose, borrower role, validityBlocks future pulls; existing report retained for audit and credit decision evidence.
gst_fetchGST return analyticsGSTIN, return types, period, vendor, purposeBlocks future GST fetch; parsed evidence retained if used in CAM.
account_aggregatorBank data through AAFI type, FIP/account refs, date range, fetch frequency, data life, purpose codeAA revocation blocks future fetch and updates consent_revoked.
bank_statement_uploadBorrower uploaded PDF/CSV statementsAccount, period, parser permissionBlocks reuse for new purpose; existing underwriting evidence retained.
digilockerPull issued documentsIssuer, document type, scope, OAuth token validityToken revoked; manual upload allowed.
ckyc_fetchCKYC search/downloadCKYC id/PAN, KYC type, purposeBlocks future CKYC fetch.
udyam_verifyMSME verificationUdyam number, PAN/GSTIN, purposeBlocks future verification call.
itr_fetchITR/ERI/vendor-assisted tax dataAssessment years, PAN, data fields, vendor/ERI scopeBlocks future tax data access.
data_sharing_partnerShare permitted variables with LSP/co-lender/anchorRecipient, fields, purpose, expiryStops future sharing; partner must delete data per contract unless retention law requires otherwise.
RuleImplementation
No active consentIntegration gateway returns consent_required; workflow cannot call external provider.
Purpose mismatchReject call even if consent exists; create audit event.
Expired consentSet consent_artifact.status=expired; ask borrower for fresh consent.
Revoked consentStop future collection/sharing; do not delete regulated records needed for audit, KYC, loan servicing, legal or regulatory reporting.
Partner sharingpartner_api_client response builder checks data_sharing_partner scope before including personal, bureau, GST, ITR, AA or KYC data.
Data minimisationAPI response includes only fields needed by state and partner contract.
Hold reasonSourceBlocksRelease authority
sanctions_true_positivescreening_hitkyc_verified, sanction_letter_generated, loan_bookedaml_compliance
beneficial_owner_incompletebeneficial_ownerkyc_verifiedkyc_checker or aml_compliance waiver
kfs_not_acceptedkfs_versiondocumentation_started, loan_bookedBorrower or authorised signatory acceptance
fund_flow_breachPayment reconciliationloan_booked, partner payoutcompliance_officer plus treasury_finance
cic_reject_unresolvedcic_submissionClosure of reporting cycleCompliance/data owner
dpd_override_pendingLMS correctionCIC reporting and partner status finalisationRisk head plus finance/compliance checker
partner_share_mismatchCo-lending reconciliationCLA settlement and partner payoutPartner ops plus finance
complaint_ombudsman_escalatedComplaint systemClosure of related complaint and root cause itemcompliance_officer