• Flutter
  • Go
  • PostgreSQL

Utility billing

Meter readings taken on a phone with no signal, tariffs that change without a deploy, and a bill a customer can check line by line.

A meter reader walks a route with no signal, a tariff changes in the middle of a quarter, and a customer disputes one line on a bill. The system is built around those three facts rather than around a path where none of them happen.

Features

  • Routes assigned to readers, downloaded before they leave and synced on return
  • Readings captured with a photograph of the meter as evidence
  • Implausible readings flagged at the point of capture, not at billing
  • Tariffs, blocks and standing charges as configuration with an effective date
  • Bills showing the calculation line by line, in both languages
  • Payments, part-payments and arrears tracked per account
  • A disconnection and reconnection workflow with its own approvals
  • Consumption history per account, so a spike is visible before it is disputed

A bill that cannot be explained gets disputed, so every line shows the reading, the period and the rate that produced it. That one decision removed most of the traffic at the counter.