PintLint

Rules / IBR-CO-16

IBR-CO-16 error

Amount due must add up

Amount due (IBT-115) = total with VAT − amount already paid + rounding.

Prepayments and deposits are the usual cause.

Fails

<cbc:TaxInclusiveAmount currencyID="AED">7875.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="AED">7950.00</cbc:PayableAmount>

Fix

Recalculate from the total with VAT. Show any prepayment in cbc:PrepaidAmount.

Passes

<cbc:PayableAmount currencyID="AED">7875.00</cbc:PayableAmount>
Schematron
Context
cac:LegalMonetaryTotal
Test
(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)))

Official text: Amount due for payment (ibt-115) = Invoice total amount with Tax (ibt-112) - Paid amount (ibt-113) + Rounding amount (ibt-114).

Official · PINT shared rules. Severity: error. Runs on UBL XML and on JSON.

Check an invoice