Attestwire › Rule reference › BR-DE-14
BR-DE-14 XRechnung requires a VAT rate on every breakdown group
noun · XRechnung · fatal · BT-119
a VAT group that forgot to say its rate.
A German public body has refused your invoice because one of its VAT groups has no VAT rate. German public-sector invoices need a rate on every VAT group, even when the rate is zero, and the usual cause is a line marked “not subject to VAT”, which cannot carry a rate at all. The fix is normally to re-categorise that line as zero-rated or exempt. In the standard the rate is BT-119, the VAT group is BG-23, and BR-DE-14 is the XRechnung rule that requires the rate.
Diese Regel auf Deutsch: BR-DE-14 — auf Deutsch erklärt.
- Business term
BT-119— VAT category rate- Severity
fatal- Applies to
xrechnung-ubl, xrechnung-cii
The fix
Re-examine the categorisation before you reach for a workaround. A supply that is inside the scope of VAT but taxed at nothing is zero-rated: vatCategory: "Z" with vatRate: 0, and that is what most transactions labelled “no VAT” are. Exempt, "E" with an exemption reason, is the other common correct answer.
If the transaction really is outside the scope of VAT, you cannot send it as an XRechnung: switch the profile to "en16931" or "peppol-bis-3", and expect a conversation with the recipient about which document they can accept.
What the rule requires
Under XRechnung, Germany’s version of the European standard, every VAT breakdown group (BG-23) must carry a VAT category rate (BT-119). The European standard excuses one case: BR-48 allows a missing rate when the category is O, “not subject to VAT”. The German add-on does not carry that exception forward.
Follow that through and you reach a conclusion that surprises people: category O cannot appear in an XRechnung. BR-O-05 forbids a rate on an O line, so no rate can reach the breakdown, and BR-DE-14 then rejects the document for not having one. There is no combination that satisfies both.
This is the sharpest divergence between the European standard and the German add-on in everyday use. A document can validate cleanly against EN 16931 and be rejected by a German portal for this alone.
Das Element „VAT category rate“ (BT-119) muss übermittelt werden.
Failing and passing
validateInput({
profile: "xrechnung-ubl",
// ...
lines: [{ id: "1", description: "Membership levy", quantity: 1,
unitCode: "C62", unitPrice: 100,
vatCategory: "O" }], // no rate is permitted <- BR-DE-14
});
// -> { valid: false, errors: [ { rule: "BR-DE-14", field: "BT-119", ... } ] }validateInput({
profile: "xrechnung-ubl",
// ...
lines: [{ id: "1", description: "Membership levy", quantity: 1,
unitCode: "C62", unitPrice: 100,
vatCategory: "Z", vatRate: 0 }],
});
// -> { valid: true, errors: [] }Why it exists
A rate of zero and no rate at all are different claims, and the German rule set prefers the explicit one everywhere. “Outside the scope of VAT” is a strong statement about a transaction, and the categories that stay inside the scope, Z for zero-rated and E for exempt with a stated reason, carry a rate of 0 and say why.
Most invoices labelled “no VAT” are one of those two, so the restriction mostly forces a more accurate categorisation rather than blocking real business.
What 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-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 is always a UBL path. On a CII invoice, look for the
matching CII field instead.
How our check differs
We report this at fatal, which matches how a German portal treats it.
The “category O is unusable in XRechnung” conclusion above is ours, derived from BR-DE-14 and BR-O-05 sitting in the same rule set. It is not written down as such in the German add-on, because rule sets state constraints and not their consequences.
We put it on the page because a developer who meets only BR-DE-14 will spend an afternoon trying to satisfy it with an O line, and there is no way to.
See also: BR-O-05 — why no rate can reach the breakdown on an O line; BR-Z-05 — the zero-rated alternative; BR-E-05 — the exempt alternative.