Bank commission platform
The monthly commission cycle for the advisors who sell Banco GNB Sudameris payroll-deduction loans, built solo: from the bank's Excel to signed payment requests and the bank's batch-payment file.

Problem
Lejarde & Ortiz S.A.S. is a provider of Banco GNB Sudameris: its sales advisors sell the bank's payroll-deduction loans, and coordinators supervise them city by city. Every month the bank sends an Excel file of the loans paid out, and every advisor and coordinator earns a commission on them. That cycle was done by hand: split the Excel, send the pieces to coordinators over WhatsApp and email, collect corrections, apply discounts and refunds in a spreadsheet, chase signed payment requests (cuentas de cobro), then type every payment into the bank.
What I built
A web platform that runs the whole monthly cycle, with a portal for each role: admin, coordinator and advisor.
- Excel ingestion and matching. The admin uploads the bank's file. The parser normalises header variants, amounts and Excel dates, and flags invalid rows with a reason. Each loan is matched to its advisor by seller code and to a coordinator through dated assignments; unknown codes wait in a queue.
- An audited five-state cycle. Each month moves from ingested to under review, adjusting, ready for export and closed, and every transition is logged. Coordinators approve loans or propose fixes, such as a loan sold in another city; the admin accepts or rejects them.
- Tiered commissions. Dated, per-person rules pay a rate per million pesos that steps up as an advisor's monthly volume crosses milestones; coordinators earn on their team's volume. Every recalculation creates a new payout version.
- Signed PDFs. Advisors add their bank details and signature and choose full, partial or split payment. The platform renders each cuenta de cobro as a PDF with the amount in words and the tax-statute certification.
- The bank's batch file. It exports GNB's batch-payment file: one fixed-width, 238-character line per payee, and the export stops if a single line is off.
My role
Sole developer: 118 of 118 commits, from the data model to the Docker deployment. I started on FastAPI and Python and rewrote it in TypeScript on Hono partway through. I planned it with the BMAD method (PRD, architecture, stories) and directed AI coding agents through the build.
Stack
TypeScript on Node 22, Hono with server-rendered templates, PostgreSQL 16 with Drizzle, SheetJS for Excel, Puppeteer for PDFs, S3-compatible storage and Docker Compose. About 68 unit tests and about 220 Playwright end-to-end tests, including accessibility and mobile suites.
Result
In manual tests, the monthly cycle went from 20 hours to 4 hours, 80% less time. The platform produces the signed payment requests and the bank file itself, so nobody has to split spreadsheets or retype payments.


