Methodology — v0 draft

Status: draft for build. Before the first public release, have an external GHG-accounting reviewer sign this off and record it in DECISIONS.md.

Principles

  1. Official first. If a Kenyan authority publishes a factor, we publish it unchanged with a citation (method=official). We recompute it independently only to validate it.
  2. Transparent gap-filling. Where no official Kenyan factor exists, derive one from IPCC defaults combined with Kenyan activity data (method=derived). Every input is cited.
  3. Nothing guessed. Missing inputs block publication. They are never estimated in code.
  4. Separate gases, explicit GWPs. Store CO2, CH4, N2O (and HFCs for refrigerants) individually. CO2e is computed per GWP basis. Default basis is AR6 100-year, because IFRS S2 expects GWPs from the latest IPCC assessment (confirm against the standard text). AR5 is also served for users with older baselines.
  5. Biogenic CO2 is reported separately and never summed into CO2e (GHG Protocol practice).

Factor keys

{region}.{sector}.{activity}.{variant}, lowercase, dot-separated. Examples:

  • ke.electricity.grid.location_based
  • ke.electricity.grid.td_losses
  • ke.fuel.diesel.stationary, ke.fuel.diesel.mobile
  • ke.fuel.petrol.mobile, ke.fuel.lpg.stationary, ke.fuel.kerosene.stationary
  • ke.fuel.charcoal.stationary, ke.fuel.firewood.stationary
  • global.refrigerant.r410a (GWP-based, not region-specific)

Each factor row carries: factor_key, region, sector, activity_unit, co2, ch4, n2o, hfc, co2e_ar6, co2e_ar5, biogenic_co2, method, period_start, period_end (half-open), data_year, quality_rating (1–5), uncertainty_low, uncertainty_high, source_ids[], source_pages[], script_path, git_commit, release_version, supersedes_id.

  • source_pages[] is aligned with source_ids[]: the PDF page index (as a PDF viewer shows it, not the printed page number) where the value appears.
  • A gas the source does not report is left empty, never zero. CO2e columns are left empty unless every gas they need is known (D-016).
  • data_year is the calendar year in which the period ends.
  • quality_rating and uncertainty stay empty until the rubric exists and the source provides ranges (section 4).

1. Grid electricity — Scope 2, location-based

Why this matters

Kenya's grid intensity moves with hydrology. When rainfall drops, thermal (oil-fired) generation fills the gap. EPRA reported the grid emission factor for July–December 2025 rose 17.56% on the same half of the previous year, driven by a 24.27% rise in grid thermal generation (source epra-biannual-fy2025-26, PDF page 25). Global tools serve stale or differently scoped Kenya factors: Climatiq's plain "Electricity supplied from grid" factor for Kenya is ADEME Base Carbone v23.9 with a 2014 data year (climatiq-ademe-ke-grid-2014); its only other Kenya grid factors are Ember production-mix values (climatiq-ember-ke-grid-2024). No IEA factor is listed for Kenya (climatiq-search-ke-electricity-2026-09-27-p1, data version 37). The UNFCCC standardized baseline (ASB0050-2020, built on 2017–2019 data) expired on 28 Dec 2023 (still to verify against the saved source in data/raw/unfccc/). A half-yearly, official, traceable series is the core product.

Sources

  • EPRA Energy & Petroleum Statistics Reports — primary. EPRA works on Kenya's financial year (July–June) and publishes two kinds of report: a biannual report for the first half of the financial year (July–December) and an annual report for the full financial year. Each prints the grid emission factor in tCO2/MWh of electricity generated (CO2 only), the emissions and generation it came from, and the factor for the comparable previous period.
  • KPLC annual reports — electricity purchased, sold, and system losses (for T&D factor).
  • UNFCCC CDM ASB0050-2020 — historical comparison only.
  • Factors served by Climatiq (ADEME, Ember) — comparison only; third-party data, never stored as a factor (see CLAUDE.md rule 8). They are CO2e totals with no gas split (ADEME on AR6, Ember on AR5), while EPRA's factor is CO2 only, so charts label the difference.

Steps

  1. Ingest every EPRA-published factor → ke.electricity.grid.location_based, method=official, per period EPRA prints (D-013):
    • July–December, labelled YYYYH2: [Jul 1, Jan 1 next year).
    • Financial year, labelled FYYYYY-YY: [Jul 1, Jul 1 next year).
    • EPRA does not publish January–June, so we don't either. A derived January–June value (financial year minus July–December) is possible but not built yet.
    • When a date falls in more than one official period, the API returns the shortest one.
  2. Which printed value wins (D-014): a period's own report is preferred. A value restated in a later report ("the previous financial year recorded…") is used only when the period's own report is unreadable or used the retired flat factor. Where both exist, the restated value must match the original to the restated value's printed precision, or the build fails.
  3. Excluded: reports that apply EPRA's former flat "national grid emission factor" of 0.5 tCO2/MWh (calendar 2023 and 2022 reports). That figure is an assumed constant, not a calculated factor, and EPRA's later reports restate those years (D-015).
  4. Units and gases (D-016): tCO2/MWh equals kg CO2/kWh (factor 1). EPRA's factor is CO2 only, so co2 is filled and ch4, n2o, co2e_ar6 and co2e_ar5 stay empty until a derived CH4/N2O component is sourced and reviewed.
  5. Validation checks (written to reports/grid_validation.csv, never used as values):
    • Printed-totals ratio: EPRA's printed emissions ÷ printed generation vs the printed factor.
    • Restatement consistency: restated values vs the original report's value.
    • Independent recompute: EF_grid = (Σ_thermal (fuel_i × NCV_i × EF_i) + E_geothermal_NCG) ÷ generation. If thermal fuel consumption isn't reported, use generation × heat-rate only if heat rates come from a cited source; otherwise report "not computable" with the missing inputs. Flag any period where |check − official| / official > 10% for human review.
  6. Decisions:
    • D-002 Denominator: decided — electricity generated, matching EPRA.
    • D-003 Geothermal: open. Kenyan geothermal plants emit CO2 from non-condensable gases. EPRA attributes emission changes to thermal generation only, which suggests NCG is excluded; confirm from EPRA's notes before public release. If our recompute includes it, cite a measured source.
    • D-004 Imports (Uganda, Ethiopia, Tanzania interconnectors): open. Exclude, or include at the exporting grid's factor. Match EPRA if documented.

T&D losses factor (Scope 3, category 3)

EF_td = EF_grid × L / (1 − L) per kWh consumed, where L = losses ÷ energy supplied to the network, from KPLC for the same period. Cite the exact table used.

2. Fuels — Scope 1, stationary and mobile

  • CO2, CH4, N2O emission factors (kg per TJ) and net calorific values from the 2006 IPCC Guidelines, Volume 2 (Energy), chapters 1–3; use the 2019 Refinement where it updates a value. Store the table and page number for every constant.
  • Convert to per-litre using density from a Kenyan specification (KEBS/EPRA) where available; otherwise the cited IPCC or other default. Serve both per-litre and per-kg factors.
  • Stationary vs mobile differ in CH4/N2O factors; keep them as separate keys.
  • Which IPCC rows (D-020):
    • Stationary CH4/N2O: Table 2.4, commercial/institutional (offices, hotels, generators).
    • Mobile CH4/N2O: Table 3.2.2, road transport. It has three petrol rows by vehicle technology; each is its own key (mobile_uncontrolled, mobile_oxidation_catalyst, mobile_ldv_1995_or_later) rather than guessing which fits Kenya's fleet. It has no kerosene row, so there is no mobile kerosene factor.
  • Arithmetic: per kg of fuel = EF (kg/TJ) × NCV (TJ/Gg) ÷ 10⁶; per litre = per kg × density (kg/m³) ÷ 1000. CO2e = CO2 + CH4 × GWP(CH4) + N2O × GWP(N2O) on each GWP basis.
  • Methane GWP (D-020): fossil fuels use fossil-methane GWPs (AR6 29.8, AR5 30); charcoal and firewood use non-fossil (AR6 27.0, AR5 28).
  • Charcoal and firewood: CO2 goes to biogenic_co2; CH4 and N2O count toward CO2e.
  • Periods and precision (D-021): default-table factors are valid for any date, [1990-01-01, 9999-01-01), until superseded. Values are exact decimals rounded half-up to at most 9 decimal places; per-kg and per-litre rows share a key and differ by activity_unit.
  • v1 is fuel-based only. Distance-based transport factors (matatu, boda, lorry) come in v2 and only once fuel-economy data is sourced from a citable Kenyan study or dataset.

3. Refrigerants

  • GWP-100 per gas from IPCC AR6 (Table 7.SM.7) and AR5 (Table 8.A.1) for the AR5 column.
  • Blends (e.g. R-410A, R-404A, R-407C) = mass-fraction-weighted sum of component GWPs, using published blend compositions (ASHRAE 34 designations). Cite the composition source: the UNEP OzonAction blends fact sheet (2016), since the ASHRAE standard is paywalled.
  • Unit: kg CO2e per kg of refrigerant released.
  • R-22 (HCFC-22) is a Montreal Protocol gas: GHG Protocol inventories report it outside the Kyoto-basket totals. Its factor is served so users can report it separately. Each gas's mass goes to hfc (kg HFC per kg) where it is an HFC; the CO2e columns carry the result.
  • A gas without a GWP on a basis gets an empty CO2e column on that basis, never a substitute (D-020): R-290 (propane) has no AR5 value; R-600a (isobutane) has neither, since AR6 lists only n-butane, so it is not published.

4. Data quality

  • quality_rating 1–5 using a pedigree approach: reliability of source, temporal, geographical, and technological representativeness. Document the scoring rubric in code.
  • Store uncertainty ranges only when the source provides them. Never fabricate them.

5. Releases

  • Version format YYYY.N (e.g. 2026.1). Each release has a changelog listing added, changed, and superseded factors with reasons.
  • A factor's validity is its period, not its release date.
  • Published rows are immutable.

6. Out of scope for v1

  • Spend-based (EEIO) factors.
  • Product carbon footprints.
  • Market-based Scope 2 (check whether I-REC certificates are issued in Kenya before scoping).
  • CDM Tool 07 combined-margin factors for carbon-project baselines (candidate for v2).

References to collect into data/raw/ (human task, Phase 1)