Skip to main content

Risk Tape v1 — Eligibility Engine

Source: src/modules/riskTape/eligibility.ts (maintained in the creatorlayer-api repository)

Overview

The eligibility engine is a product-type dispatcher. It routes each verification to the correct sub-builder based on the lender's configured product_type, then returns an EligibilityDecision with fields relevant to that contract type.

All product types share the same underlying risk signals (volatility CV, drawdown, track record). The dispatcher applies different formulas and threshold sets on top.


Supported product types

product_typeContractKey output fields
rbfRevenue-Based Financingmax_revenue_share_pct, payback_cap_multiple
term_loanFixed-term bank loanmax_tenor_months, dscr_stressed
revenue_loanFixed instalment, revenue-sizedmax_tenor_months, dscr_stressed (no share/cap)
venture_debtGrowth-oriented facilitymax_tenor_months, YoY growth bonus, warrant covenants
murabahaIslamic cost-plus financingsharia_eligible, murabaha_viable
hppHome Purchase Plan (Islamic mortgage)sharia_eligible, max_tenor_months up to 300 months
securitization_poolPool-level tapeDelegates to RBF logic at individual-tape level

Tier assignment (all product types)

Tier thresholds are configurable per-lender via LenderThresholds. The default reference policy is:

ConditionRisk TierEligible?
track_record_months < 6 (or < 12 for Islamic products)ineligibleNo
CV ≤ 0.25 AND drawdown ≤ 0.40primeYes
CV ≤ 0.50 AND drawdown ≤ 0.60standardYes
Everything elsesubprimeNo
Per-lender threshold overrides

Lenders can supply lender_thresholds in their PartnerConfig to override any of the default values above — minimum track record, tier CV bounds, advance multiples, and custom covenants.


Universal agnostic fields (v2.0.0)

Every product type returns these fields regardless of contract:

FieldFormulaPurpose
stressed_net_incomeavg_monthly × (1 − volatility_cv)Worst-case normalised income
dti_ratio(max_advance / 12) / avg_monthlyAffordability proxy
income_capacity_annualavg_monthly × 12 × advance_multiplev2 alias for max_advance_amount
income_stability_score1 − (cv × 0.5 + drawdown × 0.5)Composite reliability score 0–1
income_trendYoY or 3m slopegrowing, stable, declining, insufficient_data

Product-specific logic

RBF

FieldPrimeStandardSubprime / Ineligible
max_advance_amountavg × 12 × 0.35avg × 12 × 0.250
max_revenue_share_pct0.15 (15%)0.10 (10%)0
payback_cap_multiple1.31.5null

Term loan / Revenue loan

  • No revenue share or payback cap
  • max_tenor_months: 36 (prime), 24 (standard)
  • dscr_stressed = stressed_net_income / (max_advance / max_tenor)

Venture debt

  • More permissive thresholds: prime_max_cv = max(configured, 0.45), prime_max_drawdown = max(configured, 0.55)
  • YoY growth > 20% unlocks an extra 0.10 advance multiple
  • max_tenor_months: 48 (prime), 36 (standard)
  • Covenants include warrant/equity kicker and YoY revenue floor

Murabaha / HPP

  • Minimum 12 months of track record required
  • sharia_eligible = true if high_risk_platform_flag = false AND dispute_rate < 0.05
  • murabaha_viable = true if sharia_eligible AND tier in [prime, standard] AND track_record ≥ 12
  • HPP max_tenor_months: 300 (prime), 240 (standard) — up to 25 years
  • Sharia compliance covenant appended when sharia_eligible = true

Flags

FlagTrigger
moderate_volatilityCV > 0.25
significant_drawdowndrawdown > 0.40
high_platform_concentrationHHI > 0.50
platform_dependenttop_platform_share ≥ 0.70

Default covenants

CovenantTrigger
Monthly revenue must not decline more than 30% for 3 consecutive monthsstandard tier
Creator must maintain at least 2 active revenue platformsHHI > 0.50
Income sources must remain Sharia-compliantIslamic products, sharia_eligible = true
Lender may require warrant or equity kicker at drawdownVenture debt, eligible
YoY revenue must not decline more than 40% in any rolling 12-month windowVenture debt, eligible