eco
CBAM Workspace Live
EU-VERORDENINGREGULATION 2023/956 · CBAM

Van document tot EU-aangifte, automatisch. From document to EU filing, automatically.

CBAM Workspace is een multi-tenant platform waarmee importeurs hun kwartaalrapportage bijhouden — van inkomend document tot definitief ingediende CBAM-aangifte bij de EU.

CBAM Workspace is a multi-tenant platform that enables importers to track their quarterly reporting — from incoming document to final submitted CBAM filing with the EU.

verifiedAPI-first architectuurAPI-first architecture
helpHelpcentrum via /helpHelp centre via /help
lockReporting onveranderlijk na lockReporting immutable after lock
10
Modules
Modules
€100
Boete per ton CO₂
Fine per tonne CO₂
Q
Kwartaalrapportage
Quarterly reporting
AI
Gemini Vision PDF
Gemini Vision PDF
StatusLive — cbam.tensig.nl
Gebouwd inBuilt in~4 weken~4 weeks
warning

Risico zonder CBAM Workspace

Risk without CBAM Workspace

Handmatige invoer van emissiefactoren → menselijke foutenManual entry of emission factors → human errors
Kwartaaldeadline gemist → €100 per ton CO₂ boeteQuarterly deadline missed → €100 per tonne CO₂ fine
Geen audit trail → onbewijsbare complianceNo audit trail → unverifiable compliance
Dubbele CN×herkomst-regels → onjuiste berekeningDuplicate CN×origin rules → incorrect calculation
De minimis-drempel niet bijgehouden → verborgen verplichtingDe minimis threshold not tracked → hidden obligation
check_circle

Met CBAM Workspace

With CBAM Workspace

AI leest facturen, CMR's en paklijsten automatisch uitAI automatically reads invoices, CMRs and packing lists
Kwartaalrapportage in één klik gegenereerdQuarterly reporting generated with one click
Onveranderlijke reporting.db na lock — volledige audit trailImmutable reporting.db after lock — complete audit trail
Duplicaatdetectie op CN×herkomst-combinatiesDuplicate detection on CN×origin combinations
De minimis automatisch bewaakt per tenantDe minimis automatically monitored per tenant
BOUWVOLGORDEBUILD ORDER

10 modules, van data tot aangifte

10 modules, from data to filing

Elke module heeft een scherpe verantwoordelijkheid en communiceert via de interne API.

Each module has a clear responsibility and communicates via the internal API.

database
Module 1
Module 1

Database Layer

Database Layer

SQLite workspace.db (werkdata) en reporting.db (onveranderlijk na lock). Strikte scheiding tussen werkstatus en gerapporteerde feiten.

SQLite workspace.db (working data) and reporting.db (immutable after lock). Strict separation between working status and reported facts.

upload_file
Module 2

Ingest

Documenten binnenhalen: factuur, CMR, paklijst, cognossement. AI (Gemini 2.0 Flash Vision) extraheert productregels, gewichten, herkomstlanden en partijen.

Bring in documents: invoice, CMR, packing list, bill of lading. AI (Gemini 2.0 Flash Vision) extracts product lines, weights, origin countries and parties.

tune
Module 3

Masterdata

Master data

Leveranciers, installaties, emissiefactoren en CN-codes per tenant beheren. Basis voor alle berekeningen.

Manage suppliers, installations, emission factors and CN codes per tenant. Basis for all calculations.

price_change
Module 4

ETS Prijs

ETS Price

Automatische ophaling van EU ETS-kwartaalprijs. Gebruikt voor netto-ETS-berekening: max(0, ETS − CO₂-prijs herkomstland).

Automatic retrieval of EU ETS quarterly price. Used for net ETS calculation: max(0, ETS − CO₂ price country of origin).

monitor_weight
Module 5

De Minimis

Automatische bewaking van de 50.000 kg-drempel per tenant. Notificatie bij nadering. Beleid bij overschrijding instelbaar.

Automatic monitoring of the 50,000 kg threshold per tenant. Notification when approaching. Policy on exceeding configurable.

calculate
Module 6

CBAM Engine

Kernberekening: emission_factor × net_ets × (gewicht_kg / 1000). Groepeert per CN×herkomst×installatie. Detecteert duplicaten.

Core calculation: emission_factor × net_ets × (weight_kg / 1000). Groups by CN×origin×installation. Detects duplicates.

summarize
Module 7

Reporting

Kwartaalrapport gegenereerd en gelocked in reporting.db. Na lock: geen UPDATE of DELETE meer mogelijk. Volledige audit trail gewaarborgd.

Quarterly report generated and locked in reporting.db. After lock: no more UPDATE or DELETE possible. Complete audit trail guaranteed.

Onveranderlijk na lockImmutable after lock
file_export
Module 8

Export

XML-generatie voor het EU CBAM Transitional Registry. Groepeert per (CN + herkomstland + installatienaam). Valideert voor indiening.

XML generation for the EU CBAM Transitional Registry. Groups by (CN + origin country + installation name). Validates for submission.

notifications_active
Module 9

Notifications

Realtime notificatiebalk bovenin de app. Direct bijgewerkt na elke actie (verwijderen, samenvoegen, kwartaalafsluiting).

Real-time notification bar at the top of the app. Updated immediately after each action (delete, merge, quarterly closure).

VAN DOCUMENT TOT AANGIFTEFROM DOCUMENT TO FILING

Verwerkingspijplijn

Processing pipeline

1

Data-invoer

Data entry

Directe invoer, Excel-import of document-upload (factuur, CMR, paklijst, cognossement). AI leest en structureert automatisch.

Direct entry, Excel import or document upload (invoice, CMR, packing list, bill of lading). AI reads and structures automatically.

Gemini VisionExcelPDF · CMR
2

Verrijking & classificatie

Enrichment & classification

Productregels gekoppeld aan masterdata: emissiefactor, installatienaam, herkomstland. CN×herkomst-combinaties gecontroleerd op duplicaten.

Product lines linked to master data: emission factor, installation name, country of origin. CN×origin combinations checked for duplicates.

3

CBAM-berekening

CBAM calculation

Per productregel: cbam = emission_factor × max(0, ETS − CO₂_herkomst) × kg/1000. De minimis bewaakt.

Per product line: cbam = emission_factor × max(0, ETS − CO₂_origin) × kg/1000. De minimis monitored.

4

Kwartaalafsluiting & lock

Quarterly closure & lock

Rapport gegenereerd, gecontroleerd en gelocked in reporting.db. Na lock geen wijzigingen meer mogelijk — audit trail gewaarborgd.

Report generated, verified and locked in reporting.db. After lock no changes possible — audit trail guaranteed.

Onveranderlijk na lockImmutable after lock
check

XML-export naar EU CBAM Registry

XML export to EU CBAM Registry

Gevalideerde XML gegenereerd, gegroepeerd per CN + herkomst + installatie. Klaar voor indiening bij de EU Transitional Registry.

Validated XML generated, grouped by CN + origin + installation. Ready for submission to the EU Transitional Registry.

ARCHITECTUURPRINCIPEARCHITECTURE PRINCIPLE

API-first

Elke functie is eerst als API-endpoint gebouwd. De web-UI is een consumer van de API, niet andersom.

Every function is built first as an API endpoint. The web UI is a consumer of the API, not the other way around.

code

REST API

Alle acties — zending aanmaken, kwartaal afsluiten, rapport ophalen — zijn beschikbaar als REST-endpoint. Integratie met ERP of WMS zonder schermkoppeling.

All actions — create shipment, close quarter, retrieve report — are available as REST endpoints. Integration with ERP or WMS without screen coupling.

bolt

HTMX UI

De web-UI stuurt HTMX-requests naar dezelfde API-endpoints. Geen dubbele logica — de API is leidend, de UI is een consumer.

The web UI sends HTMX requests to the same API endpoints. No duplicate logic — the API is authoritative, the UI is a consumer.

help

Helpcentrum (/help)

Help centre (/help)

Ingebouwd helpcentrum beschikbaar via /help. Per pagina contextuele uitleg zonder externe documentatiesite.

Built-in help centre available via /help. Per page contextual explanations without an external documentation site.

TECHNISCHE STACKTECHNICAL STACK

Architectuur

Architecture

storage
terminal

Flask · Python · Docker

Flask · Python · Docker

Multi-tenant Flask-applicatie. Alle tenants in één instantie, gescheiden via row-level isolation. Docker op VM, auto-deploy via GitHub webhook.

Multi-tenant Flask application. All tenants in one instance, separated via row-level isolation. Docker on VM, auto-deploy via GitHub webhook.

Flask + Jinja2 HTMX Tailwind CSS SQLite Gemini 2.0 Flash Vision Docker Compose GitHub Webhook
hub
account_tree

Reconciliation Engine

Reconciliation Engine

Aparte Node.js/TypeScript Fastify service voor kwartaalafsluiting en XML-export. Loopt naast de Flask Workspace.

Separate Node.js/TypeScript Fastify service for quarterly closure and XML export. Runs alongside the Flask Workspace.

Node.js 20+TypeScriptFastifyxmlbuilder2
group

Multi-tenant

Multi-tenant

Elke klant heeft een eigen tenant met eigen masterdata, zendings- en rapportagehistorie. Superadmin kan wisselen tussen tenants.

Each customer has their own tenant with their own master data, shipment and reporting history. Superadmin can switch between tenants.

CBAM Workspacecbam.tensig.nl
AdminAdmincbamadmin.tensig.nl
HelpcentrumHelp centrecbam.tensig.nl/help
eco

Klaar voor CBAM-rapportage?

Ready for CBAM reporting?

Vraag een demo aan of open de applicatie direct. Het helpcentrum is beschikbaar via /help zodra je bent ingelogd.

Request a demo or open the application directly. The help centre is available via /help once you are logged in.