STRICTLY CONFIDENTIAL — Property of Sherpas Group SpA
← Back to dashboards

The MADD methodology, in one battery, one week.

How the Sherpas/Scientiis platform calculates the exact tonnes of CO₂ avoided by a grid-scale battery in Chile — explained from first principles using the audited data of one real project, hour by hour, unit by unit.

AES Atacama BESS Stand-alone · 2025 · Anchor week: 1–7 Sep 2025 · Methodology: MADD §5.4

A grid-scale battery only reduces emissions if it shifts dirty generation to clean generation. How much it reduces emissions is a surprisingly subtle question — and the answer depends, hour by hour, on which specific power plant ramps down when the battery discharges, and which plant ramps up when the battery charges.

This page walks through exactly that calculation for a real Chilean battery: the AES Atacama BESS Stand-alone project (100 MW / 400 MWh / 4-hour duration). We follow the official methodology used by the Sherpas/Scientiis platform to estimate the project's 2025 emission reduction — a number eligible for issuance under Article 6.2 of the Paris Agreement as Internationally Transferred Mitigation Outcomes (ITMOs). All numbers are drawn from the project's audited 2025 dataset; no figures are illustrative.

RED · 2025
65,743
Tonnes of CO₂ avoided · one year of operation
TGHGd · avoided
67,148
From displacing thermal generation on discharge
TGHGc · induced
1,405
2.1% of avoided — charging mostly absorbs curtailed renewables
Equivalent
14,292
U.S. passenger cars off the road for one year (EPA, 4.6 tCO₂/car/yr)
How to read this page
Every chart is interactive — hover for exact values, double-click a legend item to isolate a series. The narrative builds bottom-up: first one hour, then one day, one week, one year. Every numbered figure that represents a calculation has a "↓ Download data (CSV)" link below it, so the underlying tables can be opened in Excel and audited directly. The math itself is in §7 — every equation listed there maps one-to-one to a Python function in equations.py, which is the engine that produced these numbers.

↓ Annual summary (CSV) · ↓ Monthly breakdown (CSV) · ↓ Hourly anchor-week table (CSV)

§1 Why a battery can reduce emissions

Electricity is a commodity with two unusual properties. First, it is nearly impossible to store at grid scale — until recently. Second, the physics of the grid require that supply and demand match second by second. To make this work, every country runs a dispatch process: a single operator decides, every five minutes, which generators are turned on and how much each produces.

Chile's electric independent operator is the Coordinador Eléctrico Nacional (CEN). It dispatches generators by a rule called the merit order: cheapest first, most expensive last. The price of the last generator that has to turn on to meet demand sets the spot price (also called the marginal cost) for that hour, at that location.

This is why batteries can matter. If a battery charges when many cheap, clean generators are about to be wasted (curtailed solar at noon), and discharges when expensive, dirty generators are running (gas turbines at peak demand), the net effect is to move energy in time from clean hours to dirty hours. That is the source of every tonne of CO₂ a battery can credibly claim to have avoided.

The detail that matters: at any given hour, dispatch is set by economics, not by carbon emissions. The marginal generator is the one with the highest variable cost, not the highest emission factor. So the questions we have to answer rigorously are:

This is not solved by using a single grid-average emission factor. The Chilean grid average in 2025 was about 0.32 tCO₂/MWh, but the specific unit that ramps down when this battery discharges is, as we'll see, almost always a fossil-fired unit with a much higher emission factor (0.4 to 0.9 tCO₂/MWh). Using the grid average would significantly under-state the project's contribution.

§2 The actors: who generates electricity in Chile

Chile's Sistema Eléctrico Nacional (SEN) is a single interconnected system stretching from Arica to Chiloé, with about 30 GW of installed capacity. Roughly half is dispatchable thermal generation (coal, natural-gas combined-cycle and gas turbines, diesel motors); the other half is non-dispatchable renewable (solar PV, wind, run-of-river hydro), with the balance from reservoir hydro that behaves part-way between the two.

In our anchor week (1–7 September 2025) the grid dispatched 1.65 TWh spread across 13 distinct technology classes:

Figure 1 — SEN dispatch by technology · 1–7 Sep 2025
Energy generated in the week, grouped by technology class. Renewables (yellow, green, blue) supplied roughly 60% of the total; thermal generation (red/orange) supplied the rest.

The economics of the dispatch are reflected in each plant's variable cost (VC). Solar and wind have near-zero VC because their fuel — sunlight and air — is free. Reservoir hydro is also free at the margin (water has an opportunity cost the operator manages through a different mechanism). The expensive plants are the thermal ones: coal, gas, and diesel all burn fuel that has to be bought every hour. So in any given hour, the merit-order stack rises from "renewables first" at the bottom to "diesel motors last" at the top.

In the methodology, every plant carries a known per-MWh cost VCu,i (audited variable cost) and a known per-MWh emission factor EFu (audited technology-specific emission factor). The u indexes the generating unit, the i indexes the hour.

Technology glossary

Quick reference for the technology classes used throughout the page.

Solar PV
Photovoltaic panels convert sunlight directly into electricity. Zero fuel cost; intermittent.
Concentrated solar (CSP)
Mirrors focus sunlight onto a receiver to heat a fluid that drives a steam turbine.
Wind
Wind turns blades that spin a generator. Zero fuel cost; intermittent.
Reservoir hydro
Water stored behind a dam is released through a turbine on demand. Flexible and dispatchable.
Run-of-river hydro
Generates from the natural flow of a river with little or no storage.
Small run-of-river hydro
Same as run-of-river hydro, but small (≤20 MW). Often labelled PMGD in Chile.
Geothermal
Underground heat raises steam that drives a turbine. Constant baseload-style output.
Combined-cycle gas
Gas turbine plus a heat-recovery steam turbine — the most efficient way to burn natural gas.
Open-cycle gas turbine
Natural gas burned in a turbine without heat recovery. Fast-ramping, used at peak hours.
Steam turbine (coal)
Coal (or sometimes biomass) is burned to make steam that drives a turbine. High emissions per MWh.
Diesel engine
Internal-combustion engine running on diesel fuel. Very flexible, very expensive, high emissions.
Cogeneration (steam)
Industrial steam-turbine unit that produces electricity and useful heat together (often biomass).
Cogeneration (gas)
Same idea, but the prime mover is a gas turbine.

§3 One week in the life of the grid

To make the methodology tangible, we anchor everything that follows on a single typical week of 2025: the seven days from Monday, 1 September to Sunday, 7 September. We picked this week because all hours have full data, no extreme outages occurred, and the marginal-unit mix is representative of the rest of the year.

Below is the entire week, hour by hour, generation stacked by technology, with the system-wide generation-weighted spot price overlaid as a dotted line. The lightly shaded vertical bands mark the battery's fixed charging window (10–13h, in pale gold) and discharging window (19–22h, in burgundy).

Figure 2 — One week of dispatch, by technology · 1–7 Sep 2025
Each colored band is one technology's hourly generation, stacked. The dotted line is the SEN-wide weighted-mean spot price (right axis). Shaded vertical bands: gold = battery charges, burgundy = battery discharges.

Two visual rhythms tell the whole story. First, the solar bulge each day from about 09:00 to 17:00: a huge wave of yellow that pushes the thermal stack down. Second, the evening peak after sunset — the yellow disappears, and the merit order must turn on its costliest, dirtiest generators to cover the same demand. The spot price line follows this rhythm precisely: cheap during daylight, expensive at night.

The battery's job is to surf those rhythms. Here is what AES Atacama BESS actually did across the same week:

Figure 3 — AES Atacama BESS hourly profile · 1–7 Sep 2025
Positive bars (burgundy) are discharge into the grid; negative bars (cyan) are charging from the grid. The asset operates on fixed 4-hour windows daily.

Each day: 100 MWh charged between 10:00 and 13:00 (the curtailed-solar zone), and 93 MWh discharged between 20:00 and 23:00 (the post-sunset peak, when the gas plants would otherwise be running flat out). The 7 MWh missing on discharge are the round-trip efficiency losses — heat in the inverters and chemistry.

So our job, for every one of those 28 discharge hours and 28 charge hours in the week, is to identify the specific units on the other side of the trade. Let's zoom into one hour.

§4 Discharge: 20:00, Saturday 6 September 2025

This is the hero hour. The battery discharges its 93 MWh into the grid over the 20:00–21:00 window. Somewhere in the SEN, that 93 MWh of generation that would otherwise have come from some mix of dispatchable plants is no longer needed. The methodology's job is to identify exactly which plants.

It does this by sorting all dispatchable units by their economic distance to the marginal price, defined as DIFu,i = VCu,i − SPPu,i. The discharge merit order DORd sorts units by DIF in ascending order: the unit with the most-negative DIF — the cheapest one already running well below its busbar's spot price — sits at rank 1 and is the first the battery's 93 MWh would offset, followed by progressively more expensive units until the cap is reached.

This ordering is also the conservative one: by assuming the battery first offsets the cheapest units (which are typically the lowest- emission ones — biomass cogen, run-of-river, etc.), the methodology credits the project with the smallest avoided emissions consistent with the merit order. Any other ordering would yield more credits.

Below is exactly that stack for 20:00 on 6 September 2025. Each row is one generating unit; the faded bar shows how much energy it could have contributed at that hour (its available energy, AVE), and the solid colored portion shows how much of that energy was actually offset by the battery's 93 MWh discharge.

Figure 4 — Discharge merit order (DORd) at 20:00, 6 Sep 2025 · the supply curve
Each rectangle is one generating unit. Width = its available energy (AVE, MWh); height = its emission factor (EF, tCO₂/MWh); area = avoided emissions on that unit. Units are ordered cheapest-first by DIF from left. The dashed line marks the battery's 93 MWh discharge — everything to the left of it is offset. The marginal unit (Petropower U1, steam boiler with EF ≈ 1) is outlined in burgundy and only its leftmost slice is colored solid.
Cogeneration (steam) Steam turbine (coal) Cogeneration (gas) Diesel engine

Walking the stack from rank 1 onward: the first four units sit deep "below water" with DIF between −150 and −116 USD/MWh — they were producing well under their busbars' spot price. All four (TER CMPC SANTA FE U1, TER NUEVA ALDEA U1, TER NUEVA ALDEA U2, TER CHOLGUAN U1) are biomass cogeneration units from the Chilean pulp-and-paper industry with EF = 0, so the battery offsetting their 67 MWh of output adds zero tCO₂. The fifth unit, PMGD TER ORAFTI U1 (cogen gas turbine, EF = 0.72), is the first dirty plant in the stack and contributes 5.08 × 0.72 = 3.66 tCO₂. Then more biomass (TER MASISA, TER LICANTEN, TER PLANTA DE ACIDO SULFURICO MEJILLONES) at zero, and a small landfill-gas motor (TER SANTA MARTA U1, 4.10 MWh, EF = 0.56) adding 2.30 tCO₂. The cumulative AVE crosses the 93 MWh cap inside the 10th unit, TER PETROPOWER U1 (petroleum-coke steam, EF = 0.99) — the dirtiest plant in the stack — of which only 8.49 MWh out of 56 are offset, contributing 8.41 tCO₂. This unit — outlined in burgundy in Figure 4 — is the marginal unit of the hour.

The total avoided emissions in this single hour are:

GHGdi = sum over fully offset units + emission factor of the marginal unit × its partial slice = 5.95 + 8.41 = 14.36 tCO₂

One hour, one specific battery, ten specific power plants identified by name. Notice how the conservative DIF-ascending ordering shapes the result: Petropower (EF ≈ 1) does enter the stack, but only at rank 10 and only with a partial slice — the rest of the 93 MWh has already been consumed by biomass and small thermal units higher in the order. Had we instead sorted by emission factor descending, Petropower would have received the full slice and the credited reduction would have been more than six times larger. The DIF-ascending rule is what keeps the methodology auditor-defensible.

Why sort by DIF, not by EF?

The merit order is set by economics, not by emissions. The operator dispatches by cost. If we sorted units by emission factor instead, we would identify the dirtiest plants as the marginal ones — which would be tempting (it gives a bigger answer) but wrong: the dirtiest plants are often not the ones the operator would choose to ramp down. They are often cheap to run (coal) or essential to the system's stability and must keep operating.

So DIF = VC − SPP captures the right idea: among the units actually producing at this hour, which are closest to being switched off? Sorting by DIF ascending puts the most-below-water units first — the ones the battery effectively replaces — and forces the methodology to credit their (typically low) emission factor rather than that of the dirtiest plant on the system.

A note on units dispatched for system security. Units with VC > SPP (positive DIF) are running because the operator forces them on for voltage support, reserves or transmission constraints — not for economics. The methodology never credits the battery with replacing them: in discharge, DIF-ascending pushes them past the 93 MWh cap; in charge, Eq24 excludes them (VC > SPP ⇒ EGEMc = 0). They are locked in by physical constraints, so the operator would not have moved them either way.

Figure 5 — DIF (the sort key) for all dispatchable units at 20:00, 6 Sep 2025
Each dot is a generating unit. X-axis is its rank in the merit order, Y-axis is its DIF. The dashed line marks the rank at which the cumulative dispatch reaches the battery's 93 MWh discharge — beyond that line, units are not displaced.

A subtle point: how ties are broken

Sometimes two units have the same DIF. The methodology then leans on EF as a tiebreaker, and the direction of that tiebreaker is set differently on each side — always in the direction that reduces the project's credited reduction. On the discharge side, ties break by EF ascending: among equally-cheap units, the cleanest is "displaced" first, crediting the project with the smallest avoided emissions consistent with the tie. On the charge side, ties break by EF descending: among equally-eligible units, the dirtiest is treated as the one whose output rose, charging the project with the largest induced emissions consistent with the tie. Same conservativeness principle, just pointed opposite ways.

§5 Charge: 12:00, Saturday 6 September 2025

Now the symmetric question: when the battery charged 100 MWh between 10:00 and 14:00, whose output went up to supply it? Charging adds to demand, so whatever generator was on the margin between dispatch and not dispatch has to produce a little more. The methodology screens candidates with Eq24: only units that pass VCu,i ≤ SPPu,i are economically eligible (their variable cost is at or below the spot price at their busbar), and everything else has EGEMc = 0 and never enters the merit order. Concretely, at 12:00 on 6 Sep, 322 of the 1187 units in the SEN are filtered out before sorting; the 829 that remain are the universe the battery could plausibly draw from.

The charge merit order DORc then sorts those eligible units by DIF in descending order — the unit closest to the margin (least below water) first, the deepest-curtailed last. The conservative direction here is the opposite of discharge: starting with the highest-DIF eligible unit (which on a high-curtailment hour is a unit sitting right at DIF = 0) and breaking ties by EF descending assigns charging to the dirtiest plausible source first, maximising induced emissions and minimising the project's net credit. Below is the stack for the hero charge hour:

Figure 6 — Charge merit order (DORc) at 12:00, 6 Sep 2025 · the symmetric case
Same construction as Figure 4 but on the charging side. The widths are the eligible energy (EGEMc) of each renewable in merit order; the heights are their emission factors — all zero. So the area integrates to zero: GHGc = 0 tCO₂. The marginal unit (PFV Javiera) is outlined in green. Rectangles are drawn at a small visual floor for legibility.
Small run-of-river hydro Wind Solar PV

This is the most important chart on the page. Even with the conservative dirtiest-first tie-break, every unit the battery actually reaches is a renewable: wind (PE ATACAMA), small run-of-river hydro (HP GUAYACAN, HP RIO HUASCO), and solar PV (PFV LLANO DE LLAMPOS, PMGD PFV PAMA, PMGD PFV TAMBO REAL, PMGD PFV SANTA CECILIA, PMGD PFV LOMAS COLORADAS, PFV PILAR LOS AMARILLOS, and PFV JAVIERA — the marginal). Their emission factors are all zero. So the induced emissions from charging in this hour are:

GHGci = 0 + 0 + 0 + 0 + … + 0 = 0.00 tCO₂

This is not a coincidence of one cherry-picked hour. It is a structural feature of the Chilean grid in 2025: during midday hours, the SEN regularly curtails 5–15% of its solar and wind generation simply because the demand is not enough to dispatch all the solar/wind units, and partly because the transmission system can't deliver it where it is needed. The battery, by soaking up 100 MWh in that window, is partially un-doing that curtailment — taking energy that would otherwise have been thrown away. The "induced" emissions of the charging side are therefore close to zero across the whole year:

TGHGc = 1,405 tCO₂, just 2.1% of TGHGd.

This asymmetry is what makes BESS so effective in this grid — and it is exactly the kind of fact that an hour-by-hour, unit-by-unit methodology can capture, but a single global emission factor cannot.

Why does charging displace renewables, not thermal? Because at midday the system is over-generating: there is more renewable supply available than demand, and the operator has to throttle renewables to keep the grid balanced. When the battery adds 100 MWh of demand, the operator doesn't crank up a gas turbine — it simply lets the renewables run a bit more.

§6 Where the numbers come from

Before reading the equations, it is worth knowing what feeds them. Every input variable in the calculation is monitored at hourly granularity by Chile's Coordinador Eléctrico Nacional (CEN), which is the statutory grid operator and the single source of truth for dispatch, prices, and generation. The methodology consumes eight monitored quantities directly from CEN's public datasets:

The platform downloads these files monthly through an automated Python pipeline that reproduces a human analyst's steps on the CEN portal, one by one. The pipeline preserves the original files alongside cleaned, standardized tables — every value remains traceable back to its source file, the original-name fragment, and a confidence level on the unit identification. A step-by-step walkthrough of the manual download procedure for each of the five hourly variables is available in this explanatory video.

Across the eight monitored parameters and the year 2025, the final audited tables ("TRF tables") reach 99.7% coverage over all hours, units, and busbars. The remaining 0.3% corresponds to units recently commissioned (with sparse historical data) or to busbars that the CEN itself publishes inconsistently. Sensitivity tests show those gaps do not move RED by more than ±0.2%.

How the platform handles data-quality issues
When the pipeline detects an inconsistency — a missing variable cost, a duplicated unit name, an out-of-range emission factor — it flags the issue and applies a deterministic, conservative fallback (e.g., the unit's historical median, then the technology-class minimum, then the system-wide minimum). The flag is preserved in the dataset so the operator can review and resolve it. No value is silently overwritten. The conservative fallback is, by design, always the choice that produces less credit for the project.

The unit-identity layer — which is the harder problem, because the same physical plant can appear under different names in different CEN publications — uses a four-step matching cascade (exact match → name similarity → fuzzy logic on multiple attributes → human-reviewed AI suggestion). Every cross-reference carries an explicit confidence score, and benchmark sheets maintained by the project's reference electrical engineer were used to validate the matches.

The end result: a tabular dataset where every hour, every unit, and every variable is traceable back to its CEN source, with an audit trail for any imputation or harmonization step. That dataset is what the next section's 26 equations operate on.

§7 The math, in 26 equations

The full chain is 26 equations. They are listed below in compact form. Every variable name is the canonical name used in the MADD methodology document (Section 5.7) and in the Python implementation that produced this page. The equations are not approximations of the methodology — they are the methodology.

Inputs · hourly monitored (every hour, every unit)

The five hourly time-series the platform consumes from the CEN's public datasets. Each value is timestamped, traceable to its source file, and paired with a confidence level on the unit identification.

UGENu,iGeneration of unit u in hour i, MWh
SPBm,iSpot price at busbar m in hour i, USD/MWh
VCu,iAudited variable cost of unit u, USD/MWh
CURTu,iDocumented curtailment of unit u, MWh
CRu,iCapacity availability of unit u, %

Hourly monitored inputs · anchor week (CSV)

Inputs · annually monitored (per-unit, fixed within the year)

Static parameters that the platform refreshes once per audited year. They describe each unit's identity, its place in the grid, and its physical limits.

EFuAudited emission factor, tCO₂/MWh
BBuInjection busbar of unit u (fixed)
DPPuDispatchability flag — 1 = dispatchable, 0 = not (fixed)
MAXCuMaximum rated capacity of unit u, MW (fixed)

Annual per-unit parameters · 2025 (CSV)

Inputs · supplied by the project's meter (validated against public data)

The battery's own measurements, taken at the project's substation by the metering chain installed for the issuance. These values are independently cross-checked against the CEN's published injection data for the same node.

Bdi, BciBattery discharge / charge in hour i, MWh

Pre-computations

The spot price at each unit is just the busbar price where that unit injects:

SPPu,i = SPBBBu,i  (Eq. 25)

The economic distance to the spot price:

DIFu,i = VCu,i − SPPu,i  (Eq. 26)

The energy that could have been dispatched but wasn't:

AVEu,i = CURTu,i if DPPu = 0  else  (MAXCu · CRu,i − UGENu,i)  (Eq. 14)

For the charge side, the eligible generation is the unit's existing output if the price test holds:

EGEMcu,i = UGENu,i if VCu,i ≤ SPPu,i, else 0  (Eq. 24)

Discharge stack

Sort all units by DIF ascending → DORdk,i (Eq. 13). Compute cumulative dispatchable energy along the sorted stack (AEADd, Eq. 10) and cumulative emissions (ACHGEd, Eq. 11, where each unit contributes CHGEd = AVE × EF, Eq. 12).

Find the index LPFdi of the last unit fully dispatched without exceeding the battery's discharge (Eq. 9). Then:

GHGFdi = ACHGEdLPFdi,i  (Eq. 8 — fully-dispatched units)
GHGNFdi = EFLPFdi+1 · (Bdi − AEADdLPFdi,i)  (Eq. 7 — the marginal unit)
GHGdi = GHGFdi + GHGNFdi  (Eq. 6 — total avoided in hour i)

Charge stack

Symmetric, but sort descending by DIF, use EGEMc instead of AVE, and clip the marginal-unit term at zero (Eq. 17):

GHGNFci = max(0, EFLPFci+1 · (Bci − AEGEMcLPFci,i))
GHGci = GHGFci + GHGNFci

Top-level reduction

Sum the hourly results over the year (Eq. 5 and Eq. 15):

TGHGdt,t+n = Σi GHGdi     TGHGct,t+n = Σi GHGci

The net GHG balance:

GHGt,t+n = TGHGdt,t+n − TGHGct,t+n  (Eq. 4)

The observed system emissions (sum of UGEN × EF across the year) (Eq. 2) plus that balance gives the counterfactual baseline: what emissions would have been without the battery (Eq. 3):

CBSt,t+n = OSEt,t+n + GHGt,t+n

And finally:

REDt,t+n = CBSt,t+n − OSEt,t+n = TGHGd − TGHGc  (Eq. 1)

For AES Atacama BESS Stand-alone, 2025: RED = 65,743 tCO₂. That single number is the output of running this whole calculation against the 8 760 hours of 2025, with 1 187 units, across 13 technology classes. Every intermediate quantity — every LPFdi, every GHGFdi, every DORdk,i — is preserved as an audit checkpoint.

§8 From one hour to one week

So far we have done the calculation for two specific hours. The methodology repeats exactly this procedure for every one of the week's 168 hours. Most of those hours (140 of them) lie outside the battery's operating windows, so Bdi = Bci = 0 and they contribute nothing. The remaining 28 charge hours and 28 discharge hours produce the picture below.

Figure 7 — Hourly net mitigation across the week
Green bars: emissions avoided by discharge (TGHGd contribution). Red bars below the axis: emissions induced by charging (TGHGc contribution). The asymmetry is striking.

The negative side of the axis is almost empty. In our week, the battery induced essentially no emissions while charging, because the renewables being un-curtailed all have EF = 0. Each of the 28 evening discharges, by contrast, displaces tens of tonnes of CO₂ — generally a single dirty gas turbine bears the brunt.

Stacking that all up, the weekly RED accumulates almost linearly:

Figure 8 — Cumulative TGHGd, TGHGc, and RED over the week
Each step up in the green line is one discharge hour. The red TGHGc line stays nearly flat. The black RED line is the difference — the project's net mitigation.

§9 From one week to one year

Repeating the same procedure for every hour of 2025 — all 8 760 of them — gives the year's RED of 65,743 tCO₂. The seasonal pattern is mild but visible: winter months (June–August in the southern hemisphere) show slightly higher mitigation because the gas turbines run harder, summer months slightly less because solar curtailment is lower.

Figure 9 — Monthly mitigation, 2025
Green = avoided; red = induced (almost invisible). The black line tracks the net RED. Annual total is the area under the line minus the red bars.

An interesting derived view: which technologies bore the brunt of the avoided emissions? Or equivalently — which kinds of generators did this battery most often displace? In 2025:

Figure 10 — Avoided emissions by displaced technology (2025)
For each hour, the methodology identifies a specific marginal unit. Grouping those by technology class shows where the avoided emissions came from. Number on the right = hours that technology was on the margin.

Open-cycle gas turbines supplied the most marginal hours, with combined-cycle gas units and diesel engines making up most of the rest. Coal-fired steam units appear comparatively less often as the marginal unit because in 2025 they are running mid-merit — cheaper than gas but with positive output even at low spot prices.

§10 Why this matters — vs. using one number for the whole grid

The simplest possible methodology would be: take the grid's annual-average emission factor (about 0.32 tCO₂/MWh in 2025), multiply by the battery's net energy throughput, declare that the RED. Why isn't that enough?

Because the units that the battery actually displaces are nothing like the average. Discharge happens in the late evening, when the grid's marginal unit is essentially always a fossil-fired plant. Charge happens at midday, when the marginal unit is essentially always a renewable. The hour-by-hour marginal emission factor swings between near-zero and near-1.0 tCO₂/MWh:

Figure 11 — Marginal EF on each discharge hour vs. the system average
Each burgundy dot is the EF of the specific unit displaced in one hour. The dashed line is the SEN-wide average EF for the same week. Discharge consistently displaces dirtier-than-average plants — exactly because the battery is timing its output to evenings.

If we had used the system-average EF for both charge and discharge, the answer would have under-estimated RED by ~40%. The unit-level methodology captures the project's real grid-shaping effect, not an averaged abstraction of it.

Compared to the CDM Tool 007

The closest standardized methodology in the carbon-credit ecosystem is the CDM's Tool to calculate the emission factor for an electricity system (commonly called Tool 007). Tool 007 produces a single annual emission factor for an entire grid, blending a build-margin and an operating-margin component. For the Chilean SEN in 2025, Tool 007 would yield an annual average somewhere near 0.4 tCO₂/MWh — within the same order of magnitude as the unit-level marginal EF we observe in this methodology, on average. The two approaches converge in the annual mean.

They diverge sharply in the hourly dimension. Tool 007 cannot distinguish between a 2 a.m. discharge displacing a gas turbine and a midday charge absorbing curtailed solar. The unit-level methodology documented here can — and that distinction is precisely what makes a BESS-specific RED defensible. For projects where the battery's value proposition is grid-shaping (every BESS), Tool 007 mis-credits the project's actual contribution. For projects where the operation is flat (a baseload generator), the two methods would agree.

One-to-one with the Python implementation

Each equation in §7 corresponds to exactly one function in the project's open Python module shared/madd_engine/equations.py — same name, same signature, same intermediate variables. The 26 equations of MADD §5.7 are implemented in 26 named functions:

compute_red()Eq. 1 — top-level reduction
compute_ose()Eq. 2 — observed system emissions
compute_cbs()Eq. 3 — counterfactual baseline
compute_ghg()Eq. 4 — GHG balance
compute_tghgd() / compute_tghgc()Eqs. 5, 15 — annual sums
compute_dord() / compute_dorc()Eqs. 13, 23 — merit-order sorts
compute_lpfd() / compute_lpfc()Eqs. 9, 19 — last-fully-dispatched index
compute_ghgd() / compute_ghgc()Eqs. 6, 16 — hourly totals
…and 17 more, one per equation

The module is pure math: no I/O, no database calls, no global state. It consumes pandas DataFrames as inputs and returns pandas DataFrames as outputs. Every intermediate quantity — every LPFdi, every CHGEdk,i — is preserved as a row in those DataFrames. An auditor can re-run any equation in isolation against the project's CSV exports and verify that the function output matches the documented value, without needing to read or run Python beyond the call site.

All hourly intermediate tables for the anchor week of this page are downloadable via the buttons on each chart card. The same tables are available for any week or month of any audited year.

Conservativeness baked into every choice

At every place where the methodology has discretion, the choice deliberately reduces the project's credit. Some examples:

None of these choices are visible in the final number, but each of them is one reason an auditor can sign off the project's claim. The complete list of decisions, each with its per-decision sensitivity to RED, is maintained internally as part of the calculation engine's audit trail and is available on request.

§11 Bottom line

A 100-MW / 400-MWh battery in northern Chile, in 2025, avoided 65,743 tonnes of CO₂ — equivalent to taking about 14,292 U.S. passenger cars off the road for a year, by the EPA's accounting. That number is built from 8,760 hourly calculations, each of which identifies the specific power plants on both sides of the trade.

The methodology is auditable end-to-end: every variable feeding every equation is either a directly monitored measurement (with a metering chain that the auditor can validate) or a value taken from a public audited dataset (the Coordinador's published technical and economic parameters). The Python implementation that produced the numbers on this page is a one-to-one mapping of the 26 equations in the methodology document, with every intermediate dataframe preserved as an inspection checkpoint. The numbers shown here are the same numbers the auditor will see when verifying the project's emission reduction claim.

For deeper questions about specific units, decision boundaries, or the relationship between this methodology and CDM AM0026, see the formal methodology document MADD Sherpas BESS GFM Programme (Section 5, pages 39–66) and the associated data architecture report.