ValidateFin

UBL Invoice — BR-CO-10 violation

An invoice that breaks EN 16931 rule BR-CO-10: the sum of the line net amounts (1 000.00) does not equal the document total BT-106 (2 000.00). One of the most frequent rejections on the Peppol network.

UBL 2.1 Invoice — Invalid

An invoice that breaks EN 16931 rule BR-CO-10: the sum of the line net amounts (1 000.00) does not equal the document total BT-106 (2 000.00). One of the most frequent rejections on the Peppol network.

UBL invoice (Peppol BIS 3.0) UBL 2.1 Invoice EN 16931 / Peppol BIS Billing 3.0Expected result: Invalid — 4 errors

What this file shows

An invoice that breaks EN 16931 rule BR-CO-10: the sum of the line net amounts (1 000.00) does not equal the document total BT-106 (2 000.00). One of the most frequent rejections on the Peppol network.

The defects it carries

  • BR-CO-10BR-CO-10: Sum of Invoice line net amount (1000.00) does not equal document LineExtensionAmount / BT-106 (2000.00).
  • BR-S-08BR-S-08: taxable amount for VAT category S at rate 20% (2000.00) must equal the sum of the matching line amounts and document allowances/charges (1000.00).

Quoted verbatim from the validator, not paraphrased.

Last verified: License: CC-BY-4.0

Every party, IBAN and amount below is fictitious. The IBANs are structurally valid — they pass the mod-97 check — but they belong to no real account.

File content

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ValidateFin sample file — UBL invoice, Peppol BIS Billing 3.0 (EN 16931).
  Expected validation result: INVALID — EN 16931 rule BR-CO-10.
  Deliberate defect: the sum of the line net amounts (1 000.00) does not equal
  the invoice TaxExclusiveAmount (2 000.00).

  All parties and account numbers are fictitious.
  Reference page: https://validatefin.com/en/resources/samples/ubl-invoice-invalid-amounts
  License: CC-BY-4.0
-->
<!-- BR-CO-10 : somme des lignes ≠ TaxExclusiveAmount (1000 ≠ 2000) -->
<!-- BR-S-08  : TaxInclusiveAmount ≠ TaxExclusiveAmount + TaxAmount (2400 ≠ 2000+400=2400 → ok ici, mais lignes ko) -->
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
  <cbc:ID>FA-ERR-AMOUNTS-001</cbc:ID>
  <cbc:IssueDate>2026-02-01</cbc:IssueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cac:PartyName>
        <cbc:Name>Fournisseur Erreur SAS</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>1 rue Test</cbc:StreetName>
        <cbc:CityName>Paris</cbc:CityName>
        <cbc:PostalZone>75001</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>FR</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR12345678901</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Fournisseur Erreur SAS</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:AccountingCustomerParty>
    <cac:Party>
      <cac:PartyName>
        <cbc:Name>Client Test SARL</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>2 rue Client</cbc:StreetName>
        <cbc:CityName>Lyon</cbc:CityName>
        <cbc:PostalZone>69001</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>FR</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR98765432109</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Client Test SARL</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <cac:TaxTotal>
    <!-- TVA calculée sur 2000 (montant total déclaré), mais les lignes ne font que 1000 -->
    <cbc:TaxAmount currencyID="EUR">400.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">2000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">400.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>20</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

  <!-- ERREUR BR-CO-10 : LineExtensionAmount = 2000, mais lignes = 1000 -->
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">2000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="EUR">2000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="EUR">2400.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">2400.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>

  <!-- Ligne ne faisant que 1000 (600 de moins que déclaré dans LegalMonetaryTotal) -->
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Prestation de conseil</cbc:Description>
      <cbc:Name>Conseil</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>20</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>

How we know these results hold

Every file in this library is run through the site's own validator on each build. The expected result stated above is asserted by an automated test — if a file stopped matching what this page claims, the build would fail. Two inherited fixtures were repaired this way before publication: three IBANs failed the mod-97 check and several names used characters outside the basic SEPA character set.

UBL invoice (Peppol BIS 3.0)