WST-INT
Waste Intensity Calculator
1. 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_INTMEID_CALC_WATER_INTMEID_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(defaultTOTAL)alignment:BY_YEAR|BY_INDEX(defaultBY_YEAR)
Optional:
unit_waste: defaulttonneunit_denominator: e.g.EURmwaste_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: default1e-9missing_policy:ERROR|SKIProunding: optional digitsoutput_unit_style:t_per_EURm|t_per_EUR|auto(defaultauto)non_positive_denominator_policy:ERROR|FLOOR_AT_EPS(defaultERROR)
2.3 Output Schema
ZAR Address: schema.compute.waste.intensity.output.v1_0_0
Outputs include:
waste_intensitymetadata(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 :
4.1. Select waste basis
Let be the selected waste series corresponding to intensity_basis:
- TOTAL:
- HAZARDOUS:
- NON_HAZARDOUS:
If the caller supplies a raw waste series, it is treated as directly; the basis label is still required for metadata.
4.2. Intensity formula
Let be the denominator series (e.g. revenue).
Where is denominator_floor.
4.3. Denominator policy
If non_positive_denominator_policy = ERROR, then:
- if , the computation MUST fail for that period (or entire run, depending on schema strictness).
If FLOOR_AT_EPS, then:
and the event MUST be recorded in metadata.
4.4. Output units
If waste is tonne and denominator is EURm, then:
- unit is tonne/EURm
The engine MUST propagate unit metadata to output:
unit_wasteunit_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_periodsmissing_in_wastemissing_in_denominatordenominator_floor_applied_countnon_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_DENOMINATORWASTE_INT_INVALID_BASISWASTE_INT_ALIGNMENT_MISMATCHWASTE_INT_NON_POSITIVE_DENOMINATORWASTE_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 (
cmiorzar_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: over periods
- Memory:
- Suitable for batch reporting and KPI analytics
10. Methods Served (v1)
Waste.generated.intensityWaste.hazardous.intensityWaste.non_hazardous.intensity