Back to all work

Student recruitment agency

University commission statements, reconciled to the penny

Client
Student recruitment agency, United Kingdom
Timeline
First stage, then follow-on scope
Status
Live

Each partner university pays commission and sends a statement in its own format. The agency re-keyed them into one spreadsheet. Now statements are parsed on upload and the money is tracked per student, year and term.

The problem.

Spreadsheets, PDF remittances and CSV files, all with different columns. Mistakes in re-keying meant unpaid commission nobody noticed.

What we built.

  • A parser where each partner is a short config block. Adding a new university needs no new code.
  • A finance screen built to the client’s mock-up: expected, invoiced, paid, outstanding, bonus and progression.
  • A payment journal per student. Manual corrections survive the next import.
  • Import preview on a copy of the database, so nothing is changed until someone confirms it.
  • A summary that points out gaps in the agency’s own records, not only the partners’.

Decisions worth explaining.

Money in pennies

Every amount is stored as an integer number of pennies. Rounding errors cannot accumulate across hundreds of rows.

In numbers.

13 / 13reconciliation metrics match partner totals exactly
39point acceptance checklist signed off
~110automated tests

Stack

  • Python
  • FastAPI
  • Jinja
  • SQLite
  • Docker Compose
  • Caddy

Need something like this?

Describe your process. We will tell you which parts of this system fit it and what it would cost.

I want the same

Have a process that eats your evenings?