Failure 01
No audit trail
Last month's certificate is whatever the file said before somebody overwrote it. There is no trustworthy history — only the current state of the spreadsheet and everyone's memory of how it got there.
Case study · Open-source QS tooling
A lightweight Flask application that runs the monthly valuation on construction contracts: import the Bill of Quantities, record cumulative quantities, and issue the Interim Payment Certificate — retention, cap, and previous-payment carryover handled exactly, with a stored history of every certificate. Built for the small and mid-sized contractors priced out of enterprise systems.
Enterprise systems for this exist — CCS Candy, RIB, Procore, Oracle Contract Management — but they're priced and scoped for tier-1 contractors who commit a whole project into their ecosystem. Everyone else runs interim valuations in ad-hoc Excel files, and the same three failures repeat on site after site.
Failure 01
Last month's certificate is whatever the file said before somebody overwrote it. There is no trustworthy history — only the current state of the spreadsheet and everyone's memory of how it got there.
Failure 02
The deduction logic lives in cell references nobody dares touch. When the figure looks wrong, checking it means reverse-engineering the workbook — and the limit-of-retention clause is usually implemented from memory.
Failure 03
The whole payment process depends on the one engineer who built the file. When they leave, the project's commercial memory leaves with them.
The application does exactly what a working QS does each month — set up once, then measure, value, and certify, period after period, with each certificate building correctly on the last.
Set up the contract. Parties, currency, contract value, retention % and an optional limit-of-retention cap — entered once, governing every certificate.
Import the bill. CSV or Excel, validated row by row. Anything
ambiguous — like a locale decimal comma in 12,5 — is refused with
the row number, never guessed. All-or-nothing: a half-loaded bill cannot exist.
Measure the period. A draft certificate opens prefilled with the previous certificate's cumulative quantities; enter this month's cumulatives and the valuation recomputes — overruns flagged, corrections shown in red.
Issue the IPC. The five summary figures freeze onto the record
permanently, and the page prints as the certificate itself — signature blocks
included, DRAFT watermark until issued.
A commercial lead decides in thirty seconds whether a certificate can be
trusted, and they test it three ways. The valuation engine guarantees all
three — every figure is a Decimal, stored as exact scaled
integers, rounded half-up; floats never touch money.
Rule 01
Line values are rounded to 2 d.p. first; totals are the sum of the rounded lines — so adding the printed column reproduces the printed total exactly, to the smallest unit.
Rule 02
A line's this-period value is the difference of its rounded cumulative and previous values — never an independently rounded qty × rate — so previous + this period = cumulative on every printed row.
Rule 03
Net payable = this certificate's cumulative due minus the previous certificate's cumulative due. Summing every net payable over the job equals the final cumulative due — nothing double-counted, nothing lost.
The one-fils trap · qty 100.5 cum / 50.25 prev · rate 0.33
Round the period independently and the row fails to cast: 16.58 + 16.58 ≠ 33.17. One fils out — exactly the fils a reviewing QS finds. The engine computes the difference, and a unit test pins the behaviour.
| Cumulative work done | 345,569.94 |
| Less retention (10%) | (34,556.99) |
| Cumulative amount due | 311,012.95 |
| Less previously certified | (65,407.50) |
| Net amount payable this period | 245,605.45 |
The same suite covers the awkward cases: an optional limit of retention (retention freezes at the cap, after which net payable receives the full growth in work done), downward re-measures producing negative this-period values, and — when a correction is large enough — a negative certificate, reported rather than hidden.
A small codebase with deliberate seams — each decision below is documented in the repository where it's made.
The pitch is not "no one has built this." It's that the people who need it most are priced out of the ones that exist — so here is a free one that does the core job cleanly.