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. Energy meter reading record validation aligned with Ofgem Smart Metering Implementation Programme (SMIP), MOSL (Market Operator Services Limited) UK energy market standards, and UK Finance metering code of practice. Enforces MPAN (Meter Point Administration Number) 13-digit format for electricity and MPRN (Meter Point Reference Number) 6-10 digit format for gas, read type classification (actual/estimated/smart/customer), monotonic reading progression (current register must be >= previous), anomaly detection on consumption values, and supply type classification. Prevents billing disputes, energy theft masking, and Ofgem settlement system rejections caused by invalid meter identifiers or out-of-sequence readings.
| Rule | Field | Severity | What it enforces (the message your team sees) |
|---|---|---|---|
| meter_id_required | meter_id | error | meter_id is required |
| mpan_format | mpan | warning | mpan must be a 13-digit MPAN (Meter Point Administration Number). e.g. 1012345678900 — invalid MPANs are rejected by ECOES and DCC smart metering systems |
| mprn_format | mprn | warning | mprn must be a 6-10 digit MPRN (Meter Point Reference Number) — invalid MPRNs cause Xoserve/UK Link gas data flow rejection |
| reading_date_format | reading_date | error | reading_date must be a valid date (YYYY-MM-DD) |
| kwh_reading_min | kwh_reading | error | kwh_reading must be >= 0 |
| kwh_reading_anomaly | kwh_reading | warning | kwh_reading exceeds 100,000 kWh — verify for meter rollover, unit error (Wh vs kWh), or data entry mistake. UK average annual household consumption is ~2,700 kWh. |
| current_reading_monotonic | kwh_reading | error | kwh_reading must be >= previous_reading — a lower current reading indicates meter rollover, meter replacement, or data entry error. All three cases must be resolved before Ofgem settlement submission. |
| read_type_values | read_type | error | read_type must be one of: actual, estimated, customer, smart, check, initial, final, corrected (Ofgem BSCP — estimated reads cannot be used for final billing settlement) |
| tariff_code_required | tariff_code | error | tariff_code is required |
| customer_id_required | customer_id | error | customer_id is required |
| supply_address_required | supply_address | error | supply_address is required |
| meter_type_required | meter_type | error | meter_type is required |
| meter_type_valid | meter_type | error | meter_type must be one of: electricity, gas, heat, solar_export, ev_charger |
| reading_unit_valid | reading_unit | error | reading_unit must be one of: kWh, m3, MJ, kVArh, kW |
| supply_type_values | supply_type | warning | supply_type must be one of: domestic, sme, i_c, micro_generation, unmetered (Ofgem BSC — i_c sites above 100 MWh/year require half-hourly settlement) |
| previous_reading_min | previous_reading | error | previous_reading must be >= 0 |
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 →