CBAM Compliance · guides Open the app
Supplier · manufacturer · sub-supplier

Answer your EU buyer once — and prove your plant is better than the default.

No EU forms to learn, no account to create. Open the link, enter what your plant really emits (or draw the plant), and your buyer sees a figure the engine computed — in English or 中文.

1.53SEE tCO₂e/t of the Anatolia Light Metals test plant — the same for supplier, buyer, verifier and engine
4 stepsProduct · Emissions · Precursors · Review — on a phone
English · 中文the whole portal, chosen by your buyer or by you
Before you start

Five supplier pains — solved one by one

You are not the one who files in the EU — but your buyer’s cost depends on your data. Here is how the portal makes that easy and safe.

EU forms, unfamiliar terms (SEE, precursors, Annex II…) and no idea what number goes where.
A 4-step wizard asks plain questions, says where to find each number, computes the SEE for you and checks it against the typical range.
See how → 4-step wizard
You do not want to send your process data to anyone who asks.
A link scoped to one buyer and the CN codes they buy. Only that buyer — and the verifier they appoint — sees what you submit, and only when you submit.
See how → Open the invitation
Your plant is cleaner than the EU default, but buyers still use the default.
Model the plant; the engine-computed SEE and a verifier-ready audit bundle replace the default (and its mark-up) on your buyer’s side.
See how → Your buyers’ cost
Your team works in Chinese; the EU request is in English.
The whole portal switches to 中文 — invitation, wizard, plant model — and dates show in your language.
See how → Open the invitation
Your precursors (clinker, pig iron, alumina…) come from another plant.
Ask your own supplier through the portal; their engine figure links into your precursor and your SEE updates automatically, up the chain.
See how → Sub-suppliers
Solved as you read: 0 of 5
  • Confusing EU forms
  • Protecting plant data
  • Proving you beat the default
  • Chinese-language access
  • Your own sub-suppliers
Step 1 of 9 · Answer a data request

Open your buyer’s invitation — no account needed

/supplier-portal

Your EU buyer sends a link by e-mail. It opens your secure portal directly. Lost the e-mail? Paste the invitation key on the Supplier Access page.

Supplier portal header: invited supplier, data request from the buyer, language switch, request status
The same portal in Chinese
  1. Click the link in your buyer’s e-mail — or open Supplier Access, paste the key and press Open my portal.
  2. Check the header: Data request from your buyer, the deadline, the CN codes requested and the request status.
  3. Switch language any time with English / 中文. A link sent with lang=zh opens in Chinese.
  4. Nothing is shared until you submit. Your buyer — and the accredited verifier they appoint — see only what you submit for their request.

Every tab, mode and control here

Supplier Access
Paste the invitation key → Open my portal; a wrong or expired key gets a clear message.
Header
Invited supplier, data request from, deadline, language, sign out.
Stats
Requested CN codes · Submissions · Request status (waiting / partly / complete / expired).
Open the supplier portal →
Step 2 of 9 · Answer a data request

Fill the 4-step wizard — on a desktop or a phone

/supplier-portal

Product → Emissions → Precursors → Review. Enter totals for the period; the portal computes SEE = total ÷ production and checks it against the typical range for your sector.

Step 1 of 4: requested CN code, product name and optional installation details
Step 2: production, direct and indirect emissions totals
Step 4: review with the live SEE and the evidence upload
The wizard on a phone
  1. Product: Select a requested CN code, the Product name; optionally the installation name, ID, country (ISO), coordinates and monitoring method. Next.
  2. Emissions: Production (tonnes), Direct emissions — total (tCO2e), Indirect emissions — total (tCO2e). Open Where do I find these numbers? for the source of each.
  3. Optional: build the totals from Production processes — fuel streams (qty, unit, EF) and electricity (MWh, grid EF, renewable %); Download template / Upload filled CSV.
  4. Precursors (optional): + Add precursor with mass, SEE direct / indirect and the country it was made in. No SEE? The official EU default for that origin applies.
  5. Review: check the live Direct · Indirect · Precursors · SEE, attach your verifier report, then Review & submit data.
  6. Interrupted? The form autosaves on this device — come back and continue, or Start over.

Every tab, mode and control here

Step 1 · Product
CN code, product name, installation (optional).
Step 2 · Emissions
Totals, Where do I find these numbers?, optional production processes (template download / CSV upload).
Step 3 · Precursors
Add precursor: mass, SEE direct/indirect, origin (default applies when empty).
Step 4 · Review
Live SEE with the typical-range check, evidence upload, Review & submit data.
Your submissions
What you sent; your buyer and their verifier may contact you with questions.

Iron & steel, aluminium and hydrogen: only direct emissions count for CBAM (Annex II). The portal tells you so on the form.

Totals for the period, not per tonne. A SEE far outside the typical range is flagged amber — check units (kg vs t) before you submit.

Open the supplier portal →
Step 3 of 9 · Answer a data request · precursors

Ask your own supplier — the figure links up the chain

/supplier-portal

Your buyer’s CBAM figure includes your precursors. A figure from your own supplier, linked here, is stronger than one you type or the default.

When the sub-supplier submits, the server writes its engine figure into your precursor by link and recomputes your plant — and every plant above it. Nobody copies a number.
  1. In Precursors (or in your plant model) find Where your precursors come from.
  2. Press Ask your supplier for this figure: Company, Email, Language → Send request (or tick Send by email). You can also Show link and send it yourself.
  3. Each precursor shows its provenance: From your supplier (linked), Entered by you or Official EU default.
  4. When they submit, your SEE updates automatically. If your plant was already verified and the link changes it, it goes back to review.

Every tab, mode and control here

Where your precursors come from
Provenance per precursor and the request status.
Ask your supplier for this figure
Company, e-mail, language → Send request / Show link.

Every link is checked on save: same buyer account, matching CN heading, no loops, and an upstream figure above zero.

Open the supplier portal →
Step 4 of 9 · Model your plant

Prefer to draw the plant? Model it in the portal

/supplier-portal/twin/[id]

Instead of typing totals, draw your plant: fuels, electricity, process CO₂ and the materials you buy. The figure is calculated by the engine — the strongest evidence you can give.

My plant model in the supplier portal: reporting year, reports, country, submit, stepper and sectors
The verified Anatolia Light Metals plant model: everything checks out at 1.53
Rhein Coil Trading test supplier: SEE 1.53 tCO₂e/t, status verified.
  1. In the portal press Model my plant for CN … (or Open my plant model). Choose the Country where the plant is located first — defaults depend on it.
  2. Choose product: your sector, then the route that matches your equipment (25 routes in 6 sectors).
  3. Fill in amounts: the amber boxes — production first, then each amount, then its factor. Jump to first field takes you there.
  4. Review: “Everything checks out” when the SEE is within the typical range. Save as often as you like — your buyer sees nothing yet.
  5. Press Submit to my customer: a frozen snapshot with the engine SEE. Download the PDF report and the Audit bundle (ZIP) for your verifier.

Every tab, mode and control here

⚙ Process model
The guided editor: stepper, sectors, amounts, review.
▦ Plant layout
Your physical plant — see the Layout step.
Reporting year · Country
Fixed once verified (409 if you try to change it).
PDF report · Audit bundle (ZIP)
Evidence for you and your verifier.
Submit to my customer
Frozen, version-pinned snapshot; refused without the plant country.
Open the supplier portal →
Step 5 of 9 · Model your plant

Your own Balance Twin: cockpit, table editor, tour

/twin/twin/[id]/edit/twin/[id]/build

With an account you keep a plant library: one model per installation, reused every period. The cockpit is the visual editor; the table editor is for fast bulk entry. Both save the same plant.

Arrow width follows the magnitude of each flow. Every balance — and the SEE — is computed by the engine; the drawing never invents a figure.
Balance Twin cockpit of the Anatolia Light Metals test plant
Table editor with the stepper and sector picker
Plant list with New plant model
  1. Model your plant → New plant model: plant name, CN code, country → Create and open the editor.
  2. Cockpit: click a step or flow on the canvas and edit it under Edit selection. The unit is constrained to what the engine expects; typical factors are one tap away and marked as defaults.
  3. Work the To do list until readiness is green, then Save. Guardrails refuse connections that break the regulation — on the canvas and again on save.
  4. ⊞ Table editor: every step and flow in rows with dropdowns; paste figures or ⤒ Upload CSV / Excel; Save current as lot; Compare (green power · zero-carbon fuel).
  5. Next period: carry forward — structure kept, quantities cleared, factors flagged to Confirm.
  6. ◎ Tour / ◎ Take a 60-second tour show it in a minute.

Every tab, mode and control here

Instruments
SEE gauge with band check, embedded, T1/T2/T3 provenance, readiness.
Canvas + Edit selection
Click to edit; drag to rearrange; guardrails.
◧ Twin / ▦ Layout / ✓ Compliance
Model · physical plant · certificates and declaration.
⊞ Table editor
Process model / Plant layout modes, stepper, paste, upload, lots, compare.
Carry-forward
Confirm N carried values.
◎ Tour
Guided spotlight tours on both editors.
Open the Balance Twin →
Step 6 of 9 · Model your plant · ▦ Layout

Draw the physical plant — with evidence on every object

/twin/[id]/edit/supplier-portal/twin/[id]

The layout is a 2-D drawing of your equipment and areas on the same plant. An object links to a process step (and shows its engine SEE) or to a registered meter — it never copies a figure. The engine never reads the layout.

Plant layout view: palette, starter areas, objects list and print
Plant layout in the supplier portal
  1. Open ▦ Layout (cockpit) or ▦ Plant layout (portal / table editor).
  2. On an empty plan press ✨ Starter layout: a complete first layout from your process model (equipment, meters, stacks, areas). Or drag items from the palette — a tap adds at the centre; works with touch.
  3. Select an object: name, tag, catalogue fields, a link to a process step or a meter. ⇲ Auto-arrange tidies without changing data; ↶ ↷ undo / redo.
  4. Attach evidence to a saved object (PDF / JPEG / PNG): the server reads the photo’s EXIF and its distance to the installation — within 1 km counts as on site. Evidence is never deleted, only withdrawn with a reason.
  5. Change history lists every change (append-only, hash-chained). 🖨 Print PDF (or SVG, once the plan has objects) makes an A3 drawing with a title block and the asset register.

Every tab, mode and control here

Palette
Equipment catalogue (drag / tap / keyboard).
✨ Starter layout · ⇲ Auto-arrange · ↶ ↷
Starter layout on an empty plan, then tidy; undo / redo (Ctrl+Z / Ctrl+Shift+Z).
Objects · Change history
Searchable objects; append-only history.
Evidence
Per object: upload, EXIF + distance, withdraw with reason.
🖨 Print PDF / SVG
A3 drawing + title block (revision = change-log head) + asset register.
Open the Balance Twin →
Step 7 of 9 · Model your plant · metered flows

Turn a meter reading into locked, geo-checked evidence

/twin/[id]/edit/admin/meters

For a metered stream (gas, electricity…), the amount comes from a meter photo — not a typed number. The server checks where the photo was taken and computes the consumption.

Meter & asset registry: add a meter with its registered GPS location
  1. Register the meter once (Meter & asset registry): asset ID, serial, type, unit, multiplier, rollover and its GPS location → Add meter.
  2. On a metered flow open the meter evidence drawer: enter the dial start and end and attach the dial photo.
  3. The server stores the photo, reads its EXIF, scores the 50 m geo check against the meter’s location and computes the net consumption (rollover and multiplier included; a negative result is refused).
  4. Lock the reading: the flow becomes immutable. Every metered stream shows a lock and a green / red geo badge on the diagram.

Every tab, mode and control here

Meter & asset registry (/admin/meters)
Add a meter with its registered GPS.
Meter evidence drawer
Dial start / end, photo, geo verdict, lock.
Open the meter registry →
Step 8 of 9 · Model your plant · submit

Submit for review, freeze snapshots, download the evidence

/twin/[id]/edit/twin/[id]/analytics

Submitting freezes a version-pinned snapshot your buyer and their verifier review. If a verified plant’s SEE changes later, it goes back to review automatically.

Reports & submit drawer: year, quarter, submit for review, declarant details and the three downloads
Lot analytics: lots, SEE trend, lot-to-lot variance, carbon hotspots
  1. Open 📄 Reports & submit. Pick the year (and quarter, or whole year).
  2. 1. Submit for review → Submit plant result: a frozen, version-pinned snapshot; the status becomes pending. Plausibility errors block it.
  3. 2. Reports: PDF report, Registry XML (enter the declarant name, EORI and country), Audit bundle — one ZIP with the PDF, XML, engine data, snapshot and evidence.
  4. Flight recorder: + Snapshot now freezes the period; What changed shows every engine-derived delta from the last snapshot to live.
  5. View analytics → / Analytics: save batches as lots and watch SEE per lot, variance and hotspots.

Every tab, mode and control here

Reports & submit drawer
Year / quarter · Submit plant result · PDF · Registry XML · Audit bundle.
Flight recorder
Snapshot now · read-only archive · What changed (last snapshot → live).
Lot analytics
Lots, SEE trend, variance, carbon hotspots, data-quality coverage.
Open the Balance Twin →
Step 9 of 9 · Your buyers’ cost

Show buyers what your data saves them

/calculate/estimate

Your figure is a selling point. Run the same engine your buyer runs: the official default (with its mark-up) against your own data, for a batch they buy.

Liability calculator for a batch: goods, then emissions data
Free public check: how much is the CBAM default value costing you?
  1. Open Your buyers’ cost (Calculator). Enter the CN code, country of origin and the tonnes a buyer imports.
  2. Calculate once with EU default values and once with Verified supplier value / Enter actual data — your SEE.
  3. Compare certificates and cost. Defaults carry a mark-up; verified actual data never does.
  4. No account? The free public check (/estimate) shows what defaults cost on a product.

Every tab, mode and control here

Calculator
1. The goods · 2. Emissions data · Calculate.
Free estimate (/estimate)
Public: defaults vs a typical plant.
Open the Calculator →
Trust

Why the numbers can be trusted

Your buyer, their verifier and you look at the same number — computed once, by the same engine, from what you entered.

Numbers only from the engine

Every emission, certificate and euro figure is computed by one calculation engine. The AI assistant explains and guides, and is blocked from stating a figure — it routes you to the calculator.

api/app/services/cbam_engine.py · AI number guard (support_guide.py)

Every role sees the same figure

Importer, supplier, verifier and the engine show the identical result — checked live: the Anatolia Light Metals aluminium plant is SEE 1.53 for all four. All 25 Annex I routes recompute byte-identically, in any entry order.

tests/test_reproducibility.py

Official EU annexes, read cell by cell

Default values come from the Official Journal, extracted cell by cell (plain text extraction shifts rows). Example: Türkiye grey cement 1.36 + 0.08 = 1.44 tCO₂e/t; “NA” is Namibia (0.89), never “missing”.

scripts/import_annex_ii_iii.py · default_values_repo

Geo-grounded, locked meter photos

A meter reading carries its photo, the EXIF read by the server and a 50 m geo check against the meter’s registered location. Once locked, the flow it feeds cannot change.

api/v1/meters.py · geo.py · photo_exif.py

Tamper-evident history

Filed declaration versions and every plant-layout change are hash-chained: each entry seals the one before it, and the check names the first altered entry. A filed version is never rewritten.

DeclarationVersion (prev_hash → entry_hash) · twin_layout_events

Reproducible audit bundle

One ZIP: report PDF, registry XML, engine data, the frozen snapshot with version pins, evidence files and a reproducibility check — today’s engine must give the same figures from the frozen plant.

twin.build_audit_bundle · verifier_workspace.py

Self-hosted, PII encrypted

The platform runs in your own cloud. Personal data is encrypted at rest with your own key, and supplier links are sealed, never stored in plain text.

FIELD_ENCRYPTION_KEY (Fernet) · supplier_reminders.token_enc

It fails closed, never guesses

If official reference data cannot be read, the app answers “nothing was calculated” (503) instead of substituting a value. An unknown country or unit is a reported row error, never a best effort.

app/core/reference.py · customs_import.py · iso_countries.py

What we do not claim: the app prepares and validates your declaration XML — it does not file in the EU CBAM Registry for you, and it is not itself an accredited verifier or a certification. Forecast prices are assumptions, never certified figures.

Nothing missed

Coverage checklist

Every screen, tab, mode and drawer of the supplier workflow, mapped to the section that explains it — 9 screens, 43 items, 100 % covered. The same list is checked by an automated browser test against the app.

Route + tab → guide section (43 items)
RouteTab / mode / controlSection
/supplier-portalSupplier Access (invitation key)Open the invitation✓
/supplier-portalLanguage: English / 中文Open the invitation✓
/supplier-portalHeader: request from, deadline, sign outOpen the invitation✓
/supplier-portalStats: CN codes / submissions / statusOpen the invitation✓
/supplier-portalWizard step 1 · Product4-step wizard✓
/supplier-portalWizard step 2 · Emissions (+ Where do I find these numbers?)4-step wizard✓
/supplier-portalProduction processes: template download / CSV upload4-step wizard✓
/supplier-portalWizard step 3 · Precursors4-step wizard✓
/supplier-portalWizard step 4 · Review & submit data (+ evidence)4-step wizard✓
/supplier-portalAutosave: draft restored / Start over4-step wizard✓
/supplier-portalYour submissions4-step wizard✓
/supplier-portalWhere your precursors come from (provenance)Sub-suppliers✓
/supplier-portalAsk your supplier for this figure → Send request / Show linkSub-suppliers✓
/supplier-portal/twin/[id]Link a purchased material to your supplier’s plantSub-suppliers✓
/supplier-portalPrefer to model your plant? → Model my plant for CN …Model my plant✓
/supplier-portal/twin/[id]Reporting year / CountryModel my plant✓
/supplier-portal/twin/[id]Stepper: Choose product → Fill in amounts → Review → DoneModel my plant✓
/supplier-portal/twin/[id]⚙ Process model / ▦ Plant layoutModel my plant✓
/supplier-portal/twin/[id]PDF report · Audit bundle (ZIP)Model my plant✓
/supplier-portal/twin/[id]Submit to my customerModel my plant✓
/twinNew plant model → Create and open the editorYour Balance Twin✓
/twin/[id]/editInstruments (SEE, embedded, provenance, readiness)Your Balance Twin✓
/twin/[id]/editCanvas + To do + Edit selection + SaveYour Balance Twin✓
/twin/[id]/edit◧ Twin / ✓ Compliance viewsYour Balance Twin✓
/twin/[id]/edit◎ TourYour Balance Twin✓
/twin/[id]/buildStepper Go → 1 → 2 → 3 → DoneYour Balance Twin✓
/twin/[id]/buildPaste figures / Upload CSV / ExcelYour Balance Twin✓
/twin/[id]/buildSave current as lot · Compare scenariosYour Balance Twin✓
/twin/[id]/buildCarry-forward: Confirm carried valuesYour Balance Twin✓
/twin/[id]/edit▦ Layout: palette (drag / tap)Plant layout✓
/twin/[id]/edit▦ Layout: ✨ Starter layout / ⇲ Auto-arrange / undo-redoPlant layout✓
/twin/[id]/edit▦ Layout: Objects / Change historyPlant layout✓
/twin/[id]/edit▦ Layout: Evidence per objectPlant layout✓
/twin/[id]/edit▦ Layout: 🖨 Print PDF / SVGPlant layout✓
/supplier-portal/twin/[id]▦ Plant layout (portal)Plant layout✓
/admin/metersAdd a meter (registry)Meter evidence✓
/twin/[id]/editMeter evidence drawer: photo, geo verdict, lockMeter evidence✓
/twin/[id]/edit📄 Reports & submit: Submit plant resultReports & submit✓
/twin/[id]/edit📄 Reports & submit: PDF / Registry XML / Audit bundleReports & submit✓
/twin/[id]/editFlight recorder: + Snapshot now / What changedReports & submit✓
/twin/[id]/analyticsLot analyticsReports & submit✓
/calculateDefault vs your data (buyer’s cost)Your buyers’ cost✓
/estimateFree public estimateYour buyers’ cost✓