BR-48: Each VAT breakdown needs a VAT rate (BT-119) unless category is O

Explained by Matheel from ZATCA's rule text and the condition SDK 3.4.8 executes · Updated

Error: the invoice is rejectedAll invoicesFields: BG-23, BT-119

Checks that the VAT cac:TaxCategory in every cac:TaxTotal/cac:TaxSubtotal under ubl:Invoice contains cbc:Percent; the only exception is when that category's cbc:ID is 'O' (not subject to VAT).

How to fix it

Add the rate inside the subtotal's cac:TaxCategory, e.g. <cbc:Percent>15.00</cbc:Percent>; it may be omitted only when the category cbc:ID is O.

ZATCA's official text

[BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.
Source: ZATCA SDK 3.4.8 · EN 16931 (CEN) rules

Fails when (the condition ZATCA's SDK runs)

not(exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:Percent) or (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/normalize-space(cbc:ID)='O'))

Related rules

Validate your invoice against ZATCA's rules

Paste the XML and see every error and warning. It runs in your browser; the invoice goes nowhere.

Validate an invoice or try Matheel