# Configurable Two Wheeler Loan STP Scorecard API Production-shaped FastAPI service for bank LOS scorecard integration. It calculates score, evaluates DB-configured business rules, routes cases to STP / Conditional STP / Non-STP / Reject, and returns explainable reason codes. ## Run Locally ```powershell python -m venv .venv .\\.venv\\Scripts\\Activate.ps1 pip install -r requirements-dev.txt python -m app.db.init_db uvicorn app.main:app --reload ``` Swagger UI: `http://localhost:8000/docs` Business console: `http://localhost:8000/` ## Docker ```powershell docker compose up --build ``` ## Main APIs - `POST /generate-scorecard` - `POST /simulate-scorecard` - `GET /scorecard/{lead_id}` - `GET /rules` - `POST /rules` - `PUT /rules/{id}` - `PATCH /rules/{id}/status` - `GET /health` ## Rule Model Rules are structured records, not code. Business teams can update thresholds, scores, eligibility checks, and underwriting triggers through APIs. Supported operators: `>`, `>=`, `<`, `<=`, `=`, `!=`, `BETWEEN`, `IN`, `NOT_IN`. Rule types: - `SCORE` - `HARD_REJECT` - `NON_STP` - `STP_ELIGIBILITY` The HTML console lets users edit rules product-wise for two wheeler, new/used car, new/used commercial vehicle, and new/used tractor scorecards. ## Example Request ```json { "tenantId": "default", "productType": "TWO_WHEELER_LOAN", "application": { "leadId": "TW10001", "customerName": "ABC", "mobile": "9999999999", "employmentType": "SALARIED", "monthlyIncome": 45000, "existingEMI": 8000, "foir": 32, "loanAmount": 95000, "assetCost": 125000, "ltv": 76, "tenure": 36, "dealerId": "DL101", "state": "Karnataka", "city": "Bangalore", "negativeArea": false, "faceMatchScore": 92, "panVerified": true, "aadhaarVerified": true, "bankingSurrogate": true, "coApplicant": false }, "bureau": { "cibilScore": 753, "creditVintageMonths": 123, "activeAccounts": 2, "closedAccounts": 47, "overdueAmount": 0, "writtenOffAccounts": 0, "settledAccounts": 0, "maxDPD": 0, "dpd30Count": 0, "dpd60Count": 0, "dpd90Count": 0, "creditEnquiries6M": 2, "creditEnquiries12M": 4, "activeUnsecuredLoans": 1, "activeSecuredLoans": 1, "jointAccounts": 0, "creditUtilization": 2 } } ```