ENERPLAIN / FIELD NOTES
When a missing reading becomes a zero
A source-to-application example of how a complete-looking dataset can lose the meaning of an absent observation.
The useful distinction: zero is a value that was observed. Missing means there is no observation in the available source. A transformation that silently replaces one with the other has changed the evidence.
This is a synthetic teaching example, not a finding about a customer, inverter or OEM.
Declare the contract first
Our fictional device reports interval energy in kWh every 15 minutes, including overnight. Timestamps label the start of each interval. The test window runs from 25 October 2026 at 00:00 UTC to 02:00 UTC, with the end excluded. That creates eight expected interval starts.
The expectation of overnight reporting is invented for this example. Real integrations must use the actual source contract: some systems omit nighttime records, delay them, aggregate them or distinguish unavailable and invalid states.
Compare what actually arrived
The source contains seven records, each with an observed value of 0.00 kWh. The record starting at 00:30 UTC is absent. The application contains eight records after filling that gap with a zero.
| Interval start · UTC | Warsaw local time | Source · kWh | Application · kWh | Comparison |
|---|---|---|---|---|
| 02:00 +02:00 | 0.00 | 0.00 | Observed zero | |
| 02:15 +02:00 | 0.00 | 0.00 | Observed zero | |
| 02:30 +02:00 | — No observation | 0.00 | Gap filled with zero | |
| 02:45 +02:00 | 0.00 | 0.00 | Observed zero | |
| 02:00 +01:00 | 0.00 | 0.00 | Observed zero | |
| 02:15 +01:00 | 0.00 | 0.00 | Observed zero | |
| 02:30 +01:00 | 0.00 | 0.00 | Observed zero | |
| 02:45 +01:00 | 0.00 | 0.00 | Observed zero |
The two 02:15 entries are different instants: their UTC offsets are +02:00 and +01:00. They are not duplicate UTC records.
A row-count check can report eight records downstream while missing the changed meaning. Comparing the declared identities and states exposes the difference.
Keep the total honest
The seven observed source values sum to 0.00 kWh. That is an observed subtotal. It does not establish the complete-window total, because one interval is unknown. In the downloadable example, the complete source-window total is explicitly null.
If the missing source record later arrives with a measured zero, the evidence changes: all eight values are then known and the complete total can be calculated. A downstream filler cannot establish that fact on its own.
Make the treatment explicit
- Preserve whether a value was observed, absent, invalid or estimated.
- If a business rule permits imputation, retain its method and provenance separately from the observed value.
- Show completeness alongside aggregates, with the expected reporting rule stated.
- Agree how late records revise earlier results and how a consumer learns about the revision.
What this example cannot tell you
It does not establish why the source record is absent, whether a later export will contain it, or whether equipment is faulty. It does not prove lost generation or financial loss. Those questions need other evidence.
Download the synthetic JSON, check it against the published schema, or read the Markdown reference.