Accuracy and Reading Quality
espi:QualityOfReading
Data readings are typically thought-of as being accurate or not accurate — one or the other, with no gray area. In reality, however, there are shades of accuracy and a vetting process to give weight to the accuracy of any given reading.
Accuracy is related to the correctness of the data provided: Do data truly reflect the usage?
There are three potential Green Button areas that can be defined with a reading-quality flag (of “ QualityOfReading ” type):
Reading Type
<ReadingType> instances can include a <defaultQuality> that represents the general quality of all readings; when a quality is not specifically defined. This default can be set to being a low-quality, a raw-quality, or an unknown-quality of reading. Conversely, a default quality of “valid” could be used and a different quality specified when the interval reading differs from the norm.
Each <IntervalReading> is associated with a specific <ReadingType> and this “<ReadingType><defaultQuality>” would apply to each of the <IntervalReading> instances.
Interval Reading
<IntervalReading> instances can specify a specific <ReadingQuality> for that reading’s <value>. That means, each interval (e.g., hourly) can have its own reading quality specified. This should reflect the actual accuracy of the reading. For readings with poor accuracy, or accuracy of an estimated or unknown nature, the Data Custodian (Utility) should update the reading-quality flag upon final measurement and verification (M&V) of the data: to change a “questionable” reading (or raw or estimated, for other examples) to an actual, “revenue-quality” reading (or a similar, vetted accuracy).
An interesting aspect of the <IntervalReading> is that multiple <ReadingQuality> flags can be provided for that reading’s <value>. Normally, this is not necessary; however, the ability is a part of the <IntervalReading> in case it is desired. An example of multiple flags might be to denote a reading as being normalized for weather as well as being revenue-quality, at the same time. That would look like this 1 :
…
<!-- Atom “entry” element -->
<entry>
<id>urn:uuid:12c6aaeb-b7f2-5932-88ee-31488059a952</id>
<title>Natural Gas Reading starting at 2026-01-01 00:00:00Z</title>
<published>2026-01-01T01:00:00Z</published>
<updated>2026-01-31T23:59:59Z</updated>
<link rel="self" type="espi-entry/IntervalBlock" href="https://data.imaginary-power-and-light.com/espi/1_1/resource/Subscription/987654321/UsagePoint/123456789"/>
<link rel="up" type="espi-feed/IntervalBlock" href="https://data.imaginary-power-and-light.com/espi/1_1/resource/Subscription/987654321/UsagePoint"/>
<link rel="related" type="espi-entry/MeterReading" href="https://data.imaginary-power-and-light.com/espi/1_1/resource/Subscription/987654321/UsagePoint/123456789/MeterReading/102030405060"/>
<content>
<espi:IntervalBlock>
<espi:interval>
<espi:duration>3600</espi:duration>
<espi:start>1767225600</espi:start>
</espi:interval>
<espi:IntervalReading>
<espi:ReadingQuality>19</espi:ReadingQuality> <!-- “revenue-quality” flag -->
<espi:ReadingQuality>15</espi:ReadingQuality> <!-- “normalized for weather” flag -->
<espi:timePeriod>
<espi:duration>3600</espi:duration>
<espi:start>1767225600</espi:start>
</espi:timePeriod>
<espi:value>12345</espi:value>
</espi:IntervalReading>
</espi:IntervalBlock>
</content>
</entry>
…
The order of multiple <ReadingQuality> flags is not important but the interpretation of their stage of vetting might be important. See the table, below, for an example of a ranking or hierarchy of quality vetting.
It is also important to note: Each <IntervalBlock> that is updated should maintain the same <id> under-which it had previously been reported — allowing a Third Party to use the <id> UUID to match the updated interval to that initial reporting of the interval when it was under a less-accurate (or less-known) quality value.
For more about the <id> UUID persistence, see our Developer Resources on the topic of Generating Persistent UUIDs.
Usage Summary
<UsageSummary> instances can also specify a <qualityOfReading> covering the span of a billing period. Naturally, this is a summation of a larger period and therefore, the reading-quality flag could be used by the Third Party to know that the <UsageSummary> truly covers the revenue-quality readings — that is it not still in flux as a draft of something more-final to come. Like the <IntervalReading>, this can (and should) be updated to reflect the vetting-process finality, when those data updates are ready. The same <id> UUID rules noted above also apply here.
Reading-Quality Flag Options
| QualityOfReading | Validity (Representation) | Description | Enumeration |
revenue-quality |
Bill-Quality Data, Final | data that is valid and acceptable for billing purposes. | 19 |
valid |
Potentially Bill-Quality Data, Final | data that has gone through all required validation checks and either passed them all or has been verified. | 0 |
manually edited |
Vetted manually, Final |
Replaced or approved by a human. | 7 |
normalized for weather |
Vetted, Final | the values have been adjusted to account for weather. | 15 |
validated |
Vetted, Final | data that has been validated and possibly edited and/or estimated in accordance with approved procedures. | 17 |
verified |
Vetted, intended to be Final | data that failed at least one of the required validation checks but was determined to represent actual usage. | 18 |
projected (forecast) |
Vetted, could be Revised | data that has been calculated as a projection or forecast of future readings. | 12 |
estimated using linear interpolation |
Vetted, could be Revised | data value was computed using linear interpolation based on the readings before and after it. | 9 |
estimated using reference day |
Vetted, could be Revised | data value was replaced by a machine computed value based on analysis of historical data using the same type of measurement. | 8 |
derived |
Not vetted, could be Revised | data that has been calculated (using logic or mathematical operations). | 11 |
mixed |
Unknown, could be Revised | indicates that the quality of this reading has mixed characteristics. | 13 |
raw |
As-Read from Source | data that has not gone through the validation. | 14 |
questionable |
Data Issues, should be Revised | data that has failed one or more checks. | 10 |
other |
Undefined, should be Revised | specifies that a characteristic applies other than those defined. | 16 |
Need more help with this? Check-out our Technical Education offerings.
- ^ See the page on Atom & ESPI to understand the “
espi:” notation herein.