Starter contract

ofwat_meter_reading

12 rules · plain YAML · starts in observation mode

OpenDQV Cloud starter template (v0.1) — your tenant inherits this baseline. First customer edit creates v1.0 in your audit trail; pin by yaml_hash for replay. Water utility meter reading validation. Enforces Ofwat data quality requirements for meter reading records in the UK Open Water market. Validates read type classification (actual/estimated/customer/smart) per Market Operator Services Limited (MOSL) standards, meter status lifecycle values, anomaly detection on consumption volumes (readings > 1,000 m3 in a single period are likely data entry errors or leak indicators requiring investigation), and monotonic meter progression (current cumulative reading must be >= previous reading). Prevents erroneous readings from triggering incorrect billing, false leak alerts, or water efficiency misreporting under Environment Agency obligations.

These are starting points you own. Every rule below ships in the trial, starts in observation mode, and is yours to read, edit, or delete from day one. Rules that reference a lookup list (lookup_file) validate against reference data you control in your tenant.
Rules as at 29 August 2026 — starting points you own, not a maintained regulatory feed. We correct errors in these samples; tracking regulatory change in your active contracts is yours.
RuleFieldSeverityWhat it enforces (the message your team sees)
meter_id_requiredmeter_iderrormeter_id is required
reading_date_formatreading_dateerrorreading_date must be a valid date (YYYY-MM-DD)
consumption_m3_minconsumption_m3errorconsumption_m3 must be >= 0
consumption_m3_anomalyconsumption_m3warningconsumption_m3 exceeds 1,000 m3 — verify meter reading for data entry error, meter fault, or unreported leak (Ofwat PR24 leakage reporting obligations apply)
customer_id_requiredcustomer_iderrorcustomer_id is required
site_id_requiredsite_iderrorsite_id is required
meter_status_requiredmeter_statuserrormeter_status is required
meter_status_valuesmeter_statuserrormeter_status must be one of: active, inactive, replaced, faulty, removed, awaiting_installation, decommissioned (MOSL MDD meter asset lifecycle values)
read_type_valuesread_typeerrorread_type must be one of: actual, estimated, customer, smart, check, final (MOSL read type classification — estimated reads are not valid for billing disputes or leakage reporting)
tariff_zone_requiredtariff_zoneerrortariff_zone is required
previous_reading_m3_minprevious_reading_m3errorprevious_reading_m3 must be >= 0
current_reading_monotoniccurrent_reading_m3errorcurrent_reading_m3 must be >= previous_reading_m3 — a lower current reading indicates meter rollover, meter replacement, or data entry error. Set meter_status = replaced if meter was exchanged.

Run your own data against this contract in the free trial — drop a CSV in the dashboard, no code, no credit card. Start free trial →