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.

No tiene que escribir XML

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:

Información de cabeceraNúmero de factura, fechas, moneda e identificadores PEPPOL
Vendedor (proveedor)Nombre de su empresa, dirección, NIF, ID PEPPOL
Comprador (cliente)Datos de la empresa del cliente e ID PEPPOL
Información de pagoCuenta bancaria, método de pago, condiciones de pago
Resumen de impuestosDesglose del IVA por categoría y tipo
TotalesTotal de líneas, total de impuestos e importe a pagar
LíneasCada producto/servicio con cantidad, precio e IVA

Explicación de los elementos clave

Estas son las partes más importantes de una factura UBL y lo que contienen:

Identificadores PEPPOL
<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.

Detalles de la factura
<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.

Información del vendedor
<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.

Línea de factura
<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 esquemaPaísDescripción
0191EstoniaNIF (EE + 9 dígitos)
0192EstoniaCódigo del Registro Mercantil (8 dígitos)
0193LetoniaNIF (LV + 11 dígitos)
0200LituaniaNIF (LT + 9-12 dígitos)
9915AustriaNIF
9930ItaliaNIF

Códigos de método de pago

30Transferencia bancaria (la más habitual)
58Transferencia SEPA
49Domiciliación bancaria
48Tarjeta de crédito

Cómo funciona la validación

Antes de poder enviar una factura por PEPPOL, debe superar varias comprobaciones de validación:

Esquema XML (XSD)Automático

Comprueba que la estructura XML sea correcta: que todos los elementos necesarios estén presentes, correctamente anidados y utilicen los tipos de datos adecuados.

Reglas SchematronAutomático

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.

Listas de códigos PEPPOLAutomático

Garantiza que todos los códigos (moneda, país, unidad, categoría de IVA) procedan de las listas oficiales aprobadas por PEPPOL.

Comprobación de cálculosAutomático

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.

Validación en aiDoks

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