Seed-EPD value resolution — ÖKOBAUDAT batch 1 (10 records)¶
Status: scratch resolution pass. Nothing here is committed as a seed EPD.
No file under backend/app/data/seed_epds/ and no integrity test was written in this pass.
This document records what the live ÖKOBAUDAT datasets actually say, so that the next
session can write seed JSON against verified numbers rather than against the sourcing
sub-chat's placeholders.
Resolved 2026-07-27 against the soda4LCA REST API
(https://www.oekobaudat.de/OEKOBAU.DAT/resource/processes/{uuid}?format=json), which —
unlike the datasetdetail/process.xhtml pages the sourcing sub-chat could not reach — is
not robots-blocked.
1 · Headline: 6 of the 10 picks are unusable as they stand¶
The sourcing sub-chat recorded impact_method: "EN 15804+A2 → EF 3.0-based" for all ten
records. That is wrong for six of them. Six picks are EN 15804+A1-generation datasets
that contain no GWP-total indicator at all — they carry the older CML indicator
Global warming potential (GWP), which is not the EN 15804+A2 GWP-total and cannot be
substituted for it.
| Verdict | Records |
|---|---|
| Usable, EF 3.1, unit clean | #02 rebar, #05 crushed rock |
| Usable, needs version bump to an EF 3.1 successor | #04 sand |
| A1-only — no GWP-total exists | #03 gravel, #06 glass, #07 steel profile, #08 bitumen, #09 PE film, #10 tile |
| EF 3.0, usable but flagged | #01 cement (both candidates) |
Only two of the ten picks can be seeded as-is.
2 · Resolution table¶
GWP-A1A3 is the value as declared, per the dataset's own declared unit. It is not
normalised. The per-kg / per-m² column is a derived convenience figure, marked as derived —
do not seed it without re-deriving it in code.
| # | Material | Final UUID + version | Declared unit (verbatim basis) | GWP-A1A3 as declared | Indicator string read | A1/A2 | EF method | Flags |
|---|---|---|---|---|---|---|---|---|
| 01 | Cement — CEM I 52,5 R (sub-chat pick) | 8c90eef7-01dd-4ce5-96a6-fb1ca480592a v00.01.001 (sub-chat said 00.01.000) |
1 t — meanAmount = 1000.0, flow property Mass |
817 kg CO₂-eq / tonne (derived: 0.817 /kg) | Global Warming Potential total (GWP-total) | Globales Erwärmungspotenzial total (GWP-total) |
A2 | EF 3.0 — method ds 6a37f984-a4b3-458a-a20a-64418c145fa2 |
⚠ 1000× trap · not EF 3.1 → reconciliation note · version corrected |
| 01b | Cement — VDZ industry-average CEM I (RECOMMENDED) | 87371640-546c-4d9c-84cc-c13b6be94146 v00.02.001 · EPD-VDZ-20220153-IAG1-DE |
1 t — meanAmount = 1.0 but conversion factor to 1 kg = 0.001 |
665 kg CO₂-eq / tonne (derived: 0.665 /kg) | Globales Erwärmungspotenzial total (GWP-total) | Global Warming Potential total (GWP-total) |
A2 | EF 3.0 — method ds 6a37f984-… |
⚠ 1000× trap, and meanAmount alone reads as "1" · not EF 3.1 → reconciliation note |
| 02 | Steel reinforcement / rebar | f6861618-5a92-4c3a-94ba-9f7329b29662 v20.26.070 (sub-chat said 20.24.070) |
1 kg — meanAmount = 1.0, flow property Mass, gross density 7850 |
0.642238043961809 kg CO₂-eq / kg | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ — method ds a7ea142a-9749-11ed-a8fc-0242ac120002 v24.01.000 |
✅ 0.642 CONFIRMED · version corrected |
| 03 | Gravel — Kies 2/32 | 3ce61a4e-4d91-4b1d-b675-276be05b9225 v20.19.120 |
1 kg — Mass, gross density 1850 |
no GWP-total exists. CML GWP A1-A3 = 0.00285398232640141 |
Global warming potential (GWP) | Globales Erwärmungspotenzial (GWP) — method ds 77e416eb-… |
⛔ A1 only (DIN EN 15804) |
none (pre-EF, CML) | ⛔ unusable · expired 2022 · no undried EF 3.1 successor exists (see §4) |
| 04 | Sand 0/2 | ➡ 286b0072-1001-4e5f-baa2-282230755243 v20.26.070 (replaces the sub-chat's 8125026b-… v20.23.050) |
1 kg — Mass |
0.0027386873388177 kg CO₂-eq / kg | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ | ✅ clean after version bump · sub-chat's pick was EF 3.0 and expired 2024 (its value: 0.0026195453178976) |
| 05 | Crushed rock — Splitt 2/15 | f501dc99-706c-4b15-aaec-2cca2b409b41 v20.26.070 (sub-chat said 20.24.070) |
1 kg — Mass |
0.00827818122415727 kg CO₂-eq / kg | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ | ✅ clean · version corrected |
| 06 | Flat glass | dc96eace-0094-4440-9331-f72fb9430656 v00.04.027 (2017) |
1 m² at 4 mm — grammage 10 kg/m², density 2500. Sub-chat recorded "1 kg" — wrong | no GWP-total exists. CML GWP A1-A3 = 9.71 / m² |
Global warming potential (GWP) | … | Potencial de calentamiento global (GWP) |
⛔ A1 only (EN 15804) |
none (pre-EF, CML) | ⛔ unusable · declared unit misrecorded · successor changes thickness (see §5) |
| 06b | Flat glass — successor | ➡ e94dbfcc-56f2-4e55-8e0e-c2e8a2b576ae v00.00.016 (2024, valid to 2029) · M-EPD-FEG-002000 |
1 m² at 1 mm — layer thickness 0.001, grammage 2.5 kg/m² | 3.06 kg CO₂-eq / m²-of-1 mm (derived: 1.224 /kg) | Global Warming Potential - total (GWP-total) | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.0 — method ds 6a37f984-… v04.00.017 |
⚠ declared thickness changes 4 mm → 1 mm: a 4× trap · not EF 3.1 → reconciliation note |
| 07 | Steel profile / section | 38051c22-fbd1-4b0e-944a-ae348b8c7695 v20.19.120 |
1 kg — Mass |
no GWP-total exists. CML GWP A1-A3 = 0.994443589117387 |
Global warming potential (GWP) | Globales Erwärmungspotenzial (GWP) — method ds 77e416eb-… v39.00.000 |
⛔ A1 only (DIN EN 15804) |
none (pre-EF, CML) | ⛔ unusable · expired 2022 |
| 07b | Steel profile — successor | ➡ d4ca0d80-54a4-44b6-9fda-2cbbf82ea0d4 v20.21.060 (2021) |
1 kg — Mass |
0.964395073330082 kg CO₂-eq / kg | Global Warming Potential - total (GWP-total) | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.0 — method ds 6a37f984-… v21.01.000 |
⚠ not EF 3.1 → reconciliation note · no plain ungalvanised EF 3.1 successor exists (see §6) |
| 08 | Bitumen | 64da45fc-f415-4875-8a4e-7c23fe7a7aa9 v20.20.010 |
1 m² at 4 mm — grammage 5 kg/m² | no GWP-total exists. CML GWP A1-A3 = 2.47490409514908 / m² |
Global warming potential (GWP) | Globales Erwärmungspotenzial (GWP) |
⛔ A1 only (DIN EN 15804) |
none (pre-EF, CML) | ⛔ unusable · ⛔ unit mismatch vs inventory → AR-49 |
| 08b | Bitumen — successor | ➡ 27ccffb8-02ec-466d-b925-f6db91d4ef71 v20.26.070 |
1 m² — grammage 5 kg/m² | 3.33365915679722 kg CO₂-eq / m² | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ | ⛔ still the wrong product and the wrong unit — see §3. Do not seed. |
| 09 | PE film | 49b4cbe9-ac63-4811-a1c7-dd7278db8ac0 v20.20.010 |
1 m² at 1.25 mm — grammage 1.2 kg/m² | no GWP-total exists. CML GWP A1-A3 = 4.08909208200257 / m² |
Global warming potential (GWP) | Globales Erwärmungspotenzial (GWP) |
⛔ A1 only (DIN EN 15804) |
none (pre-EF, CML) | ⛔ unusable · expired 2022 |
| 09b | PE film — successor | ➡ 5f0bc680-a252-46d6-a47a-a4b5a05318bc v20.26.070 — PE foil, dimpled |
1 m² — grammage 1.2 kg/m² | 4.47123644782304 kg CO₂-eq / m² | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ | ✅ unit matches inventory (139.6 m²) · ⚠ product is a dimpled drainage membrane, not plain sheet film — suitability check needed |
| 10 | Ceramic floor tile | b4a0e610-e038-47d3-b86e-cef013cd7c83 v20.20.010 |
1 m² at 10 mm — grammage 20 kg/m² | no GWP-total exists. CML GWP A1-A3 = 6.17968702054922 / m² |
Global warming potential (GWP) | Globales Erwärmungspotenzial (GWP) |
⛔ A1 only (DIN EN 15804) |
none (pre-EF, CML) | ⛔ unusable · expired 2022 |
| 10b | Ceramic tile — successor | ➡ 5618689c-57a8-4860-85d3-7403ad5ba201 v20.26.070 |
1 m² — grammage 20 kg/m² | 19.5478463191128 kg CO₂-eq / m² (derived: 0.977 /kg) | Climate change | Globales Erwärmungspotenzial - total (GWP-total) |
A2 | EF 3.1 ✅ | ✅ unit matches inventory (303.36 m²) · ⚠ 3.16× higher than the A1 dataset at identical grammage — see §7, bears on AR-05 |
3 · Bitumen — unit mismatch, no like-for-like dataset (→ AR-49)¶
The building inventory tracks bitumen as 376.476 kg of neat bitumen. ÖKOBAUDAT has no per-kg neat-bitumen dataset. I searched the full bitumen category (32 records). What exists is only:
| Candidate | Unit | GWP-A1A3 | Why it is not neat bitumen |
|---|---|---|---|
Bitumenbahnen G 200 S4 (27ccffb8-…, EF 3.1) |
1 m², grammage 5 kg/m² | 3.334 / m² | Composite membrane — bitumen + glass-fleece carrier + mineral surfacing |
Bitumen emulsion (40 % bitumen, 60 % water) (88c0f648-…, EF 3.1) |
1 kg | 0.450 / kg | 60 % water by mass — not neat bitumen |
Plastic-modified bitumen thick coating (85c48e5f-…, EF 3.1) |
1 kg | 1.189 / kg | Polymer-modified formulated coating, not neat binder |
Dividing the membrane's 5 kg/m² grammage into 376.476 kg to synthesise an area is not valid — the grammage is the mass of the whole composite, not of its bitumen fraction.
No proxy has been selected. The decision is deferred to AR-49.
4 · Gravel — the undried dataset was discontinued¶
Kies 2/32 exists only in the A1 generation. From v20.23.050 onward ÖKOBAUDAT carries only
Kies 2/32 (getrocknet) — dried gravel (a7bad3b6-2123-483b-99b5-2ec481254be7
v20.26.070, EF 3.1, 1 kg, GWP-A1A3 = 0.0349836993382096).
That is 12.3× the A1 undried figure, because it includes thermal drying energy. For a Senegalese site using pit-run aggregate, dried gravel is the wrong process. Substituting it silently would inflate gravel A1-A3 by an order of magnitude. Left unresolved — this needs a sourcing decision, not a default.
5 · Flat glass — the declared thickness changes between generations¶
The sub-chat recorded the glass declared unit as 1 kg. It is not: both the pick and its
successor are declared per m², and the reference thickness changes:
dc96eace-…(A1, 2017): 1 m² at 4 mm, grammage 10 kg/m²e94dbfcc-…(A2/EF 3.0, 2024): 1 m² at 1 mm, grammage 2.5 kg/m²
Carrying 3.06 forward as though it were per-4 mm-m² understates glass A1-A3 by 4×. Any seed must record the thickness alongside the value.
6 · Steel profile — no ungalvanised EF 3.1 successor¶
The lineage stops at d4ca0d80-… v20.21.060 (EF 3.0). The v20.26.070 generation replaced
the generic profile with two galvanised, route-specific datasets —
Stahlprofil verzinkt (Elektrolichtbogenroute) 42de525f-… and
Stahlprofil verzinkt (Hochofenroute) 755a481d-…. Galvanising is an added coating process,
so neither is a drop-in replacement. Recommendation: seed the EF 3.0 d4ca0d80-… and carry
the EF-version reconciliation note.
7 · Ceramic tile — 3.16× jump at identical grammage¶
Both tile datasets declare 20 kg/m², so the jump from 6.180 (A1, CML) to 19.548 (EF 3.1, GWP-total) per m² is not a unit artifact. It is a genuine method-plus-data change. The EF 3.1 figure implies 0.977 kg CO₂-eq/kg, which sits in the normal published range for glazed stoneware and makes the A1 figure look like the outlier.
This bears directly on AR-05 ("Floor tiles A1–A3 = 5.09 kg CO₂/kg — 26.5× the published range; suspected kg CO₂/m² used as per-kg"). The 19.548 kg CO₂-eq/m² resolved here is plausibly the shape of number that became 5.09 per kg in the workbook. Not resolved here, but AR-05 now has a concrete candidate to test against.
8 · Cement — recommendation¶
Use the VDZ industry-average CEM I (87371640-546c-4d9c-84cc-c13b6be94146 v00.02.001,
EPD-VDZ-20220153-IAG1-DE), not CEM I 52,5 R.
| CEM I 52,5 R | VDZ CEM I (recommended) | |
|---|---|---|
| Scope | One strength class, one manufacturer (Heidelberg) | German industry average, Verein Deutscher Zementwerke |
| GWP-A1A3 | 817 kg CO₂-eq/t (0.817 /kg) | 665 kg CO₂-eq/t (0.665 /kg) |
| EN 15804 | A2 | A2 |
| EF method | EF 3.0 | EF 3.0 |
| Valid until | 2027 | 2027 |
Keur Songho's inventory carries generic "Portland cement", not a declared strength class. 52,5 R is a high-early-strength, finer-ground, higher-clinker product and sits 23 % above the industry average — an unrepresentative upper bound for a generic cement line item. The ordering (52,5 R > average) is physically consistent and gives confidence both readings are correct.
Both are EF 3.0, not the project's EF 3.1. Whichever is seeded carries a reconciliation note. No EF 3.1 CEM I dataset was found in ÖKOBAUDAT in this pass.
The 1000× trap — and why meanAmount alone cannot be trusted¶
Both cement datasets are declared per tonne, and they encode it differently:
| Dataset | meanAmount |
conversion factor to 1 kg |
Declared unit |
|---|---|---|---|
| CEM I 52,5 R | 1000.0 (flow property Mass) |
absent | 1 t |
| VDZ CEM I | 1.0 (flow property Gewicht) |
0.001 | 1 t |
Read meanAmount alone and the VDZ dataset looks like 1 kg, making 665 kg CO₂-eq/kg —
a 1000× error straight into the A1-A3 total. Read the conversion factor alone and CEM I
52,5 R has nothing to read.
Neither field is sufficient on its own, and ÖKOBAUDAT populates them inconsistently.
The ingestion rule must be: resolve the reference flow, read both meanAmount and the
flow's conversion factor to 1 kg, and fail loudly when they disagree or when neither
resolves to an unambiguous unit. This refines the instruction for this pass, which assumed
the conversion factor is always present — it is present on only one of the eleven records
resolved here.
9 · Method notes for the ingestion code¶
Three gotchas that will silently corrupt an automated ingest:
-
The English indicator name changes between EF generations. EF 3.1 datasets label GWP-total as
Climate changein English; only the German string saysGWP-total. EF 3.0 datasets sayGlobal Warming Potential - total (GWP-total). A matcher testing"GWP-total" in english_namefinds nothing on every EF 3.1 dataset. Match bilingually, and exclude the sub-indicators (- fossil,- biogenic,- luluc). -
A1-generation datasets have no GWP-total to find. They carry the CML
Global warming potential (GWP)(method ds77e416eb-a363-4258-a04e-171d843a6460). An ingest that falls back to "the first indicator whose name contains GWP" will happily seed a CML number as an EN 15804+A2 one. The compliance declaration is the reliable discriminator:
| Compliance string | Reference version | Method |
|---|---|---|
DIN EN 15804 / EN 15804 |
A1 | CML — no GWP-total |
DIN EN 15804+A2 / EN 15804+A2 |
A2 | EF 3.0 |
EN 15804+A2 (EF 3.1) |
A2 | EF 3.1 ← project standard |
- A UUID is not a lineage. ÖKOBAUDAT issues a new UUID per release for Sphera
generic datasets;
referenceToPrecedingDataSetVersionchains backwards only, and the/processes/{uuid}/versionsendpoint returns nothing. Finding the current record means searching by name and taking the highest release (20.26.070 at the time of writing). Every version string the sourcing sub-chat supplied was stale or wrong.
The resolution script used for this pass is not committed — it is scratch tooling. The verified numbers above are the deliverable.
10 · What the next session should do¶
- Seed #02 rebar and #05 crushed rock — clean, EF 3.1, per kg.
- Seed #04 sand at the corrected UUID
286b0072-…. - Seed #01 cement as the VDZ average, declared unit 1 t, with the EF 3.0 note.
- Seed #09 PE film and #10 tile at their EF 3.1 successors, per m², recording grammage — after resolving the PE dimpled-vs-plain suitability question.
- Seed #06 glass and #07 steel profile at their EF 3.0 successors, with notes; glass must record the 1 mm reference thickness.
- Do not seed #08 bitumen — blocked on AR-49.
- Do not seed #03 gravel — no undried successor exists (§4).
Every seeded record needs its proxy_provenance temporal axis re-scored: the sourcing
sub-chat scored several as "current 2024-I stock" on the strength of version strings that
turned out to be wrong.