File size: 1,560 Bytes
7872230
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from typing import Any

from pydantic import BaseModel

from app.schemas.scorecard import ScorecardRequest


ALIASES = {
    "leadId": "leadId",
    "dealerId": "dealerId",
    "enquiries6M": "creditEnquiries6M",
    "creditEnquiries6M": "creditEnquiries6M",
    "enquiries12M": "creditEnquiries12M",
    "creditEnquiries12M": "creditEnquiries12M",
    "fraudFlag": "fraudFlag",
    "writtenOffAccounts": "writtenOffAccounts",
    "settledAccounts": "settledAccounts",
}


def _dump(model: BaseModel) -> dict[str, Any]:
    return model.model_dump(by_alias=False)


def build_evaluation_context(request: ScorecardRequest) -> dict[str, Any]:
    context = {}
    context.update(_dump(request.application))
    context.update(_dump(request.bureau))
    context["tenantId"] = request.tenantId
    context["productType"] = request.productType
    for alias, target in ALIASES.items():
        if target in context:
            context[alias] = context[target]
    context["kycVerified"] = bool(context.get("panVerified")) and bool(context.get("aadhaarVerified"))
    context["stableEmployment"] = context.get("employmentType") in {"SALARIED", "SELF_EMPLOYED"}
    context["noDpd"] = (
        (context.get("maxDPD") or 0) <= 0
        and (context.get("dpd30Count") or 0) <= 0
        and (context.get("dpd60Count") or 0) <= 0
        and (context.get("dpd90Count") or 0) <= 0
    )
    context["noFraud"] = not bool(context.get("fraudFlag") or context.get("blacklistMatch"))
    context["noOverdue"] = (context.get("overdueAmount") or 0) <= 0
    return context