Error codes

BR-CO-13: Invoice total without VAT (BT-109)

Severity: fatal · Syntax: CII, UBL

Official message

Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

What this means

The message sets BT-109 = Σ BT-131 − BT-107 + BT-108. The UBL assertion uses the header LineExtensionAmount (BT-106) plus ChargeTotalAmount minus AllowanceTotalAmount, only for the elements that are present, rounded to two decimal places. BT-106 itself has to equal the line sum (BR-CO-10). Official text: Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

Typical cause

An allowance or charge is on the lines but missing from BT-107 or BT-108, or BT-109 was copied from the gross total.

How to fix it

Calculate the named BT fields in the same currency and set the header amounts to the result of the assertion. The check helps you find the difference.

UBL

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
</cac:LegalMonetaryTotal>

CII

<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
  <ram:LineTotalAmount>100.00</ram:LineTotalAmount>
  <ram:TaxBasisTotalAmount>100.00</ram:TaxBasisTotalAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>

Business term

BT-109, BT-131, BT-107, BT-108

Related rules

Context and assertion

UBL cac:LegalMonetaryTotal

CII //ram:SpecifiedTradeSettlementHeaderMonetarySummation

UBL

((cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10) div 100 )) or (not(cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10 ) div 100)) or ((cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount)) * 10 * 10 ) div 100)) or (not(cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = xs:decimal(cbc:LineExtensionAmount)))

CII

(xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) and not(ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount) and not(ram:AllowanceTotalAmount))

Check a file now, free of charge

curl -F "file=@rechnung.xml" https://checkxrechnung.com/v1/validate

Questions

What does BR-CO-13 actually check?

The message sets BT-109 = Σ BT-131 − BT-107 + BT-108. The UBL assertion uses the header LineExtensionAmount (BT-106) plus ChargeTotalAmount minus AllowanceTotalAmount, only for the elements that are present, rounded to two decimal places. BT-106 itself has to equal the line sum (BR-CO-10). Official text: Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).

How do I fix BR-CO-13?

Calculate the named BT fields in the same currency and set the header amounts to the result of the assertion. The check helps you find the difference.

If BR-CO-13 passes, is the invoice legally compliant?

No. This page helps you read this one Schematron assertion. A pass is not a statement about tax law, portal acceptance, or bank overlays.