Methodology
Every number here has arithmetic behind it.
This page shows the whole calculation: where the data comes from, how it becomes the number on the counter, what is measured and what is estimated, and where the limits are. When a criterion changes, the change lands here first, dated, before it takes effect in the system.
- SourceONS · open data
- Data licenceCC-BY
- Updates2× a day
- Price assumptionR$ 250,80/MWh
Where the data comes from
The raw material is constrained-off data: the official record of how much each plant was ordered not to generate by ONS, Brazil’s national grid operator. ONS publishes it on its open-data portal, per wind and solar plant, in half-hour intervals, with history back to October 2021 (the solar series starts later than the wind one). The files are monthly Parquet files, licensed CC-BY, updated twice a day.
Nameplate consumes exactly two datasets from that portal: restricao_coff_eolica_tm and restricao_coff_fotovoltaica_tm. No other data enters the counter’s calculation.
Verified data arrives with a lag: the provenance line under the counter states how far the ONS data reaches at the moment you look. That date is part of the number, not a footnote.
The counter’s arithmetic
From the half-hourly records to the number on screen there are four steps, and none of them holds a secret.
- 1 · Each half-hour’s curtailment
- For each plant, in each half-hour under restriction: reference generation minus delivered generation (
val_geracaoreferencia − val_geracao), never negative. It is the distance between what the plant could generate and what the grid allowed. - 2 · From power to energy
- ONS values are average power (MW) over each half-hour; the window’s energy is power × 0.5 h. Summing every plant and every half-hour of the year gives the yearly total in MWh.
- 3 · From energy to reais
- The MWh total is multiplied by a single, stated price assumption: an average PLD (Brazil’s spot price) of R$ 250,80 per MWh. The figure in reais is an honest order of magnitude for the waste: it is not metered revenue, and the page owns that.
- 4 · The rate that moves the number
- The speed at which the counter climbs is the whole system’s average curtailment over the most recent 24 hours of available data, recomputed at every snapshot.
Why “live estimate”
The counter does not read ONS every second; nobody does, because the data does not exist at that cadence. What does exist: 2× a day, a scheduled job downloads the new data, redoes the arithmetic above and publishes a snapshot with the yearly total, the rate and the date of the last verified data point. That snapshot is baked into the page’s HTML: a search crawler or a reader without JavaScript gets the last computed value, not zero.
Between one snapshot and the next, the browser animates an extrapolation: total + rate × elapsed time. When the next snapshot arrives, the number converges smoothly to the recomputed truth, and never runs backwards. The on-page label is live estimate on purpose: the movement is declared extrapolation, and the truth is recomputed twice a day.
Assumptions and limitations, stated
- One price, not hourly prices. The conversion to reais uses a single reference average PLD, not hourly prices per submarket. The figure in reais conveys scale; anyone needing fine-grained valuation should start from the MWh.
- Simple reference. The calculation uses the reference generation (
val_geracaoreferencia), not the “final” variant ONS also publishes. That is a methodological choice, recorded in the notes below. - Missing values count as zero. A half-hour without a reference value adds no curtailment. Any bias runs downward: the counter never invents waste.
- Data lag. ONS publishes with a delay; everything the counter shows beyond the last verified date is extrapolation, and the page states how far the data reaches.
- Shorter solar series. The portal’s photovoltaic history starts after the wind one; early years understate solar curtailment.
The forecast and its yardstick
The 24-to-72-hour forecast has been live since 2026-08-28, and it only shipped because it beat the hardest yardstick in a series with memory: repeating yesterday. The hit rate is measured the way operations forecast — walk-forward, each day forecast only with what existed the day before — and published per horizon on the accuracy page, inside the very file that carries the forecast. No forecast number appears on this site without its own error beside it.
What is not here yet: the 7, 30 and 90-day windows per source and the backtesting file (forecast × observed) for download — they arrive once the series of published forecasts builds its own history.
Version notes of the calculation
Every change of criterion (price assumption, rate window, definition of the cut) lands here as a dated note before taking effect in the system.
- August 28, 2026
- The climb’s index gains its own definition and a recountAnnual curtailment index defined as curtailed energy ÷ delivered generation (utility-scale wind + solar; curtailment from constrained-off records, generation from the four subsystems’ energy balance). Series recomputed from the source: 3.7% (2022), 5.4% (2023), 9.4% (2024), 21.1% (2025) — replacing figures inherited from the project document, which could not be reproduced from the open data. By the same arithmetic and price assumption, 2025 losses are estimated at R$ 11 billion. Verified by two independent implementations.
- August 5, 2026
- The initial calculation goes liveEach half-hour’s curtailment defined as reference minus delivered generation (val_geracaoreferencia − val_geracao), never negative, summed across wind and solar plants. Price assumption: average PLD of R$ 250.80/MWh. Counter rate: the system’s average curtailment over the most recent 24 hours of data.