Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| BR-31 | Fatal (error) | ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator=false] |
Schematron ID: ibr-031 | Field: IBT-092 (Document level allowance amount), cbc:Amount |
||
Classification
Transaction Data — BR-31 governs the document-level allowance group (IBG-20), the set of fields that record a deduction applied to the whole invoice rather than to a single line. An allowance at this level typically represents a discount, rebate, or price adjustment negotiated across the full commercial transaction, distinct from the line-level allowances covered separately under BR-41 (IBG-27).
What the Rule Is Checking
Where an AllowanceCharge element with ChargeIndicator set to false (an allowance, not a charge) sits at document level — meaning it is not nested inside an InvoiceLine or CreditNoteLine — the rule requires that cbc:Amount is present. The test is scoped precisely: it fires only for document-level allowance blocks. A line-level allowance is exempt from BR-31 because line-level amounts are governed by the separate rule BR-41.
An AllowanceCharge block that declares a reason or a percentage but omits the amount fails this rule, because the amount is the field the invoice arithmetic depends on.
Why This Rule Exists
A document-level allowance exists to reduce the invoice total by a defined figure. The VAT-inclusive and VAT-exclusive totals, the taxable base, and the payable amount all depend on that figure flowing correctly into the document-level summation rules. An allowance block with a reason but no amount gives the buyer's accounts payable system nothing to post against — it signals that a deduction exists without stating what it is worth.
For UAE businesses, document-level allowances most commonly represent early-payment discount terms, volume rebates applied across the full invoice value, or promotional price reductions agreed at the point of sale. Each of these needs a quantified amount for the FTA's Corner 5 data matching to reconcile the seller's reported taxable value against the buyer's received value.
UAE Data Example
PASSES ✓: Document-level AllowanceCharge with ChargeIndicator = false, Amount = 250.00 AED, reason "Early payment discount". Amount is present; rule passes.
PASSES ✓: No document-level AllowanceCharge block at all. The invoice carries no document-level allowance; BR-31 does not apply.
FAILS ✗: Document-level AllowanceCharge with ChargeIndicator = false, reason "Volume rebate", no Amount element. Fatal error — a deduction is declared with no value to apply.
What Your ERP / IT Team Must Ensure
- Confirm that any pricing or billing module capable of generating a document-level discount always populates the amount field before the
AllowanceChargeblock is written to the UBL document, rather than allowing a reason-only placeholder. - Distinguish document-level allowances from line-level allowances explicitly in your extraction logic. The two are governed by different rules (BR-31 versus BR-41) and mapping a line-level discount into the document-level block, or vice versa, will misstate where the deduction applies.
- For early-payment or settlement discount terms that are conditional on the buyer's payment date, decide at invoice generation time whether the discount is reflected as a document-level allowance now, or handled separately as a credit note if and when the buyer actually pays early. PINT-AE does not support a conditional allowance amount.
- Include a test case with a discount reason populated but the amount field deliberately left blank, to confirm your pre-submission validation catches BR-31 before the invoice reaches your ASP.
Related Rules
BR-33 (ibr-033) requires that the same document-level allowance also carries a reason or reason code. BR-41 (ibr-041) and BR-42 (ibr-042) apply the equivalent amount and reason requirements to invoice line-level allowances (IBG-27).
