gridAssets — assets, alarms and metering
Hands-on guide
reviewed on 2026-10-02
The record of every plant, substation and line in the Brazilian grid: live alarms, monthly KPIs, metering validity, forecast and the connection point network.
Each app is a track of up to six stages: start by using the screen and go as deep as you like — down to the formulas, where the data comes from and what could still improve. Every app in this manual now follows this format.
1Stage 1 — Use and read the screen (30 seconds)
What it is: The page of every plant, cluster, substation and line of the Brazilian grid (SIN), built from public data from ONS, CCEE and ANEEL: what is happening now, the month's numbers and where each one comes from.
Do it now: Type a plant's name into the search box at the top of the home page and open its page. Example: “Caetité D”, a 50.4 MW wind farm in Bahia.
2Stage 2 — Features, step by step
Every step has a link that opens the app in exactly the state described (asset, month and panel).
Open the page. The Registry panel at the top says what the asset is: CEG, capacity, operator, group, cluster and connection point (for Caetité D, the Igaporã III substation, 230 kV). In the Owner (ANEEL registry) row, when the project has more than one holder CNPJ, the page shows the majority partner with its share and the number of partners — “majority partner (x %, 1 of N partners)”, since 2026-09-23; debt is still matched by the SPV's CNPJ. Open in this state →
Pick the period. The link opens August 2026 (?mes=2026-08 in the URL); on screen, the ‹ › arrows of the KPIs panel change the month and the M · D · I buttons switch between month, day and interval. Open in this state →
Read the tooltips and change the month in the KPIs panel. captured on 2026-09-26 · recording of the public screen of usinas.brazilgrid.com · 11.1 s Hover over Curtailment and over Curtailment Reason: the tooltip says how the number is computed and which rule it relies on. Open in this state →
Scroll down to Potential improvement — SAGER recovery and, right below, Data validity per half-hour: the whole month, cell by cell. Open in this state →
Per-half-hour validity and SAGER recovery. captured on 2026-09-20 · recording of the public screen of usinas.brazilgrid.com · 10.2 s Go to the connection point: on the substation page, the Neighbour curtailment panel shows how much the plants already connected there were curtailed, by reason and by bus. Click a bus to see its plants. Open in this state →
Neighbour curtailment: from the substation total to the bus and its plants. captured on 2026-09-26 · recording of the public screen of usinas.brazilgrid.com · 9.2 s Share the state: the URL keeps the month (?mes=), the day (?dia=), the interval (?ini= and ?fim=) and the panel (#…). Whoever opens the link lands in the same place.
Open a group, operator or financier: since 2026-09-25 the page opens on the “All” tab, with plants of ALL sources in one list, and the per-source tabs (wind, solar, hydro, thermal, substations, lines) sit beside it to filter. Engie: 157 assets, 18.9 GW — All 194 items, wind 88, solar 52, hydro 16, thermal 1, substations 14, lines 23 (read on the production screen on 2026-09-26). If one source fails to load, the warning shows above the list; it does not vanish silently. Since 02/10/2026 the asset list, the substations, the lines and the group's SAGER panel sit in panels with their own bar (click the title to collapse); all start open — with everything collapsed the group page fits in about two screens (Voltalia: 1.9 screens, measured on the 02/10/2026 build). Open in this state →
Engie group page in gridAssets opened on the All tab, with the tabs per source (wind, solar, hydro, thermal, substations and lines) and the asset map screenshot captured on 2026-10-30 · public screen of usinas.brazilgrid.com On a line sheet, the diagram at the top links the two end substations through the grid graph (matched by the ONS register CODE) and says, under each name, how many OTHER active lines leave from there — click the name to go to the substation's star. 345 kV Xavantes – M. Fornasaro C1 line (SP): Xavantes +6 active lines, M. Fornasaro +3 (read on the production screen on 2026-09-26). Open in this state →
Profile of the 345 kV Xavantes – M. Fornasaro line in gridAssets: the two end substations, matched through the grid graph, with the number of other active lines at each screenshot captured on 2026-10-30 · public screen of usinas.brazilgrid.com For a thermal plant the page gains panels of its own. At UTE Norte Fluminense (RJ, gas), August 2026: under Thermal specifics, “CCEE declared CVU” has one line per parcel with the latest declared CVU and its operating week, and the weekly step chart of CCEE (per parcel) next to the ONS CVU (per planning unit) — hover a week to see both values, which do not add up; right below, “Why it generated” shows a bar for what the plant generated and, right below, one for what ONS scheduled; further down come “Operating restriction — constrained-on and constrained-off (CCEE)”, which now also has the unit commitment line (CCEE MWh over all hours of the month and the official R$ charge, side by side, never added to constrained-on — hover the label to see the source and date), and “Did the fuel arrive?”, with the ANP gas delivery point. Open in this state →
Thermal plant: CCEE declared CVU × ONS, verified × scheduled, CCEE constrained-on and unit commitment, and gas at the point. captured on 2026-09-24 · recording of the public screen of usinas.brazilgrid.com · 15.9 s In any app on the platform, the vertical “Feedback” tab on the right edge, halfway down, opens a form: write what was missing or could be better (3 to 2,000 characters), leave your e-mail only if you want a reply and click Send — the address of the page you are on goes along, so the team can open the same state. Cancel or Esc close only the form: the tab never disappears. It does not show in an embedded app (minimap, landing card, ?embed=). Open in this state →
3Stage 3 — In depth, panel by panel
What each panel means, where the data comes from and how recent it is, and the most common misreading.
KPIs Open in this state →
- What it means
- The numbers of the chosen period: actual generation (verified by ONS), potential generation, capacity factor, invalid metering, availability, curtailment and the curtailment reason.
- Source and date
- ONS — verified generation, estimated generation and restriction with reason, summed per plant. The “last data …” stamp on the panel says how recent the data is; times in BRT (UTC−3).
- Pitfall
- In the current month the panel is partial (e.g. “partial: 408h / 720h”) — do not compare it with a closed month. Curtailment counts the half-hour in which ONS flags restricted generation in the per-plant file OR publishes the reason (REL, CNF, ENE) — the union of both signals since 2026-09-20. The share still without a published reason shows in grey as “reason pending ONS publication”: the MWh is already right, only the name is missing.
Loss Waterfall Open in this state →
- What it means
- The plant's energy from gross down to what is settled at the CCEE Centre of Gravity, in two rows: modelled and measured. Since 2026-09-26 the curtailment box splits in two when the plant sat at zero under restriction while sister plants in the same cluster were generating: that part leaves “Curtailment” and becomes “Stopped under restriction” (EST badge) — a candidate for the plant's own unavailability, not a curtailment order.
- Source and date
- Each box carries the tag of its origin — measured, calculated, estimated or literature-typical. CCEE enters with the latest settled month, shown in the panel corner (e.g. “CG · 2026-07”).
- Pitfall
- CCEE settles after ONS: the CCEE box may be one month behind the others or tagged as estimated. Check the tag before comparing boxes. The two boxes add up to the usual curtailment: the potential and the official column do not change. In August 2026, across the wind and solar fleet, stopped under restriction was 469,505 MWh, 8.2 % of curtailment (measured in production on 2026-09-26); at Morro dos Ventos II (RN), 9,609.1 of 11,163 MWh. Since 2026-09-26 each box's tooltip carries ITS OWN split by reason (REL, CNF, ENE) in MWh and as a % of that box; in Stopped, the reason is the CLUSTER's label at that instant.
Maximum Demonstrated Power — Panels A and B and detection floor Open in this state →
- What it means
- Since 2026-09-26, inside the panel (wind and solar): Panel A shows the best year's p95 by resource band (wind or irradiance), with the ceiling band and the knee; Panel B, month by month, the ceiling and the low band against the plant's own best year, with the month's curtailment % in the footer and the steps above the floor marked. The “below peak” status only lights above the plant's detection FLOOR (3 × the typical month-to-month variation).
- Source and date
- ONS — the plant's half-hourly verified generation and the resource of its own series; BrazilGrid internal criterion, no standard. Across the fleet measured in production on 2026-09-26, the median knee is 900 W/m² for solar and 10 m/s for wind.
- Pitfall
- The “DC/AC not inferred” chip is always visible: a solar plant's ceiling is blind to module degradation. A step is a SHAPE label, grey, not an alarm — nearly every plant has one in its series, and most fall in months of heavy curtailment (check the curtailment % in the footer before concluding the asset got worse). With the floor, 97 solar and 63 wind plants left “below peak”.
Data validity per half-hour Open in this state →
- What it means
- The whole month in 30-minute cells: green valid, red invalid without estimate (the Reference Generation drops to zero and that half-hour's curtailment is not counted), blue filled in via SAGER. The cell outline shows the curtailment reason — and turns GREY when ONS has not yet published that half-hour's reason (“reason pending ONS publication”, on screen since 2026-09-20).
- Source and date
- Invalid-data flag published by ONS, half-hour by half-hour; the basis (Operating Routine RO-AO.BR.13) is cited in the panel footer, with the “data up to” stamp.
- Pitfall
- The flag is about telemetry — the supervisory system failed to receive data for more than six minutes — not about the sensor: the measurement usually exists in the plant's logger. The window to contest in SAGER is short (3 business days); the panel shows the deadline.
Failures & Shutdowns Open in this state →
- What it means
- What is out at the connection substation and along the path to the bulk grid, with its validity period. Since 2026-09-26 the panel separates FORCED FAILURE (red, counts as an alarm) from SCHEDULED INTERVENTION (blue, informational): the ONS PDI is a schedule, so it shows as “N scheduled ongoing” and does not raise the alarm.
- Source and date
- ONS (COIG / PDI), with the time of the last check in the panel header.
- Pitfall
- “None ongoing” holds for the window shown on the panel. To explain a past REL curtailment, cross the event date with the KPIs period. On 2026-09-26 00:40 UTC there were 23 forced failures (COIG) and 648 scheduled interventions (PDI) in force; before, the 416 PDI with shutdown raised the alarm and the intervention chip of 83 plants — today it lights only for a forced failure (14 plants at that time).
Neighbour curtailment (substation page) Open in this state →
- What it means
- How much the wind and solar plants already connected to the substation were curtailed, by reason (REL, CNF, ENE), month by month and by bus; clicking a bus opens its plants.
- Source and date
- ONS (restriction × verified generation), summed per plant, 12-month or 90-day window, with “data up to” on the panel.
- Pitfall
- The total counts the half-hour flagged as restricted generation by ONS or with a published reason; the share still without a reason enters in grey, as “reason pending ONS publication”. The value without that filter, invalid telemetry and the effect of aggregating per plant instead of per cluster appear in the footer as not counted — never add them to the total.
Active alerts now Open in this state →
- What it means
- Chips that are always visible: dimmed when there is nothing, lit when an event is ongoing (rain, wind, lightning, fire, invalid metering, SAGER risk…).
- Source and date
- Each chip gives its source and criterion in the tooltip, with the time of the data that lit it.
- Pitfall
- A dimmed lightning chip means the satellite detected no strike at that moment — not that operations are safe.
To connect (SE page) — who answers for each voltage sector Open in this state →
- What it means
- Who owns the substation's general module — the counterpart for anyone wanting to connect there — and, since 2026-09-20, BY VOLTAGE SECTOR: the same SE may have one owner in the 230 kV yard and another in the 500 kV one. The “Answers for the sector” column shows both.
- Source and date
- ONS — module registry and substation condominium. Measured on 2026-09-20: 713 SEs with a Basic Grid general module, 780 (SE, voltage) pairs and 67 SEs with modules in two or more sectors.
- Pitfall
- In 61 SEs (8.6%) some sector had an owner different from what the screen showed before — at BACFO the SE appeared as AXIA Nordeste (230 kV yard), while ISA Energia Brasil answers for the 500 kV. The SE's main owner did not change: look at YOUR sector's row before looking for a counterpart.
DEC/FEC continuity by cause (Distribution panel) Open in this state →
- What it means
- How long (DEC) and how often (FEC) the consumer-unit cluster was without power over 12 months, against the annual limit — and, since 2026-09-20, broken down BY CAUSE on both sides of the boundary. The exclusion block stands apart, never added to the official figure. Since 2026-09-26 the same DEC/FEC shows on the cluster, group and operator pages, at the end of the Distribution (BDGD) panel: it counts consumer-unit sets by status against the limit (above, within, undetermined, no limit) and with a violation already certain for the year, and lists them from closest to the limit to farthest.
- Source and date
- ANEEL — continuity indicators per consumer-unit cluster; the reference period and the file date are in the panel footer.
- Pitfall
- DEC = DECIP + DECIND (scheduled + unscheduled interruption), an identity that closes in 3,259 of the 3,262 clusters (99.91%); a residue above 0.05 h shows on screen. The four exclusion parcels are DISJOINT since 2026-09-20 — before that they overlapped and added up to 9.00 h where the real figure is 8.66 h (OESTE cluster, Coprel). In the aggregate DEC is NOT summed or averaged — each set is an area with its own limit; a plant counts through the WORST set it connects to. Engie group, reference 07/2026 (ANEEL file of 2026-09-05): 7 sets, 2 above the limit over 12 months and 1 with a violation already certain (Lajinha 1, 16.55 h in the year against a 14 h limit) (read in production on 2026-09-26).
Energy not supplied (SE grid-health panel) Open in this state →
- What it means
- How much energy the state failed to receive in the month because of a disturbance with load shedding, in MWh — the cost of the shedding, which robustness indicators count but never price. On screen since 2026-09-20.
- Source and date
- ONS — load-interruption record, by state, with the month in the panel; the consumer-unit cluster's state on the page was also corrected on 2026-09-20.
- Pitfall
- “—” is a month WITHOUT an interruption publication, not a month without shedding: until 2026-09-19 that gap became zero in 3,214 of 6,334 rows. And the ONS robustness indicator's shedding count is inflated: 6,624 published against 1,652 real over 90 months (factor 4.01).
Why it generated — verified × scheduled by ONS (thermal) Open in this state →
- What it means
- Two bars with the same colours per dispatch reason (merit order, pure inflexibility, unit commitment, electrical reason, replacement generation…) and a shared scale: on top what the plant generated, below what ONS scheduled. The “verified − scheduled” chip tells, with its sign, how far the plant ran above (positive) or below (negative) the schedule. On screen since 2026-09-22.
- Source and date
- ONS — Thermal Generation by Dispatch Reason (hourly), summed over the month; the provenance line under the panel says “data of DD/MM/YYYY BRT”. At GNA II, August 2026: 247.2 GWh verified against 439.7 GWh scheduled, chip −192.6 GWh, 100% pure inflexibility (production API, 2026-09-22).
- Pitfall
- It is attribution per term, not a balance: when ONS's terms do not add up to the scheduled total, the residual shows with its sign (above 0.5%) and is never redistributed; an unpublished term reads “no information”, never zero. The old “Dispatch by component” panel left the screen on 2026-09-22 because it double counted (+6.7%).
CVU (Thermal specifics) Open in this state →
- What it means
- The plant's unit variable cost in R$/MWh. The green “sem. DD/MM/YY” tag under the value means it is the ONS WEEKLY CVU for that operating week; a grey tag is the CVU declared in the PMO (NEWAVE), used only when the weekly one is missing. The Operational Margin panel compares the CVU with the month's CMO.
- Source and date
- ONS — weekly CVU per planning unit; the PMO's NEWAVE as fallback. At GNA II, read on 2026-09-22: R$ 927.35/MWh for the week of 2026-09-19, against R$ 768.85 in the August 2026 PMO.
- Pitfall
- Until 2026-09-22 the weekly CVU query failed silently and the page always showed the PMO one. Check the tag before comparing two plants: weekly and PMO are not the same yardstick.
Operating restriction — constrained-on and constrained-off (CCEE) Open in this state →
- What it means
- Constrained-on: generation ONS ordered because of a grid restriction, outside the merit order. Constrained-off: generation the thermal plant did not make because of a restriction. Energy (MWh) and charge received (R$) side by side, the last 12 months month by month and, in constrained-on hours, why the plant generated according to CCEE. On screen since 2026-09-22.
- Source and date
- CCEE — hourly generation per plant (open data; MWh = our monthly sum) and charges received per plant (official R$, copied untouched). The two datasets do not move together: the footer shows the “data up to” of each. At Norte Fluminense, 08/2025–07/2026, read on 2026-09-22: constrained-on 443 MWh (3 hours, in February 2026) and R$ 141 thousand; constrained-off 8,125 MWh and R$ 1.9 million; MWh up to 07/2026, R$ up to 02/2026.
- Pitfall
- Do not divide R$ by MWh: the charge is net of the PLD revenue, so energy × CVU does not reproduce what was paid. There is no reason code (REL/CNF/ENE) for constrained-on. A dashed bar is a month without hourly data (absence, not zero). Only thermal plants with a CVU declared at CCEE show up.
Did the fuel arrive? — gas delivery point (ANP) Open in this state →
- What it means
- The transmission pipeline delivery point that serves the plant, with the volume requested, scheduled and delivered in the period, the allocation, who delivers (shipper and contract) and the Pearson r between the point's daily volume and the plant's daily generation (“Does the point explain generation?”). On screen since 2026-09-22.
- Source and date
- ANP — daily natural gas flows in transmission pipelines (consolidated data, 2021-01 to 2026-08); the point↔plant pair is hand-curated. At Norte Fluminense, August 2026, read on 2026-09-22: r = 0.995 over 2,066 paired days, 34,262.2 thousand m³ delivered against 33,579.1 thousand m³ requested (allocation 102%), with Petrobras and J&F as shippers.
- Pitfall
- Zero volume at the point is NOT a gas shortage: gas may come from a field, the plant's own LNG terminal or the distributor, which ANP does not publish (Uruguaiana generated on 52 days, up to 549 MW, with no volume at its point). A plant without a point gets the answer “not served by an ANP-regulated transmission pipeline” — coverage is 19 of the 52 gas-fired plants (9.50 of 18.28 GW). There is no gas transport margin: ANP publishes flow, not capacity.
Economics — debt and coverage (indicative): DSCR Open in this state →
- What it means
- The plant's debt service coverage ratio, built only from public data: (12-month revenue − 12-month opex) ÷ 12-month debt service, with a sensitivity range and a stress case. Since 2026-09-23 the TUST in the opex carries the grid-tariff discount published by CCEE: the line “TUST with a X% grid-tariff discount (CCEE)” gives the percentage and the month.
- Source and date
- Debt: SND/B3 (CVM) and ANEEL auctions; revenue: ONS; opex: EPE; grid-tariff discount: CCEE, monthly registry of the plant parcel (discount percentage). For Caetité D, read in production on 2026-09-24: 50% discount published for 07/2026, single parcel.
- Pitfall
- It is an indicator built from public data, not a credit opinion. Without a CCEE publication the TUST goes in at full rate and the line says “TUST with no discount information (full tariff)” — never an assumed 50%. For clusters, groups and operators the panel says how many plants have the discount applied and how many have no information; when an input fails to load, the DSCR shows as “not calculated”, never zero.
Line tap — indirect terminal (line page) Open in this state →
- What it means
- For line taps ONS publishes the “to” terminal empty: the tap ends at a branch of another line or at a model node, not at a substation. Since 2026-09-23 the line header shows that terminal read from the equipment name, with the “indirect terminal” badge and a link to the parent line (in the example, the Jaru tap branches off the Samuel – Ji-Paraná C-1 line).
- Source and date
- ONS — transmission line registry, equipment name, loaded on 2026-09-23; the page stamps source, date and method. Measured in production on 2026-09-24: 48 of 2,339 current lines, all taps — 16 branches off a line (15 matched to the parent line) and 32 model nodes.
- Pitfall
- The indirect terminal never becomes a substation terminal. The Auctions panel of the tap has no lot of its own and lists the parent line's works, labelled as the parent's.
4Stage 4 — Theory and formulas
How each number is computed, with the rule or criterion behind it — and what it leaves out.
Curtailment — per plant, with the ONS gate (flag ∪ reason)
Curtailment (MWh) = Σ_t max(Est_t − Ver_t ; 0) × 0.5 h
summing only the half-hours t under restriction, by the ONS gate:
restricted-generation flag = 1 OR published reason (REL, CNF, ENE)
before 2024 the flag does not exist — only the reason applies
Est = ONS estimated generation (MW) · Ver = verified generation (MW)
Curtailment % = Curtailment ÷ Σ Est over the period
The max is taken plant by plant and half-hour by half-hour: a half-hour in which the plant generated above the estimate does not offset another plant's cut. The reason filter separates curtailment from estimation error — without it, the same sum over the whole wind and solar series gives 128.24 TWh instead of 85.32 TWh (+50%; production measurement of 2026-09-13, series 2021-10-01 to 2026-09-12). Since 2026-09-20 the gate is the UNION of two ONS signals: the restricted-generation flag from the per-plant file, which arrives at D−1 and exists from 2024 on, and the reason from the per-cluster file. The union came in because the flag alone erased curtailment the source itself labels — 104 half-hours and 274.638 MWh of UFV Assú V, measured in production on 2026-09-20. The 2024–2026 series does not change; what changed was 17 and 2026-09-18, which showed ZERO curtailment (reading as “a day without curtailment”) and now show 488,424 MWh. It is the Gfrust (frustrated generation) term of the compensation formula.
Basis: GESS formula of ANEEL REN 1,109/2024: min[max(Econt − Gver; 0); Gfrust]; half-hourly assessment of ONS RO-AO.BR.13; Curtailment tooltip in the KPIs panel; flag ∪ reason gate (B322) in production since 2026-09-20.
Capacity factor, three readings
Delivered CF = Verified generation ÷ (Nominal capacity × hours in period)
Potential CF = Reference generation ÷ (Nominal capacity × hours)
Lost CF = Curtailment ÷ (Nominal capacity × hours)
Delivered is the official ONS capacity factor (marked ★ in the panel) and drops when the plant is curtailed. Potential says how much it would generate without restriction; lost is the share attributed to the restriction assessed by ONS, split by reason (REL, CNF, ENE).
Basis: Tooltips of the KPIs panel; production-based availability in IEC 61400-26 (wind) and IEC TS 61724-3 (solar).
Why the per-plant sum gives more than the ONS one (method difference)
Σ_u max(Est_u − Ver_u ; 0) ≥ max(Σ_u Est_u − Σ_u Ver_u ; 0)
per-plant sum per-cluster sum (ONS assessment and counter rule)
ONS adds up the plants of a cluster before taking the max; plant by plant, one that generated above its own estimate does not offset one that was cut. The inequality guarantees the per-plant sum is larger, but it does not make that difference energy: most of it is error in each plant's estimated generation (BrazilGrid review B343, 2026-09-24, with a synthetic-curtailment test of known truth). For the SIN, whole series, the per-plant sum is 3.4% higher (2.88 TWh; gridCurt in production, 2026-09-24 20:30 UTC). That is why the counter uses the per-cluster sum; per-plant curtailment serves to analyse the asset, never as a total.
Basis: RO-AO.BR.13 (per-cluster assessment); ANEEL REN 1,030/2022 Art. 16 §4 (plant frustration = share of the cluster's); BrazilGrid review B343.
Invalid metering, zeroed Reference and what can be recovered
Colours: green = valid · red = flag 1 AND estimate 0 (Reference zeroed, curtailment out of the count) · blue = flag 1 AND estimate > 0 (replaced by the ONS, curtailment counted) · grey = not ingested
Silenced half-hour: invalid-data flag = 1 AND estimated generation = 0
Invalid readings % = silenced half-hours ÷ half-hours in period
Recoverable = max(P_plant × CF of valid sibling plants − Ver ; 0) × 0.5 h × hourly PLD
When telemetry fails and ONS has no estimate, the plant's Reference Generation goes to zero and that half-hour's curtailment drops out of the count. Flag 1 with an estimate above zero is not a problem: ONS has already substituted the value. To size what is recoverable, we rebuild the reference from the capacity factor of the valid sibling plants in the same cluster — a reference to check your own series against, not something to submit as metering. The cell outline shows the curtailment reason (REL, CNF or ENE). A red cell with an outline is curtailment left out of the books; a blue one is curtailment counted. The invalid flag is about telemetry, not the sensor: it means the transmission failed for more than six minutes within the half-hour. In most cases the measurement does exist in the plant's own recorder.
Basis: RO-AO.BR.13 Rev.09: item 5.2.2.5 (zeroed reference), 5.2.2.6 (substitute data from the plant's own metering) and 7.1 (identical data across plants of a cluster is an invalidity criterion); Potential improvement — SAGER recovery panel.
Rebuilding the series with sister plants
Order of preference for the substitute data: 1) the plant's own record → 2) best sister in the same cluster → 3) meteorological floor
Sister ranking: period coverage · recoverable MWh · historical correlation · distance
Ordinary contestation window: 3 business days
When metering does not arrive, the ONS accepts a reconstruction based on series from plants in the same cluster — the sisters. The panel ranks sisters by period coverage and recoverable MWh, with historical correlation and distance, and rates how defensible each choice is. Download the combined series ready to submit, or the blank template if you prefer to fill it with your own record — then send your CSV back for checking. The ordinary contestation window is 3 business days. Outside it, a period only becomes claimable again if a retroactive window is opened by regulation. The app tracks, on its own, the revisions the ONS makes after submission — restored reference generation shows up in the panel, with a date.
Basis: RO-AO.BR.13 Rev.09: item 5.2.2.6 (substitute data, the plant's own metering first) and 7.1 (identical data across plants of the cluster is an invalidity criterion); Potential improvement — SAGER recovery panel.
REL allowance: what is compensable
REL hours in the year = minutes under REL restriction published by ONS, per cluster, accumulated since 1 January
Compensable under the ordinary regime = only what exceeds the annual allowance
2026 allowance applied by ONS: 110 h (wind) · 55 h (solar)
Regulatory baseline: 78 h (wind) · 30 h 30 min (solar)
REL (external network unavailability) is compensable above the allowance; the allowance is annual, not monthly. CNF only under Law 15,269/2025, for events from 2023-09-01 to 2025-11-25, through a Commitment Term — payment currently suspended by an ANEEL injunction. ENE (energy surplus) is not compensable. Where ONS does not publish the minutes, we count the whole half-hour and the panel says so.
Basis: ANEEL REN 1,030/2022 Art. 16 §2 and §3 (wind) and Art. 20-D §2 and §3 (solar); ONS dashboard of average unavailability hours of transmission functions, 2021/2025 cycle, consulted on 2026-09-13; Law 15,269/2025 Art. 1-B; ANEEL Order 148/2026.
Substation curtailment rate (Neighbour curtailment)
Rate = Curtailment ÷ (Curtailment + Verified generation)
Curtailment = Σ curtailment (with restriction reason) of the wind and solar plants connected to the substation, over 12 months or 90 days
The share of possible energy that the electrical neighbourhood lost. At Igaporã III: 728.0 ÷ (728.0 + 1,553.6) = 31.9% — mission 3 of the developer track.
Basis: Same curtailment definition as the plant page; ONS data.
The 4th slice: “reason pending ONS publication”
Half-hour reason = reason from the ONS PER-CLUSTER file
without it → reason from the ONS INTRA-HALF-HOUR file
without both → PEND (“reason pending ONS publication”), GREY slice
The curtailment MWh does NOT change: only the split among REL, CNF and ENE is provisional
Curtailment is measured in the per-plant file, which arrives at D−1; the reason's name comes from the per-cluster file, which can be late — that is what happened on 17 and 2026-09-18. When it is late, the half-hour enters as PEND, grey on purpose: PEND is not a reason, it is the absence of one. Without that slice, anyone opening the total into REL/CNF/ENE would see less energy than the counter beside it, and two different bases side by side read as a data defect. The panel stamps how far the official ONS reason has been published.
Basis: ONS RO-AO.BR.13; ONS restriction files per plant, per cluster and intra-half-hour; BrazilGrid rule in production since 2026-09-20.
Verified × scheduled by dispatch reason
Scheduled = Σ ONS terms (merit, pure and embedded inflexibility, unit commitment, electrical reason, …) + residual
Deviation = Verified generation − Scheduled generation (MWh in the month)
> 0 → the plant generated above schedule (upward redispatch)
< 0 → below
Term % = term ÷ total, computed separately for verified and scheduled
Both bars use the same ONS identity, one on the verified values and one on the scheduled values, and the same scale: the length shows the redispatch. The residual (what the published terms do not explain) only shows above 0.5% and always with its sign. The 12-month window gets the same reading in the “In 12 months” line.
Basis: ONS — Thermal Generation by Dispatch Reason, verified (val_verif*) and scheduled (val_prog*) columns; BrazilGrid decomposition in production since 2026-09-22 (B327).
Thermal constrained-on: energy and money, side by side
On energy (MWh) = Σ_h GERACAO_RESTRICAO_OPERATIVA_CONST_ON (hours published by CCEE)
Off energy (MWh) = Σ_h ENERGIA_AJUSTADA_ENCARGO_RESTRICAO_OPERATIVA (since 06/2024)
R$ = system service charge received by the plant (official value)
Unit commitment (a separate line, never added to constrained-on): MWh = Σ_h GERACAO_UNIT_COMMITMENT (all hours of the month); R$ = ENCARGO_REST_OP_UNIT_COMT (official value)
Hourly attribution: generation = merit + inflexibility + unit commitment + … + constrained-on + residual
MWh and R$ come from different CCEE datasets and are never converted into each other. The split by reason is the attribution CCEE itself publishes, hour by hour; in the production validation of 2026-09-22, over the whole base, it closed exactly in 66.8% of the hours — elsewhere the residual shows as an absolute sum. The base had 142 thermal parcels, 2,621,941 MWh of constrained-on and R$ 1,835.5 million of on charges.
Basis: CCEE — hourly generation per plant and charges per plant (open data); model agg_ccee_restricao_operativa_usina_mes validated in production on 2026-09-22; unit commitment from fact_ccee_unit_commitment_parcela_mes.
Gas: allocation and the point ↔ plant link
Allocation (%) = Σ delivered volume ÷ Σ requested volume × 100 (never an average of daily percentages)
Link = Pearson r (daily volume at the point, daily plant generation), over paired days
r ≥ 0.90 → tracks the plant · partial · shared point · no variation · no basis
Allocation is contractual — how much of the request the transporter confirmed to the shipper —, not physical pipeline use. The r separates “the point tracks the plant” from “the point is the plant's”: of the 19 curated pairs, 14 have r ≥ 0.90, 2 are partial and in 3 the point does not explain the plant (measured 2026-09-22). No pair is matched by municipality: that rule is right 34% of the time and can tie a plant to another plant's point.
Basis: ANP — daily flows in transmission pipelines; curated seed seed_xwalk_anp_ponto_usina (23 rows: 19 pairs and 4 documented rejections), 2026-09-22 (B324).
Curtailment, stopped under restriction and non-binding restriction
Only in half-hours with a restriction reason, per plant:
binding = curtailment > 0 and the plant generated; or plant AND whole cluster at zero
stopped = curtailment > 0, verified ≤ 0 and some sister in the cluster generating at the same instant
non-binding = labelled, but curtailment = 0 (generated ≥ estimate) — count only
“Curtailment” box = Σ binding · “Stopped under restriction” box = Σ stopped · both add up to val_curtailment
The ONS order applies to the cluster: if it did not zero the sisters, this plant's zero is more likely its own unavailability than curtailment. That is why the stopped part is kept in its own box, never deleted, and an order that zeroes the whole cluster is still curtailment. If the gate query fails, the waterfall falls back to the usual single box and records the failure.
Basis: ONS — restriction per plant (val_curtailment, with the reason gate); BrazilGrid rule in production since 2026-09-26 (B212).
5Stage 5 — Where the data comes from
The source of each dataset, how and how often we fetch it, and the limitation you need to know.
Verified generation, estimated generation, reason and flag (half-hourly, per plant)
- Source and date
- ONS — Open Data: constrained-off operating restriction of wind and photovoltaic plants, with verified generation, estimated generation, restriction reason (REL, CNF, ENE) and invalid-data flag.
- How and how often we fetch it
- Automatic daily collection from the ONS public repository into our database, transformed up to the per-plant table every app reads; times shown in BRT (UTC−3). Data usually runs up to two days before today (on 2026-09-19: up to 2026-09-17 23:30 BRT).
- Limitation
- ONS rewrites already-closed months when it recalculates the reference, without changing the row count. We check old partitions against the source and re-ingest the divergent ones — so a number measured before a re-ingestion may not reproduce afterwards. Since Aug/2026 ONS publishes two invalidity flags; we use the supervisory one (the one covering the whole series) and keep the final one separately.
Registry: capacity, cluster, connection point, physical guarantee
- Source and date
- ONS (plant and cluster registry) and ANEEL (SIGA: inspected capacity and physical guarantee), joined by CEG.
- How and how often we fetch it
- Periodic collection; the plant page joins the sources by the plant's CEG.
- Limitation
- ONS registry and operation run on two clocks: when ONS regroups or recodes a cluster, the old restriction stays under the old code. A cluster-alias table keeps that history from being lost.
Settled generation and PLD
- Source and date
- CCEE — generation settled at the Centre of Gravity and hourly PLD by submarket.
- How and how often we fetch it
- Periodic collection of CCEE public data.
- Limitation
- CCEE settles after ONS: the latest month may not be published yet, and the panel marks that box as estimated or projected.
Failures, outages and alerts
- Source and date
- ONS (PDI — scheduled outages; COIG — generation occurrences), GOES-19 satellite (GLM lightning, FDCF fire, RRQPEF rain, DSIF convection) and INPE (wildfires).
- How and how often we fetch it
- Continuous collection through the day; each chip shows the time of the data that lit it.
- Limitation
- Satellites detect, they do not guarantee: no detection is not the same as no event. PDI is a schedule and may carry future dates. The PDI is a schedule (planned intervention), not a failure: since 2026-09-26 it is informational and only a COIG forced failure counts as an alarm.
Thermal dispatch by reason and weekly CVU
- Source and date
- ONS — Open Data: Thermal Generation by Dispatch Reason (hourly, verified and scheduled) and weekly CVU per planning unit; the PMO's NEWAVE for the fallback CVU.
- How and how often we fetch it
- Automatic collection from ONS's public repository; the page sums the month and shows the “data of” on the provenance line.
- Limitation
- ONS publishes terms that do not always add up to the total: the residual stays in view. A thermal plant ONS does not dispatch centrally has no such decomposition.
Thermal operating restriction (constrained-on/off)
- Source and date
- CCEE — open data on hourly generation per plant (operating restriction columns) and on system service charges received per plant.
- How and how often we fetch it
- Periodic collection; energy summed per month by BrazilGrid, R$ copied. The two datasets have different dates (Norte Fluminense on 2026-09-22: MWh up to 07/2026, R$ up to 02/2026).
- Limitation
- Constrained-off energy is identified by statistical evidence, not by CCEE's data dictionary, and only exists since 06/2024. Only thermal plants with a declared CVU show up.
Gas delivered at the point
- Source and date
- ANP — daily natural gas flows in transmission pipelines (consolidated data), 68 months, 2021-01 to 2026-08: 215 delivery points.
- How and how often we fetch it
- Monthly load into our database, every published column kept; the point↔plant pair comes from a curated table with the evidence for each pair.
- Limitation
- ANP renamed columns mid-series and writes negatives as “- 55,49”; “-” and “#N/D” become absence, never zero. A day without publication is absence, not zero delivery.
6Stage 6 — Possible improvements
What the app does not do yet, or does with a caveat, and what is on the radar. Suggestions are welcome.
- Spanish in gridAssets. Measured on 2026-09-19, the interface opened in Portuguese even with ?lang=es. Since 2026-09-20 the language choice travels from the landing to the apps (bg_lang cookie on .brazilgrid.com), so picking Spanish on the landing and opening gridAssets keeps Spanish; a panel still in Portuguese is a missing translation, not the choice being lost.
- Official compensable base across the whole series. Frustrated generation computed from the ONS Final Reference Generation only appears where ONS publishes that column; the panel shows the coverage. It grows as ONS publishes.
- Applied allowance for earlier years. Only the 2026 applied value is archived with its source; earlier years use the regulatory baseline, labelled as such. Archiving the earlier cycles of the ONS dashboard closes that gap.
- Notice of months revised by ONS. Today we watch and re-ingest the months ONS rewrites; showing on the plant page when a month was revised would help anyone comparing numbers taken on different dates.
- Closing the reason for 17 and 2026-09-18. Both days came in with the right curtailment from the ONS flag, but part of the reason split came from the intra-half-hour file. Once ONS publishes the per-cluster file for those days, the grey slice turns into REL, CNF or ENE on its own.
- Gas for plants without an ANP point. 33 of the 52 gas-fired plants get gas from a field, their own LNG terminal or the distributor, which ANP does not publish; indirect sources (LNG terminals, state distributors) would close part of that gap.