qmetrics
Fatal — invoice rejected Amounts & totals Shared Peppol rule PINT-AE 2026.5

How to fix ibr-co-16 in UAE e-invoicing

What is ibr-co-16?

ibr-co-16 is a fatal validation rule in the UAE's Peppol PINT-AE e-invoicing specification, inherited from the shared Peppol layer. It is checked against the document totals and belongs to the Amounts & totals rule group. An e-invoice that fails ibr-co-16 is rejected by the Accredited Service Provider gateway before it reaches the FTA.

What the official rule says

Amount due for payment (ibt-115) = Invoice total amount with Tax (ibt-112) - Paid amount (ibt-113) + Rounding amount (ibt-114).
UAE impact: this is a fatal rule from the shared Peppol layer, enforced in the UAE profile — an invoice failing it is rejected at the Accredited Service Provider gateway before it ever reaches the FTA. A rejected invoice means resubmission delays, and late transmission risks the AED 100-per-invoice penalty under Cabinet Decision No. 106 of 2025.

Where it applies

This rule is checked against the document totals of your UBL 2.1 invoice:

cac:LegalMonetaryTotal

Business terms referenced

Term ID Field Other rules
IBT-115 Amount due for payment view →
IBT-112 Invoice total amount with Tax view →
IBT-113 Paid amount view →
IBT-114 Rounding amount view →

Field names are derived automatically from the official rule corpus.

Technical test condition (Schematron)
(xs:decimal(cbc:PrepaidAmount) and not(xs:decimal(cbc:PayableRoundingAmount)) and (xs:decimal(cbc:PayableAmount) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(xs:decimal(cbc:PrepaidAmount)) and not(xs:decimal(cbc:PayableRoundingAmount)) and xs:decimal(cbc:PayableAmount) = xs:decimal(cbc:TaxInclusiveAmount)) or (xs:decimal(cbc:PrepaidAmount) and xs:decimal(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(xs:decimal(cbc:PrepaidAmount)) and xs:decimal(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = xs:decimal(cbc:TaxInclusiveAmount)))

Worried your invoices fail ibr-co-16?

Upload your UBL XML — qmetrics runs 40+ core PINT-AE pre-submission checks (TRN, VAT math, addresses, totals and more) in one second. Your file is validated in memory and never stored.

Related rules

Rule text sourced from the official OpenPeppol PINT-AE validation artifacts (version 2026.5), refreshed weekly. Explanations are qmetrics' own guidance, not official FTA/MoF text.