Rule at a Glance

ID Severity Context (XPath)
Series ref. BR-34 Fatal (error) cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator=false]
Schematron ID: ibr-042  |  Fields: IBT-139 (Invoice line allowance reason), IBT-140 (Invoice line allowance reason code)

Classification

Transaction Data — this rule completes the set of four allowance rules in this range. BR-31 and BR-33 govern the amount and reason for a document-level allowance; this rule and BR-32 govern the same two requirements for a line-level allowance. Together, the four ensure that any deduction applied anywhere on a PINT-AE invoice is both quantified and explained.

What the Rule Is Checking

For an AllowanceCharge with ChargeIndicator false nested inside an InvoiceLine or CreditNoteLine, the rule requires either cbc:AllowanceChargeReason or cbc:AllowanceChargeReasonCode to be present. A line-level allowance with an amount but no reason and no reason code fails as a fatal error, mirroring BR-33's logic at document level.

Why This Rule Exists

A line-level discount without a stated reason creates the same evidentiary gap as an unexplained document-level allowance, but concentrated on a single item. Where a buyer's procurement or accounts payable system checks line-item pricing against a purchase order or price agreement, an unexplained line discount is harder to match automatically — the system has a reduced price with no coded basis to reconcile against the expected discount type.

For businesses that apply different categories of line discount — promotional pricing, loyalty programme reductions, damaged-stock write-downs — the reason or reason code is what allows those categories to be distinguished in reporting. Without it, every line discount looks identical in the data regardless of its actual commercial basis.

UAE Data Example

PASSES ✓: Invoice line allowance, Amount = 40.00 AED, AllowanceChargeReason = "Loyalty programme discount". Reason present; rule passes.

PASSES ✓: Invoice line allowance, Amount = 15.00 AED, AllowanceChargeReasonCode populated from UNCL 5189, no free text. Coded reason alone is sufficient.

FAILS ✗: Invoice line allowance, Amount = 60.00 AED, no reason text and no reason code. Fatal error.

What Your ERP / IT Team Must Ensure

  • Confirm that every discount type configurable at line level in your sales or billing module is mapped to a reason description or a UNCL 5189 code before go-live, including less common discount categories that may not be exercised often in testing.
  • Where multiple line-level allowances can stack on a single line, verify that each individual AllowanceCharge block carries its own reason — a single reason covering several stacked allowances does not satisfy the rule for each block independently.
  • Align your internal discount reason taxonomy with the UNCL 5189 code list where practical, so that automated reconciliation on the buyer side can classify the discount type without relying on free-text parsing.
  • Test a line-level allowance with amount populated and both reason fields deliberately blank, to confirm your validation pipeline catches this rule before submission to your ASP.

Related Rules

BR-32 (ibr-041) requires the amount on the same line-level allowance block. BR-31 (ibr-031) and BR-33 (ibr-033) apply the equivalent amount and reason requirements to document-level allowances (IBG-20).