Skip to content

3.E Underwriting engine

Combine every underwriting input into a deterministic, auditable decision: eligible / declined / refer to manual, with a risk grade, sanction amount, tenure, and pricing recommendation, and a full trace of every rule fired and every score computed.

Underwriting is the most opinionated module. Whatever else the platform looks like, the underwriting engine reflects the company’s credit philosophy. See Section 6 for the full rule library and scorecards.

  • Declarative rules in a configurable format — domain users can write / edit rules without engineering deploy.
  • Versioned rule sets — policy changes are versioned; every application records the rule-set version applied.
  • Per-product rule sets — different products / channels / co-lending partners can have different rule sets, layered.
  • Rule composition — atomic rules combine into rule groups, groups combine into policies.
  • Outcomes per rule — pass / fail / deviation (requires approval) / refer (manual review).
  • Hard eligibility checks — PAN match, GSTIN active, business vintage, location, KYC status, sanctions clear.
  • Soft eligibility checks — preliminary sufficiency of GST turnover, bank balance, etc.
  • Negative list checks — internal blacklist, GSTIN-cancellation feed, court-litigation hits.
  • Score thresholds — CIBIL / Experian / Equifax / CRIF score cuts per product.
  • DPD policy — declines for DPD on certain bucket / vintage.
  • Multiple enquiries — count and recency policy.
  • Write-off / settlement — automatic decline (or refer) on write-off / settlement history.
  • Existing exposure — sum of all current EMIs against income / cash-flow.
  • Commercial bureau — entity exposure, commercial DPD history.
  • ABB (Average Bank Balance) — minimum ABB for a defined period.
  • MAB (Monthly Average Balance) — same, monthly.
  • Credit turnover — minimum monthly credit inflow.
  • Debit turnover — sanity vs credit; ratios.
  • EMI / NACH obligation detection — sum of existing obligations.
  • Bounce analysis — NACH / cheque bounce count and recency.
  • Circular / related-party transactions — pattern detection.
  • Cash deposit analysis — large or frequent cash deposits flagged.
  • Salary / business credit identification — for proprietor’s personal account.
  • Turnover progression — last 12 / 24 / 36 months trend.
  • Filing consistency — % of months filed on time.
  • GST sales vs bank credit reconciliation — divergence flag.
  • GST purchase vs bank debit reconciliation.
  • Customer concentration — top buyers, top suppliers.
  • Late filings, suspensions, cancellations — high-severity flags.
  • Sales volatility — coefficient of variation of monthly sales.
  • Seasonality — detected and accounted for in capacity.
  • Net operating cash flow — month-by-month from bank + GST.
  • Debt-service capacity (DSC) — operating cash flow / proposed EMI; threshold-based.
  • FOIR (Fixed Obligation to Income Ratio) — for proprietor.
  • Working capital cycle — receivable days + inventory days − payable days.
  • Revenue + margin from P&L.
  • Receivable ageing — % > 90 days; concentration.
  • Payable ageing — % > 90 days; flag aged payables to known stress.
  • Inventory turn.
  • ROCE estimate.
  • Reconciliation with GST + bank — divergences scored.
  • Identity-fraud signals — PAN-Aadhaar mismatch, mobile-PAN mismatch, address-OVD mismatch.
  • Bank-statement tampering signals (BSA vendor’s checks).
  • Velocity flags — unusual GST / invoice / bank growth that contradicts vintage.
  • Device fingerprint anomalies — same device for many borrowers.
  • Negative-list / consortium / internal blacklist hits.
  • Single-borrower cap — vs Tier-1 capital (per SBR).
  • Group cap.
  • Sectoral cap.
  • Anchor / programme cap for SCF.
  • Channel / DSA cap.
  • Geography cap.
  • Risk grade → price grid — discrete grades mapped to interest rate.
  • Tenure adjustment.
  • Channel adjustment (different DSA / channel commercials).
  • Product adjustment.
  • Override approval workflow for off-grid pricing.
  • Recommended sanction amount — min of: requested, capacity-based, exposure-cap-allowed.
  • Recommended tenure — per product policy and cash-flow fit.
  • Recommended pricing.
  • Recommended conditions — bank account for disbursement, NACH mandate, post-disbursement covenants.
  • Outcome — approve / decline / refer to manual / defer (more data needed).
  • Reasons — full list of rules fired, scorecards triggered.
  • Auditable trace — every rule version, every input value, every intermediate result.
  • Explainability — for borrower-facing rejection reason (subject to compliance review).
  • Manual review workflow — see 3.F.
  • Sanction letter / KFS generation — see 3.H.
  • Disbursement — see 3.I.
  • Post-disbursement monitoring — see 3.L.
  • Policy — versioned, with rule sets.
  • Rule — atomic, with name, expression, threshold, outcome.
  • Scorecard — collection of features and weights / thresholds.
  • Feature — extracted from data ingestion; reusable across rules and scorecards.
  • Decision — per application: outcome, rule trace, score-card outputs, sanction proposal.
  • Deviation — when policy fails but business wants to approve; needs explicit approval.
  • RiskGrade — discrete output from scorecards.
  1. Decision run — application submitted → feature extraction → policy + scorecards execute → decision recorded.
  2. Re-decision — when new data arrives (refreshed bureau / bank), re-run with version of policy at original decision.
  3. Deviation approval — flag → approval queue → approver acts → decision finalised.
  4. Policy edit — domain user edits rule → version bump → sandbox test → deploy.
  5. Refer-to-manual — decision returns refer; case enters manual queue with all context.
  • Read from data-ingestion module (bureau, BSA, GST, Tally, MCA, AA).
  • Read from KYC module (identity verified status).
  • Write to documentation module (sanction proposal) and to LMS module (sanction).
  • POST /decisions/run — execute decision against a policy version.
  • GET /decisions/{id} — retrieve decision with full trace.
  • POST /decisions/{id}/deviation — request deviation approval.
  • POST /policies — create / update policy (versioned).
  • GET /policies/{id}/test — sandbox test against historical applications.
  • decision.run.started / decision.run.completed
  • decision.approved / decision.declined / decision.referred / decision.deviation_required
  • policy.updated / policy.deployed
  • New data arrives mid-decision — queue → re-run after data settle window.
  • Conflicting rules (one passes, one fails) — explicit policy precedence.
  • Policy bug declines genuine borrowers — sandbox testing + champion-challenger framework.
  • Bureau no-hit — separate path (new-to-credit borrowers); decision relies on alternative data.
  • Co-lending dual policy — run originator’s + partner’s; output combined outcome.
  • Repeat borrower with new product — apply both repeat-borrower rules and product-specific.
  • Group exposure at edge of cap — strict block; not deviation-eligible.
  • Digital Lending Guidelines — credit decision must be RE’s (not LSP’s only).
  • Explainability — borrower must receive a reason in writing for decline.
  • DPDP — only data with valid consent feeds decisioning.
  • Bureau — pulls per CICRA, with enquiry recording.
  • Asset classification continuity — for renewals / top-ups, NPA status of any existing exposure must block.
  • Fair Practices Code — decisions cannot be discriminatory.
FeatureMVPProduction
Rule engineSimple expression language (or Drools embedded)Full DSL with sandbox
Bureau scorecard
Bank-statement scorecard
GST scorecard
Cash-flow underwriting
Tally scorecard(Phase 2)
Fraud scorecardBasicMulti-signal with consortium feeds
Exposure rules
Pricing engineGrid-basedGrid + risk-based + auto-test
Champion / challenger(Phase 3)
Deviation workflow
Re-decision on new data(Phase 2)
ML model integration(Phase 4)
Decision explainability for borrower✓ (basic)Rich, vernacular

Related: 3.D Data ingestion, 3.F Manual underwriting workflow, 6. Underwriting, 13.6 Underwriting backlog.