Part 10 — System Blueprint
Co-lending Partner Module
The co-lending and partner module serves three different business patterns that must not be collapsed into one table:
- Co-lending arrangement (CLA): two regulated entities jointly fund the same borrower under
co_lending_arrangement,partner_share,escrow_movementandpartner_ledger. - LSP or anchor origination: a non-lender partner sources or supplies data but does not book a loan share. This still uses
source_partner_id,partner_api_client, consent controls and payout ledger. - DLG-backed sourcing: an LSP or another RE acting as LSP provides default loss guarantee through
dlg_setunder RBI Digital Lending Directions.
The 2025 RBI co-lending framework requires each RE to keep at least 10 percent of each individual loan, reflect both shares in books without delay and no later than 15 calendar days from disbursement, route borrower/RE transactions through bank escrow, report each RE’s share to credit information companies, and share SMA/NPA classification on a near-real-time basis and no later than the next working day (RBI Co-Lending Arrangements Directions, 2025). Digital journeys and DLG remain subject to the RBI Digital Lending Directions, 2025.
The dual-decisioning policy computation and blended-rate output contract are specified in BRE functional specification; runtime idempotency, replay and partner callback handling are specified in BRE runtime architecture.
Partner And Anchor Onboarding Entities
Section titled “Partner And Anchor Onboarding Entities”partner_profile
Section titled “partner_profile”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
partner_profile_id | uuid | Primary key | No | None |
party_id | uuid | Partner must be a party with party_type channel_partner or regulated_entity | No | party.party_id |
partner_type | enum | dsa, connector, lsp, anchor, co_lender, marketplace, payment_partner, technology_service_provider, dlg_provider | No | None |
regulated_entity_flag | boolean | True for bank/NBFC/HFC/AIFI partner RE | No | None |
rbi_registration_number | text | Required when regulated_entity_flag=true | Yes | None |
cin | varchar(21) | Required for company partners where applicable | Yes | business_entity.cin |
pan | varchar(10) | Required | No | party.primary_pan |
gstin | varchar(15) | Required where registered | Yes | party.primary_gstin |
onboarding_status | enum | draft, due_diligence, approved, agreement_signed, active, suspended, terminated, blacklisted | No | None |
risk_rating | enum | low, medium, high, prohibited | No | None |
customer_interface_flag | boolean | True if partner-facing DLA/portal or staff interact with borrower | No | None |
grievance_officer_name | text | Required for borrower-facing LSP/DLA | Yes | None |
grievance_officer_email | text | Required for borrower-facing LSP/DLA | Yes | None |
data_residency_attested_flag | boolean | Must be true before active digital lending | No | None |
approved_by | uuid | Required when approved | Yes | user.user_id |
approval_request_id | uuid | Required for onboarding approval | Yes | approval_request.approval_request_id |
partner_program
Section titled “partner_program”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
partner_program_id | uuid | Primary key | No | None |
partner_profile_id | uuid | Parent partner | No | partner_profile.partner_profile_id |
program_code | text | Unique with partner | No | None |
program_type | enum | lead_referral, lsp_origination, anchor_finance, co_lending, dlg_backed, servicing, collections | No | None |
product_code_set | text[] | Allowed products | No | product.product_code |
geography_set | text[] | Branch/state/pincode scope | No | None |
min_ticket_size | numeric(18,2) | Non-negative | No | None |
max_ticket_size | numeric(18,2) | Greater than min | No | None |
customer_interface_party_id | uuid | Single point of interface for CLA where applicable | Yes | party.party_id |
payout_basis | enum | none, per_login, per_disbursement, percentage_of_disbursal, servicing_fee, collection_fee, anchor_subvention | No | None |
payout_rate | numeric(9,6) | Required when payout basis is rate based | Yes | None |
effective_from | date | Required | No | None |
effective_to | date | Must be after effective_from | Yes | None |
status | enum | draft, active, paused, closed | No | None |
api_client
Section titled “api_client”The partner gateway uses the existing module-map entity api_client. The minimum fields are:
| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
api_client_id | uuid | Primary key | No | None |
partner_profile_id | uuid | Parent partner | No | partner_profile.partner_profile_id |
client_name | text | Unique per partner | No | None |
auth_type | enum | mtls, oauth2_client_credentials, signed_jwt, api_key_hmac | No | None |
scope_set | text[] | Allowed endpoint scopes | No | None |
ip_allowlist | inet[] | Required for server-to-server access | Yes | None |
webhook_url | text | HTTPS only | Yes | None |
status | enum | active, suspended, rotating_secret, revoked | No | None |
last_key_rotation_at | timestamptz | Required for active clients | Yes | None |
Marketplace Settlement-Linked Repayment
Section titled “Marketplace Settlement-Linked Repayment”Marketplace seller-finance programs add an anchor data feed and a settlement-linked servicing layer to the partner module. These entities do not replace the RBI digital-lending fund-flow controls: borrower repayment must reach the RE bank account, a permitted co-lending escrow, or another legally documented route such as receivable assignment. The marketplace/LSP account must not become an unapproved repayment pool.
anchor_data_feed
Section titled “anchor_data_feed”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
anchor_data_feed_id | uuid | Primary key | No | None |
partner_profile_id | uuid | Must reference active partner_type anchor, marketplace or lsp | No | partner_profile.partner_profile_id |
feed_type | enum | seller_profile, order_daily, settlement_daily, return_rto, rating_quality, seller_status, inventory_advertising | No | None |
schema_version | text | Required; immutable after activation | No | None |
delivery_mode | enum | api_pull, api_push, sftp, webhook, manual_upload | No | None |
frequency | enum | real_time, hourly, daily, weekly, on_event | No | None |
expected_cutoff_time | time | Required for batch feeds | Yes | None |
consent_scope_code | text | Must map to active borrower/seller consent | No | consent.scope_code |
last_received_at | timestamptz | Updated on every accepted batch/event | Yes | None |
feed_status | enum | draft, testing, active, delayed, failed, retired | No | None |
anchor_seller_snapshot
Section titled “anchor_seller_snapshot”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
anchor_seller_snapshot_id | uuid | Primary key | No | None |
partner_profile_id | uuid | Anchor/marketplace partner | No | partner_profile.partner_profile_id |
loan_account_id | uuid | Required once loan is booked | Yes | loan_account.loan_account_id |
seller_platform_id | text | Unique with partner and marketplace tenant | No | None |
seller_status | enum | active, restricted, suspended, delisted, closed, unknown | No | None |
snapshot_date | date | Required | No | None |
gmv_30d | numeric(18,2) | Gross platform sales before returns | No | None |
net_settlement_30d | numeric(18,2) | After refunds/returns/platform deductions | No | None |
return_rate_30d | numeric(9,6) | Between 0 and 1 | No | None |
rto_rate_30d | numeric(9,6) | Between 0 and 1 | No | None |
rating_score | numeric(5,2) | Marketplace scale stored with rating_scale in payload | Yes | None |
settlement_cycle_days | int | Positive | Yes | None |
source_batch_id | uuid | Feed batch/event reference | No | partner_status_event.partner_status_event_id |
settlement_deduction_instruction
Section titled “settlement_deduction_instruction”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
settlement_deduction_instruction_id | uuid | Primary key | No | None |
loan_account_id | uuid | Booked seller loan | No | loan_account.loan_account_id |
partner_profile_id | uuid | Marketplace/settlement partner | No | partner_profile.partner_profile_id |
seller_platform_id | text | Must match latest anchor_seller_snapshot | No | None |
instruction_type | enum | fixed_amount, percent_of_settlement, minimum_due_sweep, full_overdue_sweep, receivable_assignment | No | None |
deduction_percent | numeric(9,6) | Required for percentage instruction | Yes | None |
fixed_amount | numeric(18,2) | Required for fixed instruction | Yes | None |
cap_per_cycle | numeric(18,2) | Optional seller-protection cap | Yes | None |
beneficiary_bank_account_id | uuid | Must be RE bank account, CLA escrow or documented assignee account | No | bank_account.bank_account_id |
borrower_authorization_id | uuid | Seller authorization artefact | No | consent.consent_id |
effective_from | date | Required | No | None |
effective_to | date | Must be after effective_from | Yes | None |
instruction_status | enum | draft, active, paused, cancelled, expired, breach_hold | No | None |
settlement_reconciliation
Section titled “settlement_reconciliation”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
settlement_reconciliation_id | uuid | Primary key | No | None |
settlement_deduction_instruction_id | uuid | Parent instruction | No | settlement_deduction_instruction.settlement_deduction_instruction_id |
loan_account_id | uuid | Required | No | loan_account.loan_account_id |
settlement_cycle_id | text | Marketplace settlement batch/cycle id | No | None |
gross_settlement_amount | numeric(18,2) | From anchor settlement feed | No | None |
marketplace_deductions | numeric(18,2) | Fees, refunds, logistics, penalties | No | None |
expected_repayment_amount | numeric(18,2) | Computed from active instruction | No | None |
actual_repayment_amount | numeric(18,2) | Bank/escrow amount received | No | None |
utr | text | Required when actual amount is posted | Yes | None |
value_date | date | Required for posted money | Yes | None |
reconciliation_status | enum | pending, matched, short_paid, excess_paid, delayed, reversed, failed | No | None |
break_reason_code | enum | none, anchor_not_settled, seller_suspended, insufficient_settlement, utr_missing, amount_mismatch, beneficiary_mismatch, refund_reversal | No | None |
repayment_split_event
Section titled “repayment_split_event”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
repayment_split_event_id | uuid | Primary key | No | None |
loan_transaction_id | uuid | Receipt or reversal transaction | No | loan_transaction.loan_transaction_id |
settlement_reconciliation_id | uuid | Required for settlement-linked receipt | Yes | settlement_reconciliation.settlement_reconciliation_id |
loan_account_id | uuid | Required | No | loan_account.loan_account_id |
split_basis | enum | partner_share, cla_waterfall, receivable_assignment, single_re | 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 |
originating_re_amount | numeric(18,2) | Required for CLA | Yes | None |
partner_re_amount | numeric(18,2) | Required for CLA | Yes | None |
posted_to_partner_ledger_flag | boolean | True only after partner_ledger rows are posted | No | None |
event_status | enum | computed, posted, reversed, held_for_break | No | None |
seller_churn_trigger
Section titled “seller_churn_trigger”| Field | Type | Constraints | Nullable | References |
|---|---|---|---|---|
seller_churn_trigger_id | uuid | Primary key | No | None |
loan_account_id | uuid | Required | No | loan_account.loan_account_id |
partner_profile_id | uuid | Marketplace partner | No | partner_profile.partner_profile_id |
trigger_type | enum | gmv_drop, net_settlement_drop, seller_suspended, seller_delisted, high_rto, high_return_rate, settlement_feed_missing, marketplace_exit_notice | No | None |
threshold_value | numeric(18,6) | Policy threshold | Yes | None |
observed_value | numeric(18,6) | Trigger observation | Yes | None |
detected_at | timestamptz | Required | No | None |
severity | enum | low, medium, high, critical | No | None |
action_required | enum | monitor, reduce_limit, pause_drawdown, activate_fallback_mandate, collections_review, manual_credit_review | No | None |
resolution_status | enum | open, acknowledged, actioned, waived, closed | No | None |
Co-Lending Configuration
Section titled “Co-Lending Configuration”Use the exact extension names from domain model lending.
| Entity | Fields | Validation |
|---|---|---|
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 | originator_share_percent + partner_share_percent = 100; each share must be at least 10; both parties must have party_type=regulated_entity; active agreement required before application.co_lending_flag=true. |
partner_share | partner_share_id, loan_account_id, cla_id, re_party_id, share_percent, principal_share, interest_rate, booked_at, status | One row per RE share; total principal_share equals loan_account.principal_disbursed; partner share must be booked within 15 calendar days from disbursement. |
escrow_movement | movement_id, loan_account_id, escrow_account_id, movement_type, amount, value_date, originating_re_amount, partner_re_amount, reconciliation_status | Every CLA disbursement and repayment movement must split through escrow; originating_re_amount + partner_re_amount = amount. |
partner_ledger | partner_ledger_id, loan_account_id, partner_share_id, ledger_event_type, component, debit_amount, credit_amount, value_date, source_event_id, posting_status | Use double-entry style rows for partner economics; every row ties back to loan_transaction, escrow_movement or accounting_event. |
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_amount <= 5% of disbursed fixed DLG loan portfolio; form must be cash deposit, FD lien, or bank guarantee under Digital Lending Directions. |
partner_status_event | partner_status_event_id, loan_account_id, partner_profile_id, event_type, event_payload_hash, sent_at, ack_at, status | Required for sanction, disbursement, repayment, DPD, SMA/NPA, closure, cancellation, settlement, restructure and collateral release events. |
Partner-Facing API Surface
Section titled “Partner-Facing API Surface”All endpoints require api_client authentication, idempotency key, request timestamp, request signature, partner correlation id and schema version. Partner can never write internal credit approval, KYC approval, DPD, asset classification or GL postings directly.
| Endpoint | Direction | Scope | Request fields | Response fields | Idempotency key | Notes |
|---|---|---|---|---|---|---|
POST /v1/applications | Partner to lender | application:create | Partner ref, product, requested amount/tenor, borrower identifiers, channel_type, source_partner_id, consent references, anchor data summary | application_id, application_number, application_state=lead_created or prescreen_pending, validation errors | Partner ref plus borrower PAN/GSTIN plus product | Creates partner_application_ref; duplicate returns same application. |
GET /v1/applications/{application_id}/status | Partner to lender | application:read_status | Application id or partner ref | Current application_state, coarse reason codes, next required action, no CAM/bureau/RCU details | Read-only | Status vocabulary must map to state-machine names or a documented coarse external mapping. |
POST /v1/applications/{application_id}/documents | Partner to lender | document:upload | document_type, owner party role, file hash, MIME type, document number, storage upload token | document_id, verification_status=uploaded, deficiency if rejected | File hash plus document type plus application | Creates document_instance; partner cannot mark verified. |
POST /v1/consents | Partner to lender | consent:create | Party, consent type, purpose, scope, text version, capture channel partner_api | consent_id, status, expiry, evidence URI | Party plus consent type plus purpose plus captured timestamp | Lender must preserve consent artefact; broad catch-all consent is invalid. |
POST /v1/offers/{application_id}/select | Partner to lender | offer:select | Offer id, borrower acceptance intent, selected amount/tenor | Selected offer status; KFS URL if generated | Offer id plus application | Must not bypass KFS and borrower acceptance. |
GET /v1/kfs/{kfs_version_id} | Partner to lender | kfs:read | KFS version id | KFS fields, APR, repayment schedule, charges, cooling-off, grievance details | Read-only | Partner may display KFS but cannot alter APR. |
POST /v1/partner-decisions | Partner/co-lender to lender | partner_decision:create | Application id, partner decision, approved amount, partner rate, decline reason, policy version | Decision receipt, dual-decision state | Application id plus partner policy version | Used in dual-decisioning before sanction. |
POST /v1/webhooks/ack | Partner to lender | webhook:ack | Event id, status, received timestamp, error code | Ack accepted/rejected | Event id | Failed webhook retries: 5 minutes, 30 minutes, 2 hours, next business day. |
GET /v1/loans/{loan_account_id}/partner-share | Partner to lender | loan:read_partner_share | Loan id or partner ref | partner_share, DPD, asset_classification, outstanding split, next due | Read-only | Share and classification must match partner books. |
POST /v1/repayment-events | Partner to lender | repayment:notify | Partner receipt/refund/reversal event when partner services borrower under allowed setup | Accepted/rejected; LMS reconciliation status | Partner transaction id | Borrower repayment must still flow to RE account or permitted escrow. |
POST /v1/dlg/invocations | Lender to DLG provider or provider to lender | dlg:invoke | dlg_set_id, loan list, overdue days, invocation amount, supporting default data | Invocation status, available cap after invocation | DLG set plus invocation batch id | Invoke within maximum overdue period of 120 days unless borrower cures under Digital Lending Directions. |
Dual-Decisioning Flow
Section titled “Dual-Decisioning Flow”| Step | Owner | System action | Required data | Exit condition |
|---|---|---|---|---|
| 1. Intake | partner_api_client, sales_ops | Create application with channel_type=co_lending, source_partner_id, co_lending_flag=true. | Partner ref, borrower party data, consent, product and requested terms. | lead_submitted_for_prescreen accepted. |
| 2. Lender pre-screen | BRE and credit_analyst | Run lender rules, bureau, KYC, document and data pack. | bre_result, kyc_profile, document_instance, bureau/AA/GST data. | pre_screen_passed or hard_reject_triggered. |
| 3. Partner policy check | Partner RE | Partner evaluates under ex-ante agreement. | Lender-approved data pack or minimal agreed variables, KFS-relevant terms, risk grade. | Partner sends partner_decision=approve, approve_with_conditions, reject, or refer. |
| 4. Conflict resolution | credit_manager and partner ops | Resolve mismatched limit, tenor, rate, DPD/KYC hold, product ineligibility or partner concentration cap. | Both policy decisions, deviations, partner conditions. | Both REs approve or application moves rejected/returned_for_rework. |
| 5. Sanction and KFS | LOS/KFS service | Generate single borrower-facing sanction and KFS with blended rate and role segregation. | sanction, kfs_version, co_lending_arrangement, partner share percentages and fees. | sanction_letter_generated; borrower accepts through borrower_acceptance_recorded. |
| 6. Booking | Disbursement/LMS/co-lending ledger | Book loan_account, create partner_share, post escrow_movement, send partner_share_booked. | Disbursement amount, escrow account, payment reference, both RE rates. | loan_booked; partner share reflected within 15 calendar days. |
| 7. Ongoing sync | LMS/co-lending module | Send repayments, DPD, SMA/NPA, settlement, restructure, closure and collateral events. | loan_transaction, asset_classification, collection_case, security_charge. | Partner acknowledgements within SLA; breaks routed to reconciliation. |
Split-Ledger Accounting Entries
Section titled “Split-Ledger Accounting Entries”Assume a ₹10,00,000 loan under 80:20 CLA, borrower blended annual rate is weighted from originator and partner internal rates, and ₹10,00,000 is disbursed through escrow.
| Event | Source record | Ledger debit | Ledger credit | partner_ledger rows | Reconciliation rule |
|---|---|---|---|---|---|
| Originator funds its share | escrow_movement movement_type=disbursement_funding | Escrow bank ₹8,00,000 | Originator funding bank ₹8,00,000 | Originator share debit principal ₹8,00,000 | Bank statement equals escrow movement. |
| Partner funds its share | escrow_movement | Escrow bank ₹2,00,000 | Partner funding bank ₹2,00,000 | Partner share debit principal ₹2,00,000 | Partner ack required. |
| Borrower/supplier disbursement | disbursement | Loan receivable ₹10,00,000 split by share | Escrow bank ₹10,00,000 | Two principal postings: originator ₹8,00,000, partner ₹2,00,000 | principal_disbursed equals sum of partner_share.principal_share. |
| EMI receipt | loan_transaction transaction_type=receipt | Escrow/bank receipt | Borrower receivable components | Principal, interest, charge and tax split by contractual appropriation | Receipt must reconcile to bank and LMS due clearance. |
| Bounce charge | loan_transaction transaction_type=charge | Borrower charge receivable | Charge income payable to entitled RE(s) | Charge split per agreement | Penal charges must match KFS and penal-charge policy. |
| Waiver/settlement | loan_transaction transaction_type=waiver | Waiver expense/write-off | Borrower receivable | Partner share waiver and originator share waiver | Requires partner consent if economics change. |
| DLG invocation | dlg_invocation | DLG cash/FD/BG receivable | Credit loss recovery/suspense per accounting policy | DLG receipt linked to affected partner/share | Borrower liability remains unchanged; no set-off against loan dues. |
DLG Tracking Ledger
Section titled “DLG Tracking Ledger”dlg_portfolio_loan
Section titled “dlg_portfolio_loan”| Field | Type | Constraints |
|---|---|---|
dlg_portfolio_loan_id | uuid | Primary key |
dlg_set_id | uuid | References dlg_set.dlg_set_id |
loan_account_id | uuid | References loan_account.loan_account_id |
sanction_id | uuid | References sanction.sanction_id |
included_amount | numeric(18,2) | Loan amount in fixed DLG set |
disbursed_amount | numeric(18,2) | Amount on which cap activates |
inclusion_date | date | Cannot be after default event |
status | enum | included, disbursed, matured_without_default, defaulted, invoked, written_off, closed |
dlg_invocation
Section titled “dlg_invocation”| Field | Type | Constraints |
|---|---|---|
dlg_invocation_id | uuid | Primary key |
dlg_set_id | uuid | Parent DLG set |
loan_account_id | uuid | Affected loan |
overdue_days_at_invocation | int | Must be less than or equal to 120 unless policy/legal exception prevents invocation |
borrower_due_amount | numeric(18,2) | Total due remains borrower liability |
eligible_loss_amount | numeric(18,2) | Loss amount eligible under DLG contract |
invocation_amount | numeric(18,2) | Cannot exceed remaining cap_amount |
invocation_date | date | Required |
form | enum | cash_deposit, fd_lien, bank_guarantee |
status | enum | draft, submitted, realized, rejected, reversed |
DLG rules:
| Rule | Build control |
|---|---|
| Fixed set | dlg_portfolio_loan membership freezes before DLG cover is used; no dynamic replacement. |
| 5 percent cap | sum(invocation_amount where status in submitted, realized) <= dlg_set.cap_amount; cap_amount <= 0.05 * disbursed amount of DLG set. |
| No reinstatement | Recovery after invocation may be shared contractually, but it cannot restore available DLG cap. |
| NPA responsibility | loan_account.asset_classification and provisioning remain with RE; DLG is not a cure event. |
| DLG ineligible products | Reject DLG for digital revolving credit, credit cards, NBFC-P2P loans, and loans covered by CGTMSE/NCGTC trust-fund guarantees. |
Payout And Reconciliation
Section titled “Payout And Reconciliation”| Process | Source | Calculation | Approval | Posting |
|---|---|---|---|---|
| DSA/LSP acquisition payout | application.source_partner_id, loan_booked, program payout basis | Disbursed amount times payout_rate, or fixed login/disbursal fee, net of clawback holds | sales_manager for source hold; treasury_finance for payment | payout_ledger and gl_posting; no deduction from borrower proceeds. |
| Anchor subvention | partner_program, sanction terms | Interest or fee subsidy by anchor by invoice/dealer program | Credit and finance approval | Partner receivable; borrower KFS must show actual borrower economics. |
| CLA servicing fee | co_lending_arrangement and partner agreement | Fee based on servicing activities, not credit enhancement unless DLG compliant | Finance checker | partner_ledger fee rows; GST tax split where applicable. |
| Escrow reconciliation | Bank statement plus escrow_movement | Match value date, amount, UTR, loan id and split | treasury_finance checker | reconciliation_status=matched; breaks create suspense_item. |
| Partner share reconciliation | partner_share, partner statement, LMS | Principal outstanding, interest accrual, DPD, receipts, waivers, closure | Partner ops and finance | partner_status_event ack plus ledger correction if mismatch. |
| DLG cap reconciliation | dlg_set, dlg_invocation, loan performance | Cap used, cap remaining, overdue loans, invocation ageing | Risk and finance | Monthly DLG statement; monthly provider website disclosure where applicable under Digital Lending Directions. |
Reconciliation Break Types
Section titled “Reconciliation Break Types”| Break code | Detection | Resolution |
|---|---|---|
share_not_booked_15d | loan_booked plus no active partner_share within 15 calendar days | Keep full exposure on originator books; transfer later only under Transfer of Loan Exposures rules. |
escrow_amount_mismatch | Bank amount differs from escrow_movement.amount | Investigate bank UTR; post correction or suspense before day-end close. |
partner_dpd_mismatch | Partner reports different DPD or asset class | LMS source recomputation; if CLA exposure default exists, align borrower-level classification no later than next working day. |
receipt_split_mismatch | originating_re_amount + partner_re_amount != receipt amount | Block GL finalisation; recompute split from active partner_share. |
waiver_without_partner_consent | Settlement/restructure changes economics but no partner approval | Hold settlement implementation; create approval_request for partner consent. |
dlg_cap_breach | Invocation would exceed dlg_set.cap_amount | Reject invocation; route to risk and finance. |
Implementation Tests
Section titled “Implementation Tests”| Test | Expected result |
|---|---|
| CLA configured 95:5 | Reject co_lending_arrangement because each RE must retain at least 10 percent. |
loan_booked but partner share missing after 15 calendar days | Create reconciliation break share_not_booked_15d; future transfer cannot use CLA booking path. |
| Partner API requests bureau raw report | Reject with scope error; partner receives only contracted variables with consent and purpose. |
| Borrower repayment lands in LSP account | Mark fund-flow breach; do not post as valid borrower receipt until funds reach RE account or permitted escrow. |
| One co-lender marks SMA-2 | Emit partner_status_event; other RE classification must align under borrower-level CLA rule. |
| DLG invocation at 130 DPD | Reject unless documented legal/process exception exists; risk head approval required. |
| Recovery after DLG invocation | Post recovery as borrower recovery; do not reinstate DLG cap. |