Methodology.
How cobank calculates, classifies, and documents every line of CO2e. This page is the public record of the choices we make before any invoice is read: which standards we follow, which factor libraries we use, how we decide when data is strong enough to report and when it is not. It is written long rather than short, because the cost of a hidden assumption is higher here than the cost of a long paragraph.
Scope & boundary.
cobank reports company-level emissions under the GHG Protocol Corporate Standard. The organisational boundary is set by operational control: an entity appears in the ledger if the reporting company has the authority to direct its operating policies, regardless of equity share. This is stated once per workspace and held constant across periods unless the company formally restructures.
Within that boundary, cobank calculates Scope 1 (direct combustion and fugitive emissions), Scope 2 (purchased electricity, steam, heat and cooling, reported both location-based and market-based where residual-mix factors are available), and the material portion of Scope 3 under the GHG Protocol Scope 3 Standard: Category 1 (purchased goods and services), Category 3 (fuel- and energy-related activities), Category 4 (upstream transport), Category 6 (business travel), and the material sub-portions of Categories 2, 5 and 7.
What cobank does not report on by default: Scope 3 Categories 8 through 15 (use-phase, end-of-life, franchises, investments, downstream transport and leased assets) are out of scope unless the workspace explicitly configures them, because the data quality of category-wide spend-based estimates at that end of the value chain is materially lower than anything else in the ledger. Non-energy Scope 1 sources for which no published factor is available are flagged rather than estimated. Silence on a category is preferable to a number the auditor cannot defend.
Calculation methods.
Every kgCO2e figure in cobank is produced by one of three methods, always tried in this order and recorded on the line.
Physical activity
Preferred where the invoice reports a physical quantity. kgCO2e = activity × factor (e.g. kWh of electricity times a grid factor, litres of diesel times a fuel factor, kilograms of a specific material times a product factor). A Swiss manufacturer's electricity bill of 142'580 kWh against the current BAFU Swiss grid factor is a physical calculation; the result is reproducible to the kilowatt-hour.
Distance × weight (freight)
For transportation, where the invoice exposes both distance and weight. kgCO2e = tonne-km × mode factor, following ISO 14083:2023 for the definition of the transport operation, the hub allocation and the modality hierarchy. Surcharges on a freight invoice (BAF, CAF, LSS, demurrage, wharfage) are treated under the surcharge-zero rule below, not as additional freight.
Spend-based (EEIO)
Used only when methods 01 and 02 are not available for a line. kgCO2e = CHF × EEIO factor, with the factor drawn from a curated environmentally-extended input-output library matched to the vendor's industry. Every spend-based line is flagged in the ledger with a lower confidence score and a visible "spend method" tag, so the reviewer knows at a glance which numbers rest on thinner data.
Surcharge-zero rule. On transport and energy invoices, freight surcharges (BAF, CAF, LSS, fuel surcharges, demurrage), taxes (VAT, MwSt, TVA), administrative fees, service charges, and retrospective adjustments are assigned activity_role of surcharge / tax / fee / adjustment in the ledger and emit zero kgCO2e. This is a direct application of GHG Protocol guidance on avoiding double-counting: the physical activity that generated the emission is already captured on the parent primary line, and billing the same tonne of CO2e twice because the carrier split the freight rate across three invoice rows would inflate the total. The classifier is deterministic, not probabilistic: a line matches the rule or it does not, and the ledger records the rationale and the parent line it defers to.
Factor sources.
cobank uses a curated library of published emission factors. Every factor carries a source, a version, a region of applicability and a validity window. When a line item is calculated, the factor version in force on the invoice date is pinned to the line via factor_version_id and held there permanently.
Selection hierarchy. For every line, cobank applies the curated calculation library (over 75 factors across 14 source labels) in a fixed order. For grid electricity the factor is the one published for the country of consumption: BAFU for Switzerland, the Umweltbundesamt for Germany, the European Environment Agency for the other EU member states, and the EU-27 average as a disclosed fallback where no national factor is held. Otherwise: DEFRA 2024 (for freight, fuel combustion and business travel) → GLEC 2025 / IMO 2025 (for logistics chains) → EEIO spend-based factors as the last resort. A separate semantic pool of about 1’400 DEFRA 2024 factors (pgvector-indexed) produces alternative suggestions on the Provenance Card at a 0.30 cosine-similarity threshold with a required subcategory match: it never drives a calculated number. A line with no curated match is routed to the review queue, not silently approximated.
Optional add-ons. Ecoinvent is available as a customer-procured add-on on enterprise plans when a customer's audit firm or internal methodology specifically requires it; cobank does not redistribute ecoinvent by default because it is not required for credible Swiss or EU voluntary reporting. A customer-supplied factor library (override mode) is also available on enterprise plans; see enterprise plan.
Version log. Factor versions are pinned per line at insertion time via factor_version_id. When a source publishes a new version, prior reported periods are not automatically restated; historical numbers remain bound to the factors that were in force on the invoice date. Restatements are documented per-period on request, via a period-snapshot hash that records the exact factor set in use at close.
Attribution. DEFRA / DESNZ conversion factors contain public sector information licensed under the Open Government Licence v3.0. German grid values: Quelle Umweltbundesamt, CLIMATE CHANGE 16/2026, converted from g/kWh to kg/kWh. European country grid values: © European Environment Agency, re-used under the EEA re-use policy (CC BY), converted from g/kWh to kg/kWh. Swiss values: Bundesamt für Umwelt BAFU, re-used with BAFU’s written confirmation of 4 May 2026. No market-based residual mix is applied for EU supply: the AIB European Residual Mix carries no re-use permission, so where no supplier-specific factor or cancelled instrument exists cobank applies the consumption-country grid average and says so on the line, as the GHG Protocol Scope 2 Guidance permits when a residual mix is unavailable.
Confidence & data quality.
Every line item carries a confidence score between 0.00 and 1.00 that summarises how much the calculation can be trusted. Three inputs feed the score: the quality of the underlying factor source (physical-method factors from BAFU or DEFRA score higher than spend-based EEIO fallbacks), the certainty of the classification (a strong vendor match and an unambiguous description score higher than a generic line on an unfamiliar supplier), and a missing-data penalty for each field that had to be inferred rather than read from the invoice. The score is a review signal, not a correction factor: a low score does not reduce the reported kgCO2e, it determines where the line goes in the workflow.
needs_review = true. Excluded from exports until a reviewer resolves it.Confidence is visible on every line of the ledger and on every row of the Provenance Card. When a reviewer overrides a classification, the override is recorded alongside the original suggestion, the factor library rows it was drawn from, and the identity of the reviewer; the confidence score is recomputed rather than overwritten.
Immutability & audit trail.
Every write to a line item (creation, edit, override, review, close) passes through a hash chain. Each row records a row_hash over its own fields and a prev_hash pointing at the previous state. UPDATE and DELETE are blocked by row-level-security policy on any line whose reporting period has been closed, so a closed period cannot be silently rewritten. Amendments open a new version with a visible restatement trail rather than quietly mutating history. Every factor version is pinned at write time, so historical calculations remain reproducible even after the factor library advances.
This means every number in a cobank report can be reconstructed from its inputs: the invoice it came from, the line it was extracted into, the factor that was applied, and the identity of whoever signed off on the final classification. Reproducibility is not a marketing claim here: it is the shape of the database.
How cobank is operated.
A statement is only as strong as the process behind it. cobank runs one loop per reporting period.
Collect
Invoices arrive by drag-and-drop, CSV/XLSX, or ERP sync. Every line is extracted, classified and calculated against a pinned factor version. Nothing vanishes: documents dated outside the open period are held visibly, not silently dropped.
Review
A queue ranked by impact (materiality × uncertainty). Corrections in the queue carry a written rationale, and after close the server refuses any edit that does not; the source document renders beside every decision; every change to a line's emissions, category, review state or spend lands in a hash-chained edit log that nobody — including cobank — can rewrite.
Close
A period closes against readiness checks — unmapped lines, unreviewed items above materiality, joint-venture method mismatches. Closing over one of them takes a written reason, recorded on the period and in the workspace activity under the name of whoever gave it. Closing freezes every line into a canonical snapshot hashed with SHA-256. Re-running that hash over the canonical snapshot in the evidence export reproduces it, which is how an auditor proves the report was not altered after close.
Report
Sealed periods render from their snapshot and carry a basis stamp with the snapshot hash; open periods render live and are watermarked as drafts. Scope 2 is reported market-based and location-based side by side, with the difference reconciled.
Assure
An auditor joins a read-only engagement scoped to sealed periods: risk-weighted sampling informed by ISA 530, assertion-level workpapers, a misstatement schedule projected against materiality (defaults informed by ISA 320 — overall materiality 5%, tolerable misstatement 2.5%, clearly-trivial 0.25% of the period total, each overridable), preparer/reviewer separation with self-review blocked, and a self-contained evidence export with per-file SHA-256 hashes. After close, changes travel only through a reasoned amendment trail.
Where the rule lives. The amendment trail is enforced by the database, not only by the application. A sealed line refuses a write that does not arrive through the amendment path, and so does the invoice behind it — its date, its supplier and whether it has been archived are part of the sealed evidence. The application asks for a reason; the database is what makes the asking unavoidable.
Verifiability controls.
Zeros are never ambiguous: every line resolves to one of five states (measured · instrument-backed zero · rule-based zero · not measured · zero, unexplained), and the data-quality summary reconciles to the line count. Coverage is reported on two labelled bases, by line count and by spend.
Where a line's calculation basis is stored, the report build re-performs the arithmetic and surfaces any difference as an exception; where it is not, the line is disclosed as not re-performable from stored fields — routed to source documents rather than silently passed. Invoice totals are reconciled against the sum of extracted lines. Duplicate candidates are flagged for judgment, never silently merged.
What the seal covers, stated precisely: a sealed period's lines cannot change, and neither can the documents behind them. A document dated into a closed quarter that arrives after the close is held unstamped and reported as an addition — it is not folded silently into a sealed total, and it does not move one.
Last reviewed: 7 August 2026.
Status of independent assurance.
For the avoidance of doubt: the reports that leave a cobank workspace are internal management figures until an accredited assurance provider has tested them. Where a customer wants limited or reasonable assurance under ISSA 5000, the workbench supports engagement-scoped read access, risk-based sampling, per-assertion workpapers and a signed evidence package that the firm can rely on. The assurance opinion remains the firm's; cobank provides the working paper underneath.
See also: What VSME actually requires of a Swiss SME, the primary-source walk-through for a Swiss CFO whose EU customer just asked for VSME-aligned data.