Skip to content

Seed-EPD scoreboard — the 18-material lca.a4 inventory

One row per material in the Keur Songho reference inventory, with its seed-EPD readiness. This page answers a single question: for each of the 18 materials the calculation modules iterate over, is there a citable factor, and if not, what is standing in the way?

It is a read of the repo, not a sourcing pass. No value here was resolved against any API in producing it; every number and UUID is carried from Seed-EPD value resolution. No seed JSON was written.

Scope. The 18 materials are the ones lca.a4 transports, lca.a1_a3 multiplies by a factor, and quantities accumulates — rows 5–22 of the A4 sheet in reference/excel/2_lca_vn.xlsx. This is the "15 of 18 BLOCKED" set named in the Action register: 15 of the 18 have a non-zero A4 transport leg and are BLOCKED on AR-01 / AR-02; the other three (Water, Crude oil, Waste Oil) are on-site per A4!B25 and compute to exactly 0.


1 · Status vocabulary

Status Meaning
LEGIT A live-resolved EF 3.1 dataset exists with a clean declared unit. Seedable now, subject only to the standard proxy_provenance / justification_text gate.
PLACEHOLDER A dataset exists and is seedable with a flag — an EF 3.0 rather than EF 3.1 method, a declared-unit trap, or an open product-match question. The flag must ride in proxy_provenance and surface in every reported result.
BLOCKED An open Action-register row stands between this material and any value. No default, no placeholder.
EARTH-TRACK Raw earth. ÖKOBAUDAT is barred outright by PROJECT.md decision #26; the only admissible sources are Chiwara primary data, CRAterre, RILEM TC 274-TCE, or Ben-Alon et al. Not a sourcing backlog item — a different track entirely.
CUT-OFF Carried at zero as a declared EN 15804+A2 §6.3.3 cut-off. No EPD is needed; an attribution is.
UNSOURCED No ÖKOBAUDAT batch-1 record exists for this material at all. Nobody has looked yet.

Precedence. Where more than one status could apply, the more specific one wins: EARTH-TRACK → CUT-OFF → BLOCKED → PLACEHOLDER → LEGIT → UNSOURCED. So a material with no batch-1 record but an open AR blocking its factor is shown as BLOCKED, not UNSOURCED; UNSOURCED means nothing is in the way except that no one has sourced it.

Batch-1 records are the ten ÖKOBAUDAT candidates numbered #01#10 in Seed-EPD value resolution §2. A b suffix (#06b, #07b) is the successor dataset that pass identified when the original pick turned out to be unusable.


2 · The scoreboard

# Material (workbook label) MaterialCategory Status Batch-1 record Evidence AR
1 Rock ROCK_STONE LEGIT #05 crushed rock — f501dc99-… v20.26.070, EF 3.1, 1 kg, 0.00827818 kg CO₂-eq/kg Value resolution §2 AR-07 (shared-factor simplification) · see note [a]
2 Gravel AGGREGATE_COARSE BLOCKED #03 3ce61a4e-… — A1-only, no GWP-total exists; no undried EF 3.1 successor Value resolution §4 AR-50 (new) · AR-07
3 Sand AGGREGATE_FINE LEGIT #04 286b0072-… v20.26.070, EF 3.1, 1 kg, 0.00273869 kg CO₂-eq/kg (corrected UUID) Value resolution §2 AR-07
4 Earth EARTH EARTH-TRACK — none, and none permitted PROJECT.md decision #26 · A1–A3 spec §3.4 AR-03 · AR-47
5 Water WATER CUT-OFF — none needed A1–A3 spec §3.5 · LCI Final!I7 = literal 0 AR-48
6 Cement CEMENT PLACEHOLDER #01b VDZ industry-average CEM I 87371640-… v00.02.001, EF 3.0, 1 t, 665 kg CO₂-eq/t Value resolution §8
7 Steel Rebars STEEL_REBAR LEGIT #02 f6861618-… v20.26.070, EF 3.1, 1 kg, 0.642238 kg CO₂-eq/kg Value resolution §2
8 Steel plates STEEL_SHEET UNSOURCED — no batch-1 record LCI Final!I10 — note "ok", not a citation
9 Steel profiles STEEL_PROFILE PLACEHOLDER #07b d4ca0d80-… v20.21.060, EF 3.0, 1 kg, 0.964395 kg CO₂-eq/kg Value resolution §6
10 Polyethylene film PLASTIC_FILM PLACEHOLDER #09b 5f0bc680-… v20.26.070, EF 3.1, 1 m², 4.471236 kg CO₂-eq/m² — but the product is a dimpled drainage membrane, not plain sheet film Value resolution §2, §10.4 AR-51 (new)
11 Bitumen BITUMEN BLOCKED #08 A1-only; #08b is the wrong product and the wrong unit. No per-kg neat-bitumen dataset exists in ÖKOBAUDAT (32 records searched) Value resolution §3 AR-49
12 Crude oil PETROLEUM_DISTILLATE BLOCKED — no batch-1 record LCI Final!I14 = literal 134 — ~44× the IPCC Tier 1 combustion factor AR-04
13 Waste Oil WASTE_OIL UNSOURCED — no batch-1 record LCI Final!I15"No EE as it is paid by previous use", no citation
14 Glass GLASS PLACEHOLDER #06b e94dbfcc-… v00.00.016, EF 3.0, 1 m² at 1 mm, 3.06 kg CO₂-eq/m² Value resolution §5
15 Anti-termite PESTICIDE BLOCKED — no batch-1 record, and none admissible PROJECT.md decision #26, speciality-chemical clause AR-52 (new) · AR-16 (reference area)
16 Wall paint PAINT_WALL UNSOURCED — no batch-1 record LCI Final!I18"Silicate external paint is ok", no EPD/FDES number
17 Antirust paint PAINT_ANTIRUST BLOCKED — no batch-1 record (INIES track, not ÖKOBAUDAT) Antirust investigation §4 AR-06 · AR-25
18 Floor Tiles CERAMIC_TILE LEGIT #10b 5618689c-… v20.26.070, EF 3.1, 1 m², 19.547846 kg CO₂-eq/m² at 20 kg/m² grammage Value resolution §7 AR-05 — see note [b]

[a] Rock carries an unregistered condition. Decision #26 puts site-quarried stone under the same local-data rule as EARTH, and permits ÖKOBAUDAT-interim only where the stone is purchased from a regional supplier with a documented supply chain. Keur Songho rock comes from Sindia Quarry, 23 km out (A4!B25) — regional, but the supply chain is nowhere documented in the repo. The EF 3.1 dataset is clean; the permission to use it is conditional and the condition is unmet. Recorded here rather than opened as an AR — it is a documentation requirement, not a blocker, and it belongs with AR-07 when that row is worked.

[b] Floor tiles: LEGIT on the seed axis, AR-05 still open on the audit axis. These are two different questions. #10b is a clean EF 3.1 dataset with a declared unit that matches the inventory, so it is seedable. AR-05 asks a separate question — what was the workbook's 5.09 kg CO₂/kg, and how did it get to be 26.5× the published range? Seeding #10b supersedes the workbook value; it does not explain it. Value resolution §7 notes that 19.548 kg CO₂-eq/ is plausibly the shape of number that became 5.09 per kg, which gives AR-05 something concrete to test against, but the row stays open until Chiwara answers it.


3 · Summary

Seedable now (LEGIT): 4 of 18 — Rock, Sand, Steel Rebars, Floor Tiles. All four are live-resolved EF 3.1 with clean declared units. Seedable with a flag (PLACEHOLDER): 4 — Cement, Steel profiles and Glass on EF 3.0 rather than EF 3.1, Polyethylene film on an unresolved product match.

Cannot be seeded (BLOCKED): 5 — Gravel, Bitumen, Crude oil, Anti-termite, Antirust paint. Plus EARTH-TRACK: 1 (Earth, where ÖKOBAUDAT is barred outright and only Chiwara or CRAterre will do) and CUT-OFF: 1 (Water, which needs an attribution, not an EPD).

Never looked at (UNSOURCED): 3 — Steel plates, Waste Oil, Wall paint. These are the residue of the 11–18 gap: batch 1 stopped at ten records, and eight of the eighteen materials were never in it (Earth, Water, Steel plates, Crude oil, Waste Oil, Anti-termite, Wall paint, Antirust paint). Five of those eight are accounted for by an existing track; the three above are not.

Status Count
LEGIT 4
PLACEHOLDER 4
BLOCKED 5
EARTH-TRACK 1
CUT-OFF 1
UNSOURCED 3
Total 18

Batch-1 coverage: 10 of 18. Of the ten records resolved, two were usable as picked (#02, #05), one after a version bump (#04), four only via a successor dataset (#06b, #07b, #09b, #10b), one is EF 3.0 by necessity (#01b), and two have no admissible dataset at all (#03, #08).


4 · Reconciliation of the 18-count across modules

The three modules agree on the count and the order, and disagree on one key.

Count Order Keys
2_lca_vn.xlsx A4 sheet, rows 5–22 18 canonical workbook labels
lca.a4 _KEUR_SONGHO_LEGS / _LABELS 18 matches MaterialCategory
lca.a1_a3 _FACTORS / _KEUR_SONGHO_WEIGHTS_KG 18 matches MaterialCategory
quantities accumulator output 18 matches MaterialCategoryone differs

Two discrepancies survive the check. Neither is papered over here.

4.1 RAW_EARTH vs EARTH — the modules cannot be wired together

quantities emits MaterialCategory.RAW_EARTH for earth (backend/app/domains/quantities/__init__.py:600). lca.a1_a3 and lca.a4 both key on MaterialCategory.EARTH (a1_a3.py:137, a4.py:232). Both enum members exist and neither module maps between them, so feeding the quantities output straight into either stage raises:

KeyError: "No A1-A3 factor defined for category <MaterialCategory.RAW_EARTH: 'raw_earth'>."
KeyError: "No Keur Songho A4 transport legs defined for <MaterialCategory.RAW_EARTH: 'raw_earth'>."

This is latent today only because both stages read their masses from the hardcoded _KEUR_SONGHO_WEIGHTS_KG rather than from quantities. It becomes a hard failure the moment AR-46's mass-path rebuild wires the two together — which is the whole point of AR-46. Registered as AR-53.

4.2 The unit bases do not match, and the labels say so

quantities produces each material in its native unit — m³ for rock, gravel, sand, earth, water, steel plates, steel profiles and glass; m² for polyethylene film and floor tiles; L for the oils, anti-termite and the paints; kg only for cement, rebar and bitumen. lca.a1_a3 and lca.a4 consume kg for all eighteen.

The workbook is explicit about this and was ignored: A4 column F is headed Weight (kg), but the row labels in column B carry the inventory unit — polyethylene film(m²), Floor Tiles(m²), Glass (m³), Crude oil(L). So A4!F14 = 5025.6 sits in a column headed kg on a row labelled m². The corrected quantities module gives 139.6 m² of polyethylene film and 303.36 m² of floor tiles — neither reconciles with 5025.6 or 3379.898 by any density.

This is squarely inside AR-46, which already names "areal density for polyethylene film, thickness + density for ceramic tiles" as part of the rebuild. No new row opened. It is recorded here because it bears directly on the scoreboard: the EF 3.1 datasets for polyethylene film and floor tiles are both declared per m², and they match the quantities m² path — not the per-kg path lca.a1_a3 currently multiplies. Seeding them per m² is correct and will not connect to anything until AR-46 lands.


5 · What this page does not do

  • It does not resolve any value. Every UUID, version and number is carried unchanged from Seed-EPD value resolution.
  • It does not write seed JSON. backend/app/data/seed_epds/ is still empty, and the CLAUDE.md provenance gate (citation URL, Weidema-scored proxy_provenance, justification_text, integrity test) applies in full to every row marked LEGIT or PLACEHOLDER above.
  • It does not change any status in lca.a1_a3 or lca.a4. The seed status in this table and the module's runtime status are different things: Floor Tiles is LEGIT here and BLOCKED in lca.a1_a3; Anti-termite is BLOCKED here and COMPUTED at an uncited 0.65 in lca.a1_a3. That second mismatch is what AR-52 is for.