LCA Stages B4 / C3 / C4 / D — Formula Reverse-Engineering Spec¶
Source workbook: reference/excel/2_lca_vn.xlsx (read-only)
Sub-chat deliverable — Phase 2 prerequisite
Date: 2026-07-16
Verdict tags apply the two-axis scheme from PROJECT.md decision #23 and RSL provenance gate from decision #24. Vendorability tags follow decision #25 (ÖKOBAUDAT = sole vendorable source).
§1 Workbook structure¶
reference/excel/2_lca_vn.xlsx contains twelve sheets:
| Sheet name | Purpose |
|---|---|
LCI Final |
Master material inventory: quantities, densities, impact factors (A1-A3, C3, C4, D), disposal rates, recycling rates |
A1-A3 |
Manufacturing impact per material |
A4 |
Transport to site |
A5 |
Construction energy |
B1 |
Labelled "B1" in the workbook; actually Module B6 (operational energy). See Finding D-F1. |
B4 (Replacement) |
Maintenance/replacement impacts |
C1(Demolition) |
Demolition energy |
C2 (Transport) |
End-of-life transport |
C3(Waste Processing) |
Waste processing impacts |
C4 (Disposal) |
Landfill/disposal impacts |
D |
Benefits/loads beyond system boundary (recycling credits) |
INTERPRETATION |
Per-material multi-module summary and project totals |
The material list across all sheets is 18 materials (rows 3–20 of LCI Final):
Rock, Gravel, Sand, Earth, Water, Cement, Steel Rebars, Steel plates, Steel profiles,
Polyethylene film, Bitumen, Crude oil, Waste Oil, Glass, Anti-termite, Wall paint,
Antirust paint, Floor Tiles.
§2 LCI Final — master impact database¶
LCI Final is the single source of all impact factors and rates. Columns:
| Column | Label | Content |
|---|---|---|
| A | ID | Row number 1–18 |
| B | Material | Name |
| C | BOQ Quantity | Declared quantity in declared unit |
| D | BOQ unit | Declared unit (m³, Kg, L, m²) |
| E | Density (kg/m³) | Used to convert declared unit → kg |
| F | BoQ weight (kg) | = C × E (or = C when unit is already kg) |
| G | Disposal Rate | Fraction going through C3/C4 processing at end of life |
| H | Recycling Rate | = 1 − G (formula =(1-G_row)) |
| I | A1-A3 (kg CO2-eq/kg) | Manufacturing GWP factor |
| J | C3 (kg CO2-eq/kg) | Waste processing GWP factor |
| K | C4 (kg CO2-eq/kg) | Landfill/disposal GWP factor |
| L | D (kg CO2-eq/kg) | Recycling/reuse credit GWP factor (negative) |
| M | Source | Provenance note (column N in the data dump) |
§2.1 Full factor table extracted from LCI Final rows 3–20¶
All cell references are LCI Final!<cell>.
| ID | Material | Qty | Unit | Density | Weight (kg) | G (Disposal) | H (Recycle) | I (A1-A3) | J (C3) | K (C4) | L (D) | Source notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Rock | 70.869 m³ | m³ | 2700 | 191 346 | 0.10 | 0.90 | 0.002854 | 0.006726 | 0 | −0.002854 | "ÖKOBAUDAT — Aggregates folder" |
| 2 | Gravel | 31.064 m³ | m³ | 1680 | 52 187 | 0.50 | 0.50 | 0.002854 | 0.006726 | 0 | −0.002854 | "ÖKOBAUDAT — Aggregates folder" |
| 3 | Sand | 56.050 m³ | m³ | 1520 | 85 196 | 1.00 | 0 | 0.002854 | 0.006726 | 0 | −0.002854 | "ÖKOBAUDAT — Aggregates folder" |
| 4 | Earth | 830.494 m³ | m³ | 1800 | 1 494 889 | 0.08 | 0.92 | 0.004675 | 0.003378 | 0 | −0.004675 | "Pietro's Thesis" |
| 5 | Water | 299.584 m³ | m³ | 1000 | 299 584 | 1.00 | 0 | 0 | 0 | 0 | 0 | NA |
| 6 | Cement | 23 301 kg | Kg | 1440 | 23 301 | 1.00 | 0 | 0.779 | 0.001890 | 0.004810 | 0 | Note references Pedrazzi thesis p42 |
| 7 | Steel Rebars | 1 330.6 kg | Kg | 7850 | 1 331 | 0.05 | 0.95 | 2.941 | 0 | 7.18 | −1.480 | "ok" |
| 8 | Steel plates | 0.308 m³ | m³ | 7850 | 2 416 | 0.05 | 0.95 | 1.650 | 0 | 1.81 | −1.010 | "ok" |
| 9 | Steel profiles | 0.19 m³ | m³ | 7850 | 1 492 | 0.05 | 0.95 | 2.167 | 0 | 7.18 | −1.480 | "ok" |
| 10 | Polyethylene film | 139.6 m² | m² | 1200 | 5 026 | 1.00 | 0 | 2.77 | 1.13 | 0.0128 | −1.32 | "Poland company's EPD" |
| 11 | Bitumen | 376.5 kg | kg | 1060 | 376 | 1.00 | 0 | 0.064 | 0.000282 | 0.000900 | −0.00705 | (none) |
| 12 | Crude oil | 66.794 L | L | 900 | 60 | 1.00 | 0 | 134 | 0 | 0 | 0 | "No EoL — burned in A1-A3" |
| 13 | Waste Oil | 133.588 L | L | 900 | 120 | 1.00 | 0 | 0.25 | 0 | 0.400 | 0 | "No C3; only EoL from research papers" |
| 14 | Glass | 0.009608 m³ | m³ | 2200 | 21 | 0.10 | 0.90 | 0.7356 | 0 | 0.018712 | −0.006437 | (none) |
| 15 | Anti-termite | 1445.75 L | L | 1000 | 1 446 | 1.00 | 0 | 0.65 | 0.05 | 0.200 | 0 | (none) |
| 16 | Wall paint | 327.675 L | L | 1200 | 393 | 1.00 | 0 | 1.2 | 0.05 | 1.000 | −0.0782 | "Silicate external paint is ok" |
| 17 | Antirust paint | 115 L | L | 1200 | 138 | 1.00 | 0 | 105¹ | 0.05 | 1.000 | 0 | (none — formula =20.16*(1/0.16)*1000*(1/E19)) |
| 18 | Floor Tiles | 281.658 m² | m² | 2400 | 3 380 | 0.10 | 0.90 | 5.09 | 0.12 | 0.016 | −0.12 | (none) |
¹ Antirust paint A1-A3 factor is CORRECTED per antirust-paint-investigation.md.
Cell I19 = =20.16*(1/0.16)*1000*(1/E19) = 105 kg CO₂/kg. This is an anomaly (18–25× any
published EPD value). The provisional correction is 4.87 kg CO₂/kg (INIES FDES 2-152:2020,
SIPEV). Full verdict in §8 of quantities-formula-reconciliation.md. Carry forward as
CORRECTED in all downstream stages; do NOT write a parity test for 105.
Polyethylene film weight formula: =(C12*0.03)*E12 — applies 3% film thickness factor to
declared area quantity. This calculation embedded a material property (3% mass fraction) with
no citation. BLOCKED per §2.2.
§2.2 Source assessment for LCI Final factors¶
| Source note in workbook | Provenance verdict | Action |
|---|---|---|
| "ÖKOBAUDAT — Aggregates folder" | BLOCKED — screenshot reference without ÖKOBAUDAT dataset UUID or version | Locate ÖKOBAUDAT UUID for each aggregate EPD; commit as seed EPD per decision #25 |
| "Pietro's Thesis" | BLOCKED — a methodology reference, not a primary EPD source | Locate primary EPD backing Pedrazzi's earth factors; if none, use ÖKOBAUDAT earth substitute |
| "ok" (steel rows) | BLOCKED — not a citation | Source ÖKOBAUDAT steel EPD or equivalent |
| "Poland company's EPD" | BLOCKED — unnamed EPD, RESTRICTED source territory, not ÖKOBAUDAT | Source ÖKOBAUDAT PE film EPD |
| No note / empty | BLOCKED | Source required before seeding |
=20.16*(1/0.16)*1000*(1/E19) (antirust) |
CORRECTED (antirust investigation §8) | Provisional 4.87 kg CO₂/kg; two blockers active |
Geographic representativeness caveat (issue #14): All currently cited factors (ÖKOBAUDAT,
Pedrazzi thesis) reflect European supply chains. Every seed EPD committed for this project must
document geographic scope in justification_text and proxy_provenance per decision #25.
§3 Module B4 — Replacement¶
Sheet: B4 (Replacement)
§3.1 Column structure¶
| Col | Header | Formula |
|---|---|---|
| A | Material | ='A1-A3'!B_row |
| B | BoQ quantity (kg) | ='A1-A3'!C_row (= LCI Final F column) |
| C | GWP (kg CO2-eq/kg) | ='A1-A3'!D_row (= LCI Final I column) |
| D | Unit Impact (kg CO2 eq) | ='A1-A3'!E_row = B × C |
| E | % Finishes | Hardcoded fraction per material |
| F | Replacements | =ROUNDUP('B1'!$C$5/10 − 1, 0) |
| G | Component Quantity | = E × B |
| H | Unit Impact B4 | = C × (F × G) |
| I | share% | = H / H23 |
Impact formula:
$$\text{Impact_B4}[\text{material}] = \text{GWP} \times (\text{replacements} \times \text{finishes_fraction} \times \text{BoQ_weight_kg})$$
Which can also be written as:
$$H_{\text{row}} = C_{\text{row}} \times F_{\text{row}} \times E_{\text{row}} \times B_{\text{row}}$$
§3.2 Replacement count formula¶
The replacement count is a single shared formula applied uniformly to all materials:
Where 'B1'!C5 = 50 (study period in years), giving:
Mathematical equivalence to decision #24: ROUNDUP(x − 1, 0) equals ⌈x⌉ − 1 for all
positive x (integer and non-integer cases). So when RSL = 10 years and study period = 50 years:
⌈50/10⌉ − 1 = 5 − 1 = 4. The formula produces the correct count for this specific case.
The structural deviation is the hardcoded RSL = 10 (see §3.4, Finding B4-F1).
Study period (B1!C5 = 50): The workbook uses a 50-year study period. Decision #15
defaults to 30 years for the Sahel context. The 50-year value is a project-specific choice
with no citation in the B1 sheet. EXPERT-JUDGEMENT — see attribution item 8.
§3.3 % Finishes values (column E, B4 sheet)¶
The % Finishes column determines what fraction of each material's installed quantity is
considered a "finishes" component that degrades and is replaced. Materials with E = 0
contribute zero B4 impact.
| Material | % Finishes (E) | Formula verdict | Note |
|---|---|---|---|
| Rock | 0 (empty) | VALIDATED | Structural — no maintenance replacement |
| Gravel | 0 (empty) | VALIDATED | Structural aggregate |
| Sand | 0.50 | BLOCKED | Source required — see item 8 |
| Earth | 0.08 | BLOCKED | Source required |
| Water | 0.03 | BLOCKED | Maintenance water fraction unclear |
| Cement | 0.40 | BLOCKED | Finishes cement fraction — source required |
| Steel Rebars | 0 (empty) | VALIDATED | Structural steel not replaced |
| Steel plates | 0 (empty) | VALIDATED | Structural |
| Steel profiles | 0 (empty) | VALIDATED | Structural |
| Polyethylene film | 0 (empty) | VALIDATED | Waterproof membrane — not typically replaced |
| Bitumen | 1.00 | BLOCKED | Full replacement assumed — source required |
| Crude oil | 1.00 | CORRECTED | See B4-F2 — crude oil is not a maintenance material |
| Waste Oil | 1.00 | BLOCKED | See B4-F3 — waste oil as maintenance item questionable |
| Glass | 0 (empty) | CORRECTED | See B4-F4 — glass should have replacement modelled |
| Anti-termite | 0.30 | BLOCKED | Treatment fraction and RSL source required |
| Wall paint | 1.00 | BLOCKED | Full repainting — source required for interval |
| Antirust paint | 0 | BLOCKED | Not replaced — see B4-F5 |
| Floor Tiles | 0 | CORRECTED | See B4-F6 — tiles should be replaced |
§3.4 Extracted computed values (parity reference)¶
The following are the Excel's computed values (data_only read from B4 (Replacement)).
Used as parity target only for VALIDATED formulas; divergence tests document CORRECTED rows.
| Material | B (kg) | C (kg CO2/kg) | E (finishes) | F (replace) | G (comp. qty) | H (B4 impact kg CO2) |
|---|---|---|---|---|---|---|
| Rock | 191 345.77 | 0.002854 | 0 | 4 | 0 | 0 |
| Gravel | 52 187.31 | 0.002854 | 0 | 4 | 0 | 0 |
| Sand | 85 196.23 | 0.002854 | 0.50 | 4 | 42 598.12 | 486.30 |
| Earth | 1 494 888.52 | 0.004675 | 0.08 | 4 | 119 591.08 | 2 236.35 |
| Water | 299 583.55 | 0 | 0.03 | 4 | 8 987.51 | 0 |
| Cement | 23 301.05 | 0.779 | 0.40 | 4 | 9 320.42 | 29 042.42 |
| Steel Rebars | 1 330.60 | 2.941 | 0 | 4 | 0 | 0 |
| Steel plates | 2 415.87 | 1.650 | 0 | 4 | 0 | 0 |
| Steel profiles | 1 491.50 | 2.167 | 0 | 4 | 0 | 0 |
| Polyethylene film | 5 025.60 | 2.770 | 0 | 4 | 0 | 0 |
| Bitumen | 376.48 | 0.064 | 1.00 | 4 | 376.48 | 96.38 |
| Crude oil | 60.11 | 134 | 1.00 | 4 | 60.11 | 32 221.48 ¹ |
| Waste Oil | 120.23 | 0.25 | 1.00 | 4 | 120.23 | 120.23 |
| Glass | 21.14 | 0.736 | 0 | 4 | 0 | 0 ² |
| Anti-termite | 1 445.75 | 0.65 | 0.30 | 4 | 433.73 | 1 127.69 |
| Wall paint | 393.21 | 1.200 | 1.00 | 4 | 393.21 | 1 887.41 |
| Antirust paint | 138.00 | 105 | 0 | 4 | 0 | 0 ³ |
| Floor Tiles | 3 379.90 | 5.09 | 0 | 4 | 0 | 0 ² |
| TOTAL | 67 218.26 |
¹ CORRECTED — crude oil should not be a maintenance replacement material (B4-F2). ² CORRECTED — glass and floor tiles should have B4 replacement modelled (B4-F4, B4-F6). ³ Antirust paint E21 = 0: no B4 replacement. Factor also CORRECTED to 4.87 (antirust investigation).
§3.5 Findings¶
B4-F1 — CORRECTED: RSL hardcoded at 10 years; not per-material¶
Cell: F7 (and all other F rows): =ROUNDUP('B1'!$C$5/10 − 1, 0)
The 10 in the denominator is a hardcoded RSL = 10 years applied uniformly to all materials.
Decision #24 requires per-material RSL, provenance-gated (SOURCED / EXPERT-JUDGEMENT / BLOCKED).
The Python module lca.b4 must consume an RSL attribute per material, raise ValueError for
any BLOCKED RSL, and apply replacements = ⌈study_period / RSL⌉ − 1.
Parity: For the Keur Songho case with study_period = 50 and RSL = 10, both the Excel formula and decision #24 formula produce 4 replacements. The numeric outputs in the table above are correct parity targets only for rows where the E fraction and other inputs are otherwise validated. The RSL=10 assumption must be replaced by per-material RSL in production.
Attribution item 8 — RSL = 10 years and "% finishes" fractions.
B4-F2 — CORRECTED: Crude oil as 100% maintenance replacement material¶
Cell: E16 = 1 (% finishes = 100%)
Crude oil (66.794 L declared, 60.11 kg) is assigned 100% finishes fraction and is thus fully replaced 4 times. This generates 32 221 kg CO₂ eq — 47.9% of the entire B4 total. The rationale is not documented. Crude oil in the BoQ is a construction-phase fuel/lubricant (used in A5 or as form-work oil); it is not a building maintenance material. Using it as a 100% maintenance item that is replaced every 10 years is methodologically unsound and inflates B4 by ~32 t CO₂ eq.
Verdict: CORRECTED. The Python lca.b4 module must exclude crude oil from B4 replacements
(E = 0), or treat it as a construction-phase material properly scoped to A5. No parity test
for E16 = 1.
Attribution item 9 — confirm crude oil scope.
B4-F3 — BLOCKED: Waste oil as 100% maintenance material¶
Cell: E17 = 1
Waste oil (120.23 kg) is also fully replaced 4 times. The note in LCI Final N15 states:
"No EE as it is paid by previous use (only filtering and transport)." Waste oil collected
from construction machinery has uncertain B4 scope. BLOCKED pending Chiwara attribution on
whether waste oil is a B4 maintenance item.
Attribution item 9 (same item as crude oil).
B4-F4 — CORRECTED: Glass replacement missing (E18 = 0)¶
Cell: E18 = 0
Glass (21.14 kg, fanlight glazing) has no B4 replacement. EN 15978 §6.2.5 states that elements with RSL < study period must be replaced. Glass in an unprotected West African climate (BSh/BWh) will typically require replacement within a 50-year study period due to thermal stress and impact damage. The E = 0 assignment means glass contributes 0 to B4, which is not defensible unless the glass RSL > 50 years is explicitly documented.
Verdict: CORRECTED. RSL for glass must be attributed (item 8) before lca.b4 can
include it. Until attributed, glass RSL is BLOCKED — the module raises.
B4-F5 — BLOCKED: Antirust paint replacement missing (E21 = 0)¶
Cell: E21 = 0
Antirust paint on metal structural elements is a maintenance coating that requires periodic re-application (typically every 10–15 years under humid tropical climates). E21 = 0 means no B4 replacement is modelled for antirust paint. With the CORRECTED factor of 4.87 kg CO₂/kg (provisional), and assuming 138 kg applied per cycle, each replacement cycle would add approximately 672 kg CO₂ eq — potentially significant. This requires Chiwara attribution on whether antirust repainting is a modelled maintenance activity.
Verdict: BLOCKED — E21 is currently 0; this may be intentional (single application only) or an oversight. Attribution item 8 must clarify.
B4-F6 — CORRECTED: Floor tile replacement missing (E22 = 0)¶
Cell: E22 = 0
Floor tiles (3379.90 kg) have zero B4 replacement. For a 50-year study period, floor tiles in a school building with high pedestrian traffic will require replacement. EN 15978 §6.2.5 requires modelling replacement when RSL < study period. The tile RSL in a Sahel school context is estimated 15–25 years (no peer-reviewed source found) — consistent with 1–3 replacement cycles in 50 years. BLOCKED pending RSL attribution.
Verdict: CORRECTED. RSL for floor tiles is BLOCKED — must be attributed before lca.b4
can include it. Attribution item 8.
§4 Module C3 — Waste Processing¶
Sheet: C3(Waste Processing)
§4.1 Column structure¶
| Col | Header | Formula |
|---|---|---|
| B | Material | ='A1-A3'!B_row |
| C | BoQ quantity (kg) | ='LCI Final'!F_row |
| D | Disposal Rate | ='LCI Final'!G_row |
| E | GWP (kg CO2-eq/kg) | ='LCI Final'!J_row |
| F | Module Impact | = C × D × E |
| G | share | = F / F25 |
Impact formula:
$$\text{Impact_C3}[\text{material}] = \text{BoQ_weight_kg} \times \text{disposal_rate} \times \text{C3_GWP_factor}$$
The formula is structurally correct and internally consistent. Verdict: VALIDATED for formula structure. All impact factors and disposal rates are BLOCKED (see §4.3).
§4.2 Extracted computed values (parity reference)¶
| Material | Qty (kg) | Disposal Rate | C3 Factor | C3 Impact (kg CO₂) |
|---|---|---|---|---|
| Rock | 191 345.77 | 0.10 | 0.006726 | 128.70 |
| Gravel | 52 187.31 | 0.50 | 0.006726 | 175.51 |
| Sand | 85 196.23 | 1.00 | 0.006726 | 573.03 |
| Earth | 1 494 888.52 | 0.08 | 0.003378 | 403.98 |
| Water | 299 583.55 | 1.00 | 0 | 0 |
| Cement | 23 301.05 | 1.00 | 0.001890 | 44.04 |
| Steel Rebars | 1 330.60 | 0.05 | 0 | 0 |
| Steel plates | 2 415.87 | 0.05 | 0 | 0 |
| Steel profiles | 1 491.50 | 0.05 | 0 | 0 |
| Polyethylene film | 5 025.60 | 1.00 | 1.130 | 5 678.93 |
| Bitumen | 376.48 | 1.00 | 0.000282 | 0.11 |
| Crude oil | 60.11 | 1.00 | 0 | 0 |
| Waste Oil | 120.23 | 1.00 | 0 | 0 |
| Glass | 21.14 | 0.10 | 0 | 0 |
| Anti-termite | 1 445.75 | 1.00 | 0.05 | 72.29 |
| Wall paint | 393.21 | 1.00 | 0.05 | 19.66 |
| Antirust paint | 138.00 | 1.00 | 0.05 | 6.90 ¹ |
| Floor Tiles | 3 379.90 | 0.10 | 0.120 | 40.56 |
| TOTAL | 7 143.69 |
¹ Antirust paint C3 factor (0.05 kg CO₂/kg) is a SEPARATE factor from the CORRECTED A1-A3 anomaly (105 → 4.87). The C3 factor (waste-processing emissions) is independently BLOCKED pending source attribution. The A1-A3 correction does not affect C3 numerics.
§4.3 Findings¶
C3-F1 — BLOCKED: All C3 disposal rates and GWP factors lack normative sources¶
The LCI Final column G (disposal rate) and column J (C3 GWP factor) have no normative
citations for any material. Source notes in column N are narrative fragments ("ÖKOBAUDAT"
without dataset ID; "Pietro's Thesis" for earth; "ok" for steel; unnamed Polish EPD for
polyethylene film). Under decision #23, every parameter feeding a reported result must be
SOURCED or EXPERT-JUDGEMENT. Currently all are BLOCKED.
Disposal rates (G column) — specific concerns: - Sand: G5 = 1.00 (100% disposal). With a density of 1520 kg/m³ and 85 t of sand, the claim that 100% goes to waste processing and nothing is reused is conservative but should be documented (sand is often reusable as fill). - Earth: G6 = 0.08 (only 8% disposed — 92% recycled as fill). This is the primary driver of the large Module D earth credit. The 8% disposal rate needs a source. - Steel: G9/G10/G11 = 0.05 (5% disposed, 95% recycled). Reasonable for steel in theory, but no Sub-Saharan Africa context is cited. For recycling to be modelled, functional scrap markets must exist — which varies significantly across Senegal, Mali, Ghana.
C3 GWP factors (J column) — specific concerns: - Polyethylene film (J12 = 1.13 kg CO₂/kg) dominates C3 at 79.5%. Source: unnamed "Poland company's EPD" — BLOCKED. If this value is wrong (polyethylene incineration EPD values range widely: 0.5–2.5 kg CO₂/kg depending on incineration efficiency), the C3 total could shift significantly. - Anti-termite, wall paint, antirust paint (J17/J18/J19 = 0.05 kg CO₂/kg): identical across three very different product types. This appears to be an assumed value, not product-specific. BLOCKED. - Earth C3 factor (J6 = 0.003378 = 3.378/1000): source "Pietro's Thesis." The Pedrazzi thesis is a methodology reference document, not a primary EPD or LCI database. BLOCKED.
Attribution item 10 — all C3 disposal rates and GWP factors.
§5 Module C4 — Disposal¶
Sheet: C4 (Disposal)
§5.1 Column structure¶
| Col | Header | Formula |
|---|---|---|
| B | Material | ='C3(Waste Processing)'!B_row |
| C | BoQ quantity (kg) | ='C3(Waste Processing)'!C_row |
| D | Disposal Rate | ='C3(Waste Processing)'!D_row (= same as C3) |
| E | GWP (kg CO2-eq/kg) | ='LCI Final'!K_row |
| F | Module Impact | = C × D × E |
| G | share | = F / F23 |
Impact formula:
$$\text{Impact_C4}[\text{material}] = \text{BoQ_weight_kg} \times \text{disposal_rate} \times \text{C4_GWP_factor}$$
The formula is structurally identical to C3 with different GWP factors (column K vs J) and uses the same disposal rate as C3. Verdict: VALIDATED for formula structure.
Note on shared disposal rate: Both C3 and C4 apply the same disposal_rate (G column).
This is internally consistent with the model's intent: the G fraction of each material goes
through both C3 processing AND C4 landfill disposal (i.e., C3 models sorting/crushing before
landfill; C4 models the landfill impact itself). The non-G fraction (H = 1 − G) goes to
recycling and is credited in Module D. This is a coherent, EN 15804+A2-compatible model.
§5.2 Extracted computed values (parity reference)¶
| Material | Qty (kg) | Disposal Rate | C4 Factor | C4 Impact (kg CO₂) |
|---|---|---|---|---|
| Rock | 191 345.77 | 0.10 | 0 | 0 |
| Gravel | 52 187.31 | 0.50 | 0 | 0 |
| Sand | 85 196.23 | 1.00 | 0 | 0 |
| Earth | 1 494 888.52 | 0.08 | 0 | 0 |
| Water | 299 583.55 | 1.00 | 0 | 0 |
| Cement | 23 301.05 | 1.00 | 0.004810 | 112.08 ¹ |
| Steel Rebars | 1 330.60 | 0.05 | 7.180 | 477.69 ² |
| Steel plates | 2 415.87 | 0.05 | 1.810 | 218.64 ² |
| Steel profiles | 1 491.50 | 0.05 | 7.180 | 535.45 ² |
| Polyethylene film | 5 025.60 | 1.00 | 0.012800 | 64.33 |
| Bitumen | 376.48 | 1.00 | 0.000900 | 0.34 |
| Crude oil | 60.11 | 1.00 | 0 | 0 |
| Waste Oil | 120.23 | 1.00 | 0.400 | 48.09 |
| Glass | 21.14 | 0.10 | 0.018712 | 0.040 |
| Anti-termite | 1 445.75 | 1.00 | 0.200 | 289.15 |
| Wall paint | 393.21 | 1.00 | 1.000 | 393.21 ³ |
| Antirust paint | 138.00 | 1.00 | 1.000 | 138.00 ³ |
| Floor Tiles | 3 379.90 | 0.10 | 0.016 | 5.41 |
| TOTAL | 2 282.41 |
¹ Cement C4 factor: =4.81/1000. Note references Pedrazzi thesis p42. BLOCKED.
² Steel C4 factors (7.18, 1.81, 7.18 kg CO₂/kg): anomalously high for landfill disposal.
See C4-F2.
³ Paint C4 factors = 1.0 kg CO₂/kg: very high for landfill disposal. See C4-F3.
§5.3 Findings¶
C4-F1 — CORRECTED: G23 share formula references wrong cell¶
Cell: G23 (C4 sheet, total row) — formula not explicitly populated in extracted data.
In Module D, G24 = ='C4 (Disposal)'!G23 → computed = 0.
The C4 share column (G) divides each row's F impact by $F$23 (total). The total row
itself (G23) does not have a meaningful share value and evaluates to 0. Module D's G24
inherits this 0 instead of computing a meaningful share. Verdict: CORRECTED — G24 in
Module D should be =SUM(G6:G23) (share of D total) or simply omitted if share is
not meaningful for a total row.
C4-F2 — BLOCKED: Steel C4 factors anomalously high¶
Cells: K9 = 7.18, K10 = 1.81, K11 = 7.18 (kg CO₂/kg)
For steel sent to landfill (5% of installed mass), the C4 factor of 7.18 kg CO₂/kg is very high. Landfill disposal of inert steel does not generate 7.18 kg CO₂/kg.
Possible explanations: - These are incineration emission factors, not landfill emission factors. If the 5% steel is incinerated (rather than landfilled), factors in this range can occur for steel with high-carbon content or in mixed-waste streams. - The factors may be cross-contaminated from another indicator (e.g. kg SO₂ eq for AP).
Neither explanation is documented. Source "ok" is insufficient. BLOCKED — all steel
C4 factors must be traced to an EPD or LCI database before lca.c4 can implement them.
Attribution item 11 — steel C4 factors.
C4-F3 — BLOCKED: Paint C4 factors = 1.0 kg CO₂/kg¶
Cells: K18 = 1.0 (wall paint), K19 = 1.0 (antirust paint)
1.0 kg CO₂/kg for landfill disposal of paint is extremely high. Published landfill emission factors for liquid coatings are typically 0.001–0.05 kg CO₂/kg for inert constituents. A value of 1.0 suggests these may be incineration factors or include volatile solvent burn-off, but this is not documented. BLOCKED.
Attribution item 11 (same as steel).
§6 Module D — Benefits/Loads Beyond System Boundary¶
Sheet: D
§6.1 Column structure¶
| Col | Header | Formula |
|---|---|---|
| B | Material | ='C4 (Disposal)'!B_row |
| C | BoQ quantity (kg) | ='C4 (Disposal)'!C_row |
| D | Recycling Rate | ='LCI Final'!H_row (= 1 − disposal rate) |
| E | GWP (header row references C4 header) | Actually ='LCI Final'!L_row |
| F | Module Impact | = C × D × E |
| G | share | = F / F24 |
Impact formula:
$$\text{Impact_D}[\text{material}] = \text{BoQ_weight_kg} \times \text{recycling_rate} \times \text{D_GWP_factor}$$
Where D_GWP_factor (column L) is negative for all credited materials (recycling credit).
Formula structure is VALIDATED.
§6.2 Extracted computed values (parity reference)¶
| Material | Qty (kg) | Recycling Rate | D Factor | D Impact (kg CO₂) | L formula |
|---|---|---|---|---|---|
| Rock | 191 345.77 | 0.90 | −0.002854 | −491.49 | =−I3 |
| Gravel | 52 187.31 | 0.50 | −0.002854 | −74.47 | =−I4 |
| Sand | 85 196.23 | 0 | −0.002854 | 0 | =−I5 (rate=0) |
| Earth | 1 494 888.52 | 0.92 | −0.004675 | −6 429.52 | =−I6 |
| Water | 299 583.55 | 0 | 0 | 0 | 0 |
| Cement | 23 301.05 | 0 | 0 | 0 | 0 |
| Steel Rebars | 1 330.60 | 0.95 | −1.480 | −1 870.82 | =−1480/1000 |
| Steel plates | 2 415.87 | 0.95 | −1.010 | −2 318.03 | =−1010/1000 |
| Steel profiles | 1 491.50 | 0.95 | −1.480 | −2 097.05 | =−1480/1000 |
| Polyethylene film | 5 025.60 | 0 | −1.320 | 0 | =−1.32 (rate=0) |
| Bitumen | 376.48 | 0 | −0.007050 | 0 | =−7.05/1000 (rate=0) |
| Crude oil | 60.11 | 0 | 0 | 0 | 0 |
| Waste Oil | 120.23 | 0 | 0 | 0 | 0 |
| Glass | 21.14 | 0.90 | −0.006437 | −0.12 | =(−1.59/100)/2.47 |
| Anti-termite | 1 445.75 | 0 | 0 | 0 | 0 |
| Wall paint | 393.21 | 0 | −0.078200 | 0 | =−7.82/100 (rate=0) |
| Antirust paint | 138.00 | 0 | 0 | 0 | 0 |
| Floor Tiles | 3 379.90 | 0.90 | −0.120 | −365.03 | hardcoded |
| TOTAL | −13 646.53 |
§6.3 EN 15804+A2 conformance assessment¶
D-F1 — Finding: B1 sheet is mislabelled — it is Module B6 (operational energy)¶
The sheet named B1 in the workbook contains:
- B5 = 49.8 kWh/year·m²
- C5 = 50 years
- D5 = 1.1 kg CO₂/kWh (Senegal grid emission factor)
- E5 = 10.04 × 28.8 = 289.15 m² (floor area × rooms)
- F5 = D5 × B5 × C5 × E5 = 791 987 kg CO₂
This is an operational energy calculation (kWh/year × years × emission factor), which
corresponds to Module B6 (operational energy use) under EN 15978 / EN 15804+A2, not B1
(use stage — no energy required). The B1 mislabel is recorded in PROJECT.md §Reference and
ROADMAP.md Phase 2. No correction required in this spec; lca.b6 will implement the correct
module with the corrected label.
D-F2 — CORRECTED: Aggregate D credits use gross avoided-burden approach (not EN 15804+A2 net method)¶
Cells: L3 = =−I3, L4 = =−I4, L5 = =−I5, L6 = =−I6
The D credits for Rock, Gravel, Sand, and Earth are computed as the negative of their A1-A3 factors. This implements a 100% avoided-burden credit: the recycled material is credited as if it fully substitutes for virgin primary material production, with no secondary production cost deducted.
EN 15804+A2 §6.4.3.2 (net flows method): The D module must account for "the net flows and impacts resulting from reuse, recovery and/or recycling of materials beyond the system boundary." The net credit must equal:
Net credit = (primary material production burden avoided) − (secondary material production burden incurred)
For earth and aggregate reused as fill, the secondary processing burden may be near-zero (transport, compaction), making the gross approximation defensible in magnitude. However, the normative justification that secondary production burden ≈ 0 is not documented in the workbook.
Verdict: CORRECTED. The Python lca.d module must implement the net method. For cases
where secondary processing burden is genuinely near-zero (earth/aggregate fill reuse), the
practical result may be close to the gross result, but a documented secondary burden value
(or a documented justification for zero) is required. The parity test applies only to the
total D impact; the implementation must use net accounting.
Attribution item 12 — D factors for aggregates and earth.
D-F3 — BLOCKED: Steel D credits are pre-computed net values with no source¶
Cells: L9 = =−1480/1000, L10 = =−1010/1000, L11 = =−1480/1000
Steel D credits (−1.48, −1.01, −1.48 kg CO₂/kg) are less than the A1-A3 factors (2.941, 1.65, 2.167 kg CO₂/kg), implying a net credit rather than a gross avoided-burden credit. This is closer to EN 15804+A2 compliance than the aggregate approach, but no source is cited. Source "ok" in the Notes column is insufficient.
Possible basis: steel recycling net credit from an EPD programme operator (e.g., worldsteel's LCA data, ÖKOBAUDAT steel scrap EPD). BLOCKED — must be traced.
Attribution item 12 (same as D-F2).
D-F4 — CORRECTED: G24 formula error in Module D¶
Cell: D sheet G24 = ='C4 (Disposal)'!G23 → computed = 0
The share column for Module D total (G24) should be =SUM(G6:G23) (which equals 1.0 by
construction since each row's share sums to 100%) or simply omitted. The current formula
references C4's total-row share which is 0.
D-F5 — EN 15804+A2: Module D is reported separately — CONFORMANT¶
The INTERPRETATION sheet column M is explicitly labelled "Total (no D)" and uses
=SUM(C_row:K_row) (columns A1-A3 through C4, skipping L=D). Column L shows Module D
separately. Row 26 (LCA Total) preserves this separation. This structure is EN 15804+A2
conformant: Module D is never aggregated into the A–C system boundary total.
The INTERPRETATION M26 formula =SUM(C25:K26) has an apparent range anomaly (starts at
row 25 rather than row 5), but the pre-aggregated module totals in row 26 ensure the total
is computed correctly without double-counting the material-level rows.
§7 INTERPRETATION sheet — totals cross-check¶
The INTERPRETATION sheet (INTERPRETATION) aggregates all modules per material and provides
project-level totals.
| Module | Total (kg CO₂ eq) | % of non-D total | Notes |
|---|---|---|---|
| A1-A3 | 92 361 | 9.6% | Antirust anomaly (105 factor) inflates by ~13 800 |
| A4 | 3 773 | 0.4% | |
| A5 | 281 | 0.03% | |
| B6 (sheet: "B1") | 791 987 | 81.9% | Dominates total; mislabelled as B1 |
| B4 | 67 218 | 7.0% | Crude oil inflates by ~32 200 (B4-F2) |
| C1 | 574 | 0.06% | |
| C2 | 819 | 0.08% | |
| C3 | 7 144 | 0.7% | Polyethylene film dominates at 79.5% of C3 |
| C4 | 2 282 | 0.2% | |
| Total (no D) | 966 439 | 100% | |
| D | −13 647 | −1.4% of total | Reported separately per EN 15804+A2 |
Impact of CORRECTED antirust paint (A1-A3): Replacing 105 → 4.87 kg CO₂/kg for the 138 kg quantity reduces A1-A3 by 13 820 kg CO₂ (−15.0% of A1-A3, −1.4% of project total).
Impact of CORRECTED crude oil B4 (B4-F2): Removing crude oil from B4 reduces B4 by 32 221 kg CO₂ (−47.9% of B4, −3.3% of project total).
§8 Verdict summary table¶
Axis 1 — Formula verdicts¶
| Stage | Item | Verdict | Parity target |
|---|---|---|---|
| B4 | Impact formula H = C × F × G | VALIDATED | §3.4 table |
| B4 | Replacements = ROUNDUP(50/10−1,0) | VALIDATED (this case) | §3.4 |
| B4 | RSL = 10 years hardcoded | CORRECTED | B4-F1 |
| B4 | Crude oil E=1 (maintenance) | CORRECTED | B4-F2 |
| B4 | Glass E=0 (no replacement) | CORRECTED | B4-F4 |
| B4 | Floor tiles E=0 (no replacement) | CORRECTED | B4-F6 |
| C3 | Impact formula F = C × D × E | VALIDATED | §4.2 table |
| C4 | Impact formula F = C × D × E | VALIDATED | §5.2 table |
| C4 | G24 formula (share total row) | CORRECTED | C4-F1 |
| D | Impact formula F = C × D × E | VALIDATED | §6.2 table |
| D | Aggregate L factors = −I (gross) | CORRECTED | D-F2 |
| D | G24 = C4!G23 = 0 | CORRECTED | D-F4 |
Axis 2 — Parameter provenance¶
| Parameter | Verdict | Block scope |
|---|---|---|
| B4 % Finishes per material | BLOCKED | lca.b4 raises for any material lacking attribution |
| B4 RSL = 10 years | BLOCKED | lca.b4 requires per-material RSL |
| B4 Study period = 50 years | EXPERT-JUDGEMENT (pending) | Attribution item 8 |
| C3 disposal rates (G column) | BLOCKED | lca.c3 raises |
| C3 GWP factors (J column) | BLOCKED | lca.c3 raises |
| C4 steel factors (K9/K10/K11) | BLOCKED | lca.c4 raises |
| C4 paint factors (K18/K19) | BLOCKED | lca.c4 raises |
| D aggregate D factors (L3/L4/L5/L6) | BLOCKED (net accounting) | lca.d raises |
| D steel D factors (L9/L10/L11) | BLOCKED | lca.d raises |
| D floor tile D factor (L20) | BLOCKED | lca.d raises |
| D glass D factor (L16) | BLOCKED | lca.d raises |
Vendorability tags (decision #25)¶
All factors in LCI Final that require an EPD source:
- "ÖKOBAUDAT — Aggregates folder" references: vendorable once ÖKOBAUDAT UUID is confirmed.
- "Pietro's Thesis" (earth, cement): NOT vendorable — thesis is not an EPD source. Requires
ÖKOBAUDAT earth/cement substitute.
- "Poland company's EPD" (polyethylene film): NOT vendorable — unidentified RESTRICTED source.
Requires ÖKOBAUDAT PE film EPD.
- Steel: "ok" — NOT vendorable. Requires ÖKOBAUDAT structural steel EPD.
- All other sources: NOT vendorable until identified and cleared.
§9 CORRECTED formula divergence summary¶
These divergences must be asserted in backend/tests/fixtures/test_b4_c3_c4_d_divergence.py.
| ID | Stage | Correction | Expected divergence direction |
|---|---|---|---|
| B4-C1 | B4 | Remove crude oil from replacements (E16: 1 → 0) | B4 total −32 221 kg CO₂ (−47.9%) |
| B4-C2 | B4 | Glass RSL gate: raise ValueError until attributed | Glass B4 currently = 0; corrected = BLOCKED |
| B4-C3 | B4 | Floor tiles RSL gate: raise ValueError until attributed | Floor tile B4 currently = 0; corrected = BLOCKED |
| D-C1 | D | Net accounting for aggregates: must document net credit | D aggregate credit magnitude may change |
| D-C2 | D | G24 = SUM(G6:G23) not C4!G23 | 0 → 1.0 |
| C4-C1 | C4 | G23 share formula: see D-C2 | — |