Invoir
  1. Home
  2. Guides
  3. EN 16931

EN 16931: the European e-invoice standard, explained for developers

EN 16931 defines what an electronic invoice must contain and how it is checked, independent of the file format. XRechnung, ZUGFeRD, Factur-X and Peppol BIS are all built on it, so its business rules are the errors you will see most, whatever format you produce.

Updated 19 October 2026

What the standard is

The EU's public-procurement directive 2014/55/EU asked the European standards body CEN for a common e-invoice model, and obliged public authorities to receive and process invoices that follow it (from April 2019; sub-central authorities from April 2020 at the latest). The result is the EN 16931 series, maintained by CEN/TC 434:

The validation artefacts (Schematron for UBL and CII) are published by CEN/TC 434 on GitHub. Every serious validator, including the KoSIT validator and Invoir, runs these files.

CIUS and extensions

Countries and communities adapt the core model in two ways:

The specification identifier (BT-24) says which one a file follows: urn:cen.eu:en16931:2017 for the plain standard, followed by #compliant#… for a CIUS or #conformant#… for an extension.

The business rules

Rule IDs tell you what kind of problem you have:

PrefixChecksExample
BR-01 … BR-65Mandatory fields and groupsBR-16 An Invoice shall have at least one Invoice line (BG-25).
BR-CO-*Calculations and conditionsBR-CO-15 Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
BR-CL-*Code listsBR-CL-23 Unit code must be coded according to UN/ECE Recommendation 20 with Rec 21 extension.
BR-S-*, BR-Z-*, BR-E-*, BR-AE-*, BR-IC-*, BR-G-*, BR-O-*, BR-AF-*, BR-AG-*One set per VAT category: standard rate (S), zero rate (Z), exempt (E), reverse charge (AE), intra-community supply (K), export (G), not subject to VAT (O), Canary Islands (L) and Ceuta/Melilla (M)BR-AE-02 Reverse charge needs the seller's and the buyer's VAT identifiers.

The rules that fail most, and the fix

BR-CO-10, BR-CO-13, BR-CO-15, BR-CO-16 Totals don't add up
The document totals must be exact sums of the values in the file: line nets (BT-131) → sum of lines (BT-106) → minus allowances, plus charges → total without VAT (BT-109) → plus VAT (BT-110) → total with VAT (BT-112) → minus prepaid, plus rounding → amount due (BT-115). Compute the totals from the rounded values you write, never from unrounded internal numbers.
BR-CO-17, BR-S-09 VAT amount off by a cent
VAT is computed per VAT category and rate on the taxable amount, then rounded to two decimals. Rounding VAT per line and adding the lines up gives a different result. Do it per rate.
BR-S-08 VAT breakdown doesn't match the lines
For each rate, the taxable amount in the breakdown (BG-23) must equal the line nets at that rate plus charges minus allowances at that rate. One breakdown entry per category and rate.
BR-S-02, BR-CO-09, BR-CO-26 Seller identification
Standard-rated invoices need the seller's VAT ID (or tax registration ID); VAT IDs need a country prefix like DE, FR, BE; and the seller needs at least one identifier.
BR-AE-02, BR-AE-08, BR-AE-10 Reverse charge
Both VAT IDs, a breakdown entry for category AE, and an exemption reason (code or the text "Reverse charge").
BR-E-10 Exempt without a reason
A breakdown with category E needs an exemption reason code (BT-121) or text (BT-120).
BR-CL-23 Unit code
Use UN/ECE Rec 20/21 codes: C62 (one/piece), HUR (hour), DAY, KGM, MTR. "pcs" or "Stk" fail.
BR-61 Credit transfer without an account
Payment means 30 or 58 (credit transfer, SEPA) needs the payment account identifier (BT-84), usually the IBAN.

Where EN 16931 is required

Check a file in your browser, or over the API. The free validator runs the official rules (KoSIT, CEN and Peppol Schematron, Mustang, veraPDF) and lists every error with its rule ID. Nothing is stored. The same check is one HTTP call with a free API key: 25 documents a month, no credit card.

Sources

More guides