Fund Sanctions Management System (FSMS)

Multi-stage fund sanction workflow for government budget allocations - replacing an unvalidated Excel process with atomic transactions and full audit trails.

PythonDjangoPostgreSQLBootstrapBusiness AnalysisAudit Trail

A Django system managing the end-to-end workflow of government fund sanctions - State Budget Allocations, certification tranches, and Mother Sanctions - with strict multi-stage validation, transactional integrity, and complete audit trails, built for a Ministry of Education section that previously tracked this process by hand in Excel.

The Challenge

The section relied on a shared Excel sheet to track fund releases and expenditure, with no row-level validation - data intended for one row could be misplaced with no safeguard. PFMS, India's public financial management system, doesn't track fund movement at this day-to-day granularity. Beyond basic tracking, the actual sanctioning process required enforcing a strict validation hierarchy (SBA Allocation → Certification → Mother Sanction) that a spreadsheet had no structural way to guarantee, plus separate aggregation logic for Union Territories, where sanctions apply to Object Head Types rather than individual budget heads.

Key Decisions & Tradeoffs

  • Enforced the SBA → Certification → Mother Sanction validation hierarchy directly in the data model: funds cannot be sanctioned beyond what was certified, and cannot be certified beyond what was allocated - closing the exact validation gap that made the Excel process error-prone.
  • Built a 'one draft per budget head' guardrail preventing duplicate or conflicting in-progress sanctions, enforced at both UI and API level.
  • Used atomic database transactions for batch sanction finalization: an all-or-nothing guarantee where, if any sanction in a batch fails validation, none of them finalize - no partially-applied state possible.
  • Designed separate aggregation logic for Special Union Territories (Andaman & Nicobar, Chandigarh, Dadra & Nagar Haveli, Lakshadweep), where sanctions apply to Object Head Types (General/SC/ST) rather than individual budget heads, distinct from standard-state logic.
  • Built a parallel versioning strategy - separate V1/V2 views, templates, and service functions - allowing new logic to be shipped and instantly toggled or rolled back via a single URL configuration change, with no migrations or redeploys required to revert.
  • Integrated django-simple-history for a full audit trail on every sanction and allocation change, and shared IFD (Integrated Financial Division) Entry Numbers for batch tracking across states.

Outcome

Replaced a validation-free, error-prone Excel workflow with a system that structurally enforces the ministry's actual sanctioning rules, gives the section instant rollback between logic versions with zero downtime, and provides complete auditability of every change.