Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| BR-26 | Fatal (error) | ubl:Invoice/cac:InvoiceLine / cac:CreditNoteLine |
Schematron ID: ibr-026 | Field: IBT-146 (Item net price), cac:Price/cbc:PriceAmount |
||
Classification
Transaction Data — BR-26 checks that the cac:Price/cbc:PriceAmount element is present within every invoice line. IBT-146 is the net unit price after any item price discount (IBT-147) has been applied. It forms, together with the quantity (IBT-129) and the line net amount (IBT-131), the arithmetic triplet that the cross-field rule BR-CO-10 will verify for internal consistency.
What the Rule Is Checking
BR-26 tests for the existence of the cbc:PriceAmount element within the cac:Price block at line level. A zero price is structurally valid — free goods and samples may legitimately carry a net price of 0.00, and BR-26 does not prevent this. What the rule prevents is the absence of any price element. BR-27 then separately validates that the price, when present, is not negative.
The cbc:PriceAmount element carries a mandatory currencyID attribute. As with the line net amount, the currency must match the document currency code (IBT-005). An implementation that writes the element without the attribute will fail the UBL schema validation before the schematron rules run.
Why This Rule Exists
The unit price is the commercial and legal anchor of the invoice line. Under UAE VAT legislation, a tax invoice must show the unit price of each item supplied. The FTA requires this because it underpins the input tax recovery calculation: a buyer cannot confirm the taxable amount per unit without knowing the price. At Corner 5, the authority uses line-level price data to cross-check the supplier's reported taxable amounts against what the line arithmetic implies. An invoice missing the price element cannot support that cross-check.
There is also a practical drafting reason. In some ERP implementations, price information is stored on the order or contract and not re-expressed on the invoice — teams assume the quantity and total are sufficient. Under PINT-AE, they are not. Every field required by the standard must be present in the XML regardless of what information may exist in related documents.
UAE Data Example
PASSES ✓ <cac:Price> <cbc:PriceAmount currencyID="AED">500.00</cbc:PriceAmount> </cac:Price> <!-- AED 500 per unit — net price after any discount --> <cac:Price> <cbc:PriceAmount currencyID="AED">0.00</cbc:PriceAmount> </cac:Price> <!-- Zero price is valid — free sample line --> FAILS ✗ <cac:Price> <!-- No cbc:PriceAmount — BR-26 fatal error --> </cac:Price> <!-- No cac:Price block at all on the line — also fails BR-26 -->
What Your ERP / IT Team Must Ensure
- The XML generation layer must always write a
cac:Price/cbc:PriceAmountelement on every invoice line — including free goods lines, credit note lines, and any line where the commercial system might assume price is implied from context. - Include the
currencyIDattribute oncbc:PriceAmount, set to the document currency. Systems that generate the element without the attribute will fail at schema validation before reaching the schematron rules. - Where your ERP uses a separate gross price and discount structure, confirm that the XML generation writes the net price (after discount) as the
PriceAmount, not the gross price. IBT-148 (gross price) is an optional field incac:Price/cac:AllowanceCharge; IBT-146 (net price) is the mandatory one. - For lump-sum services billed at a total rather than a per-unit rate, a common workaround is quantity 1, unit code
C62, and the total as the price. This satisfies BR-26 and the arithmetic rules simultaneously. - Test all invoice types in your system: sales invoices, self-billing invoices, prepayment invoices, and credit notes. Each has its own line structure and the price element must be present in all of them.
Related Rules
BR-25 (item name) · BR-27 (price not negative) · BR-28 (gross price not negative) · BR-CO-10 (arithmetic consistency)
