BR-DE-14 XRechnung requires the element "VAT category rate" (BT-119) on every VAT breakdown group (BG-23), but the group for category O has none
XRechnung requires the element "VAT category rate" (BT-119) on every VAT breakdown group (BG-23), but the group for category O has none. Core EN 16931 excuses exactly one case from this — BR-48 allows a missing rate when the category is "O" (not subject to VAT) — and the German CIUS does not carry that exception forward. The practical consequence is that category O cannot be used in an XRechnung at all: BR-O-05 forbids a rate on the line, so no rate can reach the breakdown, and BR-DE-14 then rejects the document. Core EN 16931 validation passes; the German portal rejects.
This rule is implemented and its error payload below is real, but the long-form write-up — normative text, worked example, divergence note — is not written yet. Everything the library knows about this rule is on this page. Ask and we will prioritise it.
- Business term
BT-119- Severity
fatal
What the library returns
The exact object in result.errors when this rule fires.
Generated by running @attestwire/en16931, not transcribed:
{
"rule": "BR-DE-14",
"field": "BT-119",
"severity": "fatal",
"message": "XRechnung requires the element \"VAT category rate\" (BT-119) on every VAT breakdown group (BG-23), but the group for category O has none. Core EN 16931 excuses exactly one case from this — BR-48 allows a missing rate when the category is \"O\" (not subject to VAT) — and the German CIUS does not carry that exception forward. The practical consequence is that category O cannot be used in an XRechnung at all: BR-O-05 forbids a rate on the line, so no rate can reach the breakdown, and BR-DE-14 then rejects the document. Core EN 16931 validation passes; the German portal rejects.",
"fix": "Choose a different profile (\"en16931\" or \"peppol-bis-3\") for a genuinely out-of-scope transaction, or re-examine the categorisation: a supply that is inside the scope of VAT but taxed at nothing is category \"Z\" (zero rated) with vatRate 0, and that is what most transactions labelled \"no VAT\" actually are. Category \"E\" (exempt) with an exemption reason is the other common correct answer.",
"example": "\"vatCategory\": \"Z\", \"vatRate\": 0",
"xpath": "/ubl:Invoice/cac:TaxTotal/cac:TaxSubtotal[1]/cac:TaxCategory/cbc:Percent",
"docsUrl": "https://attestwire.com/rules/BR-DE-14"
}
xpath locates the element in the generated UBL document,
which is where a KoSIT or Peppol validator will report the same problem.
A passing value
"vatCategory": "Z", "vatRate": 0The fix
Choose a different profile ("en16931" or "peppol-bis-3") for a genuinely out-of-scope transaction, or re-examine the categorisation: a supply that is inside the scope of VAT but taxed at nothing is category "Z" (zero rated) with vatRate 0, and that is what most transactions labelled "no VAT" actually are. Category "E" (exempt) with an exemption reason is the other common correct answer.