Iris Waves MPS Billing System
Turning inconsistent, manually-recorded printer meter readings into a validated, auditable monthly billing dataset.
Business question
Before any of this was code, it was a spreadsheet, and a monthly ritual of pain. Each month meant re-deriving "this reading minus last month's reading" for every machine by hand, across four print categories, at rates that differ per client and per machine, then applying one of three discount structures. No consistent check for a typo. No way to see, before invoices went out, which machines were simply missing a reading. The interesting realization was that this was never really a calculator problem. It was a rules problem: what does this business actually bill by, and how do I encode it so the same input always produces the same correct, explainable output?
Business rules encoded
Design rationale (the why)
Validation output
| Serial No. | Usage | Status | Amount |
|---|---|---|---|
| XRX-FC-001 | 7,000 | Valid | ₹18,420 |
| XRX-FC-002 | 4,500 | Valid | ₹9,215 |
| XRX-FC-003 | — | Missing reading | ₹0 (excluded) |
| XRX-HM-011 | −1,200 | Failed validation | ₹0 (excluded) |
Billing dashboard
| FreeCharge | 3 machines | ₹18,830 | Done |
| Hemata | 2 machines | ₹10,080 | Pending |
| Plasma Labs | 1 machine | ₹0 | Pending |
Pipeline
The export layer also feeds a companion fleet-analytics dashboard with real computed revenue, so nothing gets re-keyed.
Outcomes
- Billing runs from explicit versioned rules, not drifting spreadsheet formulas
- Data-quality issues are caught at month-close, before client-facing errors
- Every number is traceable back to a reading and a rule
- Dataset auto-feeds a second reporting system, eliminating one manual re-entry risk
Reflection
The hardest part wasn't arithmetic; it was translating ambiguous, human billing policy into deterministic logic that a machine can run the same way every time. Getting the free-pages rule right meant sitting with how the business actually thought about the credit, not the simplest interpretation of it. Good data work is often less about the math and more about pinning down what people actually mean.