On this page
Why this exists
The problem
An elementary flow is an exchange between the technosphere and the environment: a kilogram of carbon dioxide to air, a cubic metre of water from a river, a square-metre-year of forest occupied. Every LCI database maintains its own list of them, and every LCIA method attaches characterisation factors to some list.
The lists disagree in four independent ways, and each one breaks a different thing.
1. Names disagree
The same substance appears as Carbon dioxide, fossil, Carbon dioxide (fossil),
CO2, fossil, and carbon dioxide, from fossil fuels. String matching gets most
of these and silently misses the rest.
Worse, names are not merely inconsistent — they are sometimes wrong. Source lists contain genuine substance confusions, and so do the reference databases used to fix them. A real case from this project: PubChem associates CAS 7440-38-2 (elemental arsenic) with the record for arsane, AsH₃. Follow that link naively and the arsenic flow gets renamed "arsane" — and then, because names are how downstream steps recognise things, the arsine flow gets renamed "arsenic". Two substances swap identities, and no string comparison anywhere in the chain notices.
2. Identifiers disagree, and are not unique
CAS numbers look authoritative but are not a primary key for this purpose. One CAS can be listed by several PubChem compounds. ChEBI records occasionally claim a CAS that belongs to a different substance — CHEBI:30146 (lithium hydride, HLi) lists 7439-93-2, which is the CAS for lithium metal. Merge on CAS alone and lithium hydride's synonyms and molecular formula contaminate the lithium element.
3. Compartments disagree
Emissions to air, urban air close to ground, air/urban air close to ground,
and Emissions/Emissions to air/Emissions to air, urban air close to ground
denote the same thing. Meanwhile low population density in one list and
Rural (<1000 people/square mile) in another are nearly the same thing but
not defined identically, and water with no further qualification may or may
not include groundwater depending on who wrote it.
4. Distinctions collapse or multiply
Biogenic and fossil CO₂ share a CAS number and differ only by a word in the
name — but they must never be merged, because their carbon-cycle accounting
differs. Green, blue, and grey water all share CAS 7732-18-5 and must stay
apart for water-footprint methods. Conversely, carbon dioxide (biogenic-100yr)
and Correction flow for delayed emission of biogenic carbon dioxide (within
first 100 years) are the same thing under different names.
There is no rule of the form "same CAS ⇒ same flow" or "different name ⇒ different flow" that survives contact with the data.
The approach
Four commitments follow from the above.
Separate identity from occurrence
A substance's identity ("what is carbon dioxide") does not depend on which compartment it was emitted to or which database recorded it. Contexts, units, and source references do. The project therefore keeps two layers — flow objects for substance identity and elementary flows for substance-in-a-context — and links them.
See Flow objects and elementary flows.
Build one context vocabulary, deliberately small
Rather than mapping every source compartment to every other, all lists map onto a single controlled vocabulary of 59 contexts. A context attribute is only included when characterisation factors actually differ across its values — otherwise it is complexity without information.
See Flow contexts.
Decide from evidence, and record the evidence
Every value in the output is traceable to the source that asserted it and to the processing step that wrote it. Where automated identity resolution is not confident, it declines to act rather than guessing, and the case is written to a review file for a human.
The guards described above (arsenic/arsane, lithium hydride) are not incidental bug fixes; they are the mechanism. Each is a rule that says do not accept this inference unless a second, independent source agrees.
Never discard the source record
Every consensus flow keeps a source_refs list naming each source flow that
contributed to it — the original UUID, the original name, the original
compartment strings, and the file it was read from. Deduplication happens
downstream of loading, never during it, so the evidence for a merge decision
survives the merge.
(These references are currently stripped from the published JSON files and have to be read from the SQLite database instead — the commitment holds, the delivery is incomplete. See Known limitations.)
This is what makes the output usable as a translation table and not only as a substance list.
What this is not
- Not a characterisation factor database. The project carries LCIA method references from EF 3.1 through the pipeline, but it does not compute, correct, or reconcile factors.
- Not an inventory database. There are no processes and no exchanges, only the elementary flows themselves.
- Not a finished standard. The context taxonomy is explicitly expected to change as LCIA methods develop. See Known limitations.