Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| BR-28 | Fatal (error) | cac:Price/cac:AllowanceCharge/cbc:BaseAmount |
Schematron ID: ibr-028 | Field: IBT-148 (Item gross price), cac:Price/cac:AllowanceCharge/cbc:BaseAmount |
||
Classification
Transaction Data — BR-28 is a value constraint on the item gross price field. Where BR-27 governs the net price (IBT-146), BR-28 governs the gross price (IBT-148). The two rules form a pair: once the Price Details group (IBG-29) includes a price discount via the AllowanceCharge structure, both the gross price and the resulting net price must be zero or positive.
What the Rule Is Checking
The test is: (cac:Price/cac:AllowanceCharge/cbc:BaseAmount) >= 0 or not(exists(cac:Price/cac:AllowanceCharge/cbc:BaseAmount)). This makes the rule conditional. If the gross price field (IBT-148) is not present — meaning the seller has not populated the Price Details group with a discount structure — the rule does not apply. Only when IBT-148 is provided does the value-sign constraint activate, requiring the gross price to be zero or greater.
The BaseAmount in the AllowanceCharge structure represents the gross (pre-discount) unit price. The discount amount within the same block reduces the gross price to produce the net price that appears in IBT-146. Both amounts must be non-negative because the arithmetic model assumes the discount reduces a positive gross price to a lower (but still non-negative) net price. A negative gross price would invert this logic and produce a result the validator cannot meaningfully process.
Why This Rule Exists
IBT-148 is an optional field. Sellers are not required to disclose the gross price and discount separately — they may simply populate IBT-146 with the net unit price and omit the Price Details group entirely. BR-28 only comes into play when a seller chooses to show the discount working, which is common in commercial invoicing where list prices and negotiated discounts are tracked separately.
When the gross price structure is used, the three amounts — IBT-148 (gross price), the discount amount (IBT-147), and IBT-146 (net price) — must satisfy the equation: gross price minus discount equals net price. The complementary rule aligned-ibrp-004 enforces that arithmetic relationship. BR-28's role is more fundamental: it ensures the gross price itself is a commercially valid number before the arithmetic check can proceed. A negative gross price would produce anomalous results that could not be reconciled with the requirement that net prices be non-negative under BR-27.
Standard / Code List
No code list applies. The rule is a numeric sign constraint on a monetary amount field. The currency used in IBT-148 must match the invoice currency code (IBT-005) as defined elsewhere in the document.
UAE Data Example
PASSES ✓: Gross price (IBT-148) of AED 120.00 with a discount (IBT-147) of AED 20.00, producing a net price (IBT-146) of AED 100.00. The BaseAmount of 120.00 is non-negative; BR-28 passes.
FAILS ✗: Gross price (IBT-148) populated as AED -50.00. This fails with a fatal error regardless of the net price or discount amounts that follow.
NOT TRIGGERED: An invoice line with only a net price (IBT-146) and no AllowanceCharge block in the Price structure. BR-28 does not apply because IBT-148 is absent.
What Your ERP / IT Team Must Ensure
- If the ERP populates the PINT-AE Price Details group (IBG-29) with a gross-price and discount structure, confirm that the source field mapped to IBT-148 always produces a non-negative value.
- ERP pricing models that use negative list prices as a configuration shortcut must not map those values to IBT-148. If a line genuinely has a zero gross price, zero is acceptable; negative is not.
- Validate the presence logic: if the discount amount (IBT-147) is populated, the gross price (IBT-148) must also be populated, and both must be non-negative. Some ERP configurations write the AllowanceCharge block with an amount but omit the BaseAmount — this avoids BR-28 but may violate other rules requiring both fields when discounts are disclosed.
- Where price information flows from a contract management or pricing engine rather than the order management module, trace the mapping to confirm that negative prices used internally for margin calculations are not surfacing in the invoice XML output.
- Test with invoice lines that carry promotional or negotiated discounts to confirm that the gross/net/discount arithmetic is consistent with the aligned-ibrp-004 rule as well as BR-28.
Related Rules
BR-27 (ibr-027) — Item net price must not be negative (IBT-146). The net price rule and the gross price rule work in tandem. BR-28 also relates to aligned-ibrp-004, which checks that the arithmetic relationship between gross price, discount, and net price is consistent.
