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