ValidateFin

UBL Invoice — two VAT rates, one breakdown per rate

Una factura válida que combina el tipo general francés (20 %) y el reducido (5,5 %). La regla que ilustra es BR-S-08: el desglose de IVA (BG-23) lleva UN TaxSubtotal por par (categoría, tipo), y cada base imponible es la suma de las líneas de ese par: 1.500,00 al 20 % (IVA 300,00) y 400,00 al 5,5 % (IVA 22,00). Fundir dos tipos en un solo subtotal supera todas las comprobaciones BR-CO y sigue estando mal.

UBL 2.1 Invoice — Válido

Una factura válida que combina el tipo general francés (20 %) y el reducido (5,5 %). La regla que ilustra es BR-S-08: el desglose de IVA (BG-23) lleva UN TaxSubtotal por par (categoría, tipo), y cada base imponible es la suma de las líneas de ese par: 1.500,00 al 20 % (IVA 300,00) y 400,00 al 5,5 % (IVA 22,00). Fundir dos tipos en un solo subtotal supera todas las comprobaciones BR-CO y sigue estando mal.

Factura UBL (Peppol BIS 3.0) UBL 2.1 Invoice EN 16931 / Peppol BIS 3.0Resultado esperado: Válido

Lo que muestra este fichero

Una factura válida que combina el tipo general francés (20 %) y el reducido (5,5 %). La regla que ilustra es BR-S-08: el desglose de IVA (BG-23) lleva UN TaxSubtotal por par (categoría, tipo), y cada base imponible es la suma de las líneas de ese par: 1.500,00 al 20 % (IVA 300,00) y 400,00 al 5,5 % (IVA 22,00). Fundir dos tipos en un solo subtotal supera todas las comprobaciones BR-CO y sigue estando mal.

Transacciones3
Total2222,00 €
Última verificación: Licencia: CC-BY-4.0

Todas las partes, IBAN e importes siguientes son ficticios. Los IBAN son estructuralmente válidos —superan el mod-97— pero no corresponden a ninguna cuenta real.

Contenido del fichero

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ValidateFin sample file — UBL invoice, Peppol BIS Billing 3.0 (EN 16931).
  MULTIPLE VAT RATES on one invoice: French standard rate 20 % and reduced rate 5.5 %.
  The VAT breakdown (BG-23) carries one TaxSubtotal PER (category, rate) pair, and each
  taxable amount is the sum of the lines that carry that pair (BR-S-08).
  Expected validation result: VALID — 3 lines, 2 222.00 EUR including VAT.
  S/20 % : base 1 500.00, VAT 300.00 — S/5.5 % : base 400.00, VAT 22.00.

  All parties and account numbers are fictitious.
  Reference page: https://validatefin.com/en/resources/samples/ubl-invoice-multi-vat-rate
  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>PDR-2026-0288</cbc:ID>
  <cbc:IssueDate>2026-03-11</cbc:IssueDate>
  <cbc:DueDate>2026-04-10</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:Note>Standard rate 20 % on stationery, reduced rate 5.5 % on printed books.</cbc:Note>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>CMD-2026-0771</cbc:BuyerReference>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9957">FR23334175221</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Papeterie du Rhone SAS</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>3 rue Gutenberg</cbc:StreetName>
        <cbc:CityName>Villeurbanne</cbc:CityName>
        <cbc:PostalZone>69100</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>FR</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR23334175221</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Papeterie du Rhone SAS</cbc:RegistrationName>
        <cbc:CompanyID>334175221</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Service facturation</cbc:Name>
        <cbc:Telephone>+33 4 78 00 90 90</cbc:Telephone>
        <cbc:ElectronicMail>[email protected]</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9957">FR62456789012</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Groupe Verdier SA</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>22 boulevard des Belges</cbc:StreetName>
        <cbc:CityName>Rouen</cbc:CityName>
        <cbc:PostalZone>76000</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>FR</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR62456789012</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Groupe Verdier SA</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
    <cbc:PaymentID>PDR-2026-0288</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>FR1420041010050500013M02606</cbc:ID>
      <cbc:Name>Papeterie du Rhone SAS</cbc:Name>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>

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

  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">322.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1500.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">300.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:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">400.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">22.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5.5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">1900.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="EUR">1900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="EUR">2222.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">2222.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>

  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">200</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Recycled A4 paper, 80 g, ream of 500 sheets</cbc:Description>
      <cbc:Name>A4 paper ream</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">5.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>

  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">50</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">500.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Refillable ink cartridge, black</cbc:Description>
      <cbc:Name>Ink cartridge</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>20</cbc:Percent>

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

Cómo sabemos que estos resultados se sostienen

Cada fichero de esta biblioteca pasa por el propio validador del sitio en cada build. El resultado esperado indicado arriba lo verifica un test automatizado: si un fichero dejara de coincidir con lo que afirma esta página, el build fallaría. Dos fixtures heredadas se repararon así antes de publicarse: tres IBAN no superaban el mod-97 y varios nombres usaban caracteres fuera del juego SEPA básico.

Factura UBL (Peppol BIS 3.0)