Day-ahead curtailment · Brazilian grid

Today we can tell that curtailment happened. WattSteer tells you it is coming.

The decision layer between ONS's day-ahead plan and real time: tomorrow's curtailment risk by subsystem, what pushed it up, and the band around it — never a bare number.
Open the prototype
Tomorrow on the Brazilian grid
Aug 29, 2026
Sample data
Expected constrained-off energy, all four subsystems
Expected value
4,580 MWh
No band: the forecaster draws its 500-path ensemble one subsystem at a time, so there is no joint distribution to read a national P10–P90 off. Adding the four subsystems' quantiles would invent one. The expected value needs no such assumption.
Subsystems by risk: high 1 · elevated 1 · low 2
The national figure is the sum of the four subsystems' expected energy, and that sum is exact — expectations add however the subsystems happen to move together. ONS publishes a SIN row; WattSteer never uses it, because it double-counts against the subsystem rows it sits beside.
By subsystem
Chance of curtailment
NE
NORDESTE
89%
2,780 MWh · P10–P90 1,720–4,260
N
NORTE
31%
610 MWh · P10–P90 120–1,180
SE
SUDESTE/CENTRO-OESTE
17%
520 MWh · P10–P90 40–1,090
S
SUL
8%
270 MWh · P10–P90 0–690
Nothing in this column sums to the figure beside it. Bands are not additive, and neither are medians: the P50 of a sum is the sum of the P50s only if the four subsystems move together, and they do not. The expected value is the one quantity that adds exactly, which is why the national figure is one.
Hour by hour
Forecast constrained-off energy per hour, national
P10–P90
P50
961721481240000h04h08h12h16h20h
The shaded band is P10–P90; the line is P50. An hour counts as curtailed above the 5 MW subsystem threshold, which is stamped on every figure WattSteer publishes.
Forecast origin: WattSteer · hurdle-v0.4 · published 2026-08-28T13:35Z · weather run D−1 12Z
Illustrative fixture. The live feed arrives with the forecasting service; nothing on this page is a real forecast yet.

Four engines, not one model

Forecasting alone is half a product. The value is in what happens after the number.
Forecaster
Will it happen, how much, where, when?
A hurdle model — an occurrence classifier plus a magnitude regression — over ONS balanço, load, interchange and capacity-weighted weather. Day-ahead, all 24 hours, as P10/P50/P90.
Diagnosis
Which grid conditions is the risk associated with?
SHAP attribution over the model's own features, arbitrated by domain rules. It explains why the model raised its forecast — deliberately not why the event physically occurred.
Flex Optimizer
What would absorb it, and at what size?
A MILP over battery state of charge and shiftable load that returns an hour-by-hour dispatch, the recoverable energy, and the share of curtailment that turns out to be avoidable.
Replay
How much could have been recovered?
Re-run a real historical day on the information that was available the evening before, then reveal what actually happened and score the difference.
Where each stands today: ingestion and the data platform are live and reading ONS, ANEEL and Open-Meteo on schedule. No model artifact is promoted for serving yet, so the Forecaster and Diagnosis routes answer with a stated refusal rather than a forecast, and every figure shown on this page is a deterministic fixture. The Flex Optimizer and Replay solve against a real gateway when one is running.
Sample data · the real components

The forecast is where it starts.

These are the product's own panels, rendered over a deterministic fixture. Same components, same units, same bands as the prototype's own screens.
P10–P90
Every number here has a width
A curtailment forecast that says 4,180 MWh and nothing else is a number pretending to be a fact. WattSteer publishes P10, P50 and P90 together and draws the distance between them, so the width of the uncertainty is as visible as the middle of it. Where a figure genuinely has no band — a measured historical actual — it is labelled observed, so the absence means something.
A confident forecast
3,900–4,500
A wide-open one
1,400–8,600
Same median — 4,180 MWh — and a single-number card would print them identically.
Diagnosis
NORDESTE · tomorrow
Which conditions the risk is associated with
Renewable resource
31%
Export stress
25%
Net surplus
18%
Intraday ramp and shape
14%
Calendar and season
7%
Everything else
5%
SHAP contribution to the model's forecast, normalised to 100%. These are the model's drivers, not a causal claim about the grid.
Flex Optimizer
NORDESTE · tomorrow
What flexibility would absorb it
No action
786 MWh
P10–P90 520–1,120
+ Battery
524 MWh
P10–P90 340–760 · 100 MW / 300 MWh, round-trip 92%
+ Flexible load
361 MWh
P10–P90 230–530 · 50 MW shiftable, 3 h window
Energy recovered
425 MWh
P10–P90 270–620
Curtailment avoided
54.1%
median to median
Economic scenario
R$76,500 at an assumed R$180/MWh
Asset parameters are scenario inputs, not an inventory — ONS publishes no flexibility-asset registry, so this is a what-if, not a plan.
Replay
NORDESTE · Nov 14, 2025
revision-optimistic
How much could have been recovered
Actually curtailed
Observed
612 MWh
A measured value. No band, because there is no forecast.
With WattSteer
331 MWh
P10–P90 268–402
Recovered
281 MWh
P10–P90 210–344
Curtailment reduction
45.9%
median to observed
This window predates WattSteer's ingestion, so the past shown here is ONS's current restatement of it, not what was knowable on the day. Labelled revision-optimistic, and it can never be repaired: ONS rewrites history in place.

Everything here comes from public data

No accounts, no login, nothing behind a wall. WattSteer reads openly published data and shows its working.
ONS Dados Abertos
Constrained-off for wind and solar, the subsystem energy balance, verified load, interchange and DESSEM. The curtailment label itself and every grid quantity behind it.
ANEEL SIGA
Plant coordinates, municipality and ownership, used to place the fleet on the map and weight weather by installed capacity. Capacity and commissioning dates come from ONS, not from here.
Open-Meteo
Day-ahead wind and irradiance at cluster centroids, from a pinned model run, aggregated by time-varying installed capacity.
What WattSteer will not claim
No carbon figure
Renewable energy that stops being curtailed does not map to a fixed CO₂ saving without knowing which generation it displaced. WattSteer reports recovered energy and says nothing about carbon.
R$ only as a labelled scenario
Money appears exactly once, next to the R$/MWh it assumed. Curtailment compensation and pricing are regulatory questions this product does not answer.
Reasons only at the grain ONS reports them
A restriction reason is a property of a reporting entity — a conjunto for most wind, a plant only where the plant reports for itself. WattSteer never allocates a reason down to a plant and presents it as an observation.
Data vintage is on screen
Every forecast names the run that produced it, and every backtest says whether its window was genuinely knowable at the time or is ONS's later restatement of it.
No transmission maintenance is read
ONS publishes planned maintenance and outages as prose rather than as a dataset, and WattSteer ingests none of it. So a day whose curtailment was driven by a line out of service has no feature carrying that fact, and the model reads around it. Nothing on this site is derived from maintenance data.

The case for WattSteer, in ten slides

The same argument the product makes, in the order it was first made: the curtailed energy ONS already publishes, the forecast that would have seen it coming, and what a plant could have done with a day's warning.

Don't just predict wasted energy. Prevent it.

Day-ahead curtailment risk for the Brazilian grid, from open data.
Open the prototype
© WattSteer 2026. All rights reserved.