# energy.estimate-read
Estimates what a meter will read on a date, the way a supplier estimates a
bill when nobody has read the meter:
```
daily average = units between the earlier and latest reads / days between them
units = daily average x days from the latest read to the date
read = latest read + units, wrapped past all nines
```
It works for any cumulative meter: electricity kWh, gas units, water m³.
## Decisions
- **One rounding.** The estimate is `consumption x days ahead / days of
history`, computed exactly and rounded once to a whole unit by `mode`.
Rounding the daily average first (as a spreadsheet often does) drifts:
100 units over 30 days is 3.33 a day, and 30 days of "3" is 90, not 100.
- **Rollover both ways.** The history can span a rollover (99,900 to 00,100
on a five-digit meter is 200 units, via `energy.meter-advance`), and so can
the estimate: 99,800 plus 600 units shows as 00,400 with `rolledOver`
true.
- **The average is flat.** Two reads give one average. Seasonal profiles
(Elexon profile classes, the gas industry's annual quantity) weigh winter
days more heavily; to use one, pass reads a year apart covering the same
season, or compute the units yourself.
- **Dates.** The earlier read must be strictly before the latest; the target
date may equal the latest read (an estimate of zero units) but not precede
it. Days come from `dates.days-between`, so leap days count.
## Source
Ofgem describes estimated bills as based on the customer's previous usage;
there is no prescribed formula, and this is the simplest defensible one. The
rollover rule is that of `energy.meter-advance`.