Developers
Integrate at the edges. Keep the core canonical.
Meters, payment rails, ERP, billing, GIS and SCADA connect through explicit contracts so application logic does not become vendor-specific.
Contracts
Primary integration boundaries
| Boundary | Core methods / fields | Purpose |
|---|---|---|
| Meter adapter | identify, decodeRawPayload, normalizeReading, normalizeStatus, capabilities | OEM protocol → canonical water data |
| Payment adapter | parseCallback, verifyTransaction, normalizeTransaction, parseReversal | Payment rail → normalized payment evidence |
| Event envelope | type, schema_version, workspace_id, aggregate_id, occurred_at, correlation_id | State transition → auditable event |
| External reference | source_system, source_id, source_timestamp, ingestion timestamp | Legacy IDs remain traceable |
| Water balance | inflow, outputs, authorized consumption, storage, gaps, confidence | Measured inputs → explainable variance |
Example trace
WaterPesa’s canonical accountability chain
Trace
bulk inflow → zone / DMA → distribution assets → customer / estate meters → validated consumption → tariff → billed amount → payment → allocation → variance → incident → work order → repair → post-intervention reading → litres recovered → revenue recovered