Skip to content
Back to skills

Einvoicing Eu Clemensjl

ASecurity

Use when building, sending, receiving or validating structured electronic invoices in Europe — EN 16931, UBL 2.1, UN/CEFACT CII, Peppol BIS Billing, Factur-X/ZUGFeRD, XRechnung, FatturaPA, KSeF, RO e-Factura, myDATA — or when asked whether an invoicing feature satisfies a national e-invoicing mandate. Also use when a PDF is about to be described as an e-invoice, when a product starts invoicing into a second EU country, when a validator or a tax platform rejects an invoice, when a credit note ...

  • 85 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 8, 2026
ai-agentsgoexpressgit

Works with

  • cli

Security analysis

A100/100

Scanned October 8, 2026

npx -y skills add ThomasMoreAI/legal-skills-open --skill einvoicing-eu-clemensjl --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Einvoicing Eu Clemensjl?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Einvoicing Eu Clemensjl
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thomasmoreai-einvoicing-eu-clemensjl/badge)](https://www.skillsdirectory.com/skills/thomasmoreai-einvoicing-eu-clemensjl)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: einvoicing-eu-clemensjl
title: Structured e-invoicing in Europe
description: Use when building, sending, receiving or validating structured electronic invoices in Europe — EN 16931, UBL 2.1, UN/CEFACT CII, Peppol BIS Billing, Factur-X/ZUGFeRD, XRechnung, FatturaPA, KSeF, RO e-Factura, myDATA — or when asked whether an invoicing feature satisfies a national e-invoicing mandate. Also use when a PDF is about to be described as an e-invoice, when a product starts invoicing into a second EU country, when a validator or a tax platform rejects an invoice, when a credit note or cancellation has to be modelled, and before wiring up any invoice transmission channel.
author: clemensjl
author_url: https://github.com/clemensjl/claude-skills/tree/main/skills/einvoicing-eu
license: MIT
version: 0.1.0
execution_mode: open
jurisdiction: eu
practice: tax
language: en
sources:
- title: Checklist
  path: references/checklist.md
- title: Countries Mandates
  path: references/countries-mandates.md
- title: Countries Other
  path: references/countries-other.md
- title: Country Matrix
  path: references/country-matrix.md
- title: En16931
  path: references/en16931.md
- title: Eu Law
  path: references/eu-law.md
- title: Identifiers
  path: references/identifiers.md
- title: Implementation
  path: references/implementation.md
- title: Intake
  path: references/intake.md
- title: Lifecycle
  path: references/lifecycle.md
- title: Peppol
  path: references/peppol.md
- title: Syntax Examples
  path: references/syntax-examples.md
- title: Validation Errors
  path: references/validation-errors.md
- title: Vat Content
  path: references/vat-content.md
---

# Structured e-invoicing in Europe

Building, sending and receiving machine-processable invoices under EN 16931, Directive 2014/55/EU, the VAT Directive 2006/112/EC as amended by Council Directive (EU) 2025/516 (ViDA), and the national mandates layered on top. Written for a developer who has to make invoicing work inside a product, not for an accountant. Status as at 2026-08-05.

**Core principle:** an e-invoice is not a PDF. Under Art 2(1) of Directive 2014/55/EU and Art 217 of Directive 2006/112/EC as replaced by ViDA, an electronic invoice is a dataset "issued, transmitted and received in a structured electronic format which allows for its automated and electronic processing". An emailed PDF is not one, and under § 14 Abs 1 Satz 4 UStG it is expressly a *sonstige Rechnung*. The correct mental model has four independent layers: **one semantic core** (EN 16931 business terms BT-/BG-), **two permitted syntaxes** (UBL 2.1, UN/CEFACT CII D16B), **many national CIUS and extensions** (XRechnung, Peppol BIS Billing, RO_CIUS, Factur-X profiles), and **separate transmission channels** (Peppol AS4, SdI, KSeF, French *plateformes agréées*, SPV). Getting the syntax right and the CIUS wrong is the standard failure: the file is well-formed UBL, passes the XSD, and is rejected by the receiving country.

## Not tax or legal advice

This skill produces implementation artefacts and findings, not advice on a taxpayer's obligations.

- Whether a specific entity is inside a mandate, from which date, and at which turnover threshold is a question for a tax adviser in that country. The skill maps the rule; it does not classify the business.
- Anything that goes into production and carries VAT figures — invoice content, exemption wording, retention, correction procedure — gets signed off by the tax adviser responsible for the entity before the first live invoice.
- Every generated invoice template, mapping table or country statement carries `<!-- ENTWURF – steuerlich nicht freigegeben -->` until that sign-off is confirmed. Never remove the marker silently.
- The mandatory published legal texts of a website (Impressum, privacy notice, terms) are out of scope — those belong to the `legal-*` skills. The boundary: this skill covers the invoice document and its transport, not what the shop page says.

Never drop or soften this section in the output.

## Workflow

1. **Intake before any code.** Without the answers in `references/intake.md`, every format and channel decision is a guess. Country of establishment, countries of customers, B2G/B2B/B2C, turnover band and existing ERP decide everything downstream.
2. **Decide the layer stack** using the matrix below: semantic profile → syntax → CIUS/customization ID → channel.
3. **Read the reference file for each layer before producing anything.** The element names, code lists and rule IDs are too specific to recall — a wrong `cbc:` path or a wrong EAS code fails silently at the access point.
4. **Validate before sending.** Schema, then EN 16931 Schematron, then the CIUS Schematron, then the country platform's own test endpoint. `references/validation-errors.md` maps the rule IDs that reject most first attempts.
5. **Run `references/checklist.md`** and report findings with rule ID and fix.

**Output shape.** Exactly four parts, in this order:

1. the artefact — mapping, XML, code, or the finding table — carrying the draft marker
2. the list of `[[MISSING: …]]` values the user must supply
3. adjacent open items in one sentence each (archiving, credit notes, second country, human-readable rendition)
4. the sign-off note

Cite the norm, rule ID or specification version next to the claim it supports. Reference file names are working material and belong in none of the four parts.

## Decision matrix

| Situation | What applies | Reference |
|---|---|---|
| Any structured invoice anywhere in the EU | EN 16931-1:2017 semantic model, BT-/BG- terms, BR- rules | `en16931.md` |
| Choosing between UBL and CII, or writing the XML | CEN/TS 16931-3-2 (UBL 2.1), CEN/TS 16931-3-3 (CII D16B) | `syntax-examples.md` |
| Selling to an EU public authority | Directive 2014/55/EU — the authority must receive, you are not forced to issue | `eu-law.md` |
| Planning for 2028–2035 | ViDA: Council Directive (EU) 2025/516, Reg (EU) 2025/517, Impl Reg (EU) 2025/518 | `eu-law.md` |
| Deciding what fields must appear on the invoice at all | Art 226, 226a, 226b, 229, 233 of Directive 2006/112/EC | `vat-content.md` |
| "Which country needs what" in ten seconds | Per-country lookup table | `country-matrix.md` |
| Italy, France, Germany, Spain, Poland | Full national regime, dates, channel, identifiers | `countries-mandates.md` |
| Belgium, Romania, Hungary, Portugal, Greece, Nordics, NL, CH, UK | Full national regime, dates, channel, identifiers | `countries-other.md` |
| Sending or receiving over the Peppol network | Peppol BIS Billing 3.0.20, AS4, SMP/SML, service providers | `peppol.md` |
| Filling in party, address, routing and code-list fields | EAS, ISO 6523 ICD, GLN, Leitweg-ID, codice destinatario, UNTDID 1001, Rec 20, UNCL5305, VATEX | `identifiers.md` |
| A validator returned a rule ID | Rule ID → cause → fix | `validation-errors.md` |
| Rounding, totals, PDF/A-3 embedding, human-readable rendition, test tooling | Implementation mechanics | `implementation.md` |
| Credit note, correction, cancelling a transmitted invoice, archiving | Post-issuance lifecycle | `lifecycle.md` |

## Hard rules

- **A PDF is not an e-invoice, and neither is a PDF with XML next to it in the same email.** Art 217 of Directive 2006/112/EC as replaced by ViDA and Art 2(1) of Directive 2014/55/EU require a structured format allowing automated processing. Only a hybrid file where the XML is *embedded* in a PDF/A-3 (Factur-X / ZUGFeRD) counts, and then the XML is the invoice — the visual layer is a rendition.
- **The XSD is not the validation.** UBL 2.1 and CII D16B schemas accept files that EN 16931 rejects. Conformance means passing the EN 16931 Schematron (validation artefacts v1.3.16, released 2026-04-13, github.com/ConnectingEurope/eInvoicing-EN16931) *and* the CIUS Schematron of the target country. Never report "valid" on the basis of a schema check.
- **`cbc:CustomizationID` (BT-24) is the contract, not decoration.** `urn:cen.eu:en16931:2017` is plain EN 16931; Peppol BIS Billing 3.0 requires exactly `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0` (docs.peppol.eu). Sending a Peppol invoice with the plain EN 16931 identifier is rejected at the access point. Never guess this string — copy it from the target specification.
- **Two ZUGFeRD/Factur-X profiles are not invoices.** MINIMUM (`urn:factur-x.eu:1p0:minimum`) and BASIC WL (`urn:factur-x.eu:1p0:basicwl`) carry no line data and are not EN 16931 conformant; only BASIC, EN 16931 and EXTENDED are (fnfe-mpe.org, Factur-X 1.09.2 / ZUGFeRD 2.5.2, released 2026-08-04). They are booking aids, not something to send into a mandate.
- **The buyer no longer has to agree.** Art 232 of Directive 2006/112/EC as amended by ViDA (Council Directive (EU) 2025/516, Art 1 point 3) lets a Member State that mandates domestic e-invoicing dispense with recipient acceptance, applicable from **14 April 2025**. Advice that "you need the customer's consent for an e-invoice" is pre-ViDA and wrong wherever a domestic mandate exists.
- **A qualified electronic signature is not required by EU VAT law, anywhere.** Art 229 of Directive 2006/112/EC: "Member States shall not require invoices to be signed." Art 233(1) as replaced by Directive 2010/45/EU lets each taxable person choose *any business controls creating a reliable audit trail*; the advanced signature and EDI in Art 233(2) are examples, not requirements. Portugal's PDF-signature rule is a national procedural rule about non-structured PDFs, not a counter-example to this.
- **The receipt obligation and the issuing obligation are different dates.** Germany: receipt obligatory since 2025-01-01, issuing phased via § 27 Abs 38 UStG to 2027-01-01 and 2028-01-01. France: receipt for all before issuing for most. Never state one mandate date per country.
- **Never invent an identifier, code or threshold.** EAS scheme codes, codice destinatario, Leitweg-ID, KSeF numbers, turnover thresholds and go-live dates are either verified against the authority's own page or written as `[[MISSING: …]]`. A plausible wrong EAS code routes the invoice to nobody and fails silently.
- **The Peppol MD5/CNAME lookup is dead, not deprecated.** Since 2025-11-01 participant resolution uses `strip-trailing(base32(sha256(lowercase(value))),"=")` under a U-NAPTR record with service name `Meta:SMP`; the legacy `B-<md5hex>` CNAME records now return NXDOMAIN (*Peppol CNAME to NAPTR Migration Process* v1.0.0). The SML zone is also moving to `participant.sml.prod.tech.peppol.org` — access points must have switched by 2026-08-31. Any tutorial showing MD5 is describing a broken client.
- **Cancelling a transmitted invoice is usually impossible.** Once SdI, KSeF or SPV has accepted the document, the correction is a new document (Italy TD04 credit note; Poland *faktura korygująca* — the buyer-issued *nota korygująca* was abolished on 2026-02-01). Building a "void invoice" button without a country check produces an unreconcilable ledger.

## False friends

Assumptions that are plausible, widespread in English-language material, and wrong.

| Plausible assumption | Actual position |
|---|---|
| "E-invoicing" means emailing a PDF | Structured format required: Art 2(1) Dir 2014/55/EU, Art 217 Dir 2006/112/EC as replaced by ViDA |
| Directive 2014/55/EU forces every supplier to issue e-invoices | It obliges contracting authorities to **receive and process** (Art 7). Issuing obligations come from national law, not from this directive |
| EN 16931 is a file format | It is a semantic data model. The file formats are UBL 2.1 and CII D16B, listed in the Annex to Commission Implementing Decision (EU) 2017/1870 of 16.10.2017 |
| Peppol is a format | Peppol is a network plus a CIUS. "Peppol BIS Billing 3.0" is the CIUS; AS4 is the transport |
| You join Peppol by registering on a website | You send through a certified Peppol Service Provider. Direct network access requires accreditation, a signed Service Provider Agreement and an OpenPeppol-issued PKI certificate |
| PINT replaces Peppol BIS Billing 3.0 in Europe on a known date | No European migration date is published, and no "BIS Billing 4.0" exists in the identifier registry. PINT is a *template* for national specifications; its base CustomizationID is abstract and never valid in a document |
| A participant listed in the Peppol Directory is reachable | The Directory is an opt-in index and goes stale. Reachability is the SML NAPTR lookup plus the SMP call |
| Hungary mandates e-invoicing | Hungary mandates **reporting** (RTIR / Online Számla). The invoice itself may still be paper; only a data extract goes to NAV |
| ZUGFeRD is German and Factur-X is French, so they differ | Same specification, published jointly by FeRD and FNFE-MPE. Factur-X 1.09.2 = ZUGFeRD 2.5.2, both released 2026-08-04 |
| German invoices must be kept 10 years | **8 years.** § 14b Abs 1 Satz 1 UStG says "acht Jahre"; § 147 Abs 3 AO puts Buchungsbelege at 8. The 10-year figure now covers books and financial statements only |
| There is an EU-wide retention period | Art 247(1) of Directive 2006/112/EC leaves the period to each Member State. Any single number quoted as "the EU period" is wrong |
| France routes B2B invoices through the PPF, and the platforms are called PDP | The PPF was dropped as a free exchange platform in October 2024 — it is now only the *annuaire* and a data concentrator. "PDP" became "**plateforme agréée (PA)**", codified in CGI art. 289 bis by LOI n° 2026-103 du 19 février 2026 |
| Belgium's Hermes converter catches parties who cannot receive | Decommissioned 2025-12-31; the domain no longer resolves |
| Spain's Verifactu starts in 2026, and Verifactu is the B2B e-invoicing mandate | Real Decreto-ley 15/2025 moved it to **2027-01-01** (corporate) and **2027-07-01** (others). Verifactu is a billing-*software* and record-keeping regime; the B2B invoice-exchange mandate is Crea y Crece under RD 238/2026, whose clock has not started |
| One national mandate date per country | Receipt, issuing and reporting have separate dates, and issuing is usually phased by turnover |
| A US or UK invoicing template can be localised with a VAT number field | Art 226 mandatory content plus national additions plus a CIUS is a different data model, not a field |

## Common mistakes

| Mistake | Why it is wrong |
|---|---|
| Validating with the XSD only | EN 16931 conformance lives in Schematron; the XSD passes non-conformant files |
| Summing line amounts at full precision and rounding once at the end | BR-CO-10 and BR-CO-17 compare rounded values; per-line rounding to two decimals is required |
| One `cac:TaxTotal` per invoice with a single rate | BR-CO-18 requires a VAT breakdown group (BG-23) per rate/category combination |
| VAT category `E` (exempt) without an exemption reason | BR-E-10 requires exemption reason code or text; the same applies to AE, G, IC, O |
| Reverse charge without the buyer VAT identifier | BR-AE-02 requires seller and buyer identifiers together |
| Using `9906`/`9907` for Italian parties | Superseded — the current EAS codes are `0211` (Partita IVA) and `0210` (Codice Fiscale) |
| Putting the Leitweg-ID in a party identifier | It is the Buyer reference BT-10 (`cbc:BuyerReference`); EAS `0204` exists but the routing value belongs in BT-10 |
| Treating the codice destinatario as optional for Italian B2C | It is `0000000` for consumers and `XXXXXXX` for foreign counterparties — both mandatory values, not blanks |
| Emitting a negative invoice instead of a credit note | Type code 380 with negative totals fails BR rules; use 381 in a CreditNote document |
| Storing only the PDF rendition | Art 244–247 Dir 2006/112/EC: the invoice that must be stored is the structured original |
| Hard-coding a single country's rules into the invoice service | Each additional country adds a CIUS and a channel, not a config flag |
| Building a direct AS4 connector to "save the access point fee" | Accreditation, PKI and specification-release compliance are the real cost; the fee is not |

## Reference files

- `references/intake.md` — questions to answer before any format or channel decision
- `references/en16931.md` — semantic model, BT-/BG- structure, mandatory vs conditional, validation artefacts
- `references/syntax-examples.md` — worked minimal invoice in UBL 2.1 and in CII D16B with verified element names
- `references/eu-law.md` — Directive 2014/55/EU, Implementing Decision 2017/1870, ViDA package and every date
- `references/vat-content.md` — Art 226/226a/226b/229/233 content rules, reverse charge, intra-Community, small business
- `references/country-matrix.md` — per-country lookup: format, syntax, channel, mandate status, identifier scheme
- `references/countries-mandates.md` — Italy, France, Germany, Spain, Poland in detail
- `references/countries-other.md` — Belgium, Romania, Hungary, Portugal, Greece, Nordics, NL, CH, UK
- `references/peppol.md` — network model, BIS Billing 3.0, identifiers, SMP/SML, connecting via a service provider
- `references/identifiers.md` — EAS, ISO 6523 ICD, national routing IDs, UNTDID 1001, Rec 20, UNCL5305, VATEX
- `references/validation-errors.md` — rule ID → cause → fix for the errors that reject first attempts
- `references/implementation.md` — rounding, totals, PDF/A-3 embedding, renditions, test validators
- `references/lifecycle.md` — credit notes, corrections, cancellation per country, archiving, integrity
- `references/checklist.md` — pre-go-live check with rule and norm references

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.