{
  "id": "BR-S-09",
  "country": "EU",
  "syntax": "ubl",
  "group": "standard-rated",
  "severity": "fatal",
  "severity_note": "fatal, from the Flag column of the Peppol BIS Billing 3.0 UBL rules index retrieved 2026-10-17.",
  "spec": "Peppol BIS Billing 3.0, May 2026 release, EN 16931 model bound to UBL",
  "statement": "The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is \"Standard rated\" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).",
  "statement_lang": "en",
  "context": "/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']",
  "test": "(abs(xs:decimal(../cbc:TaxAmount)) - 1 < round((abs(xs:decimal(../cbc:TaxableAmount)) * (xs:decimal(cbc:Percent) div 100)) * 10 * 10) div 100 ) and (abs(xs:decimal(../cbc:TaxAmount)) + 1 > round((abs(xs:decimal(../cbc:TaxableAmount)) * (xs:decimal(cbc:Percent) div 100)) * 10 * 10) div 100 )",
  "meaning": "In a VAT breakdown whose category is \"Standard rated\", the VAT category tax amount (BT-117) must equal the taxable amount (BT-116) multiplied by the VAT category rate (BT-119). The official message omits \"the\" before \"VAT category code\". The published test compares category code S, divides the percent by 100, rounds that product to two decimal places, uses absolute values, and allows the tax amount and that rounded product to differ by less than 1.",
  "fix": "Set BT-117 on the S breakdown to BT-116 multiplied by BT-119 as a percentage. The published test divides the percent by 100.",
  "example_fail": "An S breakdown has taxable amount 100, category rate 19, and tax amount 0.",
  "example_pass": "That breakdown has taxable amount 100, category rate 19, and tax amount 19.",
  "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-S-09/",
  "source_retrieved": "2026-10-17",
  "last_verified": "2026-10-17"
}
