Project status — food-processing gate-to-gate LCI replacements

Eaternity AG · version v1.2.2 · built from commit 096606b · downloads & quick start

ZHAW FCM (Claudio Beretta) and any LCA practitioner replacing an ecoinvent 3.3 / Agribalyse v1.2 food-processing background.

What this is

BAFU/UVEK Open Government Data (Swiss Federal Administration, BAFU 2026) + Eaternity tributary LCIs (food-processing, fruit, dairy, livestock, ...); NO ecoinvent flow data, NO biosphere3, NO EDB.
Method: EF 3.1 (BAFU) 16-category impact set; plus GLAM (UNEP Life Cycle Initiative Global LCIA Method) BAFU-companion methods, Ecological Scarcity 2021 UBP, and IPCC 2021 GWP100 — all BAFU-biosphere bound.
Functional unit: 1 kg processed product, factory gate (gate-to-gate processing).

Scope: Gate-to-gate PROCESSING ONLY. Upstream agriculture is a SEPARATE layer. Per-node scope_marker tells you which double-counting rule applies: 'gate_to_gate' = substrate left unbound (add your own farm-gate input); 'cradle_to_gate_proxy' = upstream baked in (do NOT add upstream again).

Coverage

82.8% of mapping entries shipped OGD-closed
Coverageentries
Mapping entries (total)621
Shipped top nodes (OGD-closed)514
Excluded — NOT OGD-closeable (recorded in coverage.json)107

Shipped by scope marker (the double-counting axis):

scope_markernodes
gate to gate307
cradle to gate proxy207

Shipped by inventory kind:

kindnodes
composite lci514

Why the 107 excluded entries cannot ship (by category, then by the non-OGD leaf database their closure reaches):

exclusion categoryentries
non ogd leak73
nothing to ship34
non-OGD leaf databaseentries
EDB remapped final68
no anchor34
ecoinvent 3.6 cutoff2
EDB bafu remapped3

Computed processing climate (our values)

OUR EF 3.1 (BAFU) Climate Change per kg, computed live on every shipped node (no external reference value exists for the processing layer — Claudio computes against his own background).

Nodes computing a value514
Nodes with non-zero EF 3.1 climate514
Median (kg CO2eq / kg)0.8543
Range (kg CO2eq / kg)0.0002 – 30.1536

Methods shipped

familymethod objects
Ecological Scarcity 20211
GLAM36
EF 3.1 (BAFU)16
IPCC 20212

EF 3.1 (BAFU) categories: 16/16; total method objects: 55.

Quality & verification

Data-quality basis per node (a 5-axis pedigree is emitted ONLY where a real one exists; elsewhere the honest signal is the internal confidence — never a fabricated PEF/DQR class):

dqr_basisnodes
internal confidence only514

Verification: verify_self_contained.py: PASS — package imports into a FRESH Brightway project with NO ecoinvent / biosphere3 / EDB; layers not collapsed; every shipped node computes; 16/16 EF 3.1 categories register; the hero processing row lands in the plausible per-kg band.
Identity: Shipped nodes carry sediment.terms identity keyed by GADM location plus food-taxonomy terms (FoodOn, FoodEx2, AGROVOC, LangUaL, HESTIA). Coverage is per-namespace — see identity_coverage — NOT every-node-all-namespaces. This is the version-agnostic bridge to FCM's FoodOn-based food-impact layer (the standalone FoodOn crosswalk is published separately at zhaw-fcm-bridge).

Identity coverage (nodes carrying each sediment.terms namespace, of 514 shipped — per-namespace, not every-node-all-namespaces):

namespacenodes
gadm487
foodon365
foodex2338
agrovoc197
langual54
hestia47

Provenance shape — what openLCA shows you, per layer

How each layer of the shipped package carries its provenance, and therefore what an openLCA reviewer sees in the Documentation tab. Both shapes are real provenance — the difference is whether it is machine-readable facets or the prose the tributary wrote. Every process in the package is documented; none is silent.

shapenodescarries
structured facets
food_processing_replacements
509 method, scope, trust, license, recipe
The shipped replacement layer — the datasets a consumer computes with.
prose comment
14 tributary layers
505 named plant + citation, system boundary, OGD licence signal, build_method (409/505)
Tributary background layers. Their provenance is detailed but free-text, so it is parsed into the openLCA documentation fields rather than left invisible. The remaining gap is that it is not yet structured at the SOURCE — tracked per tributary.

Where the remaining gap sits — named, not hidden:

layergap
fruit_crops_lci63 nodes; upstream lci-fruit has sediment on 327/329 mapping entries but structured provenance on only 30 — the activities file carries _climate_source/_erosion_source that never reach the package.
food_processing_lci/legacy/agribalyse409 nodes; all carry build_method + boundary + licence in prose.

This is a workspace-wide gap, not a food-processing one. Across 51 mapping artifacts, 15040 of 15088 mapping entries carry a sediment identity (99%) but only 15088 carry structured provenance (100%). The identity layer was built out everywhere; the provenance layer was not. Only STRUCTURED provenance can be projected into an openLCA Documentation tab, so a low figure here is exactly what makes a well-documented dataset look undocumented downstream. At 100%: lci-agri-integration, lci-algae, lci-aquaculture, lci-biodiversity, lci-cashew, lci-chemicals, lci-coffee, lci-cotton, lci-crops, lci-dairy, lci-electricity, lci-fermentation, lci-fertiliser, lci-fishing, lci-fishing-equipment, lci-fishing-gear, lci-food-loss, lci-food-processing, lci-fruit, lci-fruit-main, lci-fuel-combustion, lci-greenhouse, lci-icbm, lci-indigo-n, lci-irrigation, lci-lentil, lci-livestock, lci-luc, lci-market, lci-metals, lci-mushroom, lci-oilpalm, lci-origin, lci-packaging, lci-pesticide, lci-rainforest, lci-recipe, lci-rice-ch4, lci-rothc, lci-salca, lci-salt, lci-seed, lci-spices-additives, lci-storage, lci-textile-processing, lci-transport, lci-waste-treatment. Full table: provenance_coverage.json.

largest gapsentries with provenance%
lci-recipe88708870100.0%
lci-agri-integration904904100.0%
lci-electricity695695100.0%
lci-food-processing608608100.0%
lci-rothc474474100.0%

Nutrient bridge (lci-nutrients × esfc-glossary)

205 of 509 shipped inventories carry a per-100 g energy + macronutrient profile, joined on the sediment identity layer. 304 candidate matches were REJECTED and ship with their evidence but no numbers — a withheld value beats a wrong one.

match tiernodes
sediment direct130
glossary name13
embedding62
unmatched rejected304

Read the quality fields in this order: identity_verified (False is rare but ~100% precise — a genuinely wrong food), then match_tier (sediment_direct > glossary_name > embedding), then match_confidence (ADVISORY, ~56% precision against a 41% base rate). embedding_cosine/embedding_distance are recorded for ordering a review queue ONLY: upstream measurement over 109 labelled links found similarity indistinguishable between correct and wrong picks (0.857 vs 0.869). Do not threshold correctness on it.

Nutrients come from national food-composition tables via lci-nutrients, joined on the sediment identity layer (esfc-glossary bridges vocabulary mismatches). They are NOT derived from the LCI and add no impact. Values are a multi-country weighted-median blend; national tables differ in energy conversion factors and recipe procedure, so the spread in nutrient_uncertainty is irreducible, not noise to be averaged away.

Known limitations / open questions

Changelog

v1.0.0First public, self-contained release of the gate-to-gate food-PROCESSING layer — a contribution artifact for ZHAW FCM (Claudio Beretta) to replace an ecoinvent 3.3 / Agribalyse v1.2 processing background. Layered Brightway package (food_processing_replacements over the tributary LCIs over BAFU/UVEK technosphere over the BAFU + EF 3.1 elementary flows), one node per shipped ecoinvent reference, every node carrying its FoodOn / LangUaL / FoodEx2 identity in sediment.terms plus the five inline provenance facets. Full EF 3.1 (BAFU) 16-category impact set + GLAM + UBP + GWP100. OGD-only: 89 entries whose upstream substrate links to ecoinvent / EDB are EXCLUDED and recorded honestly in coverage.json (never relabelled as OGD). Clean-room verified self-contained.
v1.0.5Added a direct SimaPro CSV download (food_processing_simapro.csv) so SimaPro users can import without the openLCA detour. Generated by the shared edb_bafu.publish SimaPro converter (the same one every published Eaternity LCI site reuses), deterministic, and round-trip-verified against bw2io's independent SimaPro-CSV parser. openLCA JSON-LD + ILCD method package unchanged.
v1.0.6Re-exported public/ from source: restored the FoodOn identity bridge on shipped nodes and reconciled all landing-page counts with the live artifacts.
v1.0.7Anchor descriptions on replacement nodes: every TOP node now carries a human-readable description of its BAFU/tributary anchor chain.
v1.1.0BAFU:2026 alignment + uncertainty completion + dataset growth. The source `bafu` technosphere DB was refreshed to BAFU:2026 v1 (11,947 activities, code-identical to bafu_2026, 2026-07-24), so technosphere AND method CFs are now the same vintage — the former 2025/2026 version-drift caveat is resolved. Every nonzero biosphere exchange now carries amount_p5/amount_p95 uncertainty bounds (workspace contract; the last 4 residual-CO2 corrections were bounded from documented literature ranges or a conservative ×0.5/×2.0 default band). Mapping grown to 608 entries via the July fix rounds (cocoa powder market, rehydrated soy protein hydration balance, onion powder upstream, lemon d-limonene provenance, and ~100 further reconciliations).
v1.2.0Nutrients + cascade documentation. Every shipped inventory is now linked, where a defensible link exists, to a per-100 g energy + macronutrient profile from national food-composition databases (lci-nutrients), joined on the sediment identity layer with esfc-glossary bridging vocabulary mismatches (FoodEx2 keys fresh 'Tomatoes' as A0DMX and 'Sun-dried tomatoes' as a SEPARATE term A00ZG). Three match tiers are recorded per row — sediment_direct, glossary_name, embedding — with the embedding cosine published for ordering a review queue, NOT as a correctness score: upstream measurement over 109 labelled links found similarity indistinguishable between correct and wrong picks (0.857 vs 0.869), and in this corpus a cosine of 1.0 matched pizza dough to 'Biscuits'. Candidate matches are rejected — shipped with evidence but no numbers — when the canonical is_same_food check fails, when the matched label is a bare qualifier ('raw', 'fresh') carrying no food identity, or when the cosine falls under a credibility floor; that last guard caught a 50-63% fat spread being given 34 kcal from a row labelled 'raw'. Nutrients are metadata beside the inventory, never inside it: no amount, bafu_key or biosphere flow changed, so every committed GWP is bit-identical. Also publishes cascades.html + food_processing_cascades.json — every multi-step chain, the study behind each processing step, and one fully-traced worked example, all derived from the live code so the page cannot drift.
v1.2.2Provenance + upstream-integrity release (re-cut as v1.2.2 — the v1.2.1 tag was already taken by the cascade-documentation release). Three databases now separate the shipped inventories by construction method — food_processing_lci (parametric cascade), food_processing_legacy_lci (flat composites), and food_processing_agribalyse_lci (Agribalyse-context) — so a consumer can filter by how each inventory was built, and every exchange distinguishes the background layer (emission factor) from the source of the amount: a modelled energy demand on a BAFU background now cites its literature source, not the BAFU catalog. Upstream crop pins to fruit_crops_lci are hardened against vintage drift: a build-time guard fails loud on any dangling pin, and 21 of 32 pins now re-resolve by sediment position (foodex2 + gadm) against the live lci-fruit publication, so a producer vintage roll re-resolves instead of silently zeroing upstream GWP — 3 pins that had already dangled to zero (paprika, elderberry, peanut) were re-pointed in the process. The FoodOn sediment crosswalk is committed in-repo so its 286 crosswalk-derived terms reproduce for anyone. Main generators moved to a position-predicate primary selector (output-neutral, zero GWP change). Every concentrate Brix target now carries a document citation or an explicit assumption marker. All changes are metadata / selection-path only — no amount, bafu_key or biosphere flow changed, so every committed GWP is bit-identical to v1.2.0. Dataset: 621 mapping entries (391 gate-to-gate / 230 cradle-to-gate proxy), 502 generated activities (514 shipped nodes).

Generated from the live shipped artifacts (coverage.json, provenance.json, methods_cf.json, node_impacts.json); regenerated on every release so this page cannot drift from the dataset. Code Apache-2.0; data CC-BY-4.0; BAFU/UVEK OGD 2026; no ecoinvent.