Initialising

Case study / Software

Loan Management System

A lending workflow for a regional NBFC running 4,200 active loans across six branches - replacing three disconnected spreadsheets and a monthly closing that took four days.

Loan portfolio overview screen of the Loan Management SystemCollection ageing analytics screen of the Loan Management SystemEMI schedule and repayment calendar screen of the Loan Management SystemApplicant record and KYC screen of the Loan Management System

Interface visuals are representative; live screens are shown under NDA on a walkthrough call.

Problem statement

Loan applications arrived on paper and were re-keyed into one spreadsheet. EMI schedules lived in a second. Collection follow-ups were tracked in a third, maintained by whichever agent remembered. Nobody could answer two questions quickly: which accounts are overdue by more than 30 days, and who spoke to that borrower last.

Solution

One transactional system with a single applicant record, a rule-based eligibility check, generated amortisation schedules and agent-level collection allocation. Every state change writes an audit row, so the ageing report and the field log finally agree.

Outcome

  • Monthly closing reduced from four days to roughly half a day.
  • Overdue identification moved from manual review to a daily automated bucket list.
  • Sanction turnaround dropped from three days to same-day for pre-approved bands.
ClientRegional NBFC (6 branches)
Duration9 weeks
Team2 engineers + 1 reviewer
Active loans4,200
StatusLive since 2024, under retainer

Technology stack

  • Python
  • Flask
  • MySQL
  • Chart.js
  • Bootstrap
  • Gunicorn
  • Nginx
  • WeasyPrint

Also available as a student project

A scoped-down version of this build is one of our most requested B.Tech and MCA final-year projects, with source code, report and viva preparation.

Discuss it as a project

Modules

Six modules, one audit trail

Applicant & KYC

Capture applicant, co-applicant and guarantor details with document uploads and duplicate detection on PAN and mobile.

Eligibility & scoring

Rule engine on income, obligations and bureau band produces an eligibility amount with a printable reason list.

Sanction & disbursal

Two-step approval, sanction letter generation and disbursal entry posted against the branch ledger.

EMI schedule

Reducing-balance amortisation, part-payment handling, rescheduling and penal interest accrual.

Collections

Daily allocation to agents, field visit logging, promise-to-pay tracking and ageing buckets.

Reports

Portfolio at risk, branch collection efficiency, NPA movement and an audit trail export.

Database design

Normalised schema, five core tables

applicants id / pan / mobileincome / branch_idkyc_status loans id / applicant_idprincipal / ratetenure / statussanctioned_by emi_schedule id / loan_iddue_date / amountpaid_flag payments id / emi_idmode / utrcollected_by agents id / namebranch_idtarget 1 : N 1 : N 1 : N 1 : N

API flow

One request path, traced end to end

Browser Flask API/loans Rule engineeligibility MySQLtxn + audit Report servicePDF / CSV out

Animated dashes follow the live request direction.

Features

What ships in the box

  • Role-based access for admin, branch manager, agent and auditor
  • Reducing-balance EMI engine with part-payment and rescheduling
  • Sanction letter and statement generation as PDF
  • Daily collection allocation with promise-to-pay tracking
  • Ageing buckets, portfolio-at-risk and NPA movement reports
  • Immutable audit log on every financial state change

Future scope

What we would build next

  • Bureau API integration for live credit pulls
  • UPI autopay mandate for EMI collection
  • Mobile field app with offline visit capture
  • Early-warning delinquency model on repayment behaviour
  • Borrower self-service portal for statements and receipts

Next step

Need something like this?

Tell us the workflow you are replacing. We will come back with a module map, a schedule and a price range.