# HNQAP — full text Source: https://hnqap.org · https://github.com/heatweb/HNQAP · built 2026-10-25 --- # HNQAP-MQTT v1 protocol **Status: draft for public comment.** Version 1.0-draft, October 2026. [Comment on this specification](https://github.com/heatweb/HNQAP/issues/new?template=protocol-comment.yml). This specification defines how a heat network data point is addressed, named and published over MQTT. It is deliberately small. A controls engineer can apply it to an existing BMS in an afternoon, and a software developer can consume it with an MQTT client and one JSON file. The key words MUST, MUST NOT, SHOULD and MAY are used as in RFC 2119. ## 1. Scope The protocol covers: - the address of a data point: live readings, settings, design values and inspection answers alike; - the names used at each level of the address, drawn from the [HNQAP vocabulary](/vocabulary/); - payloads, timestamps and transport for publishing readings. It does not cover how readings are stored, how KPIs are computed (see the [KPI reference](/kpis/)), or commercial arrangements between the parties exchanging data. ## 2. The address Every data point has an address of exactly six segments: ``` ///// ``` | # | Segment | Identifies | Examples | |---|---|---|---| | 1 | schema | The organisation or portfolio that owns the data; one access and storage partition | `acme`, `org_name` | | 2 | network | A site: one heat network | `riverside_court` | | 3 | element | A part of the network with its own identity: energy centre, substation, block, dwelling. `global` is the site itself | `ec1`, `ss2`, `cc14`, `global` | | 4 | device | A physical device within the element, or the monitoring point it serves | `boiler1`, `intake`, `hiu1`, `network` | | 5 | vargroup | The kind of value | `sensor`, `hmeter`, `status`, `design` | | 6 | varkey | The data point itself | `tF`, `tR`, `kwh`, `m3h` | The same address is the MQTT topic, the storage key and the column name in exports. A tool that knows the address knows everything it needs to find the value again. ### 2.1 Segment rules 1. A segment MUST be non-empty and MUST NOT contain `/`, `+`, `#` or whitespace. 2. `schema` MUST contain only ASCII letters, digits and underscore. It is compared case-insensitively. 3. `network` and `element` SHOULD be lowercase ASCII letters, digits and underscore. 4. `vargroup` and `varkey` MUST be registered names from the [vocabulary](/vocabulary/), or the names in the [monitoring points](/monitoring-points/) table, when one with the right meaning exists. They are case-sensitive. 5. A receiver MUST read the address **right-anchored**: the last six segments of a topic are the address, so a broker may prefix topics with its own access-control levels. ### 2.2 Elements and devices on monitored networks Where an element is one that heat network assurance monitors (energy centre, district distribution, substation, communal distribution, consumer connection), a meter or sensor device SHOULD be named for the monitoring point it serves. The quantity keeps its ordinary varkey. | Device name | Monitoring point | |---|---| | `intake` | SS1, DD1, CD1: intake boundary meter | | `offtake` | SS2: offtake boundary meter | | `termination` | DD2, CD2: termination boundary meter | | `boundary` | EC3, CC1: boundary meter | | `pump` | EC4, SS3: distribution pump set | | `makeup` | EC5: make-up water meter | | `watermeter` | SS4: water meter | | `pressure` | EC8, SS7: operating pressure | | `EC1` … `EC8`, `SS1` … `SS7`, `DD1` … `DD3`, `CD1` … `CD3`, `CC1` | The point itself, written in capitals | ``` acme/riverside_court/ss1/intake/hmeter/tF 69.3 acme/riverside_court/ss1/offtake/hmeter/tF 64.1 acme/riverside_court/ec1/EC3/hmeter/kwh 15869 ``` A KPI engine can then bind a device to its monitoring point by name alone. Device names are matched case-insensitively. ### 2.3 Site-wide values Constants that belong to the whole site (calorific value, tariffs, carbon factors, design temperatures) MUST be published on element `global`, device `network`, in vargroup `design`: ``` acme/riverside_court/global/network/design/gasCalorificValue 39.5 ``` ## 3. Names ### 3.1 Vargroups: the kind of value A vargroup classifies the nature of a value, never the process that produced it. `design/tF` is a design intent wherever it was entered; `sensor/tF` is a measurement whoever took it. | Kind | Vargroups | Meaning | |---|---|---| | telemetry | `sensor`, `hmeter`, `meter`, `gmeter`, `emeter`, `status`, `setpoint`, `set` | Readings and states published by equipment | | shared | `design`, `system` | Values any process may write and every process reads | | process | `acceptance`, `survey`, `onboarding`, … | Answers that belong to one quality-assurance procedure | | system record | `site`, `device` | Attributes of the record itself | ### 3.2 Varkeys: one name, one shape A varkey has **one type and one set of units everywhere it is used**, fixed when the name is registered. A publisher MUST convert to the registered units rather than publish the same name in other units. A legacy or vendor spelling MAY be recorded as an alias so that old data stays readable, but new data MUST use the registered name. Before using a new name, search the [vocabulary](/vocabulary/). If nothing has the right meaning, [propose a varkey](https://github.com/heatweb/HNQAP/issues/new?template=varkey-proposal.yml). ## 4. Payloads 1. The payload of a single reading MUST be the plain value as UTF-8 text: a number such as `72.4`, or a short text state such as `fault`. 2. A number MUST be written in full: optional sign, digits, optional decimal point and optional exponent. Units, status flags and other decoration MUST NOT be added to a numeric payload. 3. A receiver MUST store a payload that is not a complete number as text on the same address, and MUST exclude text values from numeric calculations. A receiver MUST NOT extract a number from inside a text value. 4. A JSON object or array MAY be published as a payload, for example a batch (§6). A receiver that does not decode it MUST keep it rather than drop it. ## 5. Timestamps 1. A publisher using MQTT 5 SHOULD send the time the value was measured as the user property `time`: epoch seconds, epoch milliseconds or an ISO 8601 string with an offset. 2. Without that property, the reading's time is the time the receiver took it from the broker. 3. A receiver SHOULD treat the pair (address, time) as unique, so that a message delivered twice is stored once. ## 6. Batch profile A station that exports a whole point list as one message MAY publish it as a JSON object with a `status` array, on a topic whose fifth segment is the literal `json`: ``` ////json/ ``` ```json { "status": [ { "displayName": "boiler_1__flow_temp_sensor", "value": "71.8 °C {ok}" }, { "displayName": "dhn__pump_speed_driver", "value": "42.0 % {ok}" } ] } ``` The receiver explodes the batch into one reading per entry. A display name of the form `___` (device, double underscore, point name, then the vargroup as the last token) resolves straight to a six-level address. Any other name is stored under `/point/` and mapped later. Inside a batch, value strings MAY carry units and status flags; the receiver extracts the leading number. Every reading in a batch takes the batch message's time under §5. ## 7. Transport | | | |---|---| | Protocol | MQTT 3.1.1 or 5 | | Security | TLS, port 8883. Plain-text connections MUST NOT be used across public networks | | Credentials | One per site or gateway, allowed to publish only under its own `//#` | | QoS | 0 or 1 | | Retained messages | Not required | | Cadence | On change of value with a periodic re-send, or a fixed scan. One to five minutes suits heat network KPIs; the [KPI reference](/kpis/) states the minimum frequency for each monitoring point | ## 8. Reading data back Because the address is the topic, MQTT topic filters work as queries at any level, and the same filters can be used as access rules: | Filter | Reads | |---|---| | `acme/riverside_court/#` | Everything on one network | | `acme/+/+/+/hmeter/kwh` | Every heat meter energy register in a portfolio | | `acme/riverside_court/+/intake/hmeter/#` | Every intake boundary meter on a network | | `acme/riverside_court/global/network/design/#` | The site's constants | ## 9. Conformance | Level | A publisher… | |---|---| | **Addressed** | publishes on six-level addresses (§2) with plain payloads (§4) over TLS (§7) | | **Named** | also uses registered vargroups and varkeys in their registered units (§3) | | **Assurance-ready** | also names devices for monitoring points on monitored elements (§2.2), publishes site constants on `global/network/design` (§2.3), and timestamps at source (§5) | A receiver conforms when it applies §2.1 rule 5, §4 rules 3 and 4, and §5. ## 10. Versioning This document is versioned with the repository. A breaking change to the address or the payload rules requires a new major version (`HNQAP-MQTT v2`). Names are never deleted from the vocabulary: a withdrawn name is marked `retired` with `replacedBy`. Changes are recorded in the [changelog](https://github.com/heatweb/HNQAP/blob/main/CHANGELOG.md). A worked implementation, including the batch profile in production use on a Niagara station, is the [BMS connection guide](/bms-guide/). --- # Data standard The data standard behind Heatweb's heat-network and spray-booth software, published so that third parties — and third-party code assistants — can build on the same names. Everything in this folder is generated from the live registry; nothing here is hand-maintained except `PROPOSED.md`. | File | What it is | Use it for | |---|---|---| | `vocabulary.json` | The registry: every **vargroup** and **varkey** with its shape (type, units), title, meaning, aliases and allowed groups | Machine lookup — pin a copy, validate names against it | | `vargroups.md` | The vargroups as a readable table | Browsing | | `varkeys.md` | The varkeys as a readable table, grouped by vargroup | Browsing, searching by title or alias | | `PROPOSED.md` | Names nominated but not yet approved | What is coming; comment before it lands | | `BMS-CONNECTION-GUIDE.md` | How a BMS or data logger publishes to the broker | Connecting a site | | `build.py` | Regenerates the Markdown tables from `vocabulary.json` | Keeping the tables honest | Raw URLs for tools: `https://raw.githubusercontent.com/heatweb/HNQAP/main/standard/vocabulary.json` --- ## 1. The address: six levels Every data point — a live reading, a design value, a survey answer, a setting — is addressed by six segments. The same address is the MQTT topic, the database key and the column name in exports. ``` ///// ``` | # | Level | Identifies | Examples | |---|---|---|---| | 1 | **schema** | The owning organisation or partner group; one database partition | `heatweb`, `acme`, `org_name` | | 2 | **network** | A site: a heat network or a body shop | `riverside_court`, `unit4_bodyshop` | | 3 | **element** (node) | A thing on the site with its own identity: an energy centre, substation, dwelling (consumer connection), BMS controller. `global` = the site itself | `ec1`, `cc14`, `b1_4_130`, `global` | | 4 | **device** | A physical device within the element; `network` for site-wide values on `global` | `boiler1`, `pump1`, `hiu1`, `cp1`, a serial number, `network` | | 5 | **vargroup** | The *kind* of value — what sort of thing it is, not which process produced it | `sensor`, `hmeter`, `gmeter`, `emeter`, `status`, `setpoint`, `set`, `design`, `system`, `acceptance` | | 6 | **varkey** | The specific data point, from the registry | `tF`, `tR`, `kw`, `m3Gas`, `gasCalorificValue`, `tSetpointDHW` | Examples: ``` heatweb/myHeatNetwork/energycentre/boiler1/sensor/tF = 73.5 heatweb/myHeatNetwork/energycentre/boiler1/gmeter/m3Gas = 16353499.1 heatweb/myHeatNetwork/b1_4_130/hiu1/acceptance/tSetpointDHW = 52.5 heatweb/myHeatNetwork/global/network/design/gasCalorificValue = 39.5 acme/unit4_bodyshop/cp1/cp1/status/spray = 1 ``` ### Device names on monitored elements On an element that HNTAS monitors (energy centre, substation, district or communal distribution, consumer connection), a device is **named for the official monitoring point it serves**, and the quantity keeps its ordinary varkey (`tF`, `tR`, `kwh`, `m3h`). A consumer of the data binds the device to the point by its name alone; a meter under a generic name (`hm1`, `subst`) cannot be told apart from the next meter on the same element. | Device name | Monitoring point | Meaning | |---|---|---| | `intake` | SS1, DD1, CD1 | intake boundary meter (primary side) | | `offtake` | SS2 | offtake boundary meter (secondary side) | | `termination` | DD2, CD2 | termination boundary meter | | `boundary` | EC3, CC1 | boundary meter | | `pump` | EC4, SS3 | distribution pump set | | `makeup` | EC5 | make-up water meter | | `watermeter` | SS4 | water meter | | `pressure` | EC8, SS7 | operating pressure measurement point | | `SS1` … `SS7`, `EC1` … `EC8`, `DD1` … `DD3`, `CD1` … `CD3`, `CC1` | that point | the official point code, written in capitals as the HNTAS guidance writes it — distinct from the element id `ss1` | ``` heatweb/myHeatNetwork/ss1/intake/hmeter/tF = 69.3 (SS1, primary side) heatweb/myHeatNetwork/ss1/offtake/hmeter/tF = 64.1 (SS2, secondary side) heatweb/myHeatNetwork/ec1/EC3/hmeter/kwh = 15869 (point code as the name) ``` Matching is case-insensitive; the capitals are a reading convention. ### Why the levels are MQTT-shaped - **Wildcards at any level**: `heatweb/myHeatNetwork/+/+/sensor/#` reads every sensor on a network. - **Access control by prefix**: a contract manager is granted one network; a partner gets only their schema. - **Storage keyed identically**: a topic filter translates directly into a row filter. - **Bridging**: brokers can mirror agreed prefixes between organisations in real time. ### Reading rules - Topics are read **right-anchored**: the last six segments are the address, so a longer prefix is tolerated. - Names are **case-sensitive**, ASCII letters, digits and underscore; `network` and `element` are lowercase. - A reading's value is a number where it parses as one, otherwise text. The registry says which a varkey is. ## 2. Vargroups: the kind of value A vargroup classifies the **nature** of a value, never the process that wrote it. `design/tFlow` is a design intent wherever it was entered; `sensor/tF` is a measurement whoever measured it. Kinds in the registry: | Kind | Meaning | Examples | |---|---|---| | `telemetry` | Live readings and states published by equipment | `sensor`, `hmeter`, `gmeter`, `emeter`, `status`, `setpoint`, `set` | | `shared` | Values any process may write and every process reads | `design`, `system` | | `process` | Answers belonging to one QA procedure | `acceptance`, `survey`, `onboarding`, `hnes_rev_study` | | `system_record` | Attributes of the record itself | `site`, `device` | ## 3. Varkeys: one name, one shape A varkey has **one shape everywhere**: its type and units are fixed when the name is registered. `gasCalorificValue` is MJ/m³ in every schema; if you hold kWh/m³, derive it. Aliases record legacy or vendor spellings so old data can still be read, but new data uses the registered name. Before naming anything new: 1. Search `varkeys.md` (name, title, aliases). 2. If a name with the right meaning exists, use it with its units. 3. If not, propose it: open an issue on this repository with name, vargroup, type, units and one-line meaning, or send it to Heatweb. Approved names appear in the next export; pending ones are listed in `PROPOSED.md`. ## 4. Publishing data Connect to the broker over TLS on port 8883 with the credentials issued for your schema, and publish each point on its full six-level topic (profile A), or publish a batch JSON object once per station and let the platform explode it (profile B), or Sparkplug B (profile C). `BMS-CONNECTION-GUIDE.md` has the details, the envelope format and the checklist. Site-wide constants (calorific value, tariffs, carbon factors) live on the site's `global` element, device `network`, in the `design` vargroup, so every consumer of the data finds them in the same place. ## 5. Versioning `vocabulary.json` carries `exportedAt`. Pin the copy you built against and diff on refresh. Names are never deleted: a withdrawn name is marked `retired` with `replacedBy`. --- # Monitoring points Every monitoring point that heat network technical assurance asks for, with the address it is published under in [HNQAP-MQTT v1](/protocol/). 106 entries, generated 2026-10-25. Download as [monitoring-points.json](/data/monitoring-points.json). A full address is `{schema}/{network}/{element}/` followed by the device, vargroup and varkey shown. On a monitored element the device is named for the point it serves (`intake`, `offtake`, `boundary` and so on, see [protocol §2.2](/protocol/#22-elements-and-devices-on-monitored-networks)), so a receiver finds each point without a mapping step: ``` acme/riverside_court/ss1/intake/hmeter/kwh ``` Point codes and descriptions paraphrase the scheme drafts; the scheme documents remain the authority. Some of these names, including the `hmeter` and `meter` vargroups, are in use on live networks but not yet in the [vocabulary](/vocabulary/) export. They are being registered, and this table is their reference until then. Comments on any address are welcome as [issues](https://github.com/heatweb/HNQAP/issues/new?template=protocol-comment.yml). ## Energy Centre (EC) **Live readings** | Point | Monitoring point | Quantity | Address (device/vargroup/varkey) | Units | Minimum frequency | |---|---|---|---|---|---| | EC5 | Make-up Water meter | Accumulated Volume | `makeup/meter/m3` | m³ | 30 min | | EC8 | Operating pressure measurement point | Static Pressure | `pressure/sensor/pSystem` | bar | 5 min | | EC7 | Distribution differential pressure measurement point | Differential Pressure | `EC7/sensor/dpSupply` | kPa | 5 min | | EC4 | Distribution pump set | Accumulated Energy | `pump/emeter/kwhElectric` | kWh | 30 min | | EC3 | Energy Centre boundary | Accumulated Energy | `boundary/hmeter/kwh` | kWh | 5 min | | EC3 | Energy Centre boundary | Accumulated Volume | `boundary/hmeter/m3` | m³ | 5 min | | EC3 | Energy Centre boundary | Flow Temperature | `boundary/hmeter/tF` | °C | 5 min | | EC3 | Energy Centre boundary | Instantaneous Flow Rate | `boundary/hmeter/m3h` | m³/h | 5 min | | EC3 | Energy Centre boundary | Instantaneous Power | `boundary/hmeter/kw` | kW | 5 min | | EC3 | Energy Centre boundary | Return Temperature | `boundary/hmeter/tR` | °C | 5 min | | EC6 | Index differential pressure measurement point | Differential Pressure | `EC6/sensor/dpIndex` | kPa | 5 min | | EC2 | Heat Source energy output | Accumulated Energy | `EC2/hmeter/kwh` | kWh | 5 min | | EC2 | Heat Source energy output | Accumulated Volume | `EC2/hmeter/m3` | m³ | 5 min | | EC2 | Heat Source energy output | Flow Temperature | `EC2/hmeter/tF` | °C | 5 min | | EC2 | Heat Source energy output | Instantaneous Flow Rate | `EC2/hmeter/m3h` | m³/h | 5 min | | EC2 | Heat Source energy output | Instantaneous Power | `EC2/hmeter/kw` | kW | 5 min | | EC2 | Heat Source energy output | Return Temperature | `EC2/hmeter/tR` | °C | 5 min | | EC1 | Heat source energy input | Accumulated Energy | `EC1/meter/kwh` | kWh | 30 min | | EC1 | Heat source energy input | Accumulated Volume of Gas | `EC1/meter/m3Gas` | m³ | 30 min | **Values entered once** (design, identity) | Value | Address | Units | |---|---|---| | HNTAS element code — instance ID assigned at registration (e.g. 00005) | `system/elementCode` | | | Parent element — energy flows from here (e.g. cd1 / cd1) | `system/parentElement` | | | System Volume | `design/systemVolume` | litres | | Maximum System Pressure | `design/maxPressure` | bar | | Maximum Supply DP | `design/maxDPSupply` | kPa | | Design Annual Pump Energy Use | `design/kwhAnnualPump` | kWh | | Design flow temperature | `design/tF` | °C | | Minimum Flow Temperature | `design/minFlowTemp` | °C | | Minimum Index Differential Pressure | `design/minDPIndex` | kPa | | Minimum Generation Efficiency | `design/efficiency` | % | | DESNZ fuel type ID (carbon calculator Table 1: 17 mains gas, 25 natural gas, 28 electricity, 27 biomass, 15 hydrogen) | `design/fuelType` | ID | | Declared boiler efficiency (fraction or %) - carbon fuel-input fallback when generation is unmetered | `design/boilerEfficiency` | fraction | | Design heat fraction of the lead heat source | `design/heatFraction` | % | **Derived by the platform** | Value | Address | Units | |---|---|---| | Distribution efficiency (delivered / generated) | `kpi/distributionEfficiency` | % | | Carbon content of delivered heat | `kpi/carbonContent` | kgCO2e/kWh | ## District Distribution (DD) **Live readings** | Point | Monitoring point | Quantity | Address (device/vargroup/varkey) | Units | Minimum frequency | |---|---|---|---|---|---| | DD3 | DP Measuring Point | Differential pressure at Index | `DD3/sensor/dpIndex` | kPa | 5 min | | DD1 | Intake Boundary | Accumulated Energy | `intake/hmeter/kwh` | kWh | 30 min | | DD1 | Intake Boundary | Accumulated Volume | `intake/hmeter/m3` | m³ | 30 min | | DD1 | Intake Boundary | Flow Temperature | `intake/hmeter/tF` | °C | 30 min | | DD1 | Intake Boundary | Return Temperature | `intake/hmeter/tR` | °C | 30 min | | DD1 | Intake Boundary | Instantaneous Power | `intake/hmeter/kw` | kW | 30 min | | DD1 | Intake Boundary | Instantaneous Flow Rate | `intake/hmeter/m3h` | m³/h | 30 min | **Values entered once** (design, identity) | Value | Address | Units | |---|---|---| | HNTAS element code — instance ID assigned at registration (e.g. 00005) | `system/elementCode` | | | Parent element — energy flows from here (e.g. cd1 / cd1) | `system/parentElement` | | | Minimum Index Differential Pressure | `design/minDPIndex` | kPa | | Expected average flow temperature | `design/tF` | °C | | Expected average return temperature | `design/tR` | °C | | Design maximum bypass flowrate | `design/maxBypassFlow` | m³/h | | Minimum required flow temperature | `design/minFlowTemp` | °C | | Dwellings served (heat-loss W/dwelling basis) | `design/dwellings` | | | Non-domestic connected load (heat-loss W/kW basis) | `design/kwConnection` | kW | **Derived by the platform** | Value | Address | Units | |---|---|---| | Flow/return ΔT | `kpi/deltaT` | K | ## Substation (SS) **Live readings** | Point | Monitoring point | Quantity | Address (device/vargroup/varkey) | Units | Minimum frequency | |---|---|---|---|---|---| | SS6 | Defined differential pressure exceedance measurement point | Differential Pressure | `SS6/sensor/dpOff` | kPa | 5 min | | SS5 | Defined index differential pressure measurement point | Differential Pressure | `SS5/sensor/dpIndex` | kPa | 5 min | | SS7 | Defined operating pressure measurement point | Static Pressure | `pressure/sensor/pOff` | bar | 5 min | | SS1 | Intake Boundary | Accumulated Energy | `intake/hmeter/kwh` | kWh | 5 min | | SS1 | Intake Boundary | Accumulated Volume | `intake/hmeter/m3` | m³ | 5 min | | SS1 | Intake Boundary | Flow Temperature | `intake/hmeter/tF` | °C | 5 min | | SS1 | Intake Boundary | Instantaneous Flow Rate | `intake/hmeter/m3h` | m³/h | 5 min | | SS1 | Intake Boundary | Instantaneous Power | `intake/hmeter/kw` | kW | 5 min | | SS1 | Intake Boundary | Return Temperature | `intake/hmeter/tR` | °C | 5 min | | SS3 | Network distribution pump | Accumulated Energy | `pump/emeter/kwhElectric` | kWh | 30 min | | SS2 | Offtake Boundary | Accumulated Energy | `offtake/hmeter/kwhOff` | kWh | 5 min | | SS2 | Offtake Boundary | Accumulated Volume | `offtake/hmeter/m3Off` | m³ | 5 min | | SS2 | Offtake Boundary | Flow Temperature | `offtake/hmeter/tFOff` | °C | 5 min | | SS2 | Offtake Boundary | Instantaneous Flow Rate | `offtake/hmeter/m3hOff` | m³/h | 5 min | | SS2 | Offtake Boundary | Instantaneous Power | `offtake/hmeter/kwOff` | kW | 5 min | | SS2 | Offtake Boundary | Return Temperature | `offtake/hmeter/tROff` | °C | 5 min | | SS4 | Water meter | Accumulated Volume | `watermeter/meter/m3` | m³ | 30 min | **Values entered once** (design, identity) | Value | Address | Units | |---|---|---| | HNTAS element code — instance ID assigned at registration (e.g. 00005) | `system/elementCode` | | | Parent element — energy flows from here (e.g. cd1 / cd1) | `system/parentElement` | | | Maximum Supply DP | `design/maxDPOff` | kPa | | Minimum Index Differential Pressure | `design/minDPIndex` | kPa | | Maximum System Pressure | `design/maxPressure` | bar | | Design Annual Pump Energy Use | `design/kwhAnnualPump` | kWh | | Maximum PHE Approach Temperature | `design/maxApproachTemp` | °C | | Minimum Output Temperature | `design/minFlowTempOff` | °C | | Design flow temperature (secondary) | `design/tFOff` | °C | | System Volume | `design/systemVolume` | litres | ## Communal Distribution (CD) **Live readings** | Point | Monitoring point | Quantity | Address (device/vargroup/varkey) | Units | Minimum frequency | |---|---|---|---|---|---| | CD3 | DP Measuring Point | Differential pressure at Index | `CD3/sensor/dpIndex` | kPa | 5 min | | CD1 | Intake Boundary | Accumulated Energy | `intake/hmeter/kwh` | kWh | 30 min | | CD1 | Intake Boundary | Accumulated Volume | `intake/hmeter/m3` | m³ | 30 min | | CD1 | Intake Boundary | Flow Temperature | `intake/hmeter/tF` | °C | 30 min | | CD1 | Intake Boundary | Instantaneous Flow Rate | `intake/hmeter/m3h` | m³/h | 30 min | | CD1 | Intake Boundary | Instantaneous Power | `intake/hmeter/kw` | kW | 30 min | | CD1 | Intake Boundary | Return Temperature | `intake/hmeter/tR` | °C | 30 min | **Values entered once** (design, identity) | Value | Address | Units | |---|---|---| | HNTAS element code — instance ID assigned at registration (e.g. 00005) | `system/elementCode` | | | Parent element — energy flows from here (e.g. cd1 / cd1) | `system/parentElement` | | | Minimum Index Differential Pressure | `design/minDPIndex` | kPa | | Expected average flow temperature | `design/tF` | °C | | Expected average return temperature | `design/tR` | °C | | Dwellings served (heat-loss W/dwelling basis) | `design/dwellings` | | | Non-domestic connected load (heat-loss W/kW basis) | `design/kwConnection` | kW | | Design maximum bypass flowrate | `design/maxBypassFlow` | m³/h | | Minimum flow temperature | `design/minFlowTemp` | °C | **Derived by the platform** | Value | Address | Units | |---|---|---| | Accumulated Energy | `calculated/kwh` | kWh | | Accumulated Volume | `calculated/m3` | m³ | ## Consumer Connection (CC) **Live readings** | Point | Monitoring point | Quantity | Address (device/vargroup/varkey) | Units | Minimum frequency | |---|---|---|---|---|---| | CC1 | Consumer Connection Boundary | Accumulated Energy | `boundary/hmeter/kwh` | kWh | 30 min | | CC1 | Consumer Connection Boundary | Accumulated Volume | `boundary/hmeter/m3` | m³ | 30 min | | CC1 | Consumer Connection Boundary | Flow Temperature | `boundary/hmeter/tF` | °C | 30 min | | CC1 | Consumer Connection Boundary | Instantaneous Flow Rate | `boundary/hmeter/m3h` | m³/h | 30 min | | CC1 | Consumer Connection Boundary | Instantaneous Power | `boundary/hmeter/kw` | kW | 30 min | | CC1 | Consumer Connection Boundary | Return Temperature | `boundary/hmeter/tR` | °C | 30 min | **Values entered once** (design, identity) | Value | Address | Units | |---|---|---| | HNTAS element code — instance ID assigned at registration (e.g. 00005) | `system/elementCode` | | | Parent element — energy flows from here (e.g. cd1 / cd1) | `system/parentElement` | | | HNTAS metering point ID | `system/hntasMPID` | | **Derived by the platform** | Value | Address | Units | |---|---|---| | Flow/return ΔT | `kpi/deltaT` | K | --- # Heat Network KPI Reference 92 KPIs across 5 element types, generated 2026-10-25. Download: [JSON](/data/kpi-reference.json) · [PDF, landscape A4](/data/heat-network-kpi-reference.pdf). Every code links to its own page, where it can be discussed. *Generated 2026-10-25. Generated from the platform's KPI registry. A working basis for a proposed British Standard on heat network key performance indicators.* ## How to read the tables One table per element type, in network order from the energy centre to the dwelling. The layout follows the KPI tables of the HNTAS Milestone 4 technical specifications so the two can be compared row by row; the columns that differ carry the detail a KPI needs to be computed the same way on every network. | Column | Meaning | |---|---| | Code | `-KPI-`; a letter after the number is a variant (A reported form, B weather-compensated or per-source form). `-C-` marks the cooling form of a KPI; `-M-` a meter-health KPI; `-H-` a health KPI (hours below outage limits, offered as an alternative to the outage KPIs 04 and 05). | | Standing | **HNTAS**: in the HNTAS Milestone 4 specifications, assessed (pass/fail) or reported (expected value only). **HNTAS-style**: an HNTAS KPI's method applied where the scheme does not yet reach, such as cooling. **Heatweb**: a diagnostic KPI the platform runs that HNTAS does not define. **proposed**: defined here, not yet computed by the platform. | | Monitoring points | Point code, minimum data frequency, and the fields read. "x, else y" is a fallback chain: the first source with data at each reading is used. | | Threshold | Pass criterion for an assessed KPI; "expected value" for a reported one. "(proposed)" marks a value put forward for review. | | Calculation | The maths, in as few words as states it exactly. | | Period | The window the KPI is assessed over. | **Notation.** tF, tR flow and return temperature (°C); q volumetric flow rate (m³/h); V volume register (m³); E energy register (kWh); ΔE, ΔV register increase over the period or day; 1.163 kWh/(m³·K) the volumetric heat capacity of water; Σ over the period; n readings. Volume weighting pairs readings in 5-minute buckets. Data at a higher frequency than the minimum is used at that frequency. **Rules that apply to every KPI.** Readings that fail the out-of-range bounds for their channel are excluded before any KPI is computed. A setpoint input follows the live setpoint stream where the controls publish one and falls back to the design value where they do not. Consumer Connection KPIs 01 to 03 are assessed across all consumer connections together, not dwelling by dwelling. ## Energy Centre (EC) | Code | Standing | KPI | Monitoring points | Threshold | Calculation | Period | |---|---|---|---|---|---|---| | [EC‑KPI‑01](/kpis/ec-kpi-01/) | HNTAS · assessed | Energy Centre ARMS connectivity | all EC points | ≥ 99% | received intervals ÷ expected intervals across connected points | Monthly | | [EC‑KPI‑02](/kpis/ec-kpi-02/) | HNTAS · assessed | Energy Centre monitoring point data completeness | all EC points | ≥ 95% | valid readings ÷ expected readings | Monthly | | [EC‑KPI‑03](/kpis/ec-kpi-03/) | HNTAS · assessed | Energy Centre monitoring points operational | all EC points | 100% of ARMS-connected points | points with no error/negative/out-of-range values ÷ total points | Monthly | | [EC‑KPI‑04](/kpis/ec-kpi-04/) | HNTAS · assessed | Energy Centre unplanned interruptions | EC · tF (sensor, else heat meter); sensor dP | ≤ 3 a year | count of >12h periods below min flow temp OR min dP without 48h notice. Uses design/minFlowTemp design/minDPIndex | Previous 12 months | | [EC‑KPI‑05](/kpis/ec-kpi-05/) | HNTAS · assessed | Energy Centre planned interruptions | EC · tF (sensor, else heat meter); sensor dP | ≤ 1 a year | count of noticed (≥48h) interruptions. Uses design/minFlowTemp design/minDPIndex | Previous 12 months | | [EC‑KPI‑06](/kpis/ec-kpi-06/) | HNTAS · reported | Energy Centre average flow temperature | EC · tF (sensor, else heat meter) | [expected average flow temperature] | time-weighted mean of flow temperature. Uses design/tF | Monthly | | [EC‑KPI‑07](/kpis/ec-kpi-07/) | HNTAS · reported | Energy Centre average return temperature | EC · tR (sensor, else heat meter) | [expected average return temperature] | time-weighted mean of return temperature | Monthly | | [EC‑KPI‑08](/kpis/ec-kpi-08/) | HNTAS · assessed | EC flow temperature variance from set point | EC · tF (sensor, else heat meter), tF (setpoint, else design) | 0 ± 2 °C | mean \|tF - setpoint\| | Monthly | | [EC‑KPI‑09A](/kpis/ec-kpi-09a/) | HNTAS · assessed | EC volume weighted average flow temperature (VWAFT) | EC · tF (heat meter, else sensor); heat meter m³/h | [expected] ± 3 °C | Σ(tF · flow volume) ÷ Σ(volume). Uses design/tF | Monthly | | [EC‑KPI‑09B](/kpis/ec-kpi-09b/) | HNTAS · assessed | EC VWAFT (weather-compensated variant) | EC · tF (heat meter, else sensor), tF (setpoint, else design); heat meter m³/h | tracks compensated setpoint ± 3 °C | as 09A against live setpoint | Monthly | | [EC‑KPI‑10A](/kpis/ec-kpi-10a/) | HNTAS · assessed | EC flow temperature stability | EC · tF (sensor, else heat meter), tF (setpoint, else design) | ≥ 95% within thresholds | 1 - (time above upper + below lower) ÷ total | Monthly | | [EC‑KPI‑10B](/kpis/ec-kpi-10b/) | HNTAS · assessed | EC flow temperature stability (weather-compensated) | EC · tF (sensor, else heat meter), tF (setpoint, else design) | ≥ 95% | as 10A against compensated setpoint | Monthly | | [EC‑KPI‑11](/kpis/ec-kpi-11/) | HNTAS · assessed | EC flow temperature uptime | EC · tF (sensor, else heat meter) | ≥ 98% above minimum flow temp (99.5% at M4) | time above minimum ÷ total time. Uses design/minFlowTemp | Monthly | | [EC‑KPI‑12](/kpis/ec-kpi-12/) | HNTAS · assessed | EC pressure differential uptime | EC · sensor dP | ≥ 99% above minimum dP (99.5% at M4) | time above minimum dP ÷ total. Uses design/minDPIndex | Monthly | | [EC‑KPI‑13](/kpis/ec-kpi-13/) | HNTAS · assessed | Max allowable differential pressure exceedance | EC · sensor dpSupply | 100% below maximum dP | 1 - time above max dP ÷ total. Uses design/maxDPSupply | Monthly | | [EC‑KPI‑14](/kpis/ec-kpi-14/) | HNTAS · assessed | Max allowable operating pressure exceedance | EC · sensor pressure | 100% below maximum operating pressure | 1 - time above max pressure ÷ total. Uses design/maxPressure | Monthly | | [EC‑KPI‑15](/kpis/ec-kpi-15/) | HNTAS · assessed | Top-up water volume | EC · water meter m³ | ≤ 1% of system volume per month (0.17% at M4/TS1) | make-up volume ÷ system volume per month. Uses design/systemVolume | Monthly | | [EC‑KPI‑16A](/kpis/ec-kpi-16a/) | HNTAS · assessed | Heat fraction (source A) | EC · heat meter kWh | [design heat fraction] | source A heat out ÷ total heat out | Monthly | | [EC‑KPI‑16B](/kpis/ec-kpi-16b/) | HNTAS · assessed | Heat fraction (source B) | EC · heat meter kWh | [design heat fraction] | source B heat out ÷ total heat out | Monthly | | [EC‑KPI‑18](/kpis/ec-kpi-18/) | HNTAS · assessed | Network distribution pump energy | EC · electricity meter kwhElectric | < 1% of annual heat generation | sum of distribution pump electricity (excl. shunts). Uses design/kwhAnnualPump | Monthly | | **Hours below outage limits (alternative to 04/05)** | | | | | | | | [EC‑KPI‑H‑01](/kpis/ec-kpi-h-01/) | Heatweb | Energy Centre hours below outage limits | EC · tF (sensor, else heat meter); sensor dpIndex | < 60 h a year, judged on the month pro rata (≈ 4.9 h in 30 days); shorter windows report hours used | Σ_i min(t_{i+1} − t_i, 1 h) over readings with tF < tF_min or dP < dP_min; tF and dP spans unioned. Offered as an alternative to KPI-04/05. Uses design/minFlowTemp design/minDPIndex | Monthly (pro rata) | | **heat** | | | | | | | | [EC‑KPI‑17‑A](/kpis/ec-kpi-17-a/) | HNTAS · assessed | Heat generation efficiency (source A) | EC · heat meter kWh; gas meter m3Gas, kWh | gas/oil 80% · biomass 75% · electric 98% · heat pump COP 2.0 · CHP QI 105 | heat out ÷ fuel in (boiler gross; HP CoP uses emeter). Uses design/efficiency | Monthly | | [EC‑KPI‑17‑B](/kpis/ec-kpi-17-b/) | HNTAS · assessed | Heat generation efficiency (source B) | EC · heat meter kWh; gas meter m3Gas, kWh; electricity meter kwhElectric | gas/oil 80% · biomass 75% · electric 98% · heat pump COP 2.0 · CHP QI 105 | as 17-A per source. Uses design/efficiency | Monthly | ## District Distribution (DD) | Code | Standing | KPI | Monitoring points | Threshold | Calculation | Period | |---|---|---|---|---|---|---| | [DD‑KPI‑01](/kpis/dd-kpi-01/) | HNTAS · assessed | District Distribution ARMS connectivity | all DD points | ≥ 99% | received intervals ÷ expected intervals across connected points | Monthly | | [DD‑KPI‑02](/kpis/dd-kpi-02/) | HNTAS · assessed | District Distribution monitoring point data completeness | all DD points | ≥ 95% | valid readings ÷ expected readings | Monthly | | [DD‑KPI‑03](/kpis/dd-kpi-03/) | HNTAS · assessed | District Distribution monitoring points operational | all DD points | 100% of ARMS-connected points | points with no error/negative/out-of-range values ÷ total points | Monthly | | [DD‑KPI‑04](/kpis/dd-kpi-04/) | HNTAS · assessed | District Distribution unplanned interruptions | DD1 · 30 min · tF (sensor, else heat meter); DD · sensor dP | ≤ 3 a year | count of >12h periods below min flow temp OR min dP without 48h notice. Uses design/minFlowTemp design/minDPIndex | Previous 12 months | | [DD‑KPI‑05](/kpis/dd-kpi-05/) | HNTAS · assessed | District Distribution planned interruptions | DD1 · 30 min · tF (sensor, else heat meter); DD · sensor dP | ≤ 1 a year | count of noticed (≥48h) interruptions. Uses design/minFlowTemp design/minDPIndex | Previous 12 months | | [DD‑KPI‑06](/kpis/dd-kpi-06/) | HNTAS · assessed | DD network heat loss | DD1 · 30 min · heat meter kWh | per design W/dwelling basis | initiation kWh - Σ(termination kWh), as W/dwelling | Monthly | | [DD‑KPI‑07](/kpis/dd-kpi-07/) | HNTAS · reported | DD average flow temperature | DD1 · 30 min · tF (sensor, else heat meter) | [expected] | time-weighted mean. Uses design/tF | Monthly | | [DD‑KPI‑08](/kpis/dd-kpi-08/) | HNTAS · reported | DD average return temperature | DD1 · 30 min · tR (sensor, else heat meter) | [expected] | time-weighted mean. Uses design/tR | Monthly | | [DD‑KPI‑09](/kpis/dd-kpi-09/) | HNTAS · assessed | DD flow temperature uptime | DD1 · 30 min · tF (sensor, else heat meter) | ≥ 98% (99.5% at M4) | time above minimum/total. Uses design/minFlowTemp | Monthly | | [DD‑KPI‑10](/kpis/dd-kpi-10/) | HNTAS · assessed | DD network bypass flow rate | DD1 · 30 min · heat meter m³/h | [design bypass allowance] | initiation q - Σ(termination q). Uses design/maxBypassFlow | Monthly | | **Hours below outage limits (alternative to 04/05)** | | | | | | | | [DD‑KPI‑H‑01](/kpis/dd-kpi-h-01/) | Heatweb | District Distribution hours below outage limits | DD1 · 30 min · tF (sensor, else heat meter); DD3 · 5 min · sensor dpIndex | < 60 h a year, judged on the month pro rata (≈ 4.9 h in 30 days); shorter windows report hours used | Σ_i min(t_{i+1} − t_i, 1 h) over readings with tF < tF_min or dP < dP_min; tF and dP spans unioned. Offered as an alternative to KPI-04/05. Uses design/minFlowTemp design/minDPIndex | Monthly (pro rata) | ## Substation (SS) | Code | Standing | KPI | Monitoring points | Threshold | Calculation | Period | |---|---|---|---|---|---|---| | [SS‑KPI‑01](/kpis/ss-kpi-01/) | HNTAS · assessed | Substation ARMS connectivity | all SS points | ≥ 99% | received intervals ÷ expected intervals across connected points | Monthly | | [SS‑KPI‑02](/kpis/ss-kpi-02/) | HNTAS · assessed | Substation monitoring point data completeness | all SS points | ≥ 95% | valid readings ÷ expected readings | Monthly | | [SS‑KPI‑03](/kpis/ss-kpi-03/) | HNTAS · assessed | Substation monitoring points operational | all SS points | 100% of ARMS-connected points | points with no error/negative/out-of-range values ÷ total points | Monthly | | [SS‑KPI‑04](/kpis/ss-kpi-04/) | HNTAS · assessed | Substation unplanned interruptions | SS1 · 5 min · tF (sensor, else heat meter); SS · sensor dP | ≤ 3 a year | count of >12h periods below min flow temp OR min dP without 48h notice. Uses design/minFlowTempOff design/minDPIndex | Previous 12 months | | [SS‑KPI‑05](/kpis/ss-kpi-05/) | HNTAS · assessed | Substation planned interruptions | SS1 · 5 min · tF (sensor, else heat meter); SS · sensor dP | ≤ 1 a year | count of noticed (≥48h) interruptions. Uses design/minFlowTempOff design/minDPIndex | Previous 12 months | | [SS‑KPI‑06](/kpis/ss-kpi-06/) | HNTAS · reported | Substation average flow temperature | SS1 · 5 min · tF (sensor, else heat meter) | [expected average flow temperature] | time-weighted mean. Uses design/tFOff | Monthly | | [SS‑KPI‑07](/kpis/ss-kpi-07/) | HNTAS · reported | Substation average return temperature | SS1 · 5 min · tR (sensor, else heat meter) | [expected average return temperature] | time-weighted mean | Monthly | | [SS‑KPI‑08](/kpis/ss-kpi-08/) | HNTAS · assessed | SS flow temperature variance from set point | SS1 · 5 min · tF (sensor, else heat meter); SS · tF (setpoint, else design) | 0 ± 2 °C | mean \|tF - setpoint\| | Monthly | | [SS‑KPI‑09A](/kpis/ss-kpi-09a/) | HNTAS · assessed | SS volume weighted average flow temperature | SS1 · 5 min · tF (heat meter, else sensor); heat meter m³/h | [network flow temp] ± 3 °C | Σ(tF · volume) ÷ Σ(volume). Uses design/tFOff | Monthly | | [SS‑KPI‑09B](/kpis/ss-kpi-09b/) | HNTAS · assessed | SS VWAFT (weather-compensated) | SS1 · 5 min · tF (heat meter, else sensor); heat meter m³/h; SS · tF (setpoint, else design) | ± 3 °C vs compensated setpoint | as 09A | Monthly | | [SS‑KPI‑10A](/kpis/ss-kpi-10a/) | HNTAS · assessed | SS flow temperature stability | SS1 · 5 min · tF (sensor, else heat meter); SS · tF (setpoint, else design) | ≥ 95% within thresholds | 1-(out-of-band time/total) | Monthly | | [SS‑KPI‑10B](/kpis/ss-kpi-10b/) | HNTAS · assessed | SS flow temperature stability (weather-comp) | SS1 · 5 min · tF (sensor, else heat meter); SS · tF (setpoint, else design) | ≥ 95% | as 10A | Monthly | | [SS‑KPI‑11](/kpis/ss-kpi-11/) | HNTAS · assessed | SS flow temperature uptime | SS1 · 5 min · tF (sensor, else heat meter) | ≥ 98% (99.5% at M4) | time above minimum/total. Uses design/minFlowTempOff | Monthly | | [SS‑KPI‑12](/kpis/ss-kpi-12/) | HNTAS · assessed | Substation average approach temperature | SS2 · 5 min · heat meter tROff; SS1 · 5 min · heat meter tR | ≤ design maximum approach | mean(primary tR - secondary tR). Uses design/maxApproachTemp | Monthly | | [SS‑KPI‑13](/kpis/ss-kpi-13/) | HNTAS · assessed | SS pressure differential uptime | SS · sensor dP | ≥ 99% (99.5% at M4) | time above min dP/total. Uses design/minDPIndex | Monthly | | [SS‑KPI‑14](/kpis/ss-kpi-14/) | HNTAS · assessed | SS max differential pressure exceedance | SS6 · 5 min · sensor dpOff | 100% below max dP | 1-time above/total. Uses design/maxDPOff | Monthly | | [SS‑KPI‑15](/kpis/ss-kpi-15/) | HNTAS · assessed | SS max operating pressure exceedance | SS · sensor pressure | 100% below max pressure | 1-time above/total. Uses design/maxPressure | Monthly | | [SS‑KPI‑16](/kpis/ss-kpi-16/) | HNTAS · assessed | SS top-up water volume | SS · water meter m³ | ≤ 1%/month (0.17% at M4) | make-up/system volume monthly. Uses design/systemVolume | Monthly | | [SS‑KPI‑17](/kpis/ss-kpi-17/) | HNTAS · assessed | SS distribution pump energy | SS3 · 30 min · electricity meter kwhElectric | < 1% of annual heat throughput | pump electricity sum (excl. shunts). Uses design/kwhAnnualPump | Monthly | | **Hours below outage limits (alternative to 04/05)** | | | | | | | | [SS‑KPI‑H‑01](/kpis/ss-kpi-h-01/) | Heatweb | Substation hours below outage limits | SS2 · 5 min · tFOff (sensor, else heat meter); SS5 · 5 min · sensor dpIndex | < 60 h a year, judged on the month pro rata (≈ 4.9 h in 30 days); shorter windows report hours used | Σ_i min(t_{i+1} − t_i, 1 h) over readings with tF < tF_min or dP < dP_min; tF and dP spans unioned. Offered as an alternative to KPI-04/05. Uses design/minFlowTempOff design/minDPIndex | Monthly (pro rata) | ## Communal Distribution (CD) | Code | Standing | KPI | Monitoring points | Threshold | Calculation | Period | |---|---|---|---|---|---|---| | [CD‑KPI‑01](/kpis/cd-kpi-01/) | HNTAS · assessed | Communal Distribution ARMS connectivity | all CD points | ≥ 99% | received intervals ÷ expected intervals across connected points | Monthly | | [CD‑KPI‑02](/kpis/cd-kpi-02/) | HNTAS · assessed | Communal Distribution monitoring point data completeness | all CD points | ≥ 95% | valid readings ÷ expected readings | Monthly | | [CD‑KPI‑03](/kpis/cd-kpi-03/) | HNTAS · assessed | Communal Distribution monitoring points operational | all CD points | 100% of ARMS-connected points | points with no error/negative/out-of-range values ÷ total points | Monthly | | [CD‑KPI‑04](/kpis/cd-kpi-04/) | HNTAS · assessed | Communal Distribution unplanned interruptions | CD1 · 30 min · tF (sensor, else heat meter); CD · sensor dP | ≤ 3 a year | count of >12h periods below min flow temp OR min dP without 48h notice. Uses design/minDPIndex | Previous 12 months | | [CD‑KPI‑05](/kpis/cd-kpi-05/) | HNTAS · assessed | Communal Distribution planned interruptions | CD1 · 30 min · tF (sensor, else heat meter); CD · sensor dP | ≤ 1 a year | count of noticed (≥48h) interruptions. Uses design/minDPIndex | Previous 12 months | | [CD‑KPI‑06](/kpis/cd-kpi-06/) | HNTAS · assessed | CD network heat loss | CD1 · 30 min · heat meter kWh | per design W/dwelling basis | initiation kWh - Σ(termination kWh), as W/dwelling | Monthly | | [CD‑KPI‑07](/kpis/cd-kpi-07/) | HNTAS · reported | CD average flow temperature | CD1 · 30 min · tF (sensor, else heat meter) | [expected] | time-weighted mean. Uses design/tF | Monthly | | [CD‑KPI‑08](/kpis/cd-kpi-08/) | HNTAS · reported | CD average return temperature | CD1 · 30 min · tR (sensor, else heat meter) | [expected] | time-weighted mean. Uses design/tR | Monthly | | [CD‑KPI‑09](/kpis/cd-kpi-09/) | HNTAS · assessed | CD network bypass flow rate | CD1 · 30 min · heat meter m³/h | [design bypass allowance] | initiation q - Σ(termination q) | Monthly | | **Hours below outage limits (alternative to 04/05)** | | | | | | | | [CD‑KPI‑H‑01](/kpis/cd-kpi-h-01/) | Heatweb | Communal Distribution hours below outage limits | CD1 · 30 min · tF (sensor, else heat meter); CD3 · 5 min · sensor dpIndex | < 60 h a year, judged on the month pro rata (≈ 4.9 h in 30 days); shorter windows report hours used | Σ_i min(t_{i+1} − t_i, 1 h) over readings with tF < tF_min or dP < dP_min; tF and dP spans unioned. Offered as an alternative to KPI-04/05. Uses design/minFlowTemp design/minDPIndex | Monthly (pro rata) | ## Consumer Connection (CC) | Code | Standing | KPI | Monitoring points | Threshold | Calculation | Period | |---|---|---|---|---|---|---| | [CC‑KPI‑01](/kpis/cc-kpi-01/) | HNTAS · assessed | Consumer Connection ARMS connectivity (aggregated) | all CC points | ≥ 90% | received intervals ÷ expected intervals across ALL CC points combined | Monthly | | [CC‑KPI‑02](/kpis/cc-kpi-02/) | HNTAS · assessed | Consumer Connection data completeness (aggregated) | all CC points | ≥ 85% | valid readings ÷ expected readings across all CCs | Monthly | | [CC‑KPI‑03](/kpis/cc-kpi-03/) | HNTAS · assessed | Consumer Connection monitoring points operational (aggregated) | all CC points | = 100% | points with no error/negative/out-of-range values ÷ total points (two-stage; ALL heat-meter channels tF tR m³ q kW kWh) | Monthly | | [CC‑KPI‑04](/kpis/cc-kpi-04/) | HNTAS · assessed | Consumer Connection unplanned interruptions | CC1 · 30 min · tF (heat meter, else sensor) | ≤ 3 a year | count of unplanned interruptions (≥ 12 h below minimum flow temp) | Previous 12 months | | [CC‑KPI‑05](/kpis/cc-kpi-05/) | HNTAS · assessed | Consumer Connection planned interruptions | CC1 · 30 min · tF (heat meter, else sensor) | ≤ 1 a year | count of planned interruptions (≥ 12 h below minimum flow temp) | Previous 12 months | | [CC‑KPI‑06](/kpis/cc-kpi-06/) | HNTAS · reported | Consumer Connection heat generation efficiency | CC1 · 30 min · tF (heat meter, else sensor) | ≥ 90% of design efficiency target | heat generated at the CC ÷ energy input to the CC | Monthly | | [CC‑KPI‑07](/kpis/cc-kpi-07/) | HNTAS · assessed | Consumer Connection volume-weighted average return temperature | CC1 · 30 min · tR (heat meter, else sensor); heat meter m³/h | ≤ 45 °C | Σ(tR · q) ÷ Σ(q) by 5-min buckets | Monthly | | [CC‑KPI‑07A](/kpis/cc-kpi-07a/) | HNTAS · reported | Consumer Connection average return temperature (reported) | CC1 · 30 min · tR (heat meter, else sensor) | expected value | time-average of tR | Monthly | | [CC‑KPI‑08](/kpis/cc-kpi-08/) | HNTAS · assessed | Consumer Connection volume-weighted average temperature difference (VWATD) | CC1 · 30 min · heat meter kWh, m³ | ≥ 5 °C (pair: CC-07 or CC-08 must be met) | kWh register delta ÷ (1.163 · m³ register delta) | Monthly | | **Cooling forms** | | | | | | | | [CC‑KPI‑C‑01](/kpis/cc-kpi-c-01/) | HNTAS-style · proposed | Consumer Connection cooling ARMS connectivity (aggregated) | CC1 · all cooling meter channels | ≥ 90% | Σ intervals received ÷ Σ intervals expected, all cooling CC points combined | Monthly | | [CC‑KPI‑C‑02](/kpis/cc-kpi-c-02/) | HNTAS-style · proposed | Consumer Connection cooling data completeness (aggregated) | CC1 · all cooling meter channels | ≥ 85% | Σ valid readings ÷ Σ expected readings, all cooling CC points combined | Monthly | | [CC‑KPI‑C‑03](/kpis/cc-kpi-c-03/) | HNTAS-style · proposed | Consumer Connection cooling monitoring points operational (aggregated) | CC1 · 30 min · cooling meter kWh, m³, m³/h, kW, tF, tR | = 100% | points with no error, negative or out-of-range value ÷ points connected with complete data (C-01, C-02); every cooling-meter channel | Monthly | | [CC‑KPI‑C‑04](/kpis/cc-kpi-c-04/) | HNTAS-style · proposed | Consumer Connection cooling unplanned interruptions | CC1 · 30 min · cooling meter tF | ≤ 3 a year | count of unplanned periods ≥ 12 h with chilled flow tF > maximum chilled flow temperature. Uses design/tFMaxCool (proposed) | Previous 12 months | | [CC‑KPI‑C‑05](/kpis/cc-kpi-c-05/) | HNTAS-style · proposed | Consumer Connection cooling planned interruptions | CC1 · 30 min · cooling meter tF | ≤ 1 a year | count of planned periods ≥ 12 h with chilled flow tF > maximum chilled flow temperature. Uses design/tFMaxCool (proposed) | Previous 12 months | | [CC‑KPI‑C‑07](/kpis/cc-kpi-c-07/) | HNTAS-style · proposed | Consumer Connection cooling volume-weighted average return temperature | CC1 · 30 min · cooling meter tR, m³/h | ≥ design cooling return − 2 °C (proposed; pair: C-07 or C-08 must be met) | Σ(tR · q) ÷ Σ q over 5-minute buckets. Uses design/tRCool (proposed) | Monthly | | [CC‑KPI‑C‑07A](/kpis/cc-kpi-c-07a/) | HNTAS-style · reported · proposed | Consumer Connection cooling average return temperature (reported) | CC1 · 30 min · cooling meter tR | expected value | Σ tR ÷ n (time average) | Monthly | | [CC‑KPI‑C‑08](/kpis/cc-kpi-c-08/) | HNTAS-style | Consumer Connection cooling volume-weighted average temperature difference | CC1 · 30 min · cooling meter kWh, m³ | ≥ 4 °C (proposed; pair: C-07 or C-08 must be met) | ΔT = ΔE ÷ (1.163 · ΔV); ΔE, ΔV = register deltas over the period (kWh, m³) | Monthly | | **Meter health** | | | | | | | | [CC‑KPI‑M‑01](/kpis/cc-kpi-m-01/) | Heatweb | Meter reporting (not silent) | CC1 · 30 min · heat meter kWh; cooling meter kWh | last reading within 72 h of period end | a reading on every meter within the last 72 h of the period | Rolling 7 days; month | | [CC‑KPI‑M‑02](/kpis/cc-kpi-m-02/) | Heatweb | Meter channel coverage | CC1 · 30 min · heat meter kWh, m³, m³/h, kW, tF, tR | 6 of 6 channels | channels with ≥ 1 reading among kWh, m³, m³/h, kW, tF, tR (the fewest on any of the dwelling’s meters) | Rolling 7 days; month | | [CC‑KPI‑M‑03](/kpis/cc-kpi-m-03/) | Heatweb | Meter reading cadence | CC1 · 30 min · heat meter kWh; cooling meter kWh | ≥ 0.9 readings per day | energy-register readings ÷ days in period | Rolling 7 days; month | | [CC‑KPI‑M‑04](/kpis/cc-kpi-m-04/) | Heatweb | Register integrity | CC1 · 30 min · heat meter kWh; cooling meter kWh | 0 faults | days with ΔE < 0 (register stepped back) or ΔE > 500 kWh (implausible jump), all the dwelling’s meters | Rolling 7 days; month | | [CC‑KPI‑M‑05](/kpis/cc-kpi-m-05/) | Heatweb | Plausible temperature difference | CC1 · 30 min · heat meter kWh, m³; cooling meter kWh, m³ | 0 °C ≤ ΔT ≤ 80 °C | ΔT = ΔE ÷ (1.163 · ΔV) within bounds; outside = scaling, units or a replaced meter | Rolling 7 days; month | | [CC‑KPI‑M‑06](/kpis/cc-kpi-m-06/) | Heatweb | Flow comes to rest (no constant flow) | CC1 · 30 min · heat meter m³/h; cooling meter m³/h | ≥ 2% of flow readings at zero | readings with q = 0 ÷ all q readings, per meter (needs ≥ 6 readings); below target = flow never at rest: bypass or control fault | Rolling 7 days; month | | [CC‑KPI‑M‑07](/kpis/cc-kpi-m-07/) | Heatweb | No low temperature difference at volume | CC1 · 30 min · heat meter kWh, m³; cooling meter kWh, m³ | heat: not (ΔT < 5 °C and > 150 L/day); cooling: not (ΔT < 2 °C and > 1,000 L/day) | ΔT = ΔE ÷ (1.163 · ΔV); L/day = 1000 · ΔV ÷ days | Rolling 7 days; month | | [CC‑KPI‑M‑08](/kpis/cc-kpi-m-08/) | Heatweb | No simultaneous heating and cooling | CC1 · 30 min · heat meter kWh; cooling meter kWh | < 30% of active days | days with heat ΔE > 0.5 kWh and cooling ΔE > 0.5 kWh ÷ days with either | Rolling 7 days; month | | [CC‑KPI‑M‑09](/kpis/cc-kpi-m-09/) | Heatweb | Load follows demand (no flat load) | CC1 · 30 min · heat meter kWh | CV ≥ 0.2 | CV = σ ÷ μ of daily heat ΔE over ≥ 7 days, applied when μ > 2 kWh/day; below target = constant load: control fault | Rolling 7 days; month | | [CC‑KPI‑M‑10](/kpis/cc-kpi-m-10/) | Heatweb · reported | Consumption band (reported) | CC1 · 30 min · heat meter kWh, m³; cooling meter kWh, m³ | low: < 2 kWh/day and < 40 L/day; high: > max(15 kWh/day, 2 × site median) | daily ΔE and ΔV compared with the site's median dwelling | Rolling 7 days; month | | [CC‑KPI‑M‑11](/kpis/cc-kpi-m-11/) | Heatweb · reported | Cooling offset by heating (24 h overlap) | CC1 · 30 min · heat meter kWh; cooling meter kWh | expected value (reported; site-wide figure on the combined element) | Σ_d min(ΔE_heat,d, ΔE_cool,d) ÷ Σ_d ΔE_cool,d over the period's days | Rolling 7 days; month | --- # Getting started Pick the route that matches what you do. Every route ends in the same place: data published under one address, named from one vocabulary, and measured with one set of KPIs. ## Controls and BMS engineers 1. **Read the [protocol](/protocol/).** It is ten short sections. The address is `schema/network/element/device/vargroup/varkey`. 2. **Agree the first two segments** with whoever receives the data: the `schema` (your organisation or the client's portfolio) and the `network` (the site). 3. **Name elements and devices.** Use the element for each part of the network (`ec1`, `ss1`, `cc14`). On monitored elements, name meters for the monitoring point they serve: `intake`, `offtake`, `boundary`. 4. **Use the standard names.** `tF` and `tR` for flow and return temperature, `kwh` for the energy register, `m3h` for flow rate. The [monitoring points](/monitoring-points/) table gives the address of every assurance point; search the [vocabulary](/vocabulary/) for the rest. 5. **Publish plain values over TLS**, one topic per point, on change of value with a periodic re-send. A Niagara station can publish its whole point list as one batch instead. ``` acme/riverside_court/ec1/boiler1/sensor/tF 71.8 acme/riverside_court/ss1/intake/hmeter/kwh 2918920 acme/riverside_court/global/network/design/gasCalorificValue 39.5 ``` The [BMS connection guide](/bms-guide/) is a worked example for one platform that runs the protocol, with Workbench steps for Niagara. ## Software developers and AI agents The JSON files are the source of truth. Pin a copy and diff on refresh. | File | Contents | |---|---| | [`kpi-reference.json`](/data/kpi-reference.json) | Per element type, per KPI: code, standing, title, monitoring points, threshold, calculation, period | | [`vocabulary.json`](/data/vocabulary.json) | Every vargroup and varkey with type, units, meaning and aliases | | [`monitoring-points.json`](/data/monitoring-points.json) | Every assurance monitoring point with its six-level address, units and frequency | ```bash curl -s https://hnqap.org/data/kpi-reference.json | jq '.elements[] | select(.code=="SS") | .rows[] | {code, title, threshold}' ``` Things that save time: - Parse topics **right-anchored**: the last six segments are the address. - Store a non-numeric payload as text on the same address; never pull a number out of it. - Resolve legacy names through `aliases` on read, and write registered names only. - Every page on this site has a Markdown twin (`/kpis/index.md`), and [llms.txt](/llms.txt) lists them. [llms-full.txt](/llms-full.txt) is the whole standard in one file. ## Operators, consultants and assessors 1. **Open the [KPI reference](/kpis/).** One table per element type, in network order from the energy centre to the dwelling. 2. **Check the standing column.** "HNTAS" rows follow the scheme's drafts, paraphrased and interpreted where the drafts leave a choice. "HNTAS-style" rows apply the scheme's method where it does not reach yet, such as cooling. "Heatweb" rows are diagnostic KPIs offered for adoption. 3. **Cite KPIs by code** (`SS-KPI-07`) in reports and specifications. Each code has a stable page: [hnqap.org/kpis/ss-kpi-07/](/kpis/ss-kpi-07/). 4. **Print it.** The [PDF](/data/heat-network-kpi-reference.pdf) is the same tables on landscape A4. ## Manufacturers and integrators Map your product's points to registered varkeys once, and every HNQAP receiver can read them without a site-by-site mapping exercise. 1. List the points your product exposes. 2. Find each one in the [vocabulary](/vocabulary/) by meaning and units. 3. Where nothing fits, [propose a varkey](https://github.com/heatweb/HNQAP/issues/new?template=varkey-proposal.yml). 4. Publish the mapping as a table with your product documentation, and tell us so it can be linked from here. ## Next When you have used any of it, [tell us what happened](/collaborate/). An implementation report from a real network is the most valuable contribution there is. --- # Collaborate Heat network technical assurance will judge networks on KPIs computed from monitoring data. Those judgements are only fair if every platform computes each KPI the same way, and only useful if the thresholds reflect how real networks behave. Neither can be settled by one company. HNQAP is the open place to settle them. ## Where help is needed most 1. **Review the proposed thresholds.** Rows marked "(proposed)" in the [KPI reference](/kpis/) are starting points: cooling at the consumer connection, meter health, and hours below outage limits. Is the number right for the networks you know? 2. **Send an implementation report.** Run a KPI on your network's data and report the result, the data you used and anything that surprised you. Evidence from many networks and many platforms is what turns a proposal into a standard. 3. **Record your interpretation.** Where the scheme's drafts leave a choice, such as how an interruption is counted or how volume weighting pairs readings, say what you do and why. The reference states one answer; the discussion shows whether it is the right one. 4. **Map your equipment.** Manufacturers and integrators: map your product's points to the [vocabulary](/vocabulary/) and publish the table. 5. **Propose names.** If a point has no registered varkey, [propose one](https://github.com/heatweb/HNQAP/issues/new?template=varkey-proposal.yml). 6. **Build tools.** Open implementations of the KPIs or the protocol in any language are welcome, here or in your own repository. ## How to take part | To… | Use | |---|---| | Comment on one KPI | The **Discuss this KPI** link on its page, or the [KPI comment form](https://github.com/heatweb/HNQAP/issues/new?template=kpi-comment.yml) | | Report results from a network | The [implementation report form](https://github.com/heatweb/HNQAP/issues/new?template=implementation-report.yml) | | Comment on the protocol | The [protocol comment form](https://github.com/heatweb/HNQAP/issues/new?template=protocol-comment.yml) | | Propose a name | The [varkey proposal form](https://github.com/heatweb/HNQAP/issues/new?template=varkey-proposal.yml) | | Ask a question or float an idea | [Discussions](https://github.com/heatweb/HNQAP/discussions) | | Change the text | A pull request; see [CONTRIBUTING](https://github.com/heatweb/HNQAP/blob/main/CONTRIBUTING.md) | All of these need a free GitHub account. Everything posted is public. **Never post client data.** Report results as figures and describe the network in general terms (type, size, age, plant). Name the KPI, the period and the threshold; leave out the site. ## How decisions are made 1. A change starts as an issue: a comment, a report or a proposal. 2. Discussion happens on the issue, in public. 3. The maintainers propose a resolution and label it **proposed resolution**. It stays open for comment for at least 14 days. 4. The change is merged, recorded in the [changelog](https://github.com/heatweb/HNQAP/blob/main/CHANGELOG.md) with a link to the issue, and included in the next tagged release. 5. Where people disagree, the issue records both positions and the reason for the decision. The maintainers today are Heatweb Solutions Ltd, who started the project. As regular contributors join, the intention is a steering group drawn from operators, consultants, designers, installers, manufacturers and metering providers, with the same open process. ## The route to a standard | Stage | What it takes | Where we are | |---|---|---| | 1. Open draft | KPI tables, protocol and vocabulary published and open for comment | **Now** | | 2. Evidence | Implementation reports from several networks and several platforms; thresholds revised on the evidence | Starting | | 3. Version 1.0 | Reference frozen, with every interpretation and its reasoning recorded | Next | | 4. Proposal | Version 1.0 put to the national standards body as a proposal for new work, with the open reference as the starting text | After 1.0 | The reference stays open and maintained whatever happens at stage 4. ## Ground rules - Be specific: name the KPI code, the clause or the varkey. - Paraphrase the scheme's documents and cite them; do not paste their text. - Disagree with the method, not the person. The project follows the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). --- # Vocabulary ## Vargroup acceptance (process) - 3AFusedSpur: 3 Amp Fused Spur (passfail) - adeyProChecked: Adey Pro-Checked (boolean) - adjustedDPCV: DPCV Adjusted to Design Flowrate (boolean) - allAppliancesCommissioned: All Appliances Commissioned (passfail) - allLabelsAttached: All Labels Attached (passfail) - allOff1: Check All Off (select) - allOff2: Check All Off (select) - allOff2b: Check Bath Off (select) - allOff3: Check All Off (select) - allStrainersCleaned: All Strainers Cleaned (passfail) - benchmarkCompleted: CYLINDER BENCHMARK FORM BEEN COMPLETED (boolean) - bleedHIU: Bleed air from HIU (select) - checkCasing: HIU Casing (boolean) - checkFLoop1: Check Filling Loop (passfail) - checkFLoop2: Filling Loop Disconnected & Capped (select) - checkFlushingBypass: Flushing Bypass (select) - checkHeatMeter: Heat Meter (boolean) - checkParameters: Paramaters Adjusted (select) - checkPrimaryStrainer: Check Primary Strainer (select) - checkPumpOff: Check Pump Off (boolean) - checkTestPoints: Differential Pressure Test Points (boolean) - checkTRVs: TRVs Adjusted (select) - ciuCondition: CIU Condition (passfail) - ciuDataPlate: Data Plate (passfail) - classBS8635: classBS8635 (number) - cleanCombiValve: Clean Combination Valve (boolean) - connectionsCheckedBasin: APPLIANCE CONNECTIONS CHECKED (boolean) - connectorCheckedToilet: FLUSH PIPE/ SOIL PAN CONNECTOR CHECKED (boolean) - coolingOperation: Cooling Operation (passfail) - dateToday: dateToday (number) - dp1: Initial Readings, Differential Pressure [kPa] (number) - dp1calc: dp1calc (number) - dpDHWPeak: DHW Readings, Differential Pressure [kPa] (number) - failsafeBasin: Bathroom Basin Tap Fail Safe (passfail) - fcuWorking: FCU Working (passfail) - fDHW: DHW Readings, Kitchen Tap Flow Rate [ltr/min] (number) - fDHWBasin: Bathroom Basin Tap Flow Rate [ltr/min] (number) - fDHWBath: Bath Tap Flow Rate [ltr/min] (number) - flowLimitKitchen: Flow Limiters Installed on Kitchen Tap (boolean) - flushedCylinder: Hot water cylinder drained and flushed (boolean) - flusherCheckedToilet: Toilet Flusher Checked (passfail) - followUpBy: Follow Up By (select) - followUpRequired: Follow Up (textarea) - heatingFlushed: Central Heating Flushed (boolean) - heatingLeakFree: Central Heating Free from Leaks (boolean) - heatingStrainerClean: Central Heating Strainer Clean (boolean) - hiuModel: HIU Make and Model (text) - hiuParameters: HIU Parameters (sheet) - hiuType: HIU Type (select) - hotColdCheckedBasin: Hot and Cold Taps Checked (passfail) - hotColdCheckedBath: HOT AND COLD CHECKED (boolean) - hotColdCheckedKitchen: HOT AND COLD CHECKED (boolean) - hotColdCheckedShower: HOT AND COLD CHECKED (boolean) - htgControlsChecked: Heating Controls Checked (passfail) - immersionsBothOn: Setup Times (boolean) - indexTap3Bar: PRV set for 3 bar at Index Tap (boolean) - isBath: Bath tub fitted (boolean) - isEnsuite1: Ensuite with Shower (boolean) - isolationCheckedToilet: ISOLATION VALVE CHECKED (boolean) - issue1: Issue 1 (textarea) - issue2: Issue 2 (textarea) - issue3: Issue 3 (textarea) - issue4: Issue 4 (textarea) - issue5: Issue 5 (textarea) - issue6: Issue 6 (textarea) - issue7: Issue 7 (textarea) - issue8: Issue 8 (textarea) - isToilet: Bathroom fitted with toilet (boolean) - kw1: Initial Readings, Meter Power [kW] (number) - kwDHW1: DHW Readings, Meter Power [kW] (number) - kwDHWPeak: DHW Readings, Meter Power [kW] (number) - kwh1: Initial Readings, Meter Energy [kWh] (number) - kwhFinal: Final Meter Reading and Photo [kWh] (number) - kwHTGPeak: HTG Readings, Meter Power [kW] (number) - labelledFusedSpur: Labelled Fused Spur (passfail) - labelsFitted: COMMISSIONING LABELS (passfail) - lengthD1: Length of D1 discharge pipework (number) - lengthD1Below600: D1 Length Below 600mm (boolean) - lengthD2: Length of D2 discharge pipework (number) - lengthD2Drop300: D2 Length 300mm Before Elbow (passfail) - limescaleReducerFitted: Limescale Reducer Fitted (boolean) - limiterBathTap: Bath Tap Flow Restrictor (text) - litresInhibitor: Inhibitor Volume Added [l] (text) - locationCombiValve: Position of Combination Valve (text) - locationCyl: Cylinder Location (text) - lphPeak: Peak HTG Primary Flow Rate (litres per hour) [ltr/h] (number) - m31: Initial Readings, Meter Volume [m3] (number) - m3h1: Initial Readings, Meter Flow Rate [m³/h] (number) - m3hDHW1: DHW Readings, Meter Flow Rate [m³/h] (number) - m3hDHWPeak: DHW Readings, Meter Flow Rate [m³/h] (number) - m3hHTGPeak: HTG Readings, Meter Flow Rate [m³/h] (number) - m3WaterMeter: Cold Water Meter Reading [m3] (number) - mainsStopcock: Cold Mains Stopcock (text) - makeCleansingAgent: Cleansing Agent (text) - makeControl: Time Controller Make (text) - makeInhibitor: Inhibitor Make (text) - makeModelHeatMeter: Heat Meter Make and Model (text) - makePump: Pump Make (text) - manualsHandedOver: Manuals and Certificates Handed to Client (boolean) - manualUFH: UFH Manual Override (text) - manufacturer: Cylinder Make (text) - metersAccessible: Heat Meters Accessible (passfail) - model: Cylinder Model (text) - modelControl: Time Controller Model (text) - modelPump: Pump Model (text) - mvhrVentsFitted: MVHR Ceiling Vents Fitted (passfail) - mvhrWorking: MVHR Working (passfail) - nFloors: Number of floors (number) - nRads: Number of radiators (number) - nZones: Number of zones (number) - opTime: Initial Readings, Operating Time [h] (number) - overflowBasin: Bathroom Basin Overflow (passfail) - overflowBath: Bath Overflow (passfail) - overflowKitchen: OVERFLOW TESTED (passfail) - p1: Initial Readings, Static Primary Flow Pressure [bar] (number) - p2: Initial Readings, Static Primary Return Pressure [bar] (number) - passfailDHWBathTemp: passfailDHWBathTemp (number) - passfailDHWResponse: passfailDHWResponse (number) - passfailDHWSetpointH: passfailDHWSetpointH (number) - passfailDHWSetpointL: passfailDHWSetpointL (number) - passfailHeatMeter: passfailHeatMeter (number) - passfailHTGRtnTemp: passfailHTGRtnTemp (number) - passfailHTGSetpoint: passfailHTGSetpoint (number) - pCHWFinal: Cooling System Pressure (number) - pCWS: Incoming Cold Water Pressure (text) - pHTG1: Initial Readings, Central Heating Pressure [bar] (number) - pHTG2: Top-up Heating Pressure [bar] (number) - pHTGFill: Fill Central Heating Pressure [bar] (number) - pHTGFinal: Final Central Heating Pressure [bar] (number) - pHTGMin: Minimum system fill pressure [bar] (number) - pipeworkFixed: Pipework Fastened (boolean) - primaryInsulation: Primary Insulation (text) - primaryStrainerClean: Primary Strainer Clean (passfail) - productGroup: productGroup (number) - programmerDateTimeCorrect: Check Programmer Times (passfail) - propertyType: Select Property Type (select) - proveFlowToZones: Flow to all UFH zones (passfail) - proveStatsMatchZones: Check each room stat controls the correct zones. (passfail) - pumpFree: Pump Free and Bled (passfail) - pumpHTG: pumpHTG (number) - pumpSpeedHTG: Pump Speed (text) - radsAndTowelRailsWorking: Rads and Towel Rails Working (passfail) - rechargedExpansion: Cylinder internal expansion recharged (boolean) - refitCasing: Refit Casing (select) - relayRoomStat: Room thermostat relay (select) - removeCasing: Remove Casing (boolean) - runDHWPeak: Run Peak DHW (select) - runHTG: Run Central Heating (select) - runHTGDP: Run Central Heating (boolean) - safeCylinderInstall: Installed Safe and Secure (boolean) - safetyControlsInstall: Installed Safety Controls Correctly (boolean) - schematicAvailable: Schematic Available (passfail) - secureBasin: Bathrom Basin Pedastal & Taps Secure (passfail) - secureBath: BATH AND TAPS SECURE (passfail) - secureKitchen: Kitchen Sink Pedastal & Taps Secure (passfail) - serialBilling: Metering Home Display Serial Number (text) - serialCyl: Cylinder Serial Number (text) - serialHeatMeter: Heat Meter Serial Number (text) - serialHIU: HIU Serial Number (text) - serialPump: Pump Serial Number (text) - serialWaterMeter: Cold Water Meter Serial Number (text) - settingDPCV: DPCV Setting (text) - settingIHPT: IPHT Setting (number) - settingImmersionStat: Temperature Setting of Immersion Heaters (text) - settingRAVK: RAVK (Htg) Setting (number) - setupControllerTimes: Setup Times (boolean) - showerEnclosureChecked: ENCLOSURE CHECKED FOR LEAKS (boolean) - showerTraySealed: TRAY / WASTE MASTIC SEALED (passfail) - signsOfLeaks: Leaks on Pipework (text) - soilAccessGapsOK: ACCESS GAPS SECURE AND ACCESSIBLE (boolean) - soilDurgos110: DURGOS 110MM DB20 (boolean) - soilDurgosVentilated: DURGOS VENTILATED (boolean) - spares: Spare Parts (sheet) - stickerFitted: INSTALLATION STICKER (passfail) - storageVolume: Cylinder Volume (text) - supportD2: D2 Pipework Clipped at 300mm (boolean) - systemCleansed: Central Heating Chemically Cleansed (boolean) - systemTreated: System Chemically Treated (boolean) - systemVolume: Central Heating Volume [l] (number) - tap45in45: DHW Response (passfail) - tapTime45C: Time for Kitchen Tap to reach 45°C [seconds] (number) - tapTime50C: DHW Readings, Time for Kitchen Tap to reach 50°C [seconds] (number) - tColdHot: DHW pipework cold prior to response time testing. [°C] (number) - tCWS: Kitchen Tap Cold Temperature [°C] (number) - tDesignHTGRtn: tDesignHTGRtn (number) - tDHW: DHW Readings, Kitchen Tap Temperature [°C] (number) - tDHW1: Kitchen Tap Temperature [°C] (number) - tDHW2: Adjusted Kitchen Tap Temperature [°C] (boolean) - tDHWBasin: Bathroom Basin Tap Temperature [°C] (number) - tDHWBasinMaintained: Bathroom Basin Tap Temperature Maintained (passfail) - tDHWBath: Bath Tap Temperature [°C] (number) - tDHWPeak: DHW Readings, Peak Output Temperature [°C] (number) - tDHWShower: DHW Readings, Shower Output Temperature [°C] (number) - tDHWTap: tDHWTap (number) - testoFittedDHW: Test sensors ready (select) - testoPrefix: testoPrefix (number) - tF1: Initial Readings, Meter Flow Temperature [°C] (number) - tFDHW1: DHW Readings, Meter Flow Temperature [°C] (number) - tFDHWPeak: DHW Readings, Meter Flow Temperature [°C] (number) - tFHTGPeak: HTG Readings, Meter Flow Temperature [°C] (number) - tHTGOut: HTG Readings, Tertiary Output Temperature [°C] (number) - tHTGRtn: HTG Readings, Tertiary Return Temperature [°C] (number) - tLimitHTGRtn: tLimitHTGRtn (number) - tmvBasin: Bathroom Basin TMV (boolean) - tmvBasinLocation: Bathroom Basin TMV Location (text) - tmvBasinMakeModel: Bathroom Basin TMV Make and Model (text) - tmvBasinType: Bathroom Basin TMV Certification Scheme (text) - tR1: Initial Readings, Meter Return Temperature [°C] (number) - trapChecked: Trap Checked (passfail) - trapInstall: Waterless Waste Trap Vertical (boolean) - tRDHW1: DHW Readings, Meter Return Temperature [°C] (number) - tRDHWPeak: DHW Readings, Meter Return Temperature [°C] (number) - tRHTGPeak: HTG Readings, Meter Return Temperature [°C] (number) - trvPresets: Radiator Return Temperatures (sheet) - tSetDHW: tSetDHW (number) - tSetHTG: tSetHTG (number) - tSetpointDHW: DHW Setpoint Temperature [°C] (number) - tSetpointHTG: HIU Heating Setpoint Temperature [°C] (number) - tTolerance: DHW Temperature Tolerance [°C] (number) - tToleranceHTG: HTG Temperature Tolerance [°C] (number) - tundishInstall: Tundish Installed Vertical in Space (boolean) - typeDHW: DHW Type (select) - typeEmitter: Central heating emitter (select) - typeEmitterD: typeEmitterD (number) - typeHTG: typeHTG (number) - typeRoomStat: Room thermostat (text) - typeRTL: Radiator return control (select) - typeTRV: Radiator flow control (select) - ufhFlowRates: Underfloor Heating Zone Flow Rates (textarea) - ufhLabelled: Underfloor Heating Labelling (boolean) - ufhOverheat: Underfloor Heating Overheat Protection (boolean) - ufhOverheatStatFitted: UFH Overheat Fitted (passfail) - ufhOverheatStatTested: UFH Overheat Tested (passfail) - unswitchedFusedSpur: Unswitched Fused Spur (passfail) - voltageRoomStat: Room thermostat volt-free (select) - washingMachineWasteChecked: Washing Machine Waste Pipe Checked (passfail) - wastePipeFloodTested: Waste Pipe Flood Tested (passfail) - waterSamplesTaken: Water Samples Taken (boolean) ## Vargroup callout (process) - actionsPerformed: Actions Performed (richtext) - actionsRecommended: Actions Recommended (richtext) - initialFindings: Initial Findings (richtext) - scopeOfWorks: Scope of Works (richtext) - spares: Spare Parts (sheet) ## Vargroup design (shared) - allowPipeDiff: Allow different flow and return pipe sizing (boolean) - ASHPkW: ASHPkW (number) - ASHPkWPeak: ASHPkWPeak (number) - ASHPkWxN1: ASHPkWxN1 (number) - ASHPQty: ASHPQty (number) - baseTemp: Base temperature (select) - boilerEmissions: Boiler Emissions [kgCO2/kWh] (number) - boilerFuel: Boiler fuel type (select) - boilerkWPeak: boilerkWPeak (number) - boilerkWxN1: boilerkWxN1 (number) - borePeak: borePeak (number) - bufferkWh: bufferkWh (number) - carbonFactorElec: Electricity carbon factor [kgCO2e/kWh] (number) — Carbon factor for grid electricity - carbonFactorGas: Gas carbon factor [kgCO2e/kWh] (number) — Carbon factor for gas (UK Government GHG conversion factors) - connectionCH: Central heating connection (select) - dDaysCalc: dDaysCalc (number) - dDaysPeak: dDaysPeak (number) - degDays: Central heating degree-days at base temperature [°days] (number) - degDaysAvg: Central heating degree-days [°days] (csv) - density: density (number) - divCH: Central heating diversity [%] (number) - efficiency: Minimum Generation Efficiency [%] (number) - elecEmissions: Electrical Supply Emissions [kgCO2/kWh] (number) - elecPrice: Electricity unit price [p/kWh] (number) — Electricity unit price - email: Email address (email) - eqDaysPeak: eqDaysPeak (number) - eqPropDS439: eqPropDS439 (number) - fridgeASHP: ASHP refrigerant (select) - fridgeWSHP: WSHP refrigerant (select) - gasCalorificValue: Gas calorific value [MJ/m³] (number) — Calorific value used to convert metered gas m³ to kWh (kWh = m³ × correction × CV ÷ 3.6) - gasPrice: Gas unit price [p/kWh] (number) — Gas unit price - gasVolumeCorrection: Gas volume correction [factor] (number) — Gas volume correction factor applied to metered m³ - goASHP: Air Source Heat Pumps (boolean) - goBoilers: Boilers (boolean) - goCHP: Combined Heat & Power (boolean) - goHN: External Heat Network Supply (boolean) - goReclaim: Cooling Source Heat Pumps (boolean) - goSave: Save design (boolean) - goSolar: Solar Thermal (boolean) - goWSHP: Water Source Heat Pumps (boolean) - hHighPoint: System height [m] (number) - kwCH: kwCH (number) - kwDHWEst: kwDHWEst (number) - kwDS439: kwDS439 (number) - kwh365: kwh365 (number) - kwhAnnualPump: Design Annual Pump Energy Use [kWh] (number) - kwhCH: kwhCH (number) - kwhCH365: kwhCH365 (number) - kwhDHW365: kwhDHW365 (number) - kwhDHWEST: kwhDHWEST (number) - kwhDistLoss365: kwhDistLoss365 (number) - kwhP24: kwhP24 (number) - kwhUsed365: kwhUsed365 (number) - kWInPeak: kWInPeak (number) - kwP24: kwP24 (number) - kwPeak: kwPeak (number) - kWxN1: kWxN1 (number) - listASHPSizes: Available heat pump outputs [kW] (csv) - listBSizes: Available boiler outputs [kW] (csv) - listWSHPSizes: Available heat pump outputs [kW] (csv) - loadSchedule: Schedule of loads (sheet) - m3hCHPeak: m3hCHPeak (number) - m3hDHWPeak: DHW Readings, Meter Flow Rate [m³/h] (number) - m3hPeak: m3hPeak (number) - maxApproachTemp: Maximum PHE Approach Temperature [°C] (number) - maxBypassFlow: Design maximum bypass flowrate [m³/h] (number) - maxDPOff: Maximum Supply DP [kPa] (number) - maxDPSupply: Maximum Supply DP [kPa] (number) - maxPressure: Maximum System Pressure [bar] (number) - maxVelocity: Flow pipe sizing maximum velocity [m/s] (number) - minDPIndex: Minimum Index Differential Pressure [kPa] (number) - minFlowTemp: Minimum Flow Temperature [°C] (number) - minFlowTempOff: Minimum Output Temperature [°C] (number) - minVelocity: Return pipe sizing minimum velocity [m/s] (number) - nBuildings: Number of buildings [buildings] (integer) - networkName: Network name (text) - networkTempValve: Network temperature control valve (boolean) - nIntakes: Number of intake plantrooms [intakes] (integer) - nPeople: Total number of people [people] (integer) - nProperties: Number of properties [properties] (integer) - ovsersizing: ovsersizing (number) - ovsersizingN1: ovsersizingN1 (number) - peepDS439: peepDS439 (number) - pipeSizes: Schedule of pipes sizes (sheet) - pPP: pPP (number) - profileDHW: DHW load profile (select) - selectASHP: ASHP selection [n x kW] (object) - selectBoilers: Boiler selection [n x kW] (object) - selectWSHP: WSHP selection [n x kW] (object) - sessionIdleMinutes: Session idle minutes [min] (number) — Idle gap that closes an equipment session (spray booth firing sequence) - sparekW: sparekW (number) - substationType: Substation Type (select) - supplyCWS: CWS Supply (select) - systemVolume: Central Heating Volume [l] (number) - tariffHP: Electrical Tariff (select) - tF: Design flow temperature [°C] (number) - tFOff: Design flow temperature (secondary) [°C] (number) - tPeak: Peak network flow temperature [°C] (number) - tPriRtnCH: Central heating network return temperature [°C] (number) - tPriRtnDHW: DHW network return temperature [°C] (number) - tPriRtnPeak: tPriRtnPeak (number) - tR: Expected average return temperature [°C] (number) - tRiseEST: tRiseEST (number) - tVWART24: tVWART24 (number) - tXPeak: External temperature at peak load [°C] (number) - typeEmitter: Central heating emitter (select) - typeRTL: Radiator return control (select) - typeTRV: Radiator flow control (select) - vBuffer: Buffer volume [l] (number) - vBuffer9: vBuffer9 (number) - vDHWEST: vDHWEST (number) - vP24: vP24 (number) - vPCH: vPCH (number) - vPDHW: vPDHW (number) - vPHEST: vPHEST (number) - vPPEST: vPPEST (number) - WSHPkW: WSHPkW (number) - WSHPkWPeak: WSHPkWPeak (number) - WSHPkWxN1: WSHPkWxN1 (number) - WSHPQty: WSHPQty (number) ## Vargroup device (system_record) - typeDHW: DHW Type (select) ## Vargroup emeter (telemetry) - ampsL1: Current L1 [A] (number) — Current, phase 1 - ampsL2: Current L2 [A] (number) — Current, phase 2 - ampsL3: Current L3 [A] (number) — Current, phase 3 - kwhElectric: Electricity register [kWh] (number) — Electricity meter register - wattsL1: Power L1 [W] (number) — Active power, phase 1 - wattsL2: Power L2 [W] (number) — Active power, phase 2 - wattsL3: Power L3 [W] (number) — Active power, phase 3 ## Vargroup gmeter (telemetry) - gasFlow: Gas flow rate [m³/h] (number) — Instantaneous gas flow rate - m3: Gas register (m³) [m³] (number) — Gas meter register, whole cubic metres - mm3: Gas register (sub-m³) [L] (number) — Gas meter register, sub-cubic-metre part in litres ## Vargroup hnes_application (process) - baselineKpis: Baseline and target KPIs (sheet) - budgetLines: Budget by works package (sheet) - clientName: Applicant organisation (text) - customersInNeedPct: Customers in need [%] (number) - dataSharingConfirm: Data sharing accepted (boolean) - deliverability: Deliverability and risk (richtext) - eoiChecklist: Readiness checklist (sheet) - eoiSummary: Expression-of-interest summary (richtext) - expectedOutcomes: Expected outcomes (richtext) - grantType: Grant type (select) - localAuthorityArea: Local authority area (text) - matchFundingValue: Applicant contribution [GBP] (number) - meteringOverview: Metering and data (richtext) - monitoringCommit: Monitoring returns and KPI reporting accepted (boolean) - orgType: Organisation type (select) - preAwardStatement: Pre-award spend (textarea) - problemStatement: The problem to be solved (richtext) - programmeSchedule: Delivery programme (sheet) - projectDescription: Project description (richtext) - projectName: Project name (text) - projectRef: Existing HNES reference (text) - propertiesManaged: Properties managed by the applicant (integer) - propertiesTotal: Properties on the network (integer) - proposedWorks: Proposed works (richtext) - quotesStatus: Supplier quotations (select) - requestValue: Grant requested [GBP] (number) - signatoryDate: Date (text) - signatoryName: Signatory (text) - signatoryRole: Signatory role (text) - subsidyControlConfirm: Subsidy control position confirmed (boolean) - targetRound: Target funding round (text) ## Vargroup hnes_asmt (process) - m4_1_1_cc: M4.1.1 O&M manual (passfail) - m4_1_1_cd: M4.1.1 O&M manual (passfail) - m4_1_1_dd: M4.1.1 O&M manual (passfail) - m4_1_1_ec: M4.1.1 O&M manual (passfail) - m4_1_1_ss: M4.1.1 O&M manual (passfail) - m4_1_10_cc: M4.1.10 Resilience strategy (passfail) - m4_1_10_cd: M4.1.10 Condition audit/survey (passfail) - m4_1_10_dd: M4.1.10 Condition audit/survey (passfail) - m4_1_10_ec: M4.1.10 Condition audit/survey (passfail) - m4_1_10_ss: M4.1.10 Condition audit/survey (passfail) - m4_1_11_cc: M4.1.11 Circulation after stagnation (passfail) - m4_1_11_cd: M4.1.11 Destructive testing of pipework (passfail) - m4_1_11_dd: M4.1.11 Destructive testing of pipework (passfail) - m4_1_11_ec: M4.1.11 Destructive testing of pipework (passfail) - m4_1_11_ss: M4.1.11 Destructive testing of pipework (passfail) - m4_1_12_cc: M4.1.12 Equipment disconnection (passfail) - m4_1_12_cd: M4.1.12 Resilience strategy (passfail) - m4_1_12_dd: M4.1.12 Resilience strategy (passfail) - m4_1_12_ec: M4.1.12 Resilience strategy (passfail) - m4_1_12_ss: M4.1.12 Resilience strategy (passfail) - m4_1_13_cc: M4.1.13 Working pressure assessment (passfail) - m4_1_13_cd: M4.1.13 Water quality PPM (passfail) - m4_1_13_dd: M4.1.13 Water quality PPM (passfail) - m4_1_13_ec: M4.1.13 Water quality PPM (passfail) - m4_1_13_ss: M4.1.13 Water quality PPM (passfail) - m4_1_14_cc: M4.1.14 Statement of conformity (passfail) - m4_1_14_cd: M4.1.14 Water quality KPIs (passfail) - m4_1_14_dd: M4.1.14 Water quality KPIs (passfail) - m4_1_14_ec: M4.1.14 Water quality KPIs (passfail) - m4_1_14_ss: M4.1.14 Water quality KPIs (passfail) - m4_1_15_cc: M4.1.15 KPI schedule (passfail) - m4_1_15_cd: M4.1.15 Water quality records (passfail) - m4_1_15_dd: M4.1.15 Water quality records (passfail) - m4_1_15_ec: M4.1.15 Top-up water quality (passfail) - m4_1_15_ss: M4.1.15 Water quality records (passfail) - m4_1_16_cc: M4.1.16 Technical parameters schedule (passfail) - m4_1_16_cd: M4.1.16 Circulation after stagnation (passfail) - m4_1_16_dd: M4.1.16 Circulation after stagnation (passfail) - m4_1_16_ec: M4.1.16 Water quality records (passfail) - m4_1_16_ss: M4.1.16 Circulation after stagnation (passfail) - m4_1_17_cd: M4.1.17 Equipment disconnection (passfail) - m4_1_17_dd: M4.1.17 Equipment disconnection (passfail) - m4_1_17_ec: M4.1.17 Circulation after stagnation (passfail) - m4_1_17_ss: M4.1.17 Equipment disconnection (passfail) - m4_1_18_cd: M4.1.18 Annual inspection (passfail) - m4_1_18_dd: M4.1.18 Annual inspection (passfail) - m4_1_18_ec: M4.1.18 Equipment disconnection (passfail) - m4_1_18_ss: M4.1.18 Annual inspection (passfail) - m4_1_19_cd: M4.1.19 Water quality equipment (passfail) - m4_1_19_dd: M4.1.19 Water quality equipment (passfail) - m4_1_19_ec: M4.1.19 Annual inspection (passfail) - m4_1_19_ss: M4.1.19 Water quality equipment (passfail) - m4_1_2_cc: M4.1.2 PPM schedule (passfail) - m4_1_2_cd: M4.1.2 PPM schedule (passfail) - m4_1_2_dd: M4.1.2 PPM schedule (passfail) - m4_1_2_ec: M4.1.2 PPM schedule (passfail) - m4_1_2_ss: M4.1.2 PPM schedule (passfail) - m4_1_20_cd: M4.1.20 Working pressure assessment (passfail) - m4_1_20_dd: M4.1.20 Working pressure assessment (passfail) - m4_1_20_ec: M4.1.20 Water quality equipment (passfail) - m4_1_20_ss: M4.1.20 Working pressure assessment (passfail) - m4_1_21_cd: M4.1.21 Statement of conformity (passfail) - m4_1_21_dd: M4.1.21 Statement of conformity (passfail) - m4_1_21_ec: M4.1.21 Working pressure assessment (passfail) - m4_1_21_ss: M4.1.21 Statement of conformity (passfail) - m4_1_22_cd: M4.1.22 KPI schedule (passfail) - m4_1_22_dd: M4.1.22 KPI schedule (passfail) - m4_1_22_ec: M4.1.22 Statement of conformity (passfail) - m4_1_22_ss: M4.1.22 KPI schedule (passfail) - m4_1_23_cd: M4.1.23 Technical parameters schedule (passfail) - m4_1_23_dd: M4.1.23 Technical parameters schedule (passfail) - m4_1_23_ec: M4.1.23 KPI schedule (passfail) - m4_1_23_ss: M4.1.23 Technical parameters schedule (passfail) - m4_1_24_ec: M4.1.24 Technical parameters schedule (passfail) - m4_1_3_cc: M4.1.3 As-built drawings (passfail) - m4_1_3_cd: M4.1.3 As-built drawings (passfail) - m4_1_3_dd: M4.1.3 As-built drawings (passfail) - m4_1_3_ec: M4.1.3 As-built drawings (passfail) - m4_1_3_ss: M4.1.3 As-built drawings (passfail) - m4_1_4_cc: M4.1.4 Document storage (passfail) - m4_1_4_cd: M4.1.4 Document storage (passfail) - m4_1_4_dd: M4.1.4 Document storage (passfail) - m4_1_4_ec: M4.1.4 Document storage (passfail) - m4_1_4_ss: M4.1.4 Document storage (passfail) - m4_1_5_cc: M4.1.5 Maintenance & remedial log (passfail) - m4_1_5_cd: M4.1.5 Maintenance & remedial log (passfail) - m4_1_5_dd: M4.1.5 Maintenance & remedial log (passfail) - m4_1_5_ec: M4.1.5 Maintenance & remedial log (passfail) - m4_1_5_ss: M4.1.5 Maintenance & remedial log (passfail) - m4_1_6_cc: M4.1.6 Insulation condition evidence (passfail) - m4_1_6_cd: M4.1.6 Insulation condition evidence (passfail) - m4_1_6_dd: M4.1.6 Insulation condition evidence (passfail) - m4_1_6_ec: M4.1.6 Insulation condition evidence (passfail) - m4_1_6_ss: M4.1.6 Insulation condition evidence (passfail) - m4_1_7_cc: M4.1.7 Operative training (passfail) - m4_1_7_cd: M4.1.7 Operative training (passfail) - m4_1_7_dd: M4.1.7 Operative training (passfail) - m4_1_7_ec: M4.1.7 Operative training (passfail) - m4_1_7_ss: M4.1.7 Operative training (passfail) - m4_1_8_cc: M4.1.8 Site inductions (passfail) - m4_1_8_cd: M4.1.8 Site inductions (passfail) - m4_1_8_dd: M4.1.8 Site inductions (passfail) - m4_1_8_ec: M4.1.8 Site inductions (passfail) - m4_1_8_ss: M4.1.8 Site inductions (passfail) - m4_1_9_cc: M4.1.9 Operating risk register (passfail) - m4_1_9_cd: M4.1.9 Operating risk register (passfail) - m4_1_9_dd: M4.1.9 Operating risk register (passfail) - m4_1_9_ec: M4.1.9 Operating risk register (passfail) - m4_1_9_ss: M4.1.9 Operating risk register (passfail) - m4_2_1_cc: M4.2.1 Metering & monitoring strategy (passfail) - m4_2_1_cd: M4.2.1 Metering & monitoring strategy (passfail) - m4_2_1_dd: M4.2.1 Metering & monitoring strategy (passfail) - m4_2_1_ec: M4.2.1 Metering & monitoring strategy (passfail) - m4_2_1_ss: M4.2.1 Metering & monitoring strategy (passfail) - m4_2_2_cc: M4.2.2 Meter servicing strategy (passfail) - m4_2_2_cd: M4.2.2 ARMS specification (passfail) - m4_2_2_dd: M4.2.2 ARMS specification (passfail) - m4_2_2_ec: M4.2.2 ARMS specification (passfail) - m4_2_2_ss: M4.2.2 ARMS specification (passfail) - m4_2_3_cc: M4.2.3 ARMS specification (passfail) - m4_2_3_cd: M4.2.3 Monitoring point specification (passfail) - m4_2_3_dd: M4.2.3 Monitoring point specification (passfail) - m4_2_3_ec: M4.2.3 Monitoring point specification (passfail) - m4_2_3_ss: M4.2.3 Monitoring point specification (passfail) - m4_2_4_cc: M4.2.4 Monitoring point specification (passfail) - m4_2_4_cd: M4.2.4 Thermal energy meter records (passfail) - m4_2_4_dd: M4.2.4 Thermal energy meter records (passfail) - m4_2_4_ec: M4.2.4 Thermal energy meter records (passfail) - m4_2_4_ss: M4.2.4 Thermal energy meter records (passfail) - m4_2_5_cc: M4.2.5 Thermal energy meter records (passfail) - m4_2_5_cd: M4.2.5 KPI reporting frequency (passfail) - m4_2_5_dd: M4.2.5 KPI reporting frequency (passfail) - m4_2_5_ec: M4.2.5 KPI reporting frequency (passfail) - m4_2_5_ss: M4.2.5 KPI reporting frequency (passfail) - m4_2_6_cc: M4.2.6 KPI reporting frequency (passfail) - m4_2_6_cd: M4.2.6 KPI data & thresholds (passfail) - m4_2_6_dd: M4.2.6 KPI data & thresholds (passfail) - m4_2_6_ec: M4.2.6 KPI data & thresholds (passfail) - m4_2_6_ss: M4.2.6 KPI data & thresholds (passfail) - m4_2_7_cc: M4.2.7 KPI data & thresholds (passfail) ## Vargroup hnes_rev_study (process) - adjustments: Adjustments (textarea) - alternativesDecision: Alternatives decision (richtext) - analysisYears: Analysis period [years] (integer) - baselineConfidence: Baseline confidence (select) - bulkMetering: Bulk heat metering at energy centre (select) - calcAnnualCarbon: calcAnnualCarbon (number) - calcAnnualElec: calcAnnualElec (number) - calcAnnualGas: calcAnnualGas (number) - calcCarbonContent: calcCarbonContent (number) - calcDistributionEfficiency: calcDistributionEfficiency (number) - calcEb: calcEb (number) - calcHeatCost: calcHeatCost (number) - calcHeatDelivered: calcHeatDelivered (number) - calcHeatGenerated: calcHeatGenerated (number) - calcHeatLeavingEc: calcHeatLeavingEc (number) - calcHlm: calcHlm (number) - calcLossesPrimary: calcLossesPrimary (number) - calcLossesSecondary: calcLossesSecondary (number) - calcLossesTotal: calcLossesTotal (number) - calcLossPerDwelling: calcLossPerDwelling (number) - calcNetworkEfficiency: calcNetworkEfficiency (number) - carbonPrice: Carbon value [GBP/tCO2e] (number) - causesSummary: Causes of sub-optimal performance (textarea) - clientName: Applicant organisation (text) - costBasisNotes: Costing basis (textarea) - dataGaps: Data gaps and estimates (textarea) - dataSources: Data sources register (sheet) - decarbPathway: Decarbonisation pathway (richtext) - discountRate: Discount rate [%] (number) - disseminationPlan: Dissemination (richtext) - elecPrice: Electricity unit price [p/kWh] (number) — Electricity unit price - elecPriceForecast: Electricity price (analysis) [p/kWh] (number) - energyBalance: Annual energy balance (sheet) - forecastSpend: Forecast to completion [GBP] (number) - gasPrice: Gas unit price [p/kWh] (number) — Gas unit price - gasPriceForecast: Gas price (analysis) [p/kWh] (number) - grantAmount: HNES grant award [GBP] (number) - heatLossModel: Heat loss model segments (sheet) - kpiAnnualCarbon: Annual network carbon emissions [kgCO2e/yr] (number) - kpiAnnualElec: Annual fuel use: electricity [kWh/yr] (number) - kpiAnnualGas: Annual fuel use: gas [kWh/yr] (number) - kpiCarbonContent: Carbon content of delivered heat [kgCO2e/kWh] (number) - kpiDistributionEfficiency: Distribution efficiency (heat delivered / heat leaving EC) [%] (number) - kpiFlowTemp: Network flow temperature [°C] (number) - kpiHeatCost: Cost of heat delivered to customer interfaces [p/kWh] (number) - kpiInterruptions: Service interruptions over 24h in last 12 months [count] (number) - kpiLossesPrimary: Distribution losses: primary [kWh/yr] (number) - kpiLossesSecondary: Distribution losses: secondary [kWh/yr] (number) - kpiLossPerDwelling: Network heat loss per dwelling [W/dwelling] (number) - kpiNetworkEfficiency: Overall network efficiency (heat delivered / fuel in) [%] (number) - kpiReturnTemp: Network return temperature [°C] (number) - matchFunding: Match funding [GBP] (number) - meanFlowTemp: Mean network flow temperature [°C] (number) - meanReturnTemp: Mean network return temperature [°C] (number) - measuresLonglist: Optimisation measures long-list (sheet) - meterCoverage: Consumer meters read (integer) - meterCoverageOf: Total dwellings (meter coverage denominator) (integer) - monthlyProfile: Monthly energy profile (sheet) - monthlyReconciliation: Monthly reconciliation (sheet) - networkDescription: Network description (textarea) - performanceGap: Performance gap analysis (richtext) - progressNarrative: Delivery progress (textarea) - projectRef: Existing HNES reference (text) - propertiesManaged: Properties managed by the applicant (integer) - propertiesTotal: Properties on the network (integer) - quoteDocs: Contractor quotes received (select) - returnMonth: Reporting month (text) - riskRegister: Risk register (sheet) - shortList: Recommended short-list (richtext) - siteVisitBy: Site visit carried out by (text) - siteVisitDate: Site visit date(s) (text) - siteVisitSummary: Site visit summary (richtext) - spendToDate: Spend to date [GBP] (number) - studyEndDate: Planned completion date (text) - studyStartDate: Study start date (text) - suboptimalIndicators: Indicators of sub-optimal performance (textarea) - supplierName: Study supplier (text) ## Vargroup hnes_rfi (process) - armsLetter: ARMS permission letter (template) (textarea) - armsLetterSent: ARMS permission letter sent (passfail) - rfiAppCalcs: Application supporting calculations (select) - rfiApplication: HNES application & project narrative (select) - rfiArmsProvider: ARMS / metering & billing provider details (select) - rfiAsBuilts: As-built / O&M record drawings (select) - rfiAwardLetter: Award letter / grant funding agreement (select) - rfiBaselineWorkbook: Corrected baseline data workbook (select) - rfiBilling: Consumption data: billing & AMR exports (select) - rfiBms: BMS details & access (select) - rfiCommissioning: Commissioning records (select) - rfiDesignIntent: Original design intent & specifications (select) - rfiDrawings: Site drawings: schematics, layouts, floor plans (select) - rfiFuelBills: Fuel bills: gas & electricity input data (select) - rfiGapSummary: Gap analysis summary (textarea) - rfiMaintLogs: Maintenance & servicing records (select) - rfiMeterReads: Meter schedule: IDs, models & locations (select) - rfiOmManuals: O&M manuals (select) - rfiOutages: Outage & interruption records (select) - rfiPpmSchedule: PPM schedule (select) - rfiPreviousStudies: Previous studies & audits (select) - rfiRiskRegister: Risk register / resilience plans (select) - rfiTariff: Tariff information & heat charges (select) - rfiTraining: Personnel training & competency records (select) - rfiWaterQuality: Water quality & treatment records (select) ## Vargroup model_signoff (process) - assumptionsConfirmed: Assumptions appropriate for this network (passfail) - dwellingsLocated: Every dwelling has a block and floor (passfail) - ecPlaced: Energy centre positioned (passfail) - elementsComplete: All network elements are defined (passfail) - footprintsAssigned: Building footprints assigned (passfail) - layoutSaved: 3D layout saved to site (passfail) - modelComplete: Model complete — sign-off (passfail) - modelledBy: Modelled by (text) - modelNotes: Model notes (textarea) - occupancyPresent: Beds or occupancy recorded per dwelling (passfail) - photoDistrictPlan: District pipework plan (numbered) (passfail) - photoFloorplan: Floorplan view (passfail) - photoHeatLoss: Pipework — heat loss (passfail) - photoRenderPipes: Pipework — velocity vs limits (passfail) - photoRenderSolid: 3D view — buildings (passfail) - photoSchematic: Riser / HIU schematic (passfail) - photoSitePlan: Site plan (passfail) - resultsPublished: Model results published (passfail) ## Vargroup onboarding (process) - companyAddress: Registered Address (textarea) - companyName: Company Name (text) - companyRegNo: Company Registration No. (text) - contactEmail: Contact Email (email) - contactName: Primary Contact (text) - contactPhone: Contact Phone (text) - engineerName: Engineer Name (text) - engineerPhone: Engineer Phone (text) - gasSafeIdNumber: Gas Safe ID No. (text) - gasSafeNumber: Gas Safe Registration No. (text) - insuranceCertificate: Insurance Certificate (text) - publicLiabilityExpiry: Public Liability Expiry (text) - publicLiabilityInsurer: Public Liability Insurer (text) - qualifications: Qualifications (textarea) - unventedG3: Unvented (G3) Qualified (boolean) - vatNo: VAT Number (text) ## Vargroup sensor (telemetry) - rhumidity: Relative humidity [%RH] (number) — Relative humidity - temperature: Temperature [°C] (number) — Air or space temperature at the element - tInlet: Inlet temperature [°C] (number) — Inlet air temperature - voc: VOC [ppb] (number) — Volatile organic compounds concentration ## Vargroup set (telemetry) - jobCode: Job code (text) — Operator job reference in force (QR scan); none clears ## Vargroup setpoint (telemetry) - tSet: Temperature setpoint [°C] (number) — Temperature setpoint in force ## Vargroup site (system_record) - issueN1: Network Wide Issue 1 (textarea) ## Vargroup status (telemetry) - bake: Bake mode (boolean) — Bake mode active - cool: Cool-down (boolean) — Cool-down active - emac: Emergency stop (boolean) — Emergency stop / forced off - flashoff: Flash-off mode (boolean) — Flash-off mode active - prep: Prep mode (boolean) — Prep mode active - run: Running (boolean) — Equipment running - spray: Spray mode (boolean) — Spray mode active ## Vargroup survey (process) - accessSafeToWork: Safe Access (passfail) - airVentsRiser: Air Vents at Riser Tops (passfail) - ambientRiser: Riser / Corridor Ambient Temperature [°C] (number) - bmsAccess: BMS Access (passfail) - boilerFuel: Boiler fuel type (select) - bufferCondition: Condition (passfail) - bufferConfig: Hydraulic Configuration (text) - bufferInsulation: Insulation (passfail) - bufferSensors: Temperature Sensors (passfail) - bufferVolume: Volume [l] (number) - bypassEndLateral: End-of-Lateral Bypasses (passfail) - bypassRegister: Bypass Register (sheet) - bypassTopRiser: Top-of-Riser Bypasses (passfail) - calcEffCurve: calcEffCurve (number) - calLegionella: Legionella Regime (passfail) - calPresent: Calorifiers / Cylinders (textarea) - calTemps: Storage Temperature [°C] (number) - ccBypassPresent: Consumer Bypass (passfail) - ccCupboardInsulation: Cupboard Insulation (BS 5422) (passfail) - ccDhwStabilised: Stabilised DHW Temperature [°C] (number) - ccDhwTime45: Time to 45 °C at Kitchen Tap [s] (number) - ccVentSystem: Ventilation System (select) - chpCondition: Condition (passfail) - chpElecEff: CHP electrical efficiency [%] (number) - chpElecOutput: Electrical Output [kWe] (number) - chpHoursRun: Hours Run [h] (number) - chpMakeModel: Make and Model (text) - chpQI: Quality Index (number) - chpThermalOutput: Thermal Output [kW] (number) - commValves: Commissioning Valves & Settings (passfail) - connectionCH: Central heating connection (select) - ctrlAlarms: Alarms (passfail) - ctrlARMS: Remote Monitoring (ARMS) (passfail) - ctrlBMS: Control System (text) - ctrlSetpointsDoc: Setpoints Recorded (passfail) - ctrlTimeClock: Time Schedules (passfail) - ctrlWeatherComp: Weather Compensation (passfail) - ddAccessChambers: Access Chambers (passfail) - ddBypasses: Bypasses (passfail) - ddInsulationRoute: Route Insulation (passfail) - ddLeakDetection: Leak Detection (passfail) - ddPipeSizes: Pipe Sizes (textarea) - ddRouteCondition: Route Condition (passfail) - dooAvailable: Description of Operation (passfail) - ecAmbientTemp: Plant Room Ambient Temperature [°C] (number) - ecBoundaryMeter: Boundary Heat Meter (EC3) (passfail) - ecFloorDrainage: Drainage (passfail) - ecFuelInputMeters: Fuel Input Metering (EC1) (passfail) - ecHeatSources: Heat Source Inventory (textarea) - ecPumpElecMeter: Pump Electricity Meter (EC4) (passfail) - ecResilience: Resilience (passfail) - ecRoomCondition: Plant Room Condition (passfail) - ecTopUpMeter: Top-up Water Meter (passfail) - ecTopUpReading: Top-up Meter Reading [m3] (number) - ecVentilation: Ventilation (passfail) - efficiencyCurve: Generation efficiency curve (sheet) - elementAccess: Access Arrangements (textarea) - elementLocation: Location (textarea) - elementOverviewPhoto: Element Overview Photo (text) - elementRef: Element Reference (text) - equipIsolation: Safe Isolation & Maintainability (passfail) - equipRatings: Ratings vs Operating Conditions (passfail) - gbBadgePhoto: Data Badge Photo (text) - gbCondition: Condition (passfail) - gbControls: Boiler Controls (text) - gbFlowTemp: Operating Flow Temperature [°C] (number) - gbFlueCondition: Flue Condition (passfail) - gbFlueType: Flue Arrangement (text) - gbGrossEfficiency: Gross Efficiency [%] (number) - gbIsolation: Isolation Valves (passfail) - gbLeaks: Leaks (passfail) - gbMakeModel: Make and Model (text) - gbOutput: Rated Output [kW] (number) - gbReturnTemp: Operating Return Temperature [°C] (number) - gbServiceRecord: Service Record (passfail) - gbYear: Year of Manufacture (integer) - generalCondition: General Condition (passfail) - generatorType: Boiler type (select) - hHighPoint: System height [m] (number) - hmCalibration: Calibration (passfail) - hmClass: Accuracy Class (text) - hmEnergyRead: Energy Reading [kWh] (number) - hmErrorCodes: Error Codes (passfail) - hmFlowRate: Flow Rate [m³/h] (number) - hmFlowTemp: Flow Temperature [°C] (number) - hmLocation: Meter Location (text) - hmMakeModel: Make and Model (text) - hmRemoteReads: Remote Reading (passfail) - hmReturnTemp: Return Temperature [°C] (number) - hmSerial: Serial Number (text) - hmVolumeRead: Volume Reading [m3] (number) - hpBadgePhoto: Data Badge Photo (text) - hpCondition: Condition (passfail) - hpCOP: Stated COP (number) - hpElecMeter: Electricity Metering (passfail) - hpMakeModel: Make and Model (text) - hpNoise: Noise / Vibration (passfail) - hpOutput: Rated Output [kW] (number) - hpRefrigerant: Refrigerant (text) - hpServiceRecord: Service Record (passfail) - hpType: Heat Pump Type (text) - hydraulicSeparation: Hydraulic Separation (select) - insulationCondition: Insulation Condition (passfail) - insulationSpec: Insulation Material & Thickness (textarea) - isoValveLocations: Isolation Valves (passfail) - isToilet: Bathroom fitted with toilet (boolean) - labellingAdequate: Labelling (passfail) - leaksVisible: Visible Leaks (passfail) - loadSharePct: Annual load share [%] (number) - maintenanceRecordsPhoto: Maintenance Records Photo (text) - mpCC1: Consumer Connection Boundary — heat meter (passfail) - mpCD1: Intake Boundary — heat meter (passfail) - mpCD3: DP Measuring Point — pressure/DP sensor (passfail) - mpDD1: Intake Boundary — heat meter (passfail) - mpDD3: DP Measuring Point — pressure/DP sensor (passfail) - mpEC1: Heat Generator: Heat source energy input — gas meter (passfail) - mpEC2: Heat Generator: Heat Source energy output — heat meter (passfail) - mpEC3: EC Distribution: Energy Centre boundary — heat meter (passfail) - mpEC4: EC Distribution: Distribution pump set — electricity meter (passfail) - mpEC5: Pressurisation: Make-up Water meter — water meter (passfail) - mpEC6: EC Distribution: Index differential pressure measurement point — pressure/DP sensor (passfail) - mpEC7: EC Distribution: Distribution differential pressure measurement point — pressure/DP sensor (passfail) - mpEC8: Pressurisation: Operating pressure measurement point — pressure/DP sensor (passfail) - mpSS1: Intake Boundary — heat meter (passfail) - mpSS2: Offtake Boundary — heat meter (passfail) - mpSS3: Network distribution pump — electricity meter (passfail) - mpSS4: Water meter — water meter (passfail) - mpSS5: Defined index differential pressure measurement point — pressure/DP sensor (passfail) - mpSS6: Defined differential pressure exceedance measurement point — pressure/DP sensor (passfail) - mpSS7: Defined operating pressure measurement point — pressure/DP sensor (passfail) - mvhrFilters: MVHR Filters (passfail) - mvhrVentsFitted: MVHR Ceiling Vents Fitted (passfail) - mvhrWorking: MVHR Working (passfail) - nBuildings: Number of buildings [buildings] (integer) - nIntakes: Number of intake plantrooms [intakes] (integer) - nProperties: Number of properties [properties] (integer) - omDocsAvailable: O&M Documentation (passfail) - phxApproach: Approach Temperature [K] (number) - phxCondition: Condition (passfail) - phxControlValves: Control Valves (passfail) - phxDuty: Rated Duty [kW] (number) - phxFlowArrangement: Flow Arrangement (select) - phxInsulated: Insulation (passfail) - phxMakeModel: Make and Model (text) - phxPrimaryFlow: Primary Flow Temp [°C] (number) - phxPrimaryReturn: Primary Return Temp [°C] (number) - phxSecondaryFlow: Secondary Flow Temp [°C] (number) - phxSecondaryReturn: Secondary Return Temp [°C] (number) - pipeSupports: Pipe Supports (passfail) - ppmInPlace: Planned Maintenance (passfail) - pressAlarms: Alarms (passfail) - pressColdFill: Cold Fill Pressure [bar] (number) - pressCondition: Condition (passfail) - pressMakeModel: Make and Model (text) - pressOperating: Operating Pressure [bar] (number) - pressVesselPrecharge: Vessel Pre-charge [bar] (number) - pressVesselSize: Expansion Vessel Size [l] (number) - pumpCondition: Condition (passfail) - pumpControlMode: Control Mode (text) - pumpDp: Differential Pressure [kPa] (number) - pumpDpTestPoints: DP Test Points (passfail) - pumpDuty: Duty Arrangement (text) - pumpExercised: Standby Rotation (passfail) - pumpGlands: Glands and Seals (passfail) - pumpMakeModel: Make and Model (text) - pumpVSD: Variable Speed (passfail) - safEICR: Electrical Certificate (passfail) - safElectricalCondition: Electrical Installation (passfail) - safEmergencyStop: Emergency Stops (passfail) - safGasCert: Gas Safety Certificate (passfail) - safGasDetection: Gas Detection (passfail) - safSafetyValves: Safety Valves (passfail) - safSignage: Safety Signage (passfail) - schematicAvailable: Schematic Available (passfail) - ssAmbientTemp: Substation Ambient Temperature [°C] (number) - ssDpPoints: DP Measurement Points (SS5/SS6) (passfail) - ssDpReading: DP Reading [kPa] (number) - ssIntakeMeter: Intake Heat Meter (SS1) (passfail) - ssOfftakeMeter: Offtake Heat Meter (SS2) (passfail) - ssOperatingPressure: Operating Pressure (SS7) [bar] (number) - ssPumpMeter: Pump Energy Meter (SS3) (passfail) - ssTopUpMeter: Top-up Water Meter (SS4) (passfail) - substationType: Substation Type (select) - supplyCWS: CWS Supply (select) - surveyNotes: General Notes (textarea) - surveyRecommendations: Improvement Opportunities (textarea) - tFlowObserved: Observed Flow Temperature [°C] (number) - thermalImage: Thermal Image (text) - tPeak: Peak network flow temperature [°C] (number) - tPriRtnCH: Central heating network return temperature [°C] (number) - tPriRtnDHW: DHW network return temperature [°C] (number) - tReturnObserved: Observed Return Temperature [°C] (number) - tXPeak: External temperature at peak load [°C] (number) - typeEmitter: Central heating emitter (select) - typeRTL: Radiator return control (select) - typeTRV: Radiator flow control (select) - vBuffer: Buffer volume [l] (number) - wqInhibitor: Inhibitor Dosing (passfail) - wqLastReport: Last Analysis Report (text) - wqSampleTaken: Sample Taken (passfail) - wqSideStream: Side-stream Filtration (passfail) ## Vargroup system (shared) - imageUrl: Image URL (text) — Image for tiles and headers - name: Name (text) — Display name of the element or site (on global/network: the site name) - qrCode: QR / Label Code (text) ## Vargroup wp_replace_pressure_gauge (process) - checkFLoop1: Check Filling Loop (passfail) - heatingLeakFree: Central Heating Free from Leaks (boolean) - newGaugeFitted: Remove damaged gauge and fit new pressure gauge matching connection and range (passfail) - pHTGFill: Fill Central Heating Pressure [bar] (number) - pHTGFinal: Final Central Heating Pressure [bar] (number) - powerOff: Turn off power to the system (passfail) - pumpFree: Pump Free and Bled (passfail)