zombee11/scorecardapi
1
1from typing import Any2 3from pydantic import BaseModel4 5from app.schemas.scorecard import ScorecardRequest6 7 8ALIASES = {9 "leadId": "leadId",10 "dealerId": "dealerId",11 "enquiries6M": "creditEnquiries6M",12 "creditEnquiries6M": "creditEnquiries6M",13 "enquiries12M": "creditEnquiries12M",14 "creditEnquiries12M": "creditEnquiries12M",15 "fraudFlag": "fraudFlag",16 "writtenOffAccounts": "writtenOffAccounts",17 "settledAccounts": "settledAccounts",18}19 20 21def _dump(model: BaseModel) -> dict[str, Any]:22 return model.model_dump(by_alias=False)23 24 25def build_evaluation_context(request: ScorecardRequest) -> dict[str, Any]:26 context = {}27 context.update(_dump(request.application))28 context.update(_dump(request.bureau))29 context["tenantId"] = request.tenantId30 context["productType"] = request.productType31 for alias, target in ALIASES.items():32 if target in context:33 context[alias] = context[target]34 context["kycVerified"] = bool(context.get("panVerified")) and bool(context.get("aadhaarVerified"))35 context["stableEmployment"] = context.get("employmentType") in {"SALARIED", "SELF_EMPLOYED"}36 context["noDpd"] = (37 (context.get("maxDPD") or 0) <= 038 and (context.get("dpd30Count") or 0) <= 039 and (context.get("dpd60Count") or 0) <= 040 and (context.get("dpd90Count") or 0) <= 041 )42 context["noFraud"] = not bool(context.get("fraudFlag") or context.get("blacklistMatch"))43 context["noOverdue"] = (context.get("overdueAmount") or 0) <= 044 return context45 46 