Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| Series ref. BR-35 | Fatal (error) | ubl:Invoice/cac:AllowanceCharge[cbc:ChargeIndicator=true] |
Schematron ID: ibr-036 | Field: IBT-099 (Document level charge amount), cbc:Amount |
||
Classification
Transaction Data — BR-35 governs the document-level charge group (IBG-21), the mirror image of the document-level allowance group (IBG-20) covered by BR-31. Where an allowance reduces the invoice total, a charge increases it. Freight, insurance, packaging, and handling fees applied across the whole invoice — rather than to a single line — all use this structure.
What the Rule Is Checking
Where an AllowanceCharge element with ChargeIndicator set to true sits at document level — outside any InvoiceLine or CreditNoteLine — the rule requires that cbc:Amount is present. A charge block that states a reason but omits the amount fails, for the same structural cause as the allowance rules: the figure is what the invoice's arithmetic needs, and a reason alone does not supply it.
Why This Rule Exists
A document-level charge exists to increase the invoice total by a defined figure — the same role an allowance plays in reverse. The sum of document-level charges (IBT-108) feeds directly into the calculation of the invoice total without tax (IBT-109), alongside the invoice line net amounts and any allowances. A charge block with a reason but no amount leaves that summation with no figure to add, and the declared invoice total cannot be reconciled back to its components.
For UAE businesses, document-level charges most commonly represent delivery fees, insurance premiums on the shipment, or administrative charges applied once across the transaction rather than allocated line by line. Each of these is, in most cases, taxable at the same VAT rate as the underlying supply. Where the amount is missing, the taxable value the charge should have added is missing with it, understating the VAT the invoice should reflect.
UAE Data Example
PASSES ✓: Document-level AllowanceCharge with ChargeIndicator = true, Amount = 180.00 AED, reason "Delivery charge". Amount is present; rule passes.
PASSES ✓: No document-level charge block at all. The invoice carries no document-level charge; BR-35 does not apply.
FAILS ✗: Document-level AllowanceCharge with ChargeIndicator = true, reason "Insurance", no Amount element. Fatal error — a charge is declared with no value attached to it.
What Your ERP / IT Team Must Ensure
- Confirm that any module generating a document-level surcharge — freight, insurance, handling — always writes a concrete amount into the charge block, and does not rely on a reason code or description to carry the value implicitly.
- Where a charge is calculated as a percentage of the invoice value in the ERP (for example, a 2% administrative fee), verify the extraction logic resolves that percentage to a fixed amount before the UBL document is generated.
- Distinguish document-level charges from line-level charges in your mapping logic. The two are governed by separate rules, and posting a delivery fee that should sit at line level into the document-level block — or the reverse — misstates where the added cost applies.
- Add a negative test case — a charge with a reason populated but the amount deliberately left blank — to your pre-submission validation suite, so BR-35 is caught before the invoice reaches your ASP.
Related Rules
BR-31 (ibr-031) applies the equivalent amount requirement to a document-level allowance. BR-36 (ibr-043) applies the same amount requirement to a line-level charge (IBG-28). BR-37 (ibr-038) requires the same document-level charge to also carry a reason or reason code.
