SIMF
case studyInternal Financial Management System
Internal web platform that monitors budget & financial execution for the Pará State Department of Education. Anchor project — I'm the tech lead and product owner.
- Next.js 15
- React
- Tailwind
- Supabase
- PostgreSQL
● Private gov system — case study only, with fictional-data screenshots. No code or real data is published.
// the case
- problem
- Budget and financial execution were tracked across scattered tools, with no single real-time view for the directors who answer for it.
- solution
- A role-based web platform that reads SIAFE data in real time, with modules for budget execution, settlements, payments and bank accounts — in active use by DFIN and DPPC.
- impact
- In active production use, serving SAPF. Deployed on an Ubuntu VM (Nginx + PM2) behind internal DNS with SSL.
// my role
Tech lead and product owner — the technical decision-maker, not a people manager. Data model, modules, access control and the production deployment.
// overview
SIMF reads SIAFE, the state's financial system, and turns it into something the directors who answer for the budget can actually read. Four modules follow the money in the order it moves: CEO for budget execution, CLIQ for settlements, CPAG for payments, and ACONT for the bank accounts underneath.
Access is scoped by directorate — DFIN sees its modules, DPPC sees its own — and administrative actions run with service privileges and land in an audit log. It runs on an Ubuntu VM behind Nginx and PM2, on internal DNS with SSL, inside the corporate network.
// engineering notes
One question the institution couldn't answer
Budget execution lived across scattered spreadsheets and SIAFE exports, so "how much is actually committed and still unpaid?" took days and produced different answers depending on who asked. The modules exist to make that one number reachable in a click, from the same source, for everyone.
Following the money, not the screens
The modules mirror the actual lifecycle of public spending — commitment, settlement, payment, bank reconciliation — so a document can be traced end to end: a commitment note to its settlement to the payment order that cleared it. That shape came from the domain, not from a menu structure.
Ingesting a system that wasn't built to be read
SIAFE exports are CSVs with inconsistent number formats, null sentinels and columns that change between report types. The import layer normalises and validates them against schemas before anything reaches the database, and reconciles the three related exports so the figures agree with each other.
Access control that survives an audit
Roles are enforced on the server, not by hiding menu items: each directorate reaches its own modules, administrative operations run with service privileges, and every one of them is written to an audit log. In a government system the question is never only "did it work" but "who did it, and when".