Formato UBL 2.1 XML
El formato técnico para las facturas PEPPOL. Comprenda cómo se estructuran los datos de su factura para la comunicación máquina a máquina.
¿Qué es UBL?
UBL (Universal Business Language) es un estándar internacional para estructurar documentos empresariales como las facturas. Considérelo como una plantilla precisa que indica a los ordenadores exactamente dónde encontrar cada dato: número de factura, importes, IVA, datos del vendedor, etc.
Cuando crea una factura en aiDoks, convertimos automáticamente sus datos a este formato UBL XML. Esto garantiza que cualquier sistema que reciba su factura pueda leerla correctamente, independientemente del software que utilice.
aiDoks genera automáticamente UBL XML perfecto a partir de su entrada. Esta página es para quienes quieren entender lo que ocurre en segundo plano o necesitan trabajar con archivos en bruto.
Estructura de la factura de un vistazo
Cada factura PEPPOL contiene estas secciones principales en este orden:
Explicación de los elementos clave
Estas son las partes más importantes de una factura UBL y lo que contienen:
<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>Estos identificadores indican a los sistemas receptores que se trata de una factura conforme con PEPPOL BIS 3.0. Son siempre los mismos para las facturas estándar: aiDoks los añade automáticamente.
<cbc:ID>INV-2025-001</cbc:ID>
<cbc:IssueDate>2025-01-29</cbc:IssueDate>
<cbc:DueDate>2025-02-28</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>Su número de factura, fecha de emisión, fecha de vencimiento, tipo (380 = factura estándar) y moneda. Las fechas deben estar en formato AAAA-MM-DD.
<cac:AccountingSupplierParty> <cac:Party> <cbc:EndpointID schemeID="0191">EE123456789</cbc:EndpointID> <cac:PartyName> <cbc:Name>Your Company OÜ</cbc:Name> </cac:PartyName> <!-- Address, VAT number, registration... --> </cac:Party>
</cac:AccountingSupplierParty>Los datos de su empresa. EndpointID con schemeID es su identificador de participante PEPPOL: así sabe la red a dónde enviar las respuestas.
<cac:InvoiceLine> <cbc:ID>1</cbc:ID> <cbc:InvoicedQuantity unitCode="HUR">40</cbc:InvoicedQuantity> <cbc:LineExtensionAmount currencyID="EUR">3000.00</cbc:LineExtensionAmount> <cac:Item> <cbc:Name>Web Development Services</cbc:Name> </cac:Item> <cac:Price> <cbc:PriceAmount currencyID="EUR">75.00</cbc:PriceAmount> </cac:Price>
</cac:InvoiceLine>Cada artículo que factura. Incluye el número de línea, la cantidad (con código de unidad como HUR para horas), el total de línea, la descripción del artículo y el precio unitario. Puede haber varios elementos InvoiceLine.
Referencia de códigos habituales
Esquemas de ID de participante PEPPOL
| ID del esquema | País | Descripción |
|---|---|---|
0191 | Estonia | NIF (EE + 9 dígitos) |
0192 | Estonia | Código del Registro Mercantil (8 dígitos) |
0193 | Letonia | NIF (LV + 11 dígitos) |
0200 | Lituania | NIF (LT + 9-12 dígitos) |
9915 | Austria | NIF |
9930 | Italia | NIF |
Códigos de método de pago
30Transferencia bancaria (la más habitual)58Transferencia SEPA49Domiciliación bancaria48Tarjeta de créditoCómo funciona la validación
Antes de poder enviar una factura por PEPPOL, debe superar varias comprobaciones de validación:
Comprueba que la estructura XML sea correcta: que todos los elementos necesarios estén presentes, correctamente anidados y utilicen los tipos de datos adecuados.
Valida las reglas de lógica de negocio: por ejemplo, que los importes de IVA coincidan con los valores calculados, que los campos obligatorios estén rellenados según el contexto y que los valores de los códigos sean válidos.
Garantiza que todos los códigos (moneda, país, unidad, categoría de IVA) procedan de las listas oficiales aprobadas por PEPPOL.
Confirma que las sumas de las líneas son correctas, que el IVA se calcula adecuadamente y que el importe final a pagar es preciso.
aiDoks ejecuta todas estas validaciones antes del envío. Si hay errores, verá mensajes concretos que explican qué hay que corregir, normalmente un campo que falta o un valor incorrecto.
Archivo de factura de ejemplo
¿Quiere ver un ejemplo completo? Aquí tiene una factura PEPPOL válida mínima:
<?xml version="1.0" encoding="UTF-8"?>
<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>INV-2025-001</cbc:ID>
<cbc:IssueDate>2025-01-29</cbc:IssueDate>
<cbc:DueDate>2025-02-28</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0191">EE123456789</cbc:EndpointID>
<cac:PartyName><cbc:Name>Seller Company OÜ</cbc:Name></cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Main Street 1</cbc:StreetName>
<cbc:CityName>Tallinn</cbc:CityName>
<cbc:PostalZone>10001</cbc:PostalZone>
<cac:Country><cbc:IdentificationCode>EE</cbc:IdentificationCode></cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>EE123456789</cbc:CompanyID>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Seller Company OÜ</cbc:RegistrationName>
<cbc:CompanyID>12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0192">87654321</cbc:EndpointID>
<cac:PartyName><cbc:Name>Buyer Company AS</cbc:Name></cac:PartyName>
<cac:PostalAddress>
<cbc:CityName>Tallinn</cbc:CityName>
<cac:Country><cbc:IdentificationCode>EE</cbc:IdentificationCode></cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Buyer Company AS</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">220.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">220.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>22</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1220.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">1220.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consulting Services</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>22</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>