Saltar al contenido
XRechnung & ZUGFeRDVolver a todas las entradas

Ejemplo de XRechnung: así es el XML

Ejemplo de XRechnung: así es el XML

Una XRechnung no es una página diseñada, sino un archivo XML: cada dato de la factura figura en un elemento propio con un nombre preciso, por ejemplo el número de factura en cbc:ID y el importe a pagar en cbc:PayableAmount. Si se abre en un editor de texto, se ven etiquetas anidadas en lugar de un papel con membrete. El siguiente ejemplo de XRechnung muestra una factura completa, deliberadamente pequeña, en la sintaxis UBL y explica cada uno de sus bloques.

¿Qué aspecto tiene una XRechnung?

La XRechnung se basa en la norma europea EN 16931. La norma establece qué datos contiene una factura y asigna a cada uno un número, por ejemplo BT-1 para el número de factura. Técnicamente, la XRechnung puede escribirse en dos sintaxis XML:

  • UBL (Universal Business Language, OASIS UBL 2.1): elemento raíz Invoice o CreditNote. Muy extendida en la red Peppol.
  • CII (UN/CEFACT Cross Industry Invoice): elemento raíz CrossIndustryInvoice. ZUGFeRD utiliza esta misma sintaxis.

Ambas variantes transportan el mismo contenido; solo se diferencian los nombres de los elementos y su anidamiento. Actualmente está vigente XRechnung 3.0, en la versión 3.0.2.

Ejemplo de XRechnung en XML (UBL)

El ejemplo muestra una factura entre dos empresas por diez horas de consultoría a 100 euros cada una, más un 19 por ciento de IVA. Los nombres, direcciones y números son ficticios.

<?xml version="1.0" encoding="UTF-8"?>
<ubl:Invoice xmlns:ubl="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:xeinkauf.de:kosit:xrechnung_3.0</cbc:CustomizationID>
  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>RE-2026-0042</cbc:ID>
  <cbc:IssueDate>2026-09-28</cbc:IssueDate>
  <cbc:DueDate>2026-10-12</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>PO-4711</cbc:BuyerReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="EM">rechnung@muster-gmbh.de</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Musterstraße 1</cbc:StreetName>
        <cbc:CityName>Mannheim</cbc:CityName>
        <cbc:PostalZone>68159</cbc:PostalZone>
        <cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE123456789</cbc:CompanyID>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Muster GmbH</cbc:RegistrationName>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Erika Muster</cbc:Name>
        <cbc:Telephone>+49 621 1234567</cbc:Telephone>
        <cbc:ElectronicMail>buchhaltung@muster-gmbh.de</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="EM">rechnungseingang@kunde-ag.de</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Am Platz 2</cbc:StreetName>
        <cbc:CityName>Köln</cbc:CityName>
        <cbc:PostalZone>50667</cbc:PostalZone>
        <cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Kunde AG</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>58</cbc:PaymentMeansCode>
    <cac:PayeeFinancialAccount>
      <cbc:ID>DE02120300000000202051</cbc:ID>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>
  <cac:PaymentTerms>
    <cbc:Note>Zahlbar innerhalb von 14 Tagen ohne Abzug.</cbc:Note>
  </cac:PaymentTerms>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19</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">1190.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">1190.00</cbc:PayableAmount>
  </cac: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:Name>Beratungsleistung</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19</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>
</ubl:Invoice>

Explicación de los bloques del ejemplo

Identificador y encabezado de la factura

CustomizationID (BT-24) indica al destinatario según qué conjunto de reglas debe validarse el archivo. El valor con xrechnung_3.0 identifica el archivo como XRechnung 3.0. Si aquí figura un valor incorrecto, la validación falla aunque el contenido sea correcto. ProfileID (BT-23) describe el proceso de negocio, en este caso con el valor habitual de Peppol. A continuación figuran el número de factura (BT-1), la fecha de factura (BT-2), el vencimiento (BT-9), el tipo de factura (BT-3; 380 corresponde a una factura normal) y la moneda (BT-5).

Referencia del comprador

BuyerReference (BT-10) es obligatoria en la XRechnung. En el caso de las autoridades, aquí figura la Leitweg-ID; en el de las empresas, una referencia acordada, como el número de pedido.

Vendedor y comprador

AccountingSupplierParty es el vendedor, con su dirección electrónica (BT-34), dirección postal, USt-IdNr. (número de IVA intracomunitario, BT-31), razón social (BT-27) y contacto (BG-6). La XRechnung exige para el vendedor el nombre, el teléfono y el correo electrónico de la persona de contacto. AccountingCustomerParty es el comprador, con su dirección electrónica (BT-49), dirección postal y nombre. El atributo schemeID="EM" identifica la dirección como dirección de correo electrónico.

Pago

PaymentMeans contiene la forma de pago (BT-81, código 58 para transferencia SEPA) y el IBAN (BT-84). PaymentTerms recoge las condiciones de pago como texto (BT-20).

Impuestos y totales

TaxTotal agrupa el IVA por categoría: la categoría S corresponde al tipo general. LegalMonetaryTotal contiene los totales: suma neta de las partidas, importe neto de la factura, importe bruto de la factura e importe a pagar. Estos valores deben cuadrar exactamente entre sí y con las partidas; de lo contrario, la validación señala un error.

Partidas

Cada InvoiceLine tiene un número (BT-126), una cantidad con código de unidad (BT-129 y BT-130; HUR corresponde a horas), el importe neto de la partida (BT-131), la denominación (BT-153), la categoría fiscal y el precio unitario (BT-146). Encontrará el significado de todos los números en el artículo Campos de la XRechnung: todos los números BT explicados.

La misma factura en CII

En la sintaxis CII, los elementos tienen otros nombres y se organizan en contexto, documento y operación comercial. El comienzo de la misma factura tiene este aspecto:

<rsm:CrossIndustryInvoice
    xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
  <rsm:ExchangedDocumentContext>
    <ram:GuidelineSpecifiedDocumentContextParameter>
      <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
  </rsm:ExchangedDocumentContext>
  <rsm:ExchangedDocument>
    <ram:ID>RE-2026-0042</ram:ID>
    <ram:TypeCode>380</ram:TypeCode>
    <ram:IssueDateTime>
      <udt:DateTimeString format="102">20260928</udt:DateTimeString>
    </ram:IssueDateTime>
  </rsm:ExchangedDocument>
  <rsm:SupplyChainTradeTransaction>
    <!-- Partidas, acuerdos, entrega, liquidación -->
  </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>

En el bloque SupplyChainTradeTransaction figuran las partidas (IncludedSupplyChainTradeLineItem), los datos del vendedor, del comprador y las referencias (ApplicableHeaderTradeAgreement), la entrega (ApplicableHeaderTradeDelivery), así como los impuestos, el pago y los totales (ApplicableHeaderTradeSettlement). Llama la atención que en CII la fecha figura en el formato AAAAMMDD, y en UBL como AAAA-MM-DD.

Esquema XML y validación

Una XRechnung se valida en dos fases:

  1. Esquema XML (XSD): ¿son correctos los nombres de los elementos, su orden y los tipos de datos? Para UBL es el esquema de OASIS UBL 2.1; para CII, el esquema de UN/CEFACT.
  2. Reglas de negocio (Schematron): ¿es correcto el contenido? Aquí se aplican las reglas de la EN 16931 (por ejemplo, BR-CO-15: el importe bruto es igual al importe neto más el impuesto) y las reglas adicionales alemanas de la XRechnung (BR-DE, por ejemplo la obligatoriedad de la referencia del comprador).

Para ello, la KoSIT ofrece un validador de libre acceso con la configuración adecuada para la XRechnung. El ejemplo anterior se limita a la estructura. Antes de enviar un archivo propio, debería validarlo siempre frente a la configuración actual.

Crear y recibir XRechnungen

Nadie escribe XRechnungen a mano. En la práctica, un software o una API genera el archivo a partir de sus datos de facturación y lo valida antes del envío. En el lado del destinatario, faktoora importa las XRechnungen recibidas, las valida y las muestra como un PDF legible; más información en Recibir facturas electrónicas. El artículo Abrir y visualizar una XRechnung explica cómo abrir una XRechnung sin software.

Preguntas frecuentes

¿Qué extensión de archivo tiene una XRechnung?

Por lo general, .xml. El archivo puede abrirse en cualquier editor de texto, pero solo resulta legible con un visor o una visualización.

¿La XRechnung es UBL o CII?

Ambas opciones son válidas. La XRechnung establece el contenido; UBL y CII son dos formas equivalentes de escribirlo. Por ello, quien recibe facturas electrónicas debería poder procesar ambas variantes.

¿Puedo utilizar el ejemplo de XRechnung como plantilla?

Como orientación, sí; como plantilla lista para usar, no. Las facturas reales necesitan, según el caso, otros datos, como la fecha de la prestación, descuentos o varios tipos impositivos, y deben validarse antes del envío.

¿Dónde encuentro ejemplos oficiales de XRechnung?

La KoSIT publica archivos de prueba en UBL y CII junto con la especificación. Encontrará los paquetes vigentes en cada momento en xeinkauf.de.