Attestwire › Rule reference › BR-CO-04
BR-CO-04 Every invoice line must have a VAT category code
noun · EN 16931 · fatal · BT-151
For a sample invoice, the library reports: Line 1 has no invoiced item VAT category code (BT-151). Every invoice line must be categorized, without exception — there is no "default" VAT treatment in EN 16931, because the category is what determines whether VAT is charged, who accounts for it, and what evidence the exemption rests on.
- Business term
BT-151- Severity
fatal
The fix
Set line.vatCategory to one of "S" standard rated, "Z" zero rated, "E" exempt, "AE" reverse charge, "K" intra-community supply, "G" export outside the EU, "O" not subject to VAT, "L" IGIC (Canary Islands) or "M" IPSI (Ceuta and Melilla). If tax is charged, set line.vatRate alongside it.
A passing value
"vatCategory": "S", "vatRate": 19What the library returns
The full error returned by @attestwire/en16931. It includes the rule ID,
affected field and suggested correction. Developers can use this object in their application:
{
"rule": "BR-CO-04",
"field": "BT-151",
"severity": "fatal",
"message": "Line 1 has no invoiced item VAT category code (BT-151). Every invoice line must be categorized, without exception — there is no \"default\" VAT treatment in EN 16931, because the category is what determines whether VAT is charged, who accounts for it, and what evidence the exemption rests on. An uncategorized line also cannot be placed in any VAT breakdown group (BG-23).",
"fix": "Set line.vatCategory to one of \"S\" standard rated, \"Z\" zero rated, \"E\" exempt, \"AE\" reverse charge, \"K\" intra-community supply, \"G\" export outside the EU, \"O\" not subject to VAT, \"L\" IGIC (Canary Islands) or \"M\" IPSI (Ceuta and Melilla). If tax is charged, set line.vatRate alongside it.",
"example": "\"vatCategory\": \"S\", \"vatRate\": 19",
"xpath": "/ubl:Invoice/cac:InvoiceLine[1]/cac:Item/cac:ClassifiedTaxCategory/cbc:ID",
"docsUrl": "https://attestwire.com/rules/BR-CO-04"
}
xpath is always a UBL path. On a CII invoice, look for the
matching CII field instead.