CBAM Compliance· tutorial 2 · full scaleTutorial 1Open the app →
Hands-on validation · 3 suppliers · 4 sub-suppliers · 90–120 minutes

Nordwind Bau & Metall: one quarter, seven plants, every figure by hand

A Dutch importer brings in cement from Egypt, aluminium plates from the UAE, hot-rolled coil from India and screws from China. Three suppliers model their plants and ask their own suppliers — one chain is three tiers deep — a wrong figure is corrected and the correction travels up the chain, and the quarter is declared. Every expected figure is calculated by hand below from the official EU tables.

Importer3 suppliers4 sub-suppliersVerifierFinanceFictional companies only
On default values€1,202,377.5814,606.14 certificates
With verified supplier data€88,645.801,076.84 certificates · −92.6 %
Plants modelled73 countries · 3 sectors · up to 3 tiers

The hand calculation is a separate program (scripts/tutorials/nordwind_handcalc.py) that reads only the official tables; the automated test e2e/tests/nordwind.spec.ts runs these exact steps on a fresh database and proves the engine equals it.

Before you start

1. A fresh account

Sign up with a work email never used in the app, so every figure below is exact (where new accounts need the administrator's approval, you get an e-mail once it is approved). Step 11 files 2026 — run the tutorial once per account (a filed year changes only by amendment). If you already ran tutorial 1 in this account, use a new one.

The suppliers and sub-suppliers work through secure links — open each in a private window or another browser to see exactly what they see.

The supply chains

Nordwind's supply chains: three suppliers, four sub-suppliers, one default-value import Tier 3Tier 2 (sub-supplier)Tier 1 (supplier)Importer (NL) Sinai Clinker Worksclinker · EG · SEE 0.8815 Delta Cementcement · EG · SEE 0.6586 Emirates Smelterunwrought Al · AE · SEE 1.6650 Gulf Rolling Millplates · AE · SEE 1.8888 Odisha DRIDRI · IN · SEE 0.5890 Konkan Melt ShopEAF steel · IN · SEE 0.5228 Konkan Strip MillHR coil · IN · SEE 0.6278 Yangtze Fastenersscrews · CN · no answer → default Nordwind Bau & Metalldeclares 2026-Q3
Arrows = the figure travels by link: each producer's engine figure is written into its customer's precursor — nobody retypes it.
Company (fictional)RolePlantProductionSEE (chargeable)
Nordwind Bau & Metall B.V., NLImporter———
Delta Cement Co. (test)SupplierCement mill, EG1,250,000 t0.6586 (direct + indirect)
Sinai Clinker Works (test)Sub-supplierClinker kiln, EG1,000,000 t0.8815 (direct + indirect)
Gulf Rolling Mill (test)SupplierRolling mill, AE300,000 t1.8888 (direct)
Emirates Smelter (test)Sub-supplierPrimary smelter, AE500,000 t1.6650 (direct)
Konkan Strip Mill (test)SupplierHot strip mill, IN1,000,000 t0.6278 (direct)
Konkan Melt Shop (test)Sub-supplierEAF melt shop, IN1,100,000 t0.5228 (direct)
Odisha DRI Ltd. (test)Sub-sub-supplierDRI plant, IN1,000,000 t0.5890 (direct)
Yangtze Fasteners (test), CNSupplier — does not answer——official default

Official data used in the hand calculation

ValueFigureSource
Default SEE, grey Portland cement 2523 29 00, Egypt1.29 (1.24 + 0.05)Reg (EU) 2026/1740
Default SEE, aluminium plates 7606, UAE2.66 · route (K)Reg (EU) 2026/1740
Default SEE, flat-rolled 7208, India4.28 · route (C)Reg (EU) 2026/1740
Default SEE, screws 7318 15, China6.375 · route (C)Reg (EU) 2026/1740
Default-value mark-up 2026 / 2027 / 2028+10 / 20 / 30 %Reg (EU) 2025/2621
CBAM benchmark (Column B): cement 252329000.666Reg (EU) 2025/2620
Benchmark plates 76061130: (K) primary · (L) secondary1.485 · 0.148Reg (EU) 2025/2620
Benchmark coil 72085120: (C) BF/BOF · (D) DRI/EAF · (E) scrap/EAF1.37 · 0.481 · 0.072Reg (EU) 2025/2620
Benchmark screws 73181542: (C)1.364Reg (EU) 2025/2620
Free-allocation share 2026 → 203497.5 · 95 · 90 · 77.5 · 51.5 · 39 · 26.5 · 14 · 0 %Reg 2023/956 Art. 31 as amended
Grid factors Egypt · UAE · India0.387 · 0.451 · 0.726 t/MWhReg (EU) 2025/2621 Annex II
Emission factors typed: natural gas · coal0.0561 · 0.0946 tCO₂/GJIPCC 2006 / MRR standard factors
CBAM certificate price, 2026-Q3€82.32Commission, published 5 Oct 2026

Certificates = tonnes × SEE − tonnes × benchmark × free share × CSCF (1.0); cost = certificates × the quarter's price. Cement counts direct + indirect; aluminium and iron & steel count direct only (Annex II). A supplier's figure carries no mark-up and is adjusted on its plant's own route.

The 13 steps

1

Company & EORI

Importer

Workflow bar → 1 · Company & EORI · /declarant

  1. Company name (if empty): Nordwind Bau & Metall B.V. (test)
  2. EORI: NL812345678 · Status: Authorised · Member state (NCA): NL · Authorisation number: NL-CBAM-AD-2026-01142
  3. Click Save status.
You must see
  • Authorised — you may import and file.
2

The broker's Q3 file, on official defaults

Importer

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

  1. Upload nordwind-q3-2026.xlsx. It has a cover sheet, a title row, masses in kilograms and countries written as names — the app finds the data sheet and converts them.
  2. Reporting period: 2026-Q3 → Calculate with the engine.
You must see
  • Preview: 4 of 4 line(s) ready — aluminium 900 t (file: 900,000 kg), origin AE (file: “United Arab Emirates”).
  • LineSEECertificatesCost
    25232900 · Grey Portland cement · EG1.41904,617.9€380,145.53
    76061130 · Aluminium plates · AE2.92601,330.3125€109,511.33
    72085120 · Hot-rolled coil · IN4.70808,430.625€694,009.05
    73181542 · Steel screws · CN7.0125227.304€18,711.67
    Obligation14,606.14€1,202,377.58
Hand calculation
25232900 Grey Portland cement · EG · 6,000 t: SEE = 1.29 × 1.10 = 1.4190 (default 25232900 EG, route —) embedded = 6,000 × 1.419 = 8,514 t adjustment = 6,000 × 0.666 × 0.975 = 3,896.1 t certificates = 4,617.9 × €82.32 = €380,145.53 76061130 Aluminium plates · AE · 900 t: SEE = 2.66 × 1.10 = 2.9260 (default 7606 AE, route (K)) embedded = 900 × 2.926 = 2,633.4 t adjustment = 900 × 1.485 × 0.975 = 1,303.0875 t certificates = 1,330.3125 × €82.32 = €109,511.33 72085120 Hot-rolled coil · IN · 2,500 t: SEE = 4.28 × 1.10 = 4.7080 (default 7208 IN, route (C)) embedded = 2,500 × 4.708 = 11,770 t adjustment = 2,500 × 1.37 × 0.975 = 3,339.375 t certificates = 8,430.625 × €82.32 = €694,009.05 73181542 Steel screws · CN · 40 t: SEE = 6.375 × 1.10 = 7.0125 (default 731815 CN, route (C)) embedded = 40 × 7.0125 = 280.5 t adjustment = 40 × 1.364 × 0.975 = 53.196 t certificates = 227.304 × €82.32 = €18,711.67 Total 14,606.1415 certificates · €1,202,377.58
3

Invite three suppliers

Importer

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

  1. Click Invite Supplier three times, untick the e-mail box each time (the addresses are fictional) and copy each link into a note:
  2. Supplier (company)EmailCN codes
    Delta Cement Co. (test)emissions@delta-cement.example25232900
    Gulf Rolling Mill (test)cbam@gulf-rolling.example76061130
    Konkan Strip Mill (test)energy@konkan-strip.example72085120
  3. Your company name (shown to the supplier): Nordwind Bau & Metall B.V. (test). The screws supplier is not invited — it will not answer.
You must see
  • Three links containing supplier-portal?token=. Each supplier sees only its own request; no accounts are needed.
4

Cement: the mill and its clinker kiln

SupplierSub-supplier

Delta Cement's link, then the kiln's link

  1. Delta Cement's link: Country where the plant is located = Egypt (EG) → Model my plant for CN 25232900 → Cement → Cement (grinding).
  2. To-do “no production quantity”: 1250000 → ⤓ Fill from data → paste, then Match to plant → → Fill 5 flows → Save:
    Cement clinker, 900000
    Gypsum / SCMs, 350000
    Drying fuel, 120000, 0.0561
    Grid electricity, 60000, 0.387
    Cement, 1250000
  3. Back on the portal home: Ask your supplier for this figure (clinker) → Company Sinai Clinker Works (test), Email kiln@sinai-clinker.example, English → Send request; copy the new link.
  4. The kiln's link: Egypt (EG) → Model my plant… → Cement → Cement clinker → production 1000000 → Fill from data (5 flows) → Save → Submit to my customer:
    Limestone / raw meal, 1550000
    Calcination CO₂ (raw meal), 525000
    Kiln fuel (fossil), 3400000, 0.0946
    Grid electricity, 90000, 0.387
    Cement clinker, 1000000
  5. Delta Cement's plant page → Submit to my customer (the clinker figure is now linked in).
You must see
  • Kiln submitted: SEE 0.8815 tCO₂e/t.
  • Delta Cement submitted: SEE 0.6586 tCO₂e/t — the clinker line reads From your supplier (linked).
Hand calculation
Kiln (clinker, 1,000,000 t): direct = calcination 525,000 + coal 3,400,000 GJ × 0.0946 (= 321,640) = 846,640 t indirect = 90,000 MWh × 0.387 (Annex II, Egypt) = 34,830 t SEE = 0.84664 direct + 0.03483 indirect = 0.8815 tCO₂e/t Mill (cement, 1,250,000 t), clinker 900,000 t LINKED: direct = gas 120,000 GJ × 0.0561 (= 6,732) + 900,000 × 0.84664 (= 761,976) = 768,708 t indirect = 60,000 MWh × 0.387 (= 23,220) + 900,000 × 0.03483 (= 31,347) = 54,567 t SEE = (768,708 + 54,567) ÷ 1,250,000 = 0.65862 → 0.6586 (cement counts direct AND indirect)

Grid factor 0.387 = the official Annex II value for Egypt. A mass-balance hint on the kiln (raw meal in ≫ clinker out) is expected: calcination releases CO₂.

5

Aluminium: the rolling mill and its smelter — with a slip

SupplierSub-supplier

Gulf Rolling Mill's link, then the smelter's link

  1. Gulf Rolling Mill: United Arab Emirates (AE) → Aluminium → Aluminium products → production 300000 → Fill from data (4 flows) → Save:
    Unwrought aluminium, 310000
    Process fuel, 900000, 0.0561
    Grid electricity, 240000, 0.451
    Aluminium products, 300000
  2. Ask your supplier (unwrought aluminium): Emirates Smelter (test) · potlines@emirates-smelter.example.
  3. Smelter's link: AE → Aluminium → Unwrought aluminium — Primary (electrolytic) → production 500000 → Fill from data (6 flows) → Save → Submit. The PFC is deliberately typed 10× too low (5,250):
    Alumina, 965000
    Carbon anodes, 215000
    Anode consumption CO₂, 780000
    PFC (anode-effect) emissions, 5250
    Electricity, 7400000, 0.451
    Unwrought aluminium, 500000
  4. Gulf Rolling Mill → Submit to my customer.
You must see
  • Smelter: SEE 1.5705 · Gulf Rolling Mill: SEE 1.7912 (aluminium counts direct emissions only).
Hand calculation
Smelter (500,000 t), first submission — PFC typed as 5,250: direct = anode CO₂ 780,000 + PFC 5,250 = 785,250 t → SEE 1.5705 (direct only, Annex II) (indirect 7,400,000 MWh × 0.451 = 3,337,400 t is reported, not chargeable for aluminium) Rolling mill (300,000 t), unwrought 310,000 t LINKED: direct = gas 900,000 GJ × 0.0561 (= 50,490) + 310,000 × 1.5705 (= 486,855) = 537,345 t SEE = 537,345 ÷ 300,000 = 1.7912
6

Steel: three tiers — strip mill ← EAF ← DRI

SupplierSub-suppliers

Konkan Strip Mill → Konkan Melt Shop → Odisha DRI

  1. Konkan Strip Mill: India (IN) → Iron & steel → Iron or steel products → production 1000000 → Fill from data (4 flows) → Save:
    Crude steel (semi-finished), 1040000
    Reheat furnace fuel, 1500000, 0.0561
    Grid electricity, 120000, 0.726
    Iron / steel products, 1000000
  2. Ask your supplier (crude steel): Konkan Melt Shop (test) · meltshop@konkan-steel.example.
  3. Melt shop's link: IN → Crude steel — Electric arc furnace → production 1100000 → Fill from data (5 flows) → Save:
    Steel scrap, 300000
    DRI / HBI, 900000
    Natural gas / oxy-fuel, 800000, 0.0561
    Grid electricity, 550000, 0.726
    Crude steel, 1100000
  4. The melt shop asks its supplier (DRI): Odisha DRI Ltd. (test) · plant@odisha-dri.example.
  5. DRI plant's link: IN → Direct reduced iron (DRI) → production 1000000 → Fill from data (4 flows) → Save → Submit:
    Iron ore pellets, 1450000
    Reductant (natural gas / H₂), 10500000, 0.0561
    Grid electricity, 110000, 0.726
    DRI / HBI, 1000000
  6. Submit the melt shop, then the strip mill (bottom-up: each figure flows into the next).
You must see
  • Odisha DRI 0.5890 → Konkan Melt Shop 0.5228 → Konkan Strip Mill 0.6278 tCO₂e/t.
Hand calculation
DRI plant (1,000,000 t): gas 10,500,000 GJ × 0.0561 = 589,050 t → SEE 0.58905 (direct) grid 110,000 MWh × 0.726 = 79,860 t (indirect, reported) EAF (1,100,000 t), DRI 900,000 t LINKED, scrap 300,000 t: direct = gas 800,000 GJ × 0.0561 (= 44,880) + 900,000 × 0.58905 (= 530,145) = 575,025 t → 0.52275 Strip mill (1,000,000 t), crude steel 1,040,000 t LINKED: direct = gas 1,500,000 GJ × 0.0561 (= 84,150) + 1,040,000 × 0.52275 (= 543,660) = 627,810 t → 0.6278 (iron & steel count direct emissions only)
7

Review — verify five, send the smelter back

Importer

Workflow bar → 4 · Review & verify · /verification

  1. For Sinai Clinker Works, Delta Cement, Odisha DRI, Konkan Melt Shop and Konkan Strip Mill: open → Outcome → Verify → remark → Submit Verification.
  2. Emirates Smelter: Needs Revision with the remark PFC 5,250 tCO2e is 10x below your anode-effect record (52,500). Please correct and resubmit.
You must see
  • Outcome recorded: verified (×5) and Outcome recorded: needs revision.

Gulf Rolling Mill is not verified yet: its figure depends on the smelter's.

8

The smelter corrects — the change travels up

Sub-supplierImporter

Smelter's link, then /verification

  1. Open the smelter's link: the submission shows Your customer asked for a correction with your remark. Open the plant model.
  2. ⤓ Fill from data → paste
    PFC (anode-effect) emissions, 52500
    → Match → Fill 1 flow → Submit to my customer.
  3. Back as the importer: verify Emirates Smelter and Gulf Rolling Mill.
You must see
  • Smelter SEE 1.6650. Gulf Rolling Mill is recomputed by the engine to 1.8888 — nobody retyped it.
Hand calculation
Smelter corrected: PFC 52,500 → direct 832,500 t ÷ 500,000 = 1.6650 Rolling mill (recomputed by the ENGINE through its link — nobody types it): direct = 50,490 + 310,000 × 1.665 (= 516,150) = 566,640 t ÷ 300,000 = 1.8888
9

The external verifier sees all seven plants

Verifier

/enterprise/verifiers → /auditor

  1. Invite verifier: your own sign-in email (or a colleague's) · Organisation Rijn Verification B.V. (test) · Client Nordwind Bau & Metall B.V. (test) → open the accept link → Access confirmed.
  2. /auditor → Nordwind → Open Konkan Strip Mill… → Bundle.
You must see
  • All seven plants listed, read-only.
  • The review dialog shows SEE 0.6278; the ZIP contains reproducibility-check.json.
10

The same file, now with three verified supplier figures

Importer

/customs-import

  1. Upload the same Excel file. In the supplier data panel pick the verified figure for CN 25232900 from EG, 76061130 from AE and 72085120 from IN.
  2. Reporting period 2026-Q3 → Calculate with the engine.
You must see
  • Three lines marked Actual (supplier / verified); the screws stay on the default.
  • LineSEEBenchmarkCertificatesCost
    25232900 · EG0.658620.666 55.62€4,578.64
    76061130 · AE1.88881.485 (K)396.8325€32,667.25
    72085120 · IN0.627810.481 (D)397.0875€32,688.24
    73181542 · CN7.01251.364 (C)227.304€18,711.67
    Obligation1,076.844€88,645.80
  • €88,645.80 instead of €1,202,377.58 — −92.6 %.
Hand calculation
25232900 Grey Portland cement · EG · 6,000 t: SEE = 0.65862 (verified supplier figure, no mark-up; route —) embedded = 6,000 × 0.65862 = 3,951.72 t adjustment = 6,000 × 0.666 × 0.975 = 3,896.1 t certificates = 55.62 × €82.32 = €4,578.64 76061130 Aluminium plates · AE · 900 t: SEE = 1.8888 (verified supplier figure, no mark-up; route (K)) embedded = 900 × 1.8888 = 1,699.92 t adjustment = 900 × 1.485 × 0.975 = 1,303.0875 t certificates = 396.8325 × €82.32 = €32,667.25 72085120 Hot-rolled coil · IN · 2,500 t: SEE = 0.62781 (verified supplier figure, no mark-up; route (D)) embedded = 2,500 × 0.62781 = 1,569.525 t adjustment = 2,500 × 0.481 × 0.975 = 1,172.4375 t certificates = 397.0875 × €82.32 = €32,688.24 73181542 Steel screws · CN · 40 t: SEE = 6.375 × 1.10 = 7.0125 (default 731815 CN, route (C)) embedded = 40 × 7.0125 = 280.5 t adjustment = 40 × 1.364 × 0.975 = 53.196 t certificates = 227.304 × €82.32 = €18,711.67 Total 1,076.844 certificates · €88,645.80
Why the route matters (and what this tutorial caught). Reg (EU) 2025/2620 gives a different benchmark per production route. Hot-rolled coil: (C) BF/BOF 1.37, (D) DRI/EAF 0.481, (E) scrap/EAF 0.072. Konkan's coil comes from DRI melted in an EAF, so its free-allocation adjustment is 2,500 × 0.481 × 0.975 = 1,172.4375 t and it owes 397.0875 certificates. Adjusting it on the default value's BF/BOF route would give 3,339.375 t and 0 certificates — an obligation understated by ≈ €32,688.24. The app reads the route from the supplier's plant model (and, for a rolling mill, from the plant it buys from), so you see route (D) here.
11

Declare: evidence, check, approve, buy, file

Importer

Workflow bar → 5 · Declare & certificates · /certificates

  1. Year 2026. Tick only the step-10 run (embedded 7,501.66 t), not the step-2 run (23,197.9 t).
  2. In the Pre-filing check, attach each supplier's verification statement to its Supplier value without a document item (Delta Cement, Gulf Rolling, Konkan Strip).
  3. Acknowledge every amber item with Reviewed with the suppliers’ 2026 verification statements (Rijn Verification).
  4. Ready to file → tick I have reviewed the figures → Approve for filing → Buy 1,077 certificates → Record purchase → Check the holding.
  5. EU reference CBAM-NL-2026-NORDWIND-0001 → File declaration.
You must see
  • Certificates to surrender 1,076.844; cost €88,645.80; full exposure (planning) €617,537.06.
  • Filed · CBAM-NL-2026-NORDWIND-0001.
Hand calculation
Buy N = ⌈1,076.844 − 0 held⌉ = 1,077 Exposure (100 % basis, no free allocation) = Σ embedded × €82.32 = 7,501.665 × 82.32 = €617,537.06
12

Watchdog: three documents, three figures

Importer

Menu → Watchdog · /watchdog

  1. Click Check now.
You must see
  • Checked, and no “Document and figure disagree”: the statements say 0.659 / 1.889 / 0.628 against the declared 0.65862 / 1.8888 / 0.62781.
13

CFO: the portfolio to 2034

Importer · Finance

Workflow bar → 6 · Plan costs · /forecasting

  1. Import my plants, keep only the three importing plants (CN 25232900, 76061130, 72085120) — remove the four sub-suppliers' lines.
  2. Tonnes = the quarter × 4: cement 24000, plates 3600, coil 10000; Add line Steel screws · 73181542 · CN · 160.
You must see
  • 4,307.38 certificates for 2026 (= 4 × 1,076.844) and the chart's nine bars, 2034 the tallest.
  • YearFree shareMark-upCementPlatesCoilScrewsCertificates
    202697.5 %10 %222.481,587.331,588.35909.2164,307.376
    202795 %20 %622.081,720.981,708.61,016.6725,068.332
    202890 %30 %1,421.281,988.281,949.11,129.5846,488.244
    202977.5 %30 %3,419.282,656.532,550.351,156.8649,783.024
    203051.5 %30 %7,575.124,046.493,800.951,213.60616,636.166
    203139 %30 %9,573.124,714.744,402.21,240.88619,930.946
    203226.5 %30 %11,571.125,382.995,003.451,268.16623,225.726
    203314 %30 %13,569.126,051.245,604.71,295.44626,520.506
    20340 %30 %15,806.886,799.686,278.11,32630,210.66
Hand calculation
certificates(y) = Σ tonnes × SEE(y) − tonnes × benchmark × free share(y) SEE(y): the three verified figures every year (no mark-up); screws 6.375 × 1.10 / 1.20 / 1.30 Benchmarks on each plant's route: cement 0.666 · plates (K) 1.485 · coil (D) 0.481 · screws (C) 1.364 2034: free share 0 → certificates = embedded = 30,210.66

Results — checked as you type

Type what the app showed. Numbers are compared with the hand calculation at the precision you type (the last digit you type may differ by rounding); text checkpoints you mark yourself. Kept in this browser only.

#CheckpointExpectedObservedResult

If something differs

  • A whole line differs: the period must be 2026-Q3 (€82.32) and only the step-10 run ticked in step 11.
  • “Matched 4 of 5” in Fill from data: you picked another route. Click Change template, pick the route named in the step, paste again.
  • Ask your supplier for this figure is missing: save the plant first — the request is made for a precursor of a saved plant.
  • The coil shows benchmark 1.37 (C) in step 10: the strip mill's crude steel must be linked to Konkan Melt Shop (step 6); a mill with no linked upstream plant keeps the default value's route.
  • Gulf Rolling Mill still shows 1.7912 in step 8: the smelter must submit its correction; the mill is recomputed on that submit.
  • Report a real discrepancy with the step number, the expected and observed figures and the reference quoted in any error message.