agenttoolworks

Reference

EN 16931 rules, and which ones we check.

When an e-invoice is rejected, what comes back is a rule identifier. This is the full list of the ones this engine reports, rendered from the module the validator actually runs, so it cannot describe something the code does not do.

The list

39 rule groups from EN 16931 and Peppol BIS Billing 3.0 are actively checked, plus 2 check of our own. 11 more cannot be violated through this API, because the totals they constrain are recomputed from the lines rather than accepted from the caller. Rule texts verified against Peppol BIS Billing 3.0 rule list (EN 16931 rules) on 2026-08-16.

RuleWhat it requiresTermsStatusSource
BR-01specification identifierBT-24By constructionEN 16931
BR-02invoice numberBT-1CheckedEN 16931
BR-03issue dateBT-2CheckedEN 16931
BR-04invoice type codeBT-3CheckedEN 16931
BR-05currency codeBT-5CheckedEN 16931
BR-06seller nameBT-27CheckedEN 16931
BR-07buyer nameBT-44CheckedEN 16931
BR-08seller postal addressBG-5CheckedEN 16931
BR-09seller country codeBT-40CheckedEN 16931
BR-10buyer postal addressBG-8CheckedEN 16931
BR-11buyer country codeBT-55CheckedEN 16931
BR-12sum of line net amountsBT-106By constructionEN 16931
BR-13invoice total without VATBT-109By constructionEN 16931
BR-14invoice total with VATBT-112By constructionEN 16931
BR-15amount due for paymentBT-115By constructionEN 16931
BR-16at least one invoice lineBG-25CheckedEN 16931
BR-21line identifierBT-126CheckedEN 16931
BR-22line quantityBT-129CheckedEN 16931
BR-23line unit of measureBT-130CheckedEN 16931
BR-24line net amountBT-131CheckedEN 16931
BR-25item nameBT-153CheckedEN 16931
BR-26item net priceBT-146CheckedEN 16931
BR-27item net price is not negativeBT-146CheckedEN 16931
BR-CO-10sum of line net amounts equals the linesBT-106, BT-131By constructionEN 16931
BR-CO-13total without VAT is consistentBT-109By constructionEN 16931
BR-CO-15total with VAT equals total without VAT plus VATBT-112, BT-109, BT-110By constructionEN 16931
BR-CO-16amount due equals total with VAT minus prepaidBT-115, BT-112, BT-113By constructionEN 16931
BR-DEC-13invoice total VAT amount: at most two decimalsBT-110CheckedEN 16931
BR-DEC-16paid amount: at most two decimalsBT-113CheckedEN 16931
BR-DEC-23invoice line net amount: at most two decimalsBT-131CheckedEN 16931
BR-CL-01document type code from UNTDID 1001BT-3CheckedEN 16931
BR-CL-04invoice currency code from ISO 4217 alpha-3BT-5CheckedEN 16931
BR-CL-14country codes from ISO 3166-1BT-40, BT-55CheckedEN 16931
BR-CL-17VAT category codes from UNCL5305BT-151CheckedEN 16931
BR-CO-04every line carries a VAT category codeBT-151CheckedEN 16931
ATW-DATE-FORMATdates are ISO 8601 calendar datesBT-2, BT-9CheckedAgentToolWorks
BR-AE-10reverse charge needs an exemption reasonBT-120, BT-121CheckedEN 16931
BR-E-10exempt supplies need an exemption reasonBT-120, BT-121CheckedEN 16931
BR-IC-10intra-community supply needs an exemption reasonBT-120, BT-121CheckedEN 16931
BR-G-10export outside the EU needs an exemption reasonBT-120, BT-121CheckedEN 16931
BR-O-10out of scope needs an exemption reasonBT-120, BT-121CheckedEN 16931
BR-AE-08reverse charge taxable amount matches its linesBT-116, BT-118By constructionEN 16931
BR-AE-09reverse charge VAT amount is zeroBT-117, BT-118By constructionEN 16931
BR-S-05standard rated lines need a VAT rate above zeroBT-151, BT-152CheckedEN 16931
BR-Z-05zero rated lines need a VAT rate of zeroBT-151, BT-152CheckedEN 16931
BR-E-05exempt lines need a VAT rate of zeroBT-151, BT-152CheckedEN 16931
BR-AE-05reverse charge lines need a VAT rate of zeroBT-151, BT-152CheckedEN 16931
BR-IC-05intra-community supply lines need a VAT rate of zeroBT-151, BT-152CheckedEN 16931
BR-G-05export outside the EU needs a VAT rate of zeroBT-151, BT-152CheckedEN 16931
BR-O-05lines not subject to VAT must carry no VAT rate at allBT-151, BT-152CheckedEN 16931
PEPPOL-EN16931-R120line net amount agrees with quantity times item net priceBT-131, BT-129, BT-146CheckedPeppol BIS Billing 3.0
ATW-PREPAID-EXCEEDS-TOTALprepaid amount does not exceed the invoice totalBT-113, BT-115CheckedAgentToolWorks

A rule links to a page only where we have written a real diagnosis and fix for it. The rest are listed without a link on purpose: a page generated from this same table would tell you nothing the table has not already told you, and we would rather have a short reference that is worth reading than a long one that is not.

How to read the status column

The source column matters more than it looks. EN 16931 is the European semantic standard; Peppol BIS Billing 3.0 layers its own rules on top and is what most European networks actually validate against. They are routinely spoken of as one thing, which is how a sender ends up searching the wrong specification for an identifier that is not in it.

Questions people actually ask

What does a rule identifier like BR-09 actually mean?
It names one requirement in the European e-invoicing standard. BR-09 says the seller's postal address has to carry a country code. When a validator rejects your invoice it reports the identifier rather than a sentence, because the identifier is the same in every tool and every language.
Is passing this validator the same as being EN 16931 compliant?
No, and anyone telling you otherwise is selling something. The norm has roughly 150 rules plus national extensions. This engine checks a documented subset, listed on this page with a status against each rule. Passing means no checked rule was broken.
What does "satisfied by construction" mean?
The rule constrains a value we compute rather than accept. The rules on document totals, for example, require the totals to agree with the lines; we derive the totals from the lines, so they cannot come out disagreeing. Those rules are listed because leaving them out would understate the coverage and including them as "checked" would overstate it.
Why is one rule prefixed ATW rather than BR?
Because we check something the standards do not name. A prepaid amount larger than the invoice total gives a negative amount due, which is nearly always an error worth flagging, but no rule in EN 16931 or Peppol forbids it. Reporting it under a borrowed identifier would send a reader to a specification page that says something else.