
Overview
Loan files travelled by email and shared drive. It worked, more or less, until a regulatory review — then somebody spent a fortnight reconstructing who approved what, on which version of which document, and why. Their risk head's brief to us was blunt: he wanted to answer any auditor's question in one export, and he wanted to change credit policy without raising a ticket with a developer.
The challenge
- Six working days, median, to approve a small-ticket loan.
- KYC done by hand, with the same details keyed into three systems.
- No immutable record of why a decision was made, only the outcome.
- Every credit policy tweak needed a code change and a release.
How we approached it
Run the checks in parallel, not in a queue
Aadhaar e-KYC, PAN verification and bank statement analysis fire at the same time. Only exceptions reach a human, and the human sees exactly which check flagged.
Hand the policy back to the risk team
Credit rules moved into a versioned rules engine the risk team edits themselves. Every change is dated, attributable and reversible. This took the longest to get right and mattered the most.
A decision log that cannot be edited
Inputs, rule version, scores and approver identity are written once per decision and exported in the shape auditors actually ask for.
Stop chasing borrowers over email
Applicants see the one document still pending and upload it themselves. That alone removed most of the back-and-forth.
What we built
Technology stack
Backend
- Python
- FastAPI
- PostgreSQL
Frontend
- React
- TypeScript
Compliance
- Rules engine
- Encrypted document vault
- Audit exports
The results
median approval time
applications straight-through
decisions with audit trail
files handled per credit officer
"Our last audit took two days instead of two weeks. And my team changes credit policy on a Tuesday afternoon without asking anyone's permission — that is the part I did not think we would get."



