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.
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.
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:
Which specific generator's output gets reduced when the
battery discharges?
Which specific generator's output gets increased (or
un-curtailed) when the battery charges?
What are their emission factors, hour by hour?
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:
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.
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 hydroWindSolar 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:
UGEN — hourly generation per unit (audited every five minutes by the CEN's SCADA) · source portal
SPB — hourly spot price at each injection busbar (the CEN's official marginal-cost publication) · source portal
VC — audited variable cost per unit and per hour · source portal
CURT — documented curtailment per unit and per hour · source portal
Bc, Bd — battery hourly charge and discharge (metered at the project's substation)
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.
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.
EFu
Audited emission factor, tCO₂/MWh
BBu
Injection busbar of unit u (fixed)
DPPu
Dispatchability flag — 1 = dispatchable, 0 = not (fixed)
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, Bci
Battery 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:
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:
Sum the hourly results over the year (Eq. 5 and Eq. 15):
TGHGdt,t+n = Σi GHGdiTGHGct,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):
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:
The dispatchability flag DPP classifies geothermal as
non-dispatchable, even though it is thermally generated, because
its output cannot in practice be ramped down to absorb the battery's
discharge. The effect: lower TGHGd.
The maximum-capacity parameter MAXC is estimated from
the historical maximum of UGEN, not from the authorized
nameplate. The effect: lower available headroom, lower TGHGd.
Tie-breakers in the discharge merit order favor the cleaner unit
first; in the charge merit order, the dirtier unit first. The combined
effect: both reduce RED.
When a unit's published variable cost is temporarily unavailable
for a given hour, the engine applies a deterministic three-step
fallback — unit historical median, then technology-class minimum, then
system-wide minimum. Each step further into the fallback tends to
under-state the unit's true cost and therefore its likelihood
of being on the margin. The fallback is flagged in the dataset so an
operator can review it; the effect on RED is, again, always negative.
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.