S3-CON
Scope 3 Consolidation
1. 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: mapcat1..cat15→ scalar or time-seriesalignment:BY_YEAR|BY_INDEX(defaultBY_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_LISTcategories_include: list (ifINCLUDE_LIST)categories_exclude: list (ifEXCLUDE_LIST)require_minimum_coverage: boolean (default false)minimum_coverage_ratio: default0.67(typical ESG threshold)rounding: optional digits
2.3. Output Schema
- ZAR Address:
schema.compute.ghg.scope3.output.v1_0_0
Outputs include:
ghg_scope3categories_includedcategories_excludedcoverage_ratiometadata(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 presentINCLUDE_LIST: include only listed categoriesEXCLUDE_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:
- = set of categories present in input
- = expected categories (from options or default Cat1–Cat15)
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_presentcategories_expectedcategories_excludedcoverage_ratiocoverage_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_PROVIDEDSCOPE3_INVALID_CATEGORY_CODESCOPE3_COVERAGE_BELOW_THRESHOLDSCOPE3_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 (
cmiorzar_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: where = number of categories
- Memory:
- Suitable for batch ESG reporting and analytics
11. Methods Served (v1)
GHG.scope3.absGHG.scope3.reported.abs
Downstream engines consuming this output:
MEID_CALC_GHG_AGGRMEID_CALC_GHG_INTMEID_CALC_TARGET_GAPMEID_SCEN_GHG_ALIGN