ValidateFin

UBL Invoice — BR-CO-10, line sum does not equal BT-106

The most common rejection in production, isolated: the two lines add up to 1 500.00 but BT-106 (LineExtensionAmount) declares 1 400.00 — BR-CO-10. Everything else is internally consistent with the WRONG figure, so BR-CO-13, BR-CO-14, BR-CO-15 and BR-CO-16 all pass and exactly one error comes back. That is what a line dropped after the totals were computed looks like.

UBL 2.1 Invoice — Invalid

The most common rejection in production, isolated: the two lines add up to 1 500.00 but BT-106 (LineExtensionAmount) declares 1 400.00 — BR-CO-10. Everything else is internally consistent with the WRONG figure, so BR-CO-13, BR-CO-14, BR-CO-15 and BR-CO-16 all pass and exactly one error comes back. That is what a line dropped after the totals were computed looks like.

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

What this file shows

The most common rejection in production, isolated: the two lines add up to 1 500.00 but BT-106 (LineExtensionAmount) declares 1 400.00 — BR-CO-10. Everything else is internally consistent with the WRONG figure, so BR-CO-13, BR-CO-14, BR-CO-15 and BR-CO-16 all pass and exactly one error comes back. That is what a line dropped after the totals were computed looks like.

Transactions2
Total€1,685.00

The defects it carries

  • BR-CO-10BR-CO-10: Sum of Invoice line net amount (1500.00) does not equal document LineExtensionAmount / BT-106 (1400.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).
  DELIBERATELY BROKEN — BR-CO-10.
  The lines add up to 1 500.00 (900.00 + 600.00) but BT-106 (LineExtensionAmount)
  declares 1 400.00. Everything else is internally consistent with the DECLARED
  BT-106 — BR-CO-13, BR-CO-14, BR-CO-15 and BR-CO-16 all pass — so the file isolates
  BR-CO-10: "Sum of Invoice line net amount = Σ Invoice line net amount".
  Expected validation result: INVALID — exactly one error, BR-CO-10.

  All parties and account numbers are fictitious.
  Reference page: https://validatefin.com/en/resources/samples/ubl-invoice-broken-br-co-10
  License: CC-BY-4.0
-->
<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:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>NWL-2026-0501</cbc:ID>
  <cbc:IssueDate>2026-03-13</cbc:IssueDate>
  <cbc:DueDate>2026-04-12</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:Note>Line totals and document total do not agree — see BR-CO-10.</cbc:Note>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>PO-2026-9114</cbc:BuyerReference>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9930">DE123456789</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Nordwind Logistik GmbH</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>Speicherstrasse 12</cbc:StreetName>
        <cbc:CityName>Hamburg</cbc:CityName>
        <cbc:PostalZone>20457</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>DE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE123456789</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Nordwind Logistik GmbH</cbc:RegistrationName>
        <cbc:CompanyID>HRB 98765</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Rechnungsstelle</cbc:Name>
        <cbc:Telephone>+49 40 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>[email protected]</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9930">DE987654321</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Kessler Handel GmbH</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>Marktplatz 3</cbc:StreetName>
        <cbc:CityName>Leipzig</cbc:CityName>
        <cbc:PostalZone>04109</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>DE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE987654321</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Kessler Handel GmbH</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
    <cbc:PaymentID>NWL-2026-0501</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>DE89370400440532013000</cbc:ID>
      <cbc:Name>Nordwind Logistik GmbH</cbc:Name>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>

  <cac:PaymentTerms>
    <cbc:Note>Net 30 days.</cbc:Note>
  </cac:PaymentTerms>

  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">285.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1500.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">285.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

  <!-- BT-106 says 1400.00; the two lines below total 1500.00 -->
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">1400.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="EUR">1400.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="EUR">1685.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">1685.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>

  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">6</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">900.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Steel shelving unit, 5 levels</cbc:Description>
      <cbc:Name>Shelving unit</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">150.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>

  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">12</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">600.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Storage bin, stackable, 60 L</cbc:Description>
      <cbc:Name>Storage bin</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">50.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>

160 / 162 lines shown — the complete file is in the download above.

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)