Methodology
Every number you see on the map is sourced. This page lists the architectural decisions (ADRs), emission factors, and data sources Gridomics computes from.
Architecture Decision Records (ADRs)
Every material decision — from data source to calculation method — lives as an ADR. The “never invent a number” rule is enforced through these.
- ADR-0001 Tech stack — SvelteKit + Cloudflare Workers + KV + D1 Accepted
Hexagonal architecture; ports + adapters; bounded contexts enforced by dependency-cruiser.
- ADR-0002 Data sources — ENTSO-E primary for EU Accepted
ENTSO-E Transparency Platform A75 for generation, freshness derived from fetch_audit.
- ADR-0003 Value provenance — trust every number on screen Accepted
Every numeric value carries a Provenance object (method + sources + citation chain). Never invent a number.
- ADR-0004 Snapshot storage — KV aggregate blob + D1 history Accepted
Single KV blob kv:snapshot:current = API contract. D1 fetch_audit + snapshot_history. Honesty rule on partial updates.
- ADR-0005 Branching + deploy — develop → main Accepted
Develop integration + main release; rebase-merge for linear history; preview deploys on develop.
- ADR-0006 Partial-coverage handling — coverage-aware calculator Accepted
When fuel coverage < 100 %, rescale intensity to the COVERED generation, surface a coverage badge, refuse below 85 %.
- ADR-0007 Trunk-based workflow Proposed
Make main the default + topic branches; develop becomes a passive mirror via sync workflow.
- ADR-0008 Demand ingestion — ENTSO-E A65 Accepted
Realised total load (A65, processType=A16) as additive nullable field; independent fetch path.
- ADR-0009 Day-ahead prices — ENTSO-E A44 Accepted
EUR/MWh day-ahead spot price selected for the snapshot's observedAt; negative prices kept (renewables glut).
Emission factors (IPCC AR5/AR6)
Lifecycle median factors in gCO₂eq/kWh per IPCC AR5 WGIII Annex III (carried into AR6). Keys are ENTSO-E PsrType B-codes.
| PsrType | Fuel | Median | Range | Citation |
|---|---|---|---|---|
B01 | Biomass — Dedicated | 230 | 130–420 | IPCC AR5 WGIII Annex III Table A.III.2 (Biomass – Dedicated) |
B02 | Fossil Brown coal / Lignite | 1054 | 800–1300 | IPCC AR5 WGIII Annex III lifecycle median for lignite (Schlömer et al. 2014 Supplementary Information). Median sourced via Electricity Maps CZ-zone factor library and cross-checked against energeticky-semafor docs/carbon-methodology.md §4 (Daniel-reviewed: '0.6 × lignite (1054) + 0.4 × hard coal (820)' is the CZ-weighted coal blend Semafor uses for its derived intensity, with the 1054 lignite figure traced explicitly). Range is the broad Schlömer SI compilation across basins and combustion technologies. |
B04 | Fossil Gas — Combined Cycle | 490 | 410–650 | IPCC AR5 WGIII Annex III Table A.III.2 (Natural Gas – Combined Cycle) |
B05 | Fossil Hard coal — Pulverised | 820 | 740–910 | IPCC AR5 WGIII Annex III Table A.III.2 (Coal – PC) |
B06 | Fossil Oil | 840 | 740–910 | IPCC AR5 WGIII Annex II.6 Table A.II.6.1 (Oil products, lifecycle median). Promoted from `pending` per ADR-0006 — citation was available at MVP, transcription deferred. |
B09 | Geothermal | 38 | 6–79 | IPCC AR5 WGIII Annex III Table A.III.2 (Geothermal) |
B11 | Hydro — Run-of-river and poundage | 24 | 1–2200 | IPCC AR5 WGIII Annex III Table A.III.2 (Hydropower). NB: the wide upper range reflects reservoir-flooding outliers — kept honestly. |
B12 | Hydro — Water Reservoir | 24 | 1–2200 | IPCC AR5 WGIII Annex III Table A.III.2 (Hydropower) |
B14 | Nuclear | 12 | 3.7–110 | IPCC AR5 WGIII Annex III Table A.III.2 (Nuclear) |
B16 | Solar | 48 | 18–180 | IPCC AR5 WGIII Annex III Table A.III.2 (Solar PV – Utility Scale) |
B17 | Waste (Waste-to-Energy) | 730 | 540–1100 | IPCC AR6 WGIII Chapter 6 (waste-to-energy from MSW combustion). Wide range reflects municipal-waste-composition variance across technologies (mass-burn, RDF, gasification). Median used in the calculator; min/max carried in the JSON so the UI can render the band per ADR-0006 §1(a). |
B18 | Wind Offshore | 12 | 8–35 | IPCC AR5 WGIII Annex III Table A.III.2 (Wind Offshore) |
B19 | Wind Onshore | 11 | 7–56 | IPCC AR5 WGIII Annex III Table A.III.2 (Wind Onshore) |
Pending factors
Fuels for which we have no defensible IPCC citation. Their share in generation reduces coverage; ADR-0006 sets the threshold.
| PsrType | Fuel | Reason |
|---|---|---|
B03 | Fossil Coal-derived gas | Coverage gap in AR5 Table A.III.2. Use Fossil Gas (B04) as a conservative proxy only with an explicit override file and a documented note. |
B07 | Fossil Oil shale | Coverage gap; rarely material outside Estonia. |
B08 | Fossil Peat | Coverage gap; material primarily in Ireland / Finland. |
B10 | Hydro Pumped Storage | Storage technology, not primary generation. Including a generation factor would double-count emissions (pumping consumed grid mix; releasing returns that energy). Right treatment is flow-traced accounting against the grid mix at pumping time — v1.1 work. Per ADR-0006 §2 the calculator names B10 explicitly in the citation chain when present so users see it's a 'storage, accounted separately' gap, not a 'we don't know' gap. |
B13 | Marine | Emerging technology; not covered in AR5 Table A.III.2. Coverage gap. |
B15 | Other renewable | Heterogeneous category by definition — geothermal-not-classified-elsewhere, tidal, wave, novel renewables. UNECE 2021 lists 6+ technology categories under it. No single defensible factor exists. Will be split into specific PsrType extensions if ENTSO-E adds them; until then carries via the coverage-aware calculator (ADR-0006). |
B20 | Other | Unknown composition by definition — never assigned a factor. |
Data sources
- ENTSO-E Transparency Platform — transparency.entsoe.eu — A75 generation, A65 load, A44 day-ahead prices.
- IPCC AR5 + AR6 WGIII — lifecycle CO₂eq factors; see citations above.
- Natural Earth 50m — naturalearthdata.com — zone geometries.
Open source
The full codebase is public. Audit, fork, contributions welcome: https://github.com/dstefl/gridomics