Rule at a Glance

ID Severity Context (XPath)
Series ref. BR-99 | Schematron ID: aligned-ibrp-032 Fatal (error) cac:AllowanceCharge[cbc:ChargeIndicator = false()]

Assert text: [aligned-ibrp-032]-Each Document level allowance (ibg-20) MUST have a Document level allowance VAT category code (ibt-095).

Test: not(parent::ubl:Invoice|parent::cn:CreditNote) or exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID)

Classification

Transaction Data. The rule applies to each document-level allowance individually, at the point it is attached directly to the invoice or credit note rather than to a specific line.

What the Rule Is Checking

A document-level allowance (IBG-20) is a deduction applied to the invoice as a whole — an early-settlement discount, a volume rebate, a promotional reduction — rather than to an individual line. Every such allowance must state the VAT category code (IBT-095) under which it is taxed, held inside a cac:TaxCategory element whose tax scheme is VAT. The rule checks that this category code exists for each allowance attached directly to the invoice or credit note document; it does not apply to allowance blocks nested somewhere else in the document structure.

Without the category code, the allowance amount exists in the document but carries no instruction for how it should be treated in the VAT calculation — whether it reduces standard-rated value, zero-rated value, or something else entirely.

Why This Rule Exists

Document-level allowances reduce the taxable base, and the VAT due on that reduction depends on the VAT category the allowance sits under. A discount applied against a mixed invoice — some standard-rated lines, some zero-rated — produces a materially different VAT outcome depending on which category absorbs it. Leaving the category code out does not make the allowance category-neutral; it makes the tax effect of the discount undefined, which a receiving system or the FTA's own recalculation cannot resolve on its own.

UAE Data Example

PASSES ✓

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReason>Early settlement discount</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="AED">250.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>5.00</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>

The document-level allowance is explicitly tagged Standard Rate under the VAT scheme.

FAILS ✗

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReason>Early settlement discount</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="AED">250.00</cbc:Amount>
</cac:AllowanceCharge>

The allowance amount is present but no TaxCategory block exists at all, so the invoice never states what VAT treatment applies to the AED 250.00 deducted. The document fails.

What Your ERP / IT Team Must Ensure

  • Configure document-level discount and rebate processing so that every deduction posted at invoice header level inherits or is explicitly assigned a VAT category code, not just an amount and a reason text.
  • For mixed-rate invoices, define the allocation logic in advance: does a header-level discount apply proportionally across VAT categories, or is it assigned to a single category by business rule? Either approach is workable, but the mapping must resolve it before transmission, not leave it implicit.
  • Test settlement discount and volume rebate scenarios specifically, since these are typically configured in the ERP's pricing or finance module separately from the invoice tax engine, and are a common source of an unmapped category code.
  • Cross-check against ibr-115-ae and ibr-168-ae, which separately constrain what category codes a document-level allowance can carry and what supporting fields exemption categories require.

Related Rules