Country compliance matrix
This page is generated. Every cell below is read directly from the JSON data files the application itself loads at boot — nobody hand-typed these facts, and nobody can let them drift: rerun
npm run build(ornpm run start) indocumentation/and this page is rebuilt from whatever the data files say today. See Adding a country to add a row or a column.
5 countries are known to at least one mechanism. A value means the fact is declared and sourced (or explicitly marked unverified — see the country page); a — means this exact mechanism has no file for this country at all: an honest absence, never a guessed default.
| Country | Policy | B2G route | Correction routes | Local cancel | Taxes | Identifiers | Channel mandate |
|---|---|---|---|---|---|---|---|
| Germany (DE) | ✓ | zre-ozgre / XRechnung | 8/11 | yes | VAT 19% / 7% / 0% (legal) | 2 — VAT, LEGAL_ID | none — the law imposes no channel |
| France (FR) | ✓ | Chorus Pro / Factur-X | 10/11 | yes | VAT 20% / 10% / 5.5% / 2.1% (legal) | 2 — LEGAL_ID, VAT | PDP: mandated (2026-09-01) |
| Italy (IT) | ✓ | SdI (clearance model) / FatturaPA | 8/11 | restricted | VAT 22% / 10% / 5% / 4% / 0% (legal) | 5 — VAT, LEGAL_ID, IT_PA_CODE, IT_SDI, PEC | SdI: mandated (2019-01-01) |
| Poland (PL) | ✓ | KSeF (clearance model) / FA(3) | 7/11 | no | VAT 23% / 8% / 5% / 0% (legal) | 1 — LEGAL_ID | KSeF: suggested |
| Portugal (PT) | ✓ | fe-ap / UBL | 4/11 | no | VAT 23% / 13% / 6% (legal) | 2 — LEGAL_ID, VAT | none — the law imposes no channel |
What each column reads
| Column | Source directory | Meaning |
|---|---|---|
| Policy | backend/src/modules/documents/country-policy/data | Whether this country has a document-action policy file at all (which document ACTIONS — send, save-draft, … — are allowed, and under what restriction). |
| B2G route | backend/src/modules/documents/b2g-routing/data | The transport + format used when this country is the government client's own country, regardless of the seller's own country. See the glossary for B2G, Peppol, CIUS and EAS. |
| Correction routes | backend/src/modules/documents/correction-routes/data | How many of the eleven canonical correction routes (credit note, corrective invoice, cancel-and-replace, …) are sourced to a real legal citation for this country, out of 11. |
| Local cancel | backend/src/modules/documents/correction-routes/cancel-policy.ts | Whether cancelling an already-issued invoice is actually implementable in this app for this country — yes (unrestricted), restricted (only from certain statuses), or no (the legal route may exist, but no channel/mechanism in this repo realizes it — see the country page). |
| Taxes | backend/src/modules/documents/tax/tax-systems/data + vat-rates/data | Every VAT/GST rate this country's own catalog declares (when it has one), plus the tax kind the cross-border tax engine assumes. A country with no rate catalog still shows the one rate tax-systems/ knows. |
| Identifiers | backend/src/modules/documents/country-identifiers/data | How many national identifier schemes (SIRET, EIN, VAT number, …) this country requires on a party, and which ones. |
| Channel mandate | backend/src/modules/documents/transports/channel-policy/data | What this country says about a transmission channel for a SELLER established there: merely the usual one (suggested) or legally required from a given date (mandated). This is a delivery-channel fact only — see the glossary entry for e-reporting for the separate (and not yet covered by this page) declarative obligation some countries add. |
Glossary
Terms used across this page and the country pages below. The first time one of these terms appears in the flowing text of a page, it also carries this same definition as a hover tooltip.
- B2G — Business-to-Government — invoicing where the buyer is a public administration. Many countries mandate a specific channel and format for it.
- CIUS — Core Invoice Usage Specification — a national or sector profile that narrows the generic Peppol BIS / EN 16931 format with extra local rules.
- clearance model — A transmission model where the tax authority validates (and sometimes signs) an invoice before or as it reaches the buyer — as opposed to a post-audit model, where the authority only checks after the fact.
- Credit note — A document that cancels or reduces a previously issued invoice — one of the eleven correction routes this catalog tracks.
- e-invoicing mandate — A law that doesn't just ALLOW sending invoices electronically (almost every country does) but REQUIRES it, in a specific structured format, through a specific channel, from a specific date — as opposed to simply emailing a PDF, which most countries still permit unless a mandate like this applies.
- e-reporting — A separate obligation — independent of how the invoice is delivered — to declare an invoice's data to the seller's own tax authority, typically in near-real time.
- EAS — Electronic Address Scheme — the code identifying which registry (SIRET, VAT number, …) a Peppol participant id is expressed in.
- franchise — A VAT exemption below a turnover threshold — a small business skips charging VAT at all, in exchange for not deducting it either.
- KSeF — Krajowy System e-Faktur — Poland's national e-invoicing system; an invoice is cleared through it before being considered issued.
- PDP — Plateforme de Dématérialisation Partenaire — a private platform accredited by the French tax authority to transmit e-invoices under the French B2B e-invoicing reform.
- Peppol — Pan-European Public Procurement OnLine — an international network of Access Points that routes e-invoices between businesses and governments without a direct connection between sender and receiver.
- post-audit model — A transmission model where the seller sends the invoice straight to the buyer and the tax authority only checks it later, if it checks at all — as opposed to a clearance model, where the authority validates the invoice before (or as) it reaches the buyer.
- provenance — Where a fact on this page comes from: either "legal" — an exact quote from a law or an official source, dated — or "unverified" — an honest note saying nobody has confirmed this against the actual law yet, and what would settle it. There is no in-between and no guessing.
- Schematron — An XML rule language used to validate an e-invoice's business rules (e.g. EN 16931's own BR-* rules) beyond what an XML schema alone can check.
- schemeID — A short code, attached to an identifier inside an e-invoice's own XML, that says WHICH REGISTRY that identifier belongs to — e.g. Peppol's own code "0204" in front of a German public body's Leitweg-ID means "this number is a German Leitweg-ID", not a VAT number or anything else. The same idea as an EAS, spelled out as an XML attribute rather than a Peppol network concept.
- SdI — Sistema di Interscambio — Italy's national clearance platform for e-invoices.
- VAT — Value Added Tax — a percentage of the price, added on top, that the seller collects from the buyer and hands over to the tax authority. Most of Europe uses it; the exact percentage and the rules for who charges it depend on the country and the kind of sale.
- XAdES — XML Advanced Electronic Signature — a standard way to attach a legally-recognized digital signature to an XML document (like an e-invoice), so the receiver can verify who signed it and that nobody altered it afterward.
Generated from the application's own per-country data files — do not edit by hand. Sources: backend/src/modules/documents/country-policy/data/, backend/src/modules/documents/b2g-routing/data/, backend/src/modules/documents/correction-routes/data/, backend/src/modules/documents/transports/channel-policy/data/, backend/src/modules/documents/tax/tax-systems/data/, backend/src/modules/documents/country-identifiers/data/, backend/src/modules/documents/mentions/data/, backend/src/modules/documents/country-fields/data/, backend/src/modules/documents/content-requirements/data/, backend/src/modules/documents/vat-rates/data/. See Adding a country for how to extend any of these. Regenerate with node documentation/scripts/generate-country-matrix.mjs (also runs automatically before npm run build/npm run start in documentation/).