ValidateFin

UBL Invoice — BR-CO-10 violation

Una fattura che viola la regola EN 16931 BR-CO-10: la somma degli importi netti di riga (1.000,00) non corrisponde al totale documento BT-106 (2.000,00). Uno dei rifiuti più frequenti sulla rete Peppol.

UBL 2.1 Invoice — Non valido

Una fattura che viola la regola EN 16931 BR-CO-10: la somma degli importi netti di riga (1.000,00) non corrisponde al totale documento BT-106 (2.000,00). Uno dei rifiuti più frequenti sulla rete Peppol.

Fattura UBL (Peppol BIS 3.0) UBL 2.1 Invoice EN 16931 / Peppol BIS Billing 3.0Risultato atteso: Non valido — 4 errori

Cosa mostra questo file

Una fattura che viola la regola EN 16931 BR-CO-10: la somma degli importi netti di riga (1.000,00) non corrisponde al totale documento BT-106 (2.000,00). Uno dei rifiuti più frequenti sulla rete Peppol.

I difetti che contiene

  • 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).

Citato alla lettera dal validatore, non parafrasato.

Ultima verifica: Licenza: CC-BY-4.0

Tutte le parti, gli IBAN e gli importi qui sotto sono fittizi. Gli IBAN sono strutturalmente validi — superano il mod-97 — ma non corrispondono ad alcun conto reale.

Contenuto del file

<?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>

Come sappiamo che questi risultati reggono

Ogni file di questa libreria passa nel validatore del sito a ogni build. Il risultato atteso indicato sopra è verificato da un test automatico: se un file smettesse di corrispondere a quanto afferma questa pagina, la build fallirebbe. Due fixture ereditate sono state riparate così prima della pubblicazione: tre IBAN non superavano il mod-97 e diversi nomi usavano caratteri fuori dal set SEPA di base.

Fattura UBL (Peppol BIS 3.0)