Skip to main content
Jira progress: loading…

S2-ADJ

Scope 2 Market / Location Adjustment

1. Identity

Loading 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 instruments
  • target_method: LOCATION | MARKET
  • alignment: BY_YEAR | BY_INDEX (default BY_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 | ERROR
  • allow_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_location
  • scope2_market
  • scope2_adjusted (equals the value for target_method)
  • coverage_ratio
  • metadata (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:

  1. 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
  1. Residual mix application:
  • Remaining electricity volume is multiplied by residual mix emission factor
  • Residual mix source determined by residual_mix_policy
  1. 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_location
  • If 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_OVERALLOCATION
  • SCOPE2_RESIDUAL_MIX_MISSING
  • SCOPE2_INVALID_INSTRUMENT
  • SCOPE2_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 (cmi or zar_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: O(n×i)O(n × i) where ii = instruments
  • Memory: O(n)O(n)
  • Suitable for batch and regulatory reporting (not high-frequency streaming)

11. Methods Served (v1)

  • GHG.scope2.location.abs
  • GHG.scope2.market.abs
  • GHG.scope2.adjusted.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)