Decision Object
The decision object inside application.decision contains all scoring output.
| Field | Type | Description |
|---|---|---|
| score | number | Overall credit score (350–850). Higher is better. |
| decision | string | APPROVED | REJECTED | MANUAL_REVIEW | COUNTER_OFFER |
| score_band | string | VERY_LOW_RISK | LOW_RISK | MEDIUM_RISK | HIGH_RISK | VERY_HIGH_RISK |
| approval_details | object | null | Present when APPROVED. Contains approved_amount, approved_tenor, approved_interest, monthly_payment. |
| counter_offer | object | null | Present when COUNTER_OFFER. Contains suggested lower amount or shorter tenor. |
| risk_factors | array | List of risk factors that influenced the decision. Each item has factor, severity, and detail. |
| score_breakdown | object | Individual scores for: cash_flow_health, income_stability, debt_service_capacity, account_behavior, credit_history. |
| explainability | object | Human-readable explanation with primary_reason, key_strengths[], key_weaknesses[]. |
| eligible_tenors | number[] | Tenors (in months) for which the applicant qualifies. |
| manual_review_reasons | string[] | Reasons triggering a manual review, if applicable. |
| regulatory_compliance | object | Compliance flags: thin_file, identity_verified, credit_bureau_checked, affordability_assessed. |
Risk Factors
Each item in risk_factors has this shape:
json
{
"factor": "IDENTITY_NAME_MISMATCH",
"severity": "HIGH",
"detail": "Submitted name 'John Doe' does not match account holder 'OJO DANIEL'"
}| Field | Type | Description |
|---|---|---|
| severity | string | HIGH — may trigger immediate rejection. MEDIUM / LOW — reduces score without hard knockout. |
| factor | string | Machine-readable code for the risk type (e.g. IDENTITY_NAME_MISMATCH, LOW_AVERAGE_BALANCE, IRREGULAR_INCOME). |
| detail | string | Human-readable explanation suitable for logging or internal use. |