Skip to main content
Jira progress: loading…

WST-INT

Waste Intensity Calculator

1. Identity

Loading identity…

Depends on module:

Purpose
Computes waste intensity by normalizing waste generated (total, hazardous, or non-hazardous) against an activity denominator (typically revenue), producing disclosure-ready intensity series aligned with ESRS E5 reporting patterns.

This engine is the Waste analogue of:

  • MEID_CALC_ENERGY_INT
  • MEID_CALC_WATER_INT
  • MEID_CALC_GHG_INT

Typical usage

  • Total waste generated per € revenue (t/€m)
  • Hazardous waste per € revenue
  • Non-hazardous waste per € revenue
  • Inputs to benchmarking and trend analytics

2. Contract References (ZAR)

2.1 Input Schema

ZAR Address: schema.compute.waste.intensity.inputs.v1_0_0

Required conceptual fields:

  • waste: scalar or time-series (absolute waste quantity)
  • denominator: scalar or time-series (e.g., revenue in EURm, production volume)
  • intensity_basis: TOTAL | HAZARDOUS | NON_HAZARDOUS (default TOTAL)
  • alignment: BY_YEAR | BY_INDEX (default BY_YEAR)

Optional:

  • unit_waste: default tonne
  • unit_denominator: e.g. EURm
  • waste_by_category: optional map category → series (for future extensions)

Note: v1 focuses on a single intensity output per request. Per-category intensity can be introduced later without changing the core formula.


2.2 Options Schema

ZAR Address: schema.compute.waste.intensity.options.v1_0_0

Common options:

  • denominator_floor: default 1e-9
  • missing_policy: ERROR | SKIP
  • rounding: optional digits
  • output_unit_style: t_per_EURm | t_per_EUR | auto (default auto)
  • non_positive_denominator_policy: ERROR | FLOOR_AT_EPS (default ERROR)

2.3 Output Schema

ZAR Address: schema.compute.waste.intensity.output.v1_0_0

Outputs include:

  • waste_intensity
  • metadata (basis, floors applied, alignment info, units)

3. Accepted Input Shapes

A. Total waste intensity (scalar)

{
"waste": 1285,
"denominator": 250,
"intensity_basis": "TOTAL"
}

B. Hazardous waste intensity (time-series)

{
"waste": [[2025, 85], [2026, 82]],
"denominator": [[2025, 250], [2026, 260]],
"intensity_basis": "HAZARDOUS",
"alignment": "BY_YEAR"
}

C. Total + hazard split resolved upstream

{
"waste": {
"total": [[2025, 1285]],
"hazardous": [[2025, 85]],
"non_hazardous": [[2025, 1200]]
},
"denominator": [[2025, 250]],
"intensity_basis": "NON_HAZARDOUS"
}

All supported shapes MUST be normalized internally to:

Map<period, waste_value> + Map<period, denominator_value>

4. Compute Semantics (Normative)

For each aligned period tt:

4.1. Select waste basis

Let W(t)W(t) be the selected waste series corresponding to intensity_basis:

  • TOTAL: W(t)=Wgenerated,total(t)W(t) = W_{\mathrm{generated,total}}(t)
  • HAZARDOUS: W(t)=Wgenerated,hazardous(t)W(t) = W_{\mathrm{generated,hazardous}}(t)
  • NON_HAZARDOUS: W(t)=Wgenerated,nonhazardous(t)W(t) = W_{\mathrm{generated,non-hazardous}}(t)

If the caller supplies a raw waste series, it is treated as W(t)W(t) directly; the basis label is still required for metadata.

4.2. Intensity formula

Let D(t)D(t) be the denominator series (e.g. revenue).

I(t)=W(t)max(D(t),ϵ)I(t) = \frac{W(t)}{\max(|D(t)|, \epsilon)}

Where ϵ\epsilon is denominator_floor.

4.3. Denominator policy

If non_positive_denominator_policy = ERROR, then:

  • if D(t)0D(t) \le 0, the computation MUST fail for that period (or entire run, depending on schema strictness).

If FLOOR_AT_EPS, then: D(t)max(D(t),ϵ)D(t) \leftarrow \max(D(t), \epsilon) and the event MUST be recorded in metadata.

4.4. Output units

If waste is tonne and denominator is EURm, then:

  • I(t)I(t) unit is tonne/EURm

The engine MUST propagate unit metadata to output:

  • unit_waste
  • unit_denominator
  • derived unit_intensity

5. Alignment Rules

BY_YEAR

  • Waste and denominator must share period keys unless missing_policy = SKIP.

BY_INDEX

  • Ordered alignment; length mismatch handled per missing_policy.

Metadata MUST include:

  • aligned_periods
  • missing_in_waste
  • missing_in_denominator
  • denominator_floor_applied_count
  • non_positive_denominator_events (if any)

6. Validation & Error Model

Invariants

  • Values must be finite
  • denominator_floor > 0
  • Denominator must be positive under default policy
  • intensity_basis must be valid

Error codes (suggested)

  • WASTE_INT_MISSING_DENOMINATOR
  • WASTE_INT_INVALID_BASIS
  • WASTE_INT_ALIGNMENT_MISMATCH
  • WASTE_INT_NON_POSITIVE_DENOMINATOR
  • WASTE_INT_DENOMINATOR_ZERO_GUARDED (informational if floor applied)
  • WASTE_INT_NON_FINITE_VALUE

Errors MUST include:

  • engine cmi_short_code
  • basis and period context

7. Dependencies

MEID_CALC_WASTE_INT depends on:

  • upstream waste totals (often from MEID_CALC_WASTE_AGGR)
  • schema resolver (ZAR)

Declared via ZAR dependencies.


8. Federation & Audit Requirements

To reproduce waste intensity externally, the export MUST include:

  • engine identity (cmi or zar_code)
  • engine build proof (execution_ref + build_hash)
  • input/options/output schemas used
  • waste series selected (total/hazardous/non-hazardous)
  • denominator series (e.g. revenue)
  • denominator floor and denominator-policy settings

Provenance chain MUST show:

… → MEID_CALC_WASTE_INT → …

with cmi_short_code recorded in USO tail arrays.


9. Performance Notes

  • Complexity: O(n)O(n) over periods
  • Memory: O(n)O(n)
  • Suitable for batch reporting and KPI analytics

10. Methods Served (v1)

  • Waste.generated.intensity
  • Waste.hazardous.intensity
  • Waste.non_hazardous.intensity



GitHub RepoRequest for Change (RFC)