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

28 rule groups from EN 16931 and Peppol BIS Billing 3.0 are actively checked, plus 1 check of our own. 9 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 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-*amounts limited to two decimalsBT-131, BT-110, BT-113CheckedEN 16931
BR-CL-*codelists: currency, country, VAT category, invoice typeBT-5, BT-40, BT-55, BT-3, BT-151CheckedEN 16931
BR-S-*standard rate requires a positive VAT rateBT-151, BT-152CheckedEN 16931
BR-Z-*zero rate requires a zero VAT rateBT-151, BT-152CheckedEN 16931
BR-E-*exempt lines require a zero VAT rateBT-151, BT-152CheckedEN 16931
BR-AE-*reverse charge requires a zero VAT rateBT-151, BT-152CheckedEN 16931
BR-K-*intra-community supply requires a zero VAT rateBT-151, BT-152CheckedEN 16931
BR-G-*free export requires a zero VAT rateBT-151, BT-152CheckedEN 16931
BR-O-*outside the scope of VAT requires a zero VAT rateBT-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.