Skip to content

data(nordic): price Waste and Biomass in NO1–NO3 and NO5 now that the factor table has them - #1458

Open
avalyset wants to merge 1 commit into
mlco2:masterfrom
avalyset:fix/nordic-biomass-waste-factors
Open

avalyset wants to merge 1 commit into
mlco2:masterfrom
avalyset:fix/nordic-biomass-waste-factors

Conversation

@avalyset

Copy link
Copy Markdown
Contributor

What

#1260 derived the NO1–NO5 and SE1–SE4 values in nordic_emissions.json against carbon_intensity_per_source.json as it was then. That table had no biomass or waste factor, so ENTSO-E Waste and Biomass generation stayed in the denominator at factor 0, as the file's method field says.

#1446 added biomass = biofuel = waste = 230. Four Norwegian zones contain ENTSO-E Waste (NO1 also a trace of Biomass), so they were still pricing that generation at 0. This PR recomputes them. Nothing else changes: same pipeline, same full-year 2025 ENTSO-E A75 extract, same rule for the types that still have no factor (Other, Other renewable).

Zone Before After Δ (unrounded) Coverage before Coverage after
NO1 26.0 27.0 +0.9659 99.58% (Waste 0.42%, Biomass 0.0004%) 100.00%
NO2 27.0 27.3 +0.2438 99.89% (Waste 0.11%) 100.00%
NO3 25.8 26.0 +0.1975 99.32% (Other renewable 0.60%, Waste 0.09%) 99.40% (Other renewable 0.60%)
NO4 51.7 51.7 0 98.65% (Other renewable 1.35%) unchanged
NO5 26.6 27.4 +0.7490 99.67% (Waste 0.33%) 100.00%
SE1–SE4 — unchanged 0 only Other uncovered unchanged

The arithmetic

The denominator is the zone's total generation either way, so only the numerator moves. The change per zone is the Waste (+ Biomass) energy share times 230:

  • NO1: 0.419935% × 230 = 0.9659 → 26.0260 → 26.9919
  • NO2: 0.106011% × 230 = 0.2438 → 27.0407 → 27.2845
  • NO3: 0.085864% × 230 = 0.1975 → 25.8228 → 26.0203
  • NO5: 0.325637% × 230 = 0.7490 → 26.6149 → 27.3639

As a control, the run first reproduces the nine values shipped in #1260 bit for bit, then changes only the two factors. The two runs drop the same intervals, so only the factors differ. NO3 moves above the table's 26 hydro/wind floor; SE1, SE2 and SE4 stay below it because their Other share is still unpriced.

Test

test_nordic_zones_count_no_factored_type_as_uncovered reads each zone's coverage field and fails if a type listed there as uncovered now has a factor in carbon_intensity_per_source.json. On master it fails with ['NO1: Waste', 'NO1: Biomass', 'NO2: Waste', 'NO3: Waste', 'NO5: Waste']; with this PR it passes. The point is that the next factor added to the table can't silently go stale in this file again.

pytest tests/test_emissions.py tests/test_package_integrity.py: 48 passed.

Open questions for you

  1. SE4 (and SE1–SE3) Other. SE4's note already says its 14.95% Other is mostly biomass/waste CHP. I have not mapped Other to 230: ENTSO-E reports it as unclassified, and pricing it as biomass would be a guess about its content. With fix: add biomass, biofuel and waste factors to carbon_intensity_per_source #1446 in place it would be a one-line change if you'd rather do that; SE4 would move from 24.7 to roughly 59. Happy to leave as is.
  2. provenance still names the Khepri v1.3 record. The 2025 extract and method are unchanged; only the two factors differ. I've recorded the recomputation in notes rather than rewriting the provenance string, but I can point it at a new archived run if you prefer.

biofuel has no ENTSO-E production type, so it doesn't enter these zones.

AI disclosure: implemented with Claude Code.

The Norwegian zones were derived when carbon_intensity_per_source.json had
no biomass or waste factor, so their ENTSO-E Waste and Biomass generation
was carried in the denominator at 0. The table now has biomass = waste =
230, so the four zones that contain those types are recomputed with the
same pipeline and the same 2025 ENTSO-E A75 extract:

  NO1 26.0 -> 27.0   NO2 27.0 -> 27.3   NO3 25.8 -> 26.0   NO5 26.6 -> 27.4

NO4 and SE1-SE4 carry no Waste or Biomass in the extract and are unchanged.

Adds a test that fails when a zone still lists as uncovered a production
type that the factor table now prices.
@avalyset
avalyset requested a review from a team as a code owner October 23, 2026 07:33

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant