Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| Series ref. BR-38 | Fatal (error) | cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator=true] |
| Schematron ID: ibr-044 | Fields: IBT-144 (Invoice line charge reason), IBT-145 (Invoice line charge reason code) | ||
Classification
Transaction Data — this rule completes the set of four charge rules that mirror the allowance rules BR-31 through BR-34. BR-35 and BR-37 govern the amount and reason for a document-level charge; this rule and BR-36 govern the same two requirements for a line-level charge. Together, the four ensure that any addition applied anywhere on a PINT-AE invoice is both quantified and explained — whether it reduces the total (an allowance) or increases it (a charge).
What the Rule Is Checking
For an AllowanceCharge with ChargeIndicator true nested inside an InvoiceLine or CreditNoteLine, the rule requires either cbc:AllowanceChargeReason or cbc:AllowanceChargeReasonCode to be present. A line-level charge with an amount but no reason and no reason code fails as a fatal error, mirroring BR-37's logic at document level.
Why This Rule Exists
A line-level surcharge without a stated reason creates the same evidentiary gap as an unexplained document-level charge, but 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 addition is harder to reconcile — the price on that line is higher than agreed, with no coded basis to match against an expected surcharge type.
For businesses that apply different categories of line-level charge — rush processing, custom configuration, item-specific packaging — the reason or reason code is what allows those categories to be distinguished in reporting. Without it, every line surcharge looks identical in the data regardless of its actual commercial basis, and the pattern of where charges are being applied becomes invisible to anyone reviewing the invoice population.
UAE Data Example
PASSES ✓: Invoice line allowance charge, Amount = 35.00 AED, AllowanceChargeReason "Expedited processing fee". Reason present; rule passes.
PASSES ✓: Invoice line charge, Amount = 60.00 AED, AllowanceChargeReasonCode populated from UNCL 7161, no free-text reason. Coded reason alone satisfies the rule.
FAILS ✗: Invoice line charge, ChargeIndicator = true, Amount = 45.00 AED, no AllowanceChargeReason and no AllowanceChargeReasonCode. Fatal error — the line surcharge has no stated basis.
What Your ERP / IT Team Must Ensure
- Confirm that any line-level surcharge functionality in your sales or billing module always captures a reason at the point the charge is applied, rather than leaving it to be inferred later from context.
- Standardise the reason text or UNCL 7161 code for recurring line-level charge types — rush fees, customisation charges, packaging — so the same charge type is described consistently across every invoice it appears on.
- Test invoices where a single line carries both a charge and an allowance, to confirm your validation checks each block's reason independently rather than assuming one description covers both.
- Include a negative test case — a line charge with an amount but no reason — in your pre-submission validation suite to confirm BR-38 is caught before the invoice reaches your ASP.
Related Rules
BR-36 (ibr-043) requires the amount on the same line-level charge block. BR-37 (ibr-038) applies the equivalent reason requirement at document level (IBG-21). BR-34 (ibr-042) applies the mirrored requirement to a line-level allowance rather than a charge.
