The unaccounted tonne
The reported CO2e drifts from the computed balance by more than the 5% tolerance. Either the inventory claims more than the activity supports, or the activity is incomplete — a reviewer will ask which (EM010).
haql-emission · emissions MRV packager
A GHG inventory (GHGRP Subpart W, EU ETS) stands or falls on a single identity: the reported CO2e equals what the activity, flare and vent rows actually add up to. haql-emission reconciles that identity to the tonne, quantifies flaring and venting, measures month and quarter coverage, and prices your EU ETS allowance position and penalty exposure — from four exports you already keep.
Run it yourself: download the standalone binary — a directory in, an emissions pack out. Fully offline, deterministic, same rules every run.
Read the public guide: what it does, what it checks and what it does not do →
# generate a synthetic facility (12 months, planted gaps) haql-emission demo # reconcile the year and price the allowance position haql-emission demo_emission --no-open -o emissions-pack # result rows=38 entities=3 issues=7 critical=1 high=4 medium=1 low=1 info=0 allowance position -171.9 t CO2e · penalty exposure €17,185 fingerprint sha256=24271ad320cca904… emissions-pack.json → emissions-pack/emissions-pack.json emissions-pack.html → emissions-pack/emissions-pack.html allowance-position.csv → emissions-pack/allowance-position.csv
The reported inventory is generated from the activity rows themselves, so the mass balance stays quiet — the faults are the loud part, not a phantom gap.
What it is
No EHS platform integration. No database. Just the records you already keep, checked against the physics of combustion and the arithmetic of the scheme.
Activity, flare, vent and monitoring CSVs plus a facility config: reporting year, facility, GWP set (AR4 / AR5 / AR6), scheme, and allowances surrendered. A missing optional file is treated as a gap, not guessed around; a missing required column is an error, because nothing can be computed from it.
An emissions pack (JSON + HTML) with the annual mass balance by species, flaring and venting quantification, month and quarter coverage, every finding traced to a row, and an EU ETS allowance position with penalty exposure — plus an allowance-position.csv you can audit.
Why you need it
Multiplying a volume by an emission factor is arithmetic. What fails in review is the gap between the number you filed and the activity data that is supposed to support it — found by a reviewer in one line.
The reported CO2e drifts from the computed balance by more than the 5% tolerance. Either the inventory claims more than the activity supports, or the activity is incomplete — a reviewer will ask which (EM010).
A combustion efficiency of 0.50 is not credible for a flare. It silently inflates the uncombusted methane slip, and the whole flare line restates (EM101).
Three of four monitoring quarters present, or a month gone from the activity stream. The year's inventory is not wrong — it is incomplete, which is close enough to a rejection for most purposes (EM200, EM201).
Verified emissions exceed surrendered allowances. Every owed tonne carries the €100/t excess-emissions penalty on top of buying the missing allowances (EM300, EM302).
The year is summed in a spreadsheet. Reported = whatever the EHS export says. The reviewer asks which activity rows back it, and the answer is scattered across four exports and a folder of factors.
Every figure is a fresh reconciliation. Every reconciliation is a chance to be wrong.
The balance reconciled to the tonne, flaring and venting priced by species, coverage named, and a single pack that answers the reviewer's questions before they are asked.
The inventory arrives looking like it was built to be audited.
What it actually catches
--attest --bundle inspection.zip signs the emissions pack (Ed25519 over the pack hash) and wraps pack + allowances + HTML into one byte-reproducible inspection bundle, so the "was this edited?" question dies before reviewSame design stance as the rest of the suite: read-only, offline, deterministic, traceable to the row — and provably unedited.
Pricing
One corrected inventory, one amended filing, or one allowance deficit carries more cost in a single quarter than a year of a license. haql-emission is the cheap insurance.
Free
One reporting year of records, on the house. No key, no seat limit, no card. You get the full balance, findings and allowance position back.
Send me the exports$349/month
Annual commitment, up to 10 users, unlimited facilities and fields. Academic research and evaluation use needs no key.
$1,750/month
Annual, per site, unlimited users on that site. Under most data-residency policy this is the premise, not a feature.
Evaluation: 30 days, no license key needed.
Next
Email the four exports — anonymised if you prefer — and get the full balance, findings and allowance position back at no cost.
kunleaz100@gmail.com