Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| BR-33 | Fatal (error) | ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator=false] |
| Schematron ID: ibr-033 | Fields: IBT-097 (Document level allowance reason), IBT-098 (Document level allowance reason code) | ||
Classification
Transaction Data — BR-33 is the companion rule to BR-31. Where BR-31 requires a document-level allowance to carry an amount, BR-33 requires the same allowance block to explain itself — either through free-text reason or a coded reason from the UNCL 5189 allowance reason code list.
What the Rule Is Checking
For a document-level AllowanceCharge with ChargeIndicator false, the rule checks that either cbc:AllowanceChargeReason or cbc:AllowanceChargeReasonCode is present. Either satisfies the rule on its own; both may be provided together. An allowance block with an amount but neither a reason nor a reason code fails as a fatal error.
Why This Rule Exists
An allowance amount by itself tells the buyer and the tax authority that the invoice total was reduced, but not why. The reason field closes that gap. For audit purposes, an unexplained deduction on a tax invoice is difficult to substantiate — the FTA's review of a VAT return may reach a point where the taxable value on file needs to be reconciled against the invoice, and a document-level allowance with no stated basis is a weaker piece of evidence than one that states "early settlement discount" or carries the equivalent UNCL 5189 code.
The rule also protects the buyer's accounts payable process. An allowance with no reason gives the buyer no basis to check whether the deduction matches an agreed commercial term, which slows reconciliation and increases the likelihood of a payment dispute.
UAE Data Example
PASSES ✓: Document-level allowance, Amount = 500.00 AED, AllowanceChargeReason = "Volume rebate — Q2 agreement". Reason present as free text; rule passes.
PASSES ✓: Document-level allowance, Amount = 120.00 AED, AllowanceChargeReasonCode populated from UNCL 5189, no free-text reason. Coded reason alone satisfies the rule.
FAILS ✗: Document-level allowance, Amount = 300.00 AED, no AllowanceChargeReason and no AllowanceChargeReasonCode. Fatal error — the deduction has a value but no stated basis.
What Your ERP / IT Team Must Ensure
- Where your discount or rebate functionality is configured in the ERP, confirm that a reason description is captured at the point the discount is created — not added retrospectively at invoice generation, by which point the commercial context may not be readily available.
- Decide whether your extraction logic maps to the free-text reason, the UNCL 5189 coded reason, or both. Using the code list consistently makes downstream reconciliation and reporting easier, since coded reasons can be aggregated and analysed; free text cannot.
- For recurring discount types — early payment terms, standard volume tiers, promotional campaigns — consider standardising the reason text or code centrally, so the same commercial arrangement is described consistently across every invoice it appears on.
- Include a negative test case — an allowance with an amount but no reason — in your pre-submission validation suite to confirm BR-33 is caught before transmission.
Related Rules
BR-31 (ibr-031) requires the amount on the same document-level allowance block. BR-32 (ibr-041) and BR-34 (ibr-042) apply the equivalent amount and reason requirements to invoice line-level allowances (IBG-27).
