AttestwireRule referenceBR-O-10

BR-O-10 A not-subject-to-VAT breakdown must give the matching exemption reason

noun · EN 16931 · fatal · BT-120 / BT-121

For a sample invoice, the library reports: The VAT breakdown for category O (Not subject to VAT) must have a VAT exemption reason code (BT-121) meaning "Not subject to VAT", or the VAT exemption reason text (BT-120) "Not subject to VAT" (or the equivalent standard text in another language).

Business term
BT-120 / BT-121
Severity
fatal

The fix

Either remove vatExemptionReasons.O entirely, in which case this library supplies the standard text "Not subject to VAT", or set it to your own wording in the invoice language.

A passing value

the shape this field expects
"vatExemptionReasons": { "O": "Not subject to VAT" }

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:

TeachingError
{
  "rule": "BR-O-10",
  "field": [
    "BT-120",
    "BT-121"
  ],
  "severity": "fatal",
  "message": "The VAT breakdown for category O (Not subject to VAT) must have a VAT exemption reason code (BT-121) meaning \"Not subject to VAT\", or the VAT exemption reason text (BT-120) \"Not subject to VAT\" (or the equivalent standard text in another language). You set vatExemptionReasons.O to an empty value, which suppresses the wording this library would otherwise supply. The reason is what tells the buyer — and their auditor — why an invoice line carries no VAT; a zero with no explanation is indistinguishable from a mistake.",
  "fix": "Either remove vatExemptionReasons.O entirely, in which case this library supplies the standard text \"Not subject to VAT\", or set it to your own wording in the invoice language.",
  "example": "\"vatExemptionReasons\": { \"O\": \"Not subject to VAT\" }",
  "xpath": "/ubl:Invoice/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:TaxExemptionReason",
  "docsUrl": "https://attestwire.com/rules/BR-O-10"
}

xpath is always a UBL path. On a CII invoice, look for the matching CII field instead.