Before the list: what a green result does and does not mean
"No violations" has two different meanings, and they are easy to confuse. One is checked and clean. The other is this rulebook does not apply to this file โ a Polish KSeF invoice is not an EN 16931 document, so EN 16931 rules say nothing about it. The check page always prints which rulebook it used, for exactly this reason.
This is also a subset, not the complete EN 16931 rule set. What is implemented are the rules whose verdict is unambiguous: required fields, and arithmetic that must add up. Rules that depend on code lists we cannot verify offline are left out rather than guessed โ a check that fires on a correct invoice is worse than no check at all.
EN 16931 โ the European norm
BR-22- Every line needs an invoiced quantity
BR-23- Every line needs a unit of measure
BR-24- Every line needs a net amount
BR-25- Every line needs an item name
BR-26- Every line needs an item net price
BR-27- An item net price must not be negative
BR-64- Every invoice line needs an item name
BR-AE-05- Reverse-charge line must have rate 0
BR-AE-09- Reverse-charge VAT must be zero
BR-CL-01- Document type code must be from UNTDID 1001
BR-CL-04- Currency must be a three-letter ISO 4217 code
BR-CL-14- Country must be an ISO 3166-1 alpha-2 code
BR-CL-17- VAT category code must be from UNCL5305
BR-CL-18- Line VAT category code must be from UNCL5305
BR-CO-04- Every line needs a VAT category code
BR-CO-09- VAT identifier must start with a country code
BR-CO-10- Line amounts must sum to the line total
BR-CO-13- Total without VAT follows from lines, allowances and charges
BR-CO-14- VAT breakdown must sum to the VAT total
BR-CO-15- Total with VAT is net plus VAT
BR-CO-16- Amount due follows from the total less prepayments
BR-CO-17- VAT per rate is that rate applied to that base, rounded
BR-CO-18- At least one VAT breakdown group
BR-CO-26- Seller must be identifiable (VAT ID or legal registration)
BR-E-05- Exempt line must have rate 0
BR-E-09- Exempt VAT must be zero
BR-E-10- Exempt breakdown must state the reason
BR-G-05- Export line must have rate 0
BR-G-09- Export VAT must be zero
BR-IC-05- Intra-community line must have rate 0
BR-IC-09- Intra-community VAT must be zero
BR-O-05- Out-of-scope line takes no VAT rate at all
BR-O-09- Out-of-scope VAT must be zero
BR-O-11- Out-of-scope cannot be mixed with other VAT categories
BR-S-08- Taxable amount per rate matches the lines at that rate
BR-S-09- VAT per rate is that rate applied to that base
BR-Z-05- Zero-rated line must have rate 0
BR-Z-09- Zero-rated VAT must be zero
BR-Z-10- Zero rated must not state an exemption reason
Factur-X / ZUGFeRD extensions
BR-FXEXT-05- Line subtype must be DETAIL, GROUP or INFORMATION
BR-FXEXT-06- Every line needs a subtype once sub-lines are used
BR-FXEXT-08- A subtotal line must equal the lines beneath it
BR-FXEXT-11- A parent line reference must point at a real line
National rules
AU-ABN- Australian Business Number check digit โ Peppol delivers to Australian businesses on this number
BE-KBO- Belgian enterprise number check digit โ Belgium identifies companies by it
BR-DE-15- XRechnung needs a Leitweg-ID (BT-10)
BR-DEC-12- Monetary amounts carry at most two decimals
CH-UID- Swiss UID check digit โ this is the one number Swiss registers go by
DE-PROFILE- In Germany this profile does not count as an e-invoice (BMF, 15 Oct 2025)
DK-CVR- Danish CVR check digit โ a Danish company has only this one number, and Peppol finds the recipient by it
FI-YTUNNUS- Finnish business ID check digit โ the VAT number is this number with FI in front
FR-SIREN- SIREN/SIRET check digit โ France routes invoices on this number
HR-OIB- Croatian OIB check digit โ everything in Croatia hangs on this number
JP-HOUJIN- Japanese corporate number check digit โ the qualified invoice issuer number is this number with a T in front
NO-ORGNR- Norwegian organisation number check digit โ the VAT number and the Peppol address are both built on it
SE-ORGNR- Swedish organisation number check digit โ the VAT number is this number with SE in front and 01 behind
Identifiers and money
IBAN-CHECK- Payee IBAN check digits โ a payment sent to a wrong IBAN does not arrive
PEPPOL-ENDPOINT- Peppol delivery address โ Peppol routes on this number, so a wrong one means the invoice never arrives
VAT-CHECKSUM- VAT identifier fails its own check digit
Notes, not violations
CCY-RETIRED- Currency code has been withdrawn
FX-PROFILE- Factur-X gateway profile โ EN 16931 rules do not apply
PRE-EN16931- This format predates EN 16931 โ the EN rules do not apply to it
Try it
Drop one invoice on the check page โ free, no account. For a whole folder at once there is the main page: up to 10 invoices per export and 20 a day on the free tier.