Skip to main content
Jira progress: loading…

S3-CON

Scope 3 Consolidation

1. Identity

Loading identity…

Depends on module:

  • Purpose: Consolidates Scope 3 category-level emissions into a single Scope 3 total, applying reporting policies, completeness rules, and governance controls required by GHG Protocol Scope 3 and ESRS E1.

  • Typical usage:

    • Producing the official Scope 3 total for disclosure
    • Applying inclusion/exclusion rules across categories
    • Generating completeness metadata for auditors
    • Feeding Scope 3 totals into company-wide aggregation, intensity, and scenario engines

Why this engine exists

  • Category aggregation (MEID_CALC_GHG_SCOPE3_CAT) answers “what do we have by category?”
  • This engine answers “what is our reported Scope 3, and how complete is it?”

2. Contract References (ZAR)

2.1. Input Schema

  • ZAR Address: schema.compute.ghg.scope3.inputs.v1_0_0

Required conceptual fields

  • scope3_by_category: map cat1..cat15 → scalar or time-series
  • alignment: BY_YEAR | BY_INDEX (default BY_YEAR)

Optional fields:

  • categories_expected: list of expected categories (if not provided in options)
  • categories_excluded: list of categories intentionally excluded (with rationale)

2.2. Options Schema

  • ZAR Address: schema.compute.ghg.scope3.options.v1_0_0

Common options:

  • category_policy: SUM_ALL | INCLUDE_LIST | EXCLUDE_LIST
  • categories_include: list (if INCLUDE_LIST)
  • categories_exclude: list (if EXCLUDE_LIST)
  • require_minimum_coverage: boolean (default false)
  • minimum_coverage_ratio: default 0.67 (typical ESG threshold)
  • rounding: optional digits

2.3. Output Schema

  • ZAR Address: schema.compute.ghg.scope3.output.v1_0_0

Outputs include:

  • ghg_scope3
  • categories_included
  • categories_excluded
  • coverage_ratio
  • metadata (policies applied, completeness flags)

3. Accepted Input Shapes

A. Category totals (preferred, from MEID_CALC_GHG_SCOPE3_CAT)

{
"scope3_by_category": {
"cat1": [[2025, 800]],
"cat6": [[2025, 150]],
"cat7": [[2025, 90]]
}
}

B. Scalar per category

{
"scope3_by_category": {
"cat1": 800,
"cat6": 150
}
}

C. Mixed category coverage with explicit exclusions

{
"scope3_by_category": {
"cat1": [[2025, 800]],
"cat6": [[2025, 150]]
},
"categories_excluded": ["cat7", "cat11"]
}

All inputs MUST be normalized internally to:

Map<period, Map<category, value>>

4. Compute Semantics (Normative)

For each period t:

4.1. Determine included categories

Based on category_policy:

  • SUM_ALL: include all categories present
  • INCLUDE_LIST: include only listed categories
  • EXCLUDE_LIST: include all except listed categories

4.2. Compute Scope 3 total

SCOPE3_TOTAL(t) = Σ scope3_by_category[c,t] for all included categories c

4.3. Compute coverage ratio

Let:

  • CpresentC_{present} = set of categories present in input
  • CexpectedC_{expected} = expected categories (from options or default Cat1–Cat15)

coverageratio=CpresentCexpected/Cexpectedcoverage_{ratio} = |C_{present} ∩ C_{expected}| / |C_{expected}|

Coverage is structural, not magnitude-weighted.


5. Reporting & Governance Rules (Normative)

  • Categories excluded intentionally MUST be reported in output metadata.
  • Missing categories MUST be distinguishable from excluded categories.
  • If require_minimum_coverage = true and
coverage_ratio < minimum_coverage_ratio

→ computation MUST fail with a clear error.

Metadata MUST include:

  • categories_present
  • categories_expected
  • categories_excluded
  • coverage_ratio
  • coverage_passed (boolean)

6. Alignment Rules

BY_YEAR

  • All category series MUST align on the same period keys.
  • Missing category values handled as zero only if explicitly allowed by schema (default: missing category = absent, not zero).

BY_INDEX

  • Ordered aggregation (discouraged for regulatory reporting).

7. Validation & Error Model

Invariants

  • Category keys MUST be canonical cat1..cat15
  • Values must be finite
  • No negative values unless explicitly allowed by schema

Error codes (suggested)

  • SCOPE3_NO_CATEGORIES_PROVIDED
  • SCOPE3_INVALID_CATEGORY_CODE
  • SCOPE3_COVERAGE_BELOW_THRESHOLD
  • SCOPE3_ALIGNMENT_MISMATCH

Errors MUST include:

  • engine cmi_short_code
  • offending category
  • period (if applicable)

8. Dependencies

MEID_CALC_GHG_SCOPE3 depends on:

  • MEID_CALC_GHG_SCOPE3_CAT (upstream category aggregation)
  • schema resolver (ZAR)
  • canonical Scope 3 category reference list

Declared via ZAR dependencies.


9. Federation & Audit Requirements

To reproduce a Scope 3 total externally, the export MUST include:

  • Engine identity (cmi or zar_code)
  • Engine build proof (execution_ref + build_hash)
  • Input/options/output schemas
  • Category-level input values
  • Category inclusion/exclusion policy
  • Coverage ratio and thresholds applied

Provenance chain MUST show:

… → MEID_CALC_GHG_SCOPE3_CAT → MEID_CALC_GHG_SCOPE3 → …

with cmi_short_code recorded in USO tail arrays.


10. Performance Notes

  • Complexity: O(n×c)O(n × c) where cc = number of categories
  • Memory: O(n×c)O(n × c)
  • Suitable for batch ESG reporting and analytics

11. Methods Served (v1)

  • GHG.scope3.abs
  • GHG.scope3.reported.abs

Downstream engines consuming this output:

  • MEID_CALC_GHG_AGGR
  • MEID_CALC_GHG_INT
  • MEID_CALC_TARGET_GAP
  • MEID_SCEN_GHG_ALIGN



GitHub RepoRequest for Change (RFC)