{
  "id": "BR-O-14",
  "country": "EU",
  "syntax": "ubl",
  "group": "not-subject",
  "severity": "fatal",
  "severity_note": "fatal, from the Flag column of the Peppol BIS Billing 3.0 UBL rules index retrieved 2026-10-18.",
  "spec": "Peppol BIS Billing 3.0, May 2026 release, EN 16931 model bound to UBL",
  "statement": "An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) \"Not subject to VAT\" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not \"Not subject to VAT\".",
  "statement_lang": "en",
  "context": "/ubl:Invoice | /cn:CreditNote",
  "test": "(exists(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']) and count(//cac:AllowanceCharge[cbc:ChargeIndicator=true()]/cac:TaxCategory[normalize-space(cbc:ID) != 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']) = 0) or not(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O'])",
  "meaning": "If a VAT breakdown uses the category \"Not subject to VAT\", the invoice must not contain document-level charges (BG-21) whose VAT category code (BT-102) is not \"Not subject to VAT\". The official message says \"Document level charges\" in the plural and omits \"the\" before \"Document level charge VAT category code\". It says \"shall not contain\" those charges. It does not say the charge shall not contain a VAT rate, and it does not name BT-31, BT-63, or BT-48. The quoted category name has no space after the opening quote. The published test passes when no O VAT breakdown exists. The negative branch is not(...) and does not call exists. When an O breakdown exists, the count of charge tax categories whose code is not O must be 0. The count selects AllowanceCharge where ChargeIndicator=true() with no space before =. The positive branch calls exists.",
  "fix": "When a VAT breakdown is category O, set every document-level charge VAT category to O, or remove the charge that uses another category.",
  "example_fail": "An O VAT breakdown is present and a document-level charge uses a tax category that is not O.",
  "example_pass": "Every document-level charge uses O, or the invoice has no O breakdown.",
  "example_note": "Illustration of the condition in the official statement. Not an example published by the source.",
  "source_url": "https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-O-14/",
  "source_retrieved": "2026-10-18",
  "last_verified": "2026-10-18"
}
