CBAM Compliance· validation tutorialTutorial 2 · full scaleOpen the app →
Hands-on validation · all roles · 75–90 minutes

Rhein Coil Trading: one CBAM year, door to door

Follow one EU importer, its steel supplier, that supplier's own iron supplier and an accredited verifier through a complete 2026 CBAM year, from the broker's customs file to a filed declaration and a budget to 2034. Every input is given. Every figure you should see is calculated by hand below from the official EU data, so you can compare the app line by line.

ImporterSupplierSub-supplierVerifierAdministratorFictional companies only

Answer key checked against the calculation engine on 20 October 2026 (production build 2026.10.20) and by the automated door-to-door test e2e/tests/real-project.spec.ts, which runs these exact steps on a fresh database.

Before you start

1. Use a fresh account

Sign up at the app's Sign in page with a work email that has never been used in the app. You get an empty account, so every figure below is exact. Where new accounts need the administrator's approval, you confirm your address first and get an e-mail as soon as it is approved. Run the tutorial once per account: step 12 files the 2026 declaration, and a filed year can only be changed by an amendment.

One sign-in plays every role. The supplier and sub-supplier work through secure links (no account), and in step 10 you invite yourself as the verifier. To make it realistic, invite a colleague's email instead.

2. Download the two files

These are the same files the automated test uses.

⤓ Customs file (Excel)

⤓ Verification statement (PDF)

3. How to use this guide

  • Each step has Do (exact clicks and values), You must see (the checkpoints) and the hand calculation behind every figure.
  • Grey values like 800000 are what you type; bold names are buttons and fields as they appear in the app.
  • Tick Done at the end of each step (saved in this browser). Record what you saw in the results log and export it.
  • Displayed figures are rounded: SEE to 4 decimals (the engine keeps more), certificates to 2 or 4, euros to cents. A difference in the last displayed digit is rounding, not an error.

The story

Company (fictional)RoleWhat it does in this tutorial
Rhein Coil Trading GmbH, GermanyImporterImports steel slabs from China, aluminium from India and cement from Türkiye in Q2-2026; files the 2026 declaration.
Jinhai Special Steel Co., ChinaSupplierMakes the slabs in a basic-oxygen (BOF) steel plant; models the plant in the Balance Twin.
Jinhai Ironworks Co., ChinaSub-supplierMakes the hot metal (pig iron) the BOF uses, in a blast furnace; its figure is linked into the steel plant.
TÜV Verification (test)VerifierReviews the supplier's plant read-only and downloads the audit bundle.

Official data & formulas used in the hand calculation

ValueFigureSource
Default SEE, steel slabs CN 7207 12 10 from China3.169 tCO₂e/tReg (EU) 2026/1740, default values (CN row for China)
Default SEE, unwrought aluminium CN 7601 10 00 from India1.87 tCO₂e/tReg (EU) 2026/1740 (CN 7601 heading, India)
Default SEE, grey Portland cement CN 2523 29 00 from Türkiye1.36 + 0.08 = 1.44 tCO₂e/tReg (EU) 2026/1740: Türkiye shows "-", so "Other countries" applies
Default SEE, sintered ore CN 2601 12 from China (precursor)0.20 direct + 0.06 indirectReg (EU) 2026/1740
Default-value mark-up, 2026 / 2027 / 2028 onward10 % / 20 % / 30 %Reg (EU) 2025/2621 (steel, aluminium, cement)
CBAM benchmark: slabs (route C) / aluminium (route K) / cement1.364 / 1.423 / 0.666Reg (EU) 2025/2620
Free-allocation share, 2026 → 203497.5 % · 95 % · 90 % · 77.5 % · 51.5 % · 39 % · 26.5 % · 14 % · 0 %CBAM phase-in (Reg 2023/956, Art. 31 as amended)
Carbon-border sector correction factor (CSCF)1.0Commission Decision 2026/1862
Grid emission factor, China0.605 tCO₂e/MWhReg (EU) 2025/2621, Annex II
Emission factors typed by the plants: coke / PCI coal / natural gas0.1075 / 0.0946 / 0.0561 tCO₂/GJStandard factors (IPCC 2006 / MRR)
Published CBAM certificate price, 2026-Q2€75.28Commission publication for the quarter you enter in steps 3 and 11
The two formulas. 1) SEE on default values = official default × (1 + mark-up). A supplier's actual figure carries no mark-up. 2) Certificates = tonnes × SEE − tonnes × benchmark × free-allocation share × CSCF, and the cost = certificates × the quarter's price. Steel and aluminium count direct emissions only (Annex II goods); cement counts direct + indirect.

The 15 steps

1

Reference data is the official annex

Administrator

Menu → Administrator → Official default values · /admin/default-values

Why: every default figure later in this tutorial comes from this table, not from a guess.

  1. Open the page and read the row count at the top.
  2. In CN code (prefix) type 720712 and in Country (e.g. IN) type CN.
You must see
  • 11,170 rows loaded.
  • A row for 72071210 (China) with SEE 3.169.
2

Company & EORI

Importer

Workflow bar → 1 · Company & EORI · /declarant

Why: the declarant record is printed on every report and checked before filing.

  1. Fill in the company name if the field is empty: Rhein Coil Trading GmbH (test).
  2. EORI: DE904512378650000
  3. Status: Authorised · Member state (NCA): DE · Authorisation number: DE-CBAM-AD-2026-00417
  4. Click Save status.
You must see
  • Authorised — you may import and file.
3

The broker's customs file, on default values

Importer

Workflow bar → 2 · Bring in imports · /customs-import

Why: this is the importer's bill if no supplier sends data. The file deliberately includes a title row, kilograms and a country written as a name, the way real broker exports look.

  1. Upload rhein-coil-q2-2026.xlsx (downloaded above).
  2. Check the preview, then in Reporting period type 2026-Q2.
  3. Click Calculate with the engine.
You must see
  • Preview: 3 of 3 line(s) ready; the aluminium line shows 300 t (the file says 300,000 kg) and origin IN (the file says "India"); the title row is skipped.
  • After calculating: Lines calculated, and these lines:
LineSEE usedCertificatesCost
72071210 · slabs · CN · 1,200 t3.48592,587.2€194,764.42
76011000 · aluminium · IN · 300 t2.057200.8725€15,121.68
25232900 · cement · TR · 2,000 t1.5841,869.3€140,720.90
Obligation4,657.37€350,607.00
Hand calculation
Slabs SEE = 3.169 × 1.10 = 3.4859 embedded = 1,200 × 3.4859 = 4,183.08 t adjustment = 1,200 × 1.364 × 0.975 = 1,595.88 t certificates = 4,183.08 − 1,595.88 = 2,587.20 → × €75.28 = €194,764.42 Aluminium SEE = 1.87 × 1.10 = 2.057 embedded = 300 × 2.057 = 617.10 t ; adjustment = 300 × 1.423 × 0.975 = 416.2275 t certificates = 200.8725 → × €75.28 = €15,121.68 Cement SEE = 1.44 × 1.10 = 1.584 (direct 1.36 + indirect 0.08; cement counts both) embedded = 2,000 × 1.584 = 3,168.00 t ; adjustment = 2,000 × 0.666 × 0.975 = 1,298.70 t certificates = 1,869.30 → × €75.28 = €140,720.90 Total 2,587.2 + 200.8725 + 1,869.3 = 4,657.3725 certificates ; €350,607.00

If the cement line shows 0.979, the install is on default values from before 19 Oct 2026, when Namibia's "NA" rows were misread. Redeploy so the startup repair runs.

4

Ask the steel supplier for real data

Importer

Workflow bar → 3 · Supplier data · /enterprise/suppliers

Why: the 10 % mark-up only applies to defaults. A supplier's verified plant figure is usually lower, and it's better evidence.

  1. Click Invite Supplier.
  2. Supplier (company): Jinhai Special Steel Co. (test)
  3. Email: li.wei@jinhai-steel.example · CN codes: 72071210
  4. Your company name (shown to the supplier): Rhein Coil Trading GmbH (test)
  5. Optional message: Please model your BOF plant for the 2026 slab deliveries (CN 7207 12 10).
  6. Untick the e-mail checkbox (the address is fictional), then click Create invitation.
  7. Copy the invitation link (it contains supplier-portal?token=) and keep it in a note: it is the supplier's key.
You must see
  • The invitation link is shown. The supplier doesn't need an account.
5

Supplier: model the BOF steel plant

Supplier

Open the supplier link from step 4 (same browser is fine)

  1. Check the heading Jinhai Special Steel Co. (test). In Country where the plant is located choose China (CN).
  2. Click Model my plant for CN 72071210 → pick Iron & steel → Crude steel — Basic oxygen steelmaking.
  3. Click the to-do "no production quantity" and type 800000 (tonnes of steel a year).
  4. Click ⤓ Fill from data and paste into Your figures:
    Hot metal, 720000
    Steel scrap, 130000
    Fuel (natural gas / coke), 400000, 0.0561
    Grid electricity, 96000, 0.605
    Crude steel, 800000
  5. Click Match to plant →, then Fill 5 flows, then Save.
You must see
  • Matched 5 of 5, then the plant saved. The good keeps the plant's own CN code 72071210.
  • Hot metal has no figure yet; it comes from the ironworks in steps 6–8.
6

Supplier asks its own supplier for the hot-metal figure

Supplier

Open the supplier link again (portal home)

  1. You see Plant model — draft, not submitted. Click Ask your supplier for this figure (next to hot metal).
  2. Company: Jinhai Ironworks Co. (test) · Email: energy@jinhai-iron.example · Language: English
  3. Click Send request and copy the new link from the read-only field (the ironworks' key).
You must see
  • A second link, tied to the hot-metal input of the steel plant. When the ironworks answers, its figure is written in by the engine. Nobody types it.
7

Sub-supplier: model the blast furnace and submit

Sub-supplier

Open the ironworks link from step 6, not the steel supplier's link from step 4. The heading must read Jinhai Ironworks Co. (test) and the button Model my plant for CN 7201.

  1. Country where the plant is located: China (CN) → Model my plant for CN 7201… → Iron & steel → Pig iron — Blast furnace.
  2. To-do "no production quantity": type 720000.
  3. ⤓ Fill from data → paste:
    Sintered ore / pellets, 1150000
    Coke, 7106400, 0.1075
    Pulverised coal (PCI), 3024000, 0.0946
    Fluxes (limestone / dolomite), 90000
    Grid electricity, 50000, 0.605
    Pig iron / hot metal, 720000
  4. Match to plant → → Fill 6 flows. In Precursor origin country type CN (the sinter is made in China).
  5. Click Save, then Submit to my customer. (While saving, the button reads Saving…; it submits right after.)
You must see
  • Submitted; the message quotes the plant's SEE 1.7778 tCO₂e/t (direct, the chargeable figure for iron).
Hand calculation
Coke 7,106,400 GJ × 0.1075 = 763,938.0 t CO₂ PCI 3,024,000 GJ × 0.0946 = 286,070.4 t CO₂ Sinter 1,150,000 t × 0.20 (China default, direct) = 230,000.0 t CO₂ Direct total = 1,280,008.4 t ÷ 720,000 t hot metal = 1.7777894 → 1.7778 tCO₂e/t (Indirect is reported, not chargeable for iron & steel: grid 50,000 MWh × 0.605 = 30,250 t + sinter 1,150,000 × 0.06 = 69,000 t = 99,250 t)

If you see a much higher SEE, check the precursor origin country: if it's left empty, the regulation applies the highest default value (Annex IV).

8

Supplier: plant layout, evidence, submit

Supplier

Open the supplier link → open the plant model

  1. On the portal home, the hot-metal input now shows From your supplier (linked). Open the plant model.
  2. Click ▦ Plant layout. If ✨ Starter layout is offered, click it.
  3. Click the Basic oxygen steelmaking card → Nameplate capacity: 320 → Save (you see ✓ Saved).
  4. Open Evidence → document type Inspection report → choose jinhai-verification-statement-2026.pdf → Upload evidence.
  5. Open History, then go back with ⚙ Process model and click Submit to my customer (it saves anything not yet saved first).
You must see
  • The PDF listed on the converter; History says Tamper-evident log intact.
  • Submitted; the message quotes the steel plant's SEE 1.6281 tCO₂e/t (vs 3.4859 on defaults) and the split Embedded emissions: direct 1,302,448.4 tCO₂e · indirect 157,330 tCO₂e (the same direct / indirect as the hand calculation below).
Hand calculation
Natural gas 400,000 GJ × 0.0561 = 22,440.0 t CO₂ (direct) Hot metal 720,000 t × 1.7777894 (linked) = 1,280,008.4 t (direct) Direct = 1,302,448.4 t ÷ 800,000 t steel = 1.6280605 → 1.6281 tCO₂e/t Indirect (reported only): grid 96,000 × 0.605 = 58,080 t + hot metal 99,250 t = 157,330 t Total embedded = 1,302,448.4 + 157,330 = 1,459,778.4 t
9

Review & verify both plants

Importer

Back in the app as the importer → Workflow bar → 4 · Review & verify · /verification

  1. Click Jinhai Special Steel. Check the figures, then open Outcome → Verify.
  2. Remarks: Plant model reproduces the monitoring report; hot metal linked to Jinhai Ironworks. → Submit Verification.
  3. Repeat for Jinhai Ironworks with remarks Blast-furnace model checked against the fuel and sinter records.
You must see
  • Jinhai Special Steel at 1.628 tCO2/t, and the SEE breakdown (tCO2e/t): Direct 1.628 · Indirect 0.197 · Precursors 1.724 · Total 1.825.
  • Outcome recorded: verified, twice.
Hand calculation (per tonne of steel, 800,000 t)
Direct (22,440 + 1,280,008.4) ÷ 800,000 = 1.62806 → 1.628 ← the chargeable figure for steel Indirect (58,080 + 99,250) ÷ 800,000 = 0.19666 → 0.197 (reported only) Precursors (1,280,008.4 + 99,250) ÷ 800,000 = 1.72407 → 1.724 (the hot metal, direct + indirect) Total 1,459,778.4 ÷ 800,000 = 1.82472 → 1.825
10

Give an external verifier read-only access

Verifier

Importer: Workflow bar → 4 · Review & verify → Verifiers · /enterprise/verifiers

  1. Click Invite verifier. Email: your own sign-in email (or a colleague's). Organisation: TÜV Verification (test). Client: Rhein Coil Trading GmbH (test) → Create invitation.
  2. The box Invitation created shows the one-time link (…/auditor/accept?token=…) with a copy button — it is also e-mailed when the e-mail box was ticked. Open that link signed in with that email (signed out, you are asked to sign in first and then brought back). It confirms on its own: Access confirmed → Open the auditor workspace. Choose the role Verifier in the workflow bar. Invited a colleague? They sign in with their own address — their account stays separate and only sees what you share.
  3. Repeating the tutorial? If the list already shows that email as Active, no link is needed — go straight to /auditor. If it shows Invited (link lost), click New link on that row; the old link stops working. "Create invitation" for the same email answers with exactly this advice.
  4. /auditor → click Rhein Coil Trading GmbH → Open Jinhai Special Steel… → in Submission review click Bundle.
  5. Click Open the locked plant, then the converter card → Evidence.
You must see
  • A ZIP downloads; it contains reproducibility-check.json (today's engine re-run on the frozen plant) and layout/change-history.csv.
  • Locked for audit — read-only. with "frozen on …"; the inspection report is listed and there is no upload button.

Afterwards, switch the workflow bar back to Importer.

11

The same customs file, now with the supplier's figure

Importer

/customs-import

  1. Upload the same Excel file again.
  2. In the supplier data panel, for CN 72071210 from CN, choose Jinhai Special Steel … verified.
  3. Reporting period: 2026-Q2 → Calculate with the engine.
You must see
  • The slab line is marked Actual (supplier / verified) with SEE 1.62806 and 357.792 certificates (€26,934.58). Aluminium and cement are unchanged.
  • Obligation: 2,427.96 certificates · €182,777.16 (instead of €350,607.00: −47.9 %).
Hand calculation
Slabs (actual, no mark-up) embedded = 1,200 × 1.62806 = 1,953.672 t certificates = 1,953.672 − 1,595.88 = 357.792 → × €75.28 = €26,934.58 Total certificates = 357.792 + 200.8725 + 1,869.30 = 2,427.9645 Total cost = 26,934.58 + 15,121.68 + 140,720.90 = €182,777.16 Saving vs step 3 = €350,607.00 − €182,777.16 = €167,829.84 (47.9 %)
12

Declare: evidence, pre-filing check, approval, certificates, file

Importer

Workflow bar → 5 · Declare & certificates · /certificates

  1. Year: 2026. In the calculation lines, tick only the run from step 11: embedded 5,738.77 t. Leave the step-3 run (7,968.18 t) unticked; ticking both would be flagged as a duplicate.
  2. In the Pre-filing check, on Supplier value without a document attach jinhai-verification-statement-2026.pdf.
  3. For every amber item click Acknowledge, type Reviewed with the verification statement of Jinhai Special Steel (TÜV, 2026). and click Accept with this reason.
  4. When it reads Ready to file, tick I have reviewed the figures and click Approve for filing.
  5. Click Buy 2,428 certificates. The published price fills in; click Record purchase, then Check the holding.
  6. EU reference: CBAM-DE-2026-TEST-0001 → File declaration → confirm.
You must see
  • Certificates to surrender 2,427.9645; cost of the certificates €182,777.16; full exposure (planning only) €432,014.76.
  • attached and fingerprinted (SHA-256) for the PDF; Approved by your name.
  • Purchase of 2,428 certificates recorded for 2026. · Holding requirement met.
  • Filed · CBAM-DE-2026-TEST-0001, locked.
Hand calculation
Certificates = the three engine lines of step 11 = 2,427.9645 Cost = the lines' own costs at their quarter's price (2026-Q2, €75.28) = €182,777.16 Full exposure (100 % basis, no free allocation, planning only): slabs 1,953.672 × €75.28 = €147,072.43 ; aluminium 617.10 × €75.28 = €46,455.29 cement 3,168.00 × €75.28 = €238,487.04 ; total = €432,014.76 Buy N = ⌈2,427.9645 − 0 held⌉ = 2,428 (the purchase is priced at the published price shown)

If you need to correct the year later, start an amendment on the same page: the original stays archived (hash-chained) and the change is recorded as version 2.

13

The Watchdog keeps checking after filing

Importer

Menu → Watchdog · /watchdog

  1. Click Check now.
You must see
  • Checked, and no "Document and figure disagree": the statement's 1.628 matches the declared 1.62806 within tolerance.
14

Ask about CBAM

Supplier view

Workflow bar: choose Supplier → /twin → Ask about CBAM (bottom left)

  1. Ask: How can I build my steel plant by using the Balance Twin? → Send.
You must see
  • The answer starts with Build your iron & steel plant in the Balance Twin — Step by step and links to the Help topic. It states no figure that isn't in the Help centre.

Switch the workflow bar back to Importer.

15

CFO: the cost to 2034

Importer · Finance

Workflow bar → 6 · Plan costs · /forecasting

The year's imports = the Q2 file × 4.

  1. Click Import my plants. Keep only the line with CN 72071210 (remove the others with Remove line); it comes in with SEE 1.628… and origin CN. Set tonnes to 4800.
  2. Add line: Unwrought aluminium · 76011000 · IN · 1200
  3. Add line: Portland cement · 25232900 · TR · 8000
  4. Open Levers & risks, Price scenarios and Budget; download the CSV.
You must see
  • 9,711.86 certificates for 2026, and the certificates per year below. Each year's euro cost = that year's certificates × the price the forecast shows for that year (prices are scenarios; certificates are regulation).
  • The CSV header starts year,price_eur,product,cn_code,origin,tonnes,see_used,see_source.
YearFree shareMark-upSlabsAluminiumCementCertificates
202697.5 %10 %1,431.168803.497,477.29,711.858
202795 %20 %1,594.8481,070.588,762.411,427.828
202890 %30 %1,922.2081,380.3610,180.813,483.368
202977.5 %30 %2,740.6081,593.8110,846.815,181.218
203051.5 %30 %4,442.882,037.78612,232.0818,712.746
203139 %30 %5,261.282,251.23612,898.0820,410.596
203226.5 %30 %6,079.682,464.68613,564.0822,108.446
203314 %30 %6,898.082,678.13614,230.0823,806.296
20340 %30 %7,814.6882,917.214,976.025,707.888
Hand calculation (method, worked for 2027)
certificates(y) = Σ tonnes × SEE(y) − tonnes × benchmark × free share(y) (CSCF 1.0) SEE(y): slabs = the verified 1.62806 every year (actual data: no mark-up); aluminium = 1.87 × 1.10 / 1.20 / 1.30 ; cement = 1.44 × 1.10 / 1.20 / 1.30 (2026 / 2027 / 2028+) 2027: slabs 4,800 × 1.62806 = 7,814.688 − 4,800 × 1.364 × 0.95 = 6,219.84 → 1,594.848 aluminium 1,200 × 2.244 = 2,692.80 − 1,200 × 1.423 × 0.95 = 1,622.22 → 1,070.58 cement 8,000 × 1.728 = 13,824.00 − 8,000 × 0.666 × 0.95 = 5,061.60 → 8,762.40 total 11,427.828 2026 check: 4 × 2,427.9645 (step 11) = 9,711.858 ✓

Answer key at a glance

Step 3 · on default values
€350,607.00
4,657.3725 certificates
Step 11–12 · with the verified supplier figure
€182,777.16
2,427.9645 certificates · −47.9 %
Step 15 · certificates 2026 → 2034
9,711.86 → 25,707.89
free allocation phases out; default mark-ups reach 30 %
PlantDirect (chargeable)Indirect (reported)SEE shown
Jinhai Ironworks · blast furnace · 720,000 t hot metal1,280,008.4 t99,250 t1.7778
Jinhai Special Steel · BOF · 800,000 t slabs1,302,448.4 t157,330 t1.6281 (1.628 in review)

Try to break it (expected refusals)

A trustworthy compliance tool refuses to guess. Each of these must be refused or flagged, never silently calculated.

Try thisWhereExpected
Change a country in the Excel file to Atlantis and upload itCustoms importThat line is reported as a row error (unknown country). No default is picked for it.
Enter a CN code that is not a CBAM good, e.g. 84713000Calculator or forecast lineRefused: not a CBAM good. No figure is produced.
Type a production quantity in kg (e.g. 800000000) for the BOFSupplier plant modelA plausibility warning about the unit / SEE range. The figure itself is never altered.
Try to file 2026 before acknowledging the amber findingsCertificates → pre-filing checkFiling stays blocked until every finding is cleared or acknowledged with a reason.
Record a surrender larger than the certificates you holdCertificates → Record purchase or surrenderRefused with a clear message.
Open the verifier's locked plant and look for an upload or edit controlAuditor → locked plantNone: read-only, and every view is logged for the client.

Results log

Type what the app showed, choose Pass / Fail, then export or print. Kept in this browser only.

#CheckpointExpectedObservedResult

If something differs

  • The last displayed digit differs: rounding. The engine keeps full precision; screens round SEE to 4 decimals and costs to cents.
  • A whole line differs: check the reporting period (2026-Q2, price €75.28), the tonnes and the origin. In step 12, make sure only the step-11 run is ticked.
  • "Save the plant model first" on Submit: save first; Submit waits for a save already in progress.
  • "The step … has no production quantity" on Submit: open the to-do "no production quantity" on that step and type the tonnes (800000 for the steel plant, 720000 for the ironworks). Submit saves what is on screen, so there is no separate Save needed.
  • "This plant model is for CN 72071210, but its route makes CN 72011000" on Submit: the blast furnace was modelled on the steel supplier's link. On that plant, click Change template → Crude steel — Basic oxygen steelmaking and redo step 5. Then model the blast furnace on the ironworks link (step 7). The route list marks in green the routes that make the plant's own CN.
  • "Status: draft" above the plant: normal until you click Submit to my customer. After that it reads Status: pending (waiting for the importer's review in step 9).
  • Hot metal still shows no figure in step 8: the ironworks must have submitted in step 7. Its link is the one from step 6.
  • Report a real discrepancy with the step number, the expected and observed figures, and the reference shown in any error message. Every error message quotes a reference the support team can find in the logs.