La estructura completa de una factura UBL explicada paso a paso: desde la cabecera y las partes hasta las líneas de factura y los totales de IVA.
Una factura UBL está compuesta por un conjunto fijo de bloques constructivos. Ya sea que envíe facturas a través de la plataforma eConnect, a través de la API PSB, o construya su propia integración: es muy útil saber qué elementos contiene una factura UBL y en qué orden se encuentran. Este artículo recorre la estructura de principio a fin.
Una UBL Invoice (versión 2.1) consta de cuatro zonas principales, siempre en este orden:
Dentro de cada zona principal, los elementos siguen un orden XML fijo. Este orden está prescrito por la norma UBL. Si se invierte el orden, la factura será rechazada durante la validación.
Cada factura comienza con un puñado de elementos obligatorios que identifican la factura en su conjunto:
<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>F-2026-00042</cbc:ID>
<cbc:IssueDate>2026-03-08</cbc:IssueDate>
<cbc:DueDate>2026-04-07</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
El CustomizationID indica al destinatario qué perfil sigue la factura (por ejemplo NLCIUS o BIS Billing V3). El ProfileID identifica el proceso de negocio. El InvoiceTypeCode indica si se trata de una factura regular (380), una variante de nota de crédito (381) o una factura de autofacturación (389).
Consejo : eConnect reconoce automáticamente el perfil basándose en el CustomizationID. No necesita configurar nada de su parte.
Después de la identificación vienen las referencias opcionales. La más común es el número de pedido (OrderReference), pero también puede hacer referencia a un contrato, un proyecto o una factura enviada anteriormente:
<cac:OrderReference>
<cbc:ID>PO-2026-1234</cbc:ID>
</cac:OrderReference>
<cac:ContractDocumentReference>
<cbc:ID>CT-2025-5678</cbc:ID>
</cac:ContractDocumentReference>
Para las organizaciones destinatarias que procesan facturas automáticamente (piense en grandes empresas y organismos públicos), el número de pedido suele ser obligatorio. Sin número de pedido, la factura no se acepta.
Muchas facturas contienen un PDF como archivo adjunto visual. Este se incorpora como archivo codificado en base64 en el elemento AdditionalDocumentReference. eConnect puede añadir automáticamente este adjunto durante el envío.
Una factura UBL comprende como mínimo dos partes, y opcionalmente una tercera y una cuarta.
El remitente de la factura. Los datos obligatorios son el nombre, la dirección y como mínimo un número de identificación fiscal (número de IVA o número KvK). En los Países Bajos, el número KvK es el identificador Peppol principal:
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">12345678</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Voorbeeldbedrijf B.V.</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Kerkstraat 1</cbc:StreetName>
<cbc:CityName>Woerden</cbc:CityName>
<cbc:PostalZone>3441 AB</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL123456789B01</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Voorbeeldbedrijf B.V.</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
El destinatario de la factura. La estructura es idéntica a la del proveedor. El EndpointID es la dirección Peppol a la que se enruta la factura.
En algunos casos hay partes adicionales:
Este bloque describe cómo debe pagarse la factura. Contiene el método de pago (transferencia, domiciliación), el número de cuenta bancaria y opcionalmente una referencia de pago:
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cbc:PaymentID>RF71 2348 2367</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>NL91ABNA0417164300</cbc:ID>
<cbc:Name>Voorbeeldbedrijf B.V.</cbc:Name>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
El código 30 corresponde a transferencia, 49 a domiciliación automática, 58 a domiciliación SEPA. La lista de códigos completa está definida en UNCL4461.
Un campo de texto libre en el que se describen las condiciones de pago. Algunos sistemas también utilizan este campo para el descuento por pronto pago (skonto).
Opcional. Contiene la fecha de entrega y la dirección de entrega, relevante para entregas de mercancías.
Antes de los totales de IVA se encuentran los posibles descuentos o recargos de factura. Cada elemento tiene un indicador (true = recargo, false = descuento), un importe y una categoría de IVA:
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Korting</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">50.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
AllowanceCharge también puede aparecer dentro del elemento Price de una línea de factura, para mostrar la diferencia entre el precio bruto y el precio unitario neto. A ese nivel de precio se aplica una restricción: solo se permiten descuentos (ChargeIndicator=false), no recargos. Además, la regla de validación BR-28 prescribe que el precio bruto no puede ser negativo. Más detalles en el artículo sobre recargos y descuentos.
El IVA se resume por tipo. Cada tipo obtiene su propio TaxSubtotal con la base imponible y el importe de IVA calculado:
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">42.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">200.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">42.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
La categoría de IVA S designa el tipo normal. Otros códigos frecuentemente utilizados son Z (tipo cero), E (exento), AE (inversión del sujeto pasivo nacional), K (intracomunitario) y G (exportación).
La pieza final de la factura. Aquí figuran todos los importes que juntos constituyen el importe a pagar:
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">250.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">200.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">242.00</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">50.00</cbc:AllowanceTotalAmount>
<cbc:PayableAmount currencyID="EUR">242.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
El cálculo es: LineExtensionAmount (suma de todos los importes de línea) menos AllowanceTotalAmount (descuentos) más ChargeTotalAmount (recargos) = TaxExclusiveAmount. Más el IVA = TaxInclusiveAmount. Menos el importe eventualmente prepagado (PrepaidAmount) = PayableAmount. Este cálculo debe ser exactamente correcto, de lo contrario la validación falla.
Cada factura tiene como mínimo una línea. Una línea contiene un número de secuencia, la cantidad facturada, el importe de la línea, una descripción del artículo e información de IVA:
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">250.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consultancy-uren maart 2026</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">25.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
Una línea de factura también puede contener un descuento o recargo (mediante un elemento AllowanceCharge anidado), hacer referencia a una línea de pedido, y contener información adicional del artículo como números de artículo o información contable.
Técnico : el campo
AccountingCosten la línea de factura se utiliza a menudo para transmitir un centro de costes o dimensión. Los sistemas destinatarios como AFAS, Unit4 y SAP pueden leer este campo para la contabilización automática. Una aplicación particular es el Referentiegrootboekschema (RGS): al incluir un número de referencia RGS enAccountingCost, el software contable del destinatario puede contabilizar automáticamente el importe en la cuenta apropiada. El PSB transporta el elementoAccountingCostsin modificaciones en el UBL.
La fuerza de una factura UBL reside en su consistencia interna. Los totales de IVA deben coincidir exactamente con el IVA por línea. Los totales de factura deben ser exactamente la suma de los importes de línea menos descuentos más recargos. Si hay un céntimo de diferencia, la factura es rechazada durante la validación.
eConnect valida automáticamente cada factura al recibirla y proporciona un mensaje de error claro en caso de discrepancias. Cuando es posible, las pequeñas desviaciones (como un campo faltante que puede deducirse del contexto) se corrigen automáticamente.
eConnect proporciona un mensaje de error claro indicando qué elemento es incorrecto. Las causas más frecuentes son errores de cálculo en los totales de IVA, campos obligatorios faltantes o códigos no válidos. Las pequeñas desviaciones (como un campo faltante deducible) se corrigen automáticamente cuando es posible.
Depende de cómo facture. Si crea facturas en la plataforma eConnect, todos los elementos obligatorios se rellenan automáticamente. Al enviar a través de la API, debe proporcionar los campos requeridos usted mismo, pero eConnect valida todo y da una respuesta clara sobre datos faltantes o incorrectos.
Sí. Cada línea de factura tiene su propia categoría de IVA y porcentaje. En el bloque TaxTotal, los tipos se agrupan automáticamente en TaxSubtotals separados. Así puede combinar en una sola factura líneas con 21%, 9%, 0% o IVA exento.
¿Desea comprender mejor una parte específica de la factura? Los artículos a continuación profundizan en los escenarios más comunes.
Consejo : utilice el validador eConnect gratuito para verificar su factura antes de enviarla. El validador comprueba no solo la estructura del esquema, sino también todas las reglas de cálculo y las listas de códigos.
Valide su factura