S2-ADJ
Scope 2 Market / Location Adjustment
1. Identity
Depends on module:
-
Purpose: Converts Scope 2 emissions between location-based and market-based accounting methods in accordance with the GHG Protocol Scope 2 Guidance and ESRS E1 requirements.
-
Typical usage:
- Reporting both Scope 2 (location-based and market-based)
- Applying contractual instruments (EACs, GOs, RECs)
- Producing adjusted Scope 2 values for aggregation and intensity
Versioning policy
- MEID is stable.
- Methodological logic, datasets, and factors are versioned and governed via ZAR.
2. Contract References (ZAR)
2.1. Input Schema
- ZAR Address:
schema.compute.ghg.scope2.adjust.inputs.v1_0_0
Required conceptual fields
scope2_location: scalar or time-series (mandatory)scope2_market: scalar or time-series (optional; may be derived)electricity_consumption: scalar or time-series (mandatory if deriving market-based)instrument_portfolio: optional list of contractual instrumentstarget_method:LOCATION|MARKETalignment:BY_YEAR|BY_INDEX(defaultBY_YEAR)
2.2. Options Schema
- ZAR Address:
schema.compute.ghg.scope2.adjust.options.v1_0_0
Common options:
instrument_priority: ordered list (e.g. ["EAC","PPA","RESIDUAL"])residual_mix_policy:DEFAULT_GRID|COUNTRY_RESIDUAL|ERRORallow_partial_coverage: boolean (default true)rounding: optional digits
2.3. Output Schema
- ZAR Address:
schema.compute.ghg.scope2.adjust.output.v1_0_0
Outputs include:
scope2_locationscope2_marketscope2_adjusted(equals the value fortarget_method)coverage_ratiometadata(instrument usage, residual mix applied, policy flags)
3. Accepted Input Shapes
A. Direct adjustment (market already provided)
{
"scope2_location": [[2025, 5000]],
"scope2_market": [[2025, 3200]],
"target_method": "MARKET"
}
B. Derivation using electricity + instruments
{
"scope2_location": [[2025, 5000]],
"electricity_consumption": [[2025, 100000]],
"instrument_portfolio": [
{
"type": "EAC",
"volume_mwh": 40000,
"emission_factor": 0.0
}
],
"target_method": "MARKET"
}
C. Time-series, multi-year
{
"scope2_location": [[2025, 5000], [2026, 4800]],
"electricity_consumption": [[2025, 100000], [2026, 98000]],
"target_method": "MARKET",
"alignment": "BY_YEAR"
}
All inputs MUST be normalized internally to:
Map<period, { location, electricity, instruments[] }>
4. Compute Semantics (Normative)
4.1. Location-based emissions
Location-based Scope 2 is treated as authoritative input and MUST NOT be modified.
S2_LOCATION(t) = provided scope2_location(t)
4.2. Market-based derivation (core logic)
For each period t:
- Apply contractual instruments (in priority order):
- Instruments reduce electricity volume at their associated emission factor
- Total covered volume MUST NOT exceed total electricity consumption unless explicitly allowed
- Residual mix application:
- Remaining electricity volume is multiplied by residual mix emission factor
- Residual mix source determined by
residual_mix_policy
- Sum components:
S2_MARKET(t) =
Σ instrument_volume_i(t) × EF_i
+ residual_volume(t) × EF_residual
4.3. Coverage ratio
coverage_ratio(t) = covered_electricity(t) / total_electricity(t)
Reported in metadata and output.
4.4. Adjusted output
If target_method = LOCATION → scope2_adjusted = scope2_locationIf target_method = MARKET → scope2_adjusted = scope2_market
5. Methodological Rules (Normative)
- Instruments MUST be valid for the reporting period
- Double counting of instruments is forbidden
- Zero-emission instruments (e.g. EACs) MUST be explicitly declared
If allow_partial_coverage = false and coverage_ratio < 1 → error
Metadata MUST record:
- instruments applied
- residual mix used
- coverage ratio
- policies triggered
6. Alignment Rules
BY_YEAR
- Electricity, location emissions, and instruments must align by year
- Missing data handled per schema/options
BY_INDEX
- Ordered alignment (discouraged for Scope 2)
7. Validation & Error Model
Invariants
- Electricity consumption ≥ 0
- Instrument volumes ≥ 0
- Covered volume ≤ total electricity (unless explicitly allowed)
- Emission factors finite
Error codes (suggested)
SCOPE2_INSTRUMENT_OVERALLOCATIONSCOPE2_RESIDUAL_MIX_MISSINGSCOPE2_INVALID_INSTRUMENTSCOPE2_ALIGNMENT_MISMATCH
Errors MUST include:
- engine
cmi_short_code - period
- instrument identifier (if applicable)
8. Dependencies
MEID_CALC_GHG_SCOPE2_ADJ depends on:
- residual mix datasets (country / grid)
- schema resolver (ZAR)
- unit conversion utilities
- optional contractual instrument registry
Declared in ZAR via dependencies.
9. Federation & Audit Requirements
To reproduce Scope 2 adjustment externally, the export MUST include:
- Engine identity (
cmiorzar_code) - Engine build proof (
execution_ref+build_hash) - Input/options/output schemas
- Location-based Scope 2 values
- Electricity consumption data
- Instrument portfolio details
- Residual mix source + emission factors
Provenance MUST show:
… → MEID_CALC_GHG_SCOPE2_ADJ → …
with cmi_short_code present in USO tails.
10. Performance Notes
- Complexity: where = instruments
- Memory:
- Suitable for batch and regulatory reporting (not high-frequency streaming)
11. Methods Served (v1)
GHG.scope2.location.absGHG.scope2.market.absGHG.scope2.adjusted.abs
Downstream engines consuming this output:
MEID_CALC_GHG_AGGRMEID_CALC_GHG_INTMEID_CALC_TARGET_GAPMEID_SCEN_GHG_ALIGN