Risk Rule Builder

Visual if-then-else over verification outputs · auto-route to decision · auto-create case if needed

Active rules

PEP / Sanctions auto-block live
If sanctions_hits > 0 OR pep_hits > 0 → decision = DECLINE + case to PMLA officer · high priority
if screening.sanctions_hits > 0 or screening.pep_hits > 0:
  decision = "DECLINE"
  case.escalate("PMLA_OFFICER", priority="high")
Low face match → manual review live
If face_similarity in [0.45, 0.62) → decision = MANUAL_REVIEW · 2h SLA
if 0.45 <= verification.face.similarity < 0.62:
  decision = "MANUAL_REVIEW"
  case.create(reason="low_face_match", sla_hours=2)
UBO threshold check live
PMLA Rule 9 · if max shareholder < 25% → require senior managing official declaration
if max(s.ownership_pct for s in shareholders) < 25:
  case.require_smo()
High-velocity / structuring live
If 3+ deposits ≥ ₹9L within 24h from same source → STR queue
if count_deposits(amount>=900000, hours=24) >= 3:
  str_queue.add(reason="structuring")
Rapid movement out draft
If withdrawal > 80% of yesterday's deposit within 12h → freeze + escalate
if withdraw_pct_24h > 0.8 and acct_age_days < 30:
  freeze(reason="rapid_movement")
Shell company indicators off
No DIN history · same registered address as 5+ entities · no GST filings
if din_age_days < 90 and address_co_count > 5:
  flag("shell_co")

Decision matrix (preview)

SignalWeight
No risk rules configured
Thresholds:
score ≥ 500 → DECLINE
200 ≤ score < 500 → MANUAL_REVIEW
score < 200 → APPROVE