Saltar al contenido principal

Factura electrónica ZUGFeRD desde una lista de SharePoint: Convierta JSON en XML EN 16931 y un PDF/A-3 en Power Automate con PDF4me

· 30 min de lectura
SEO and Content Writer

PDF4me Create ZUGFeRD Invoice es una acción de Power Automate que convierte los datos de una factura en una factura electrónica híbrida PDF/A-3. Al conectarse a una lista de SharePoint, toma el JSON que una acción Compose genera a partir de cada fila, escribe el XML EN 16931, dibuja la factura legible en el PDF base, archiva el resultado y lo envía por correo electrónico al comprador.

Si buscas ZUGFeRD, encontrarás tres opciones: una explicación del formato, un validador que te indica si un archivo que ya tienes es correcto, o una biblioteca en PHP, Java o C# para desarrolladores de software de facturación. Las tres opciones presuponen que la factura ya existe. La pregunta que ninguna responde es la que se plantea un equipo financiero: los datos de la factura están en una lista, en una hoja de cálculo, en cualquier sistema que registre las ventas, y deben generarse como una factura electrónica que cumpla con la normativa. Este flujo es la solución que faltaba, en siete pasos y sin necesidad de código.

El flujo de un vistazo
1. When an item is created
Activador de SharePoint en la lista denominada ZUGFeRD Requests. Cada fila corresponde a una factura.
2. Compose
Crea un objeto JSON de factura a partir de la siguiente fila: vendedor, comprador, artículo, totales, pago.
3. Get file content using path
Lee BaseInvoice.pdf, la página en la que está dibujada la factura.
4. Create ZUGFeRD Invoice
PDF4me PDF. Formato de entrada 2.0-JSON, XmlWithPdf, conformidad EN16931, factura generada.
5. Create file
Guarda el PDF híbrido en la biblioteca ZUGFeRD Invoices.
6. Update item
Status de los sellos Generated y el OutputLink volvió a aparecer en la misma fila.
7. Send an email (V2)
Envía la factura por correo a la dirección del comprador que figura en la fila.
La versión corta

Se inserta una fila en una lista de SharePoint con el vendedor, el comprador, una línea de artículo y las fechas. Cuatro segundos después, aparece una factura PDF/A-3 en una biblioteca de documentos: una página legible con el XML EN 16931 integrado para que el software del comprador lo procese. Nunca se escribe ese XML. Se describe la factura como un objeto JSON corto y PDF4me genera el esquema. La fila obtiene el estado y un enlace, y el comprador recibe el archivo por correo electrónico.

Preguntas y respuestas basadas en el porqué​

¿Por qué almacenar los datos de las facturas en una lista de SharePoint? Porque ese es el formato que ya utilizan la mayoría de los equipos financieros pequeños: una fila por factura, completada por una persona. Las columnas se corresponden uno a uno con los campos que exige el estándar, lo que significa que la correspondencia es visible para cualquiera que abra la lista, y una nueva factura se convierte en una nueva fila en lugar de un nuevo archivo en una carpeta supervisada.

¿Por qué describir la factura en formato JSON en lugar de usar XML? Porque la sintaxis Cross Industry Invoice es extensa y estricta: espacios de nombres anidados, nombres de elementos difíciles de recordar y códigos que deben ubicarse en el lugar exacto. El objeto JSON expresa lo mismo en muchas menos líneas, con claves que se leen como los términos comerciales que representan. PDF4me lo convierte al esquema, por lo que la parte más propensa a errores es la que no requiere mantenimiento.

¿Por qué generar la factura en un PDF base? Porque un archivo ZUGFeRD tiene dos partes y ambas deben coincidir. El XML es para el software del comprador, y la página impresa es para quien la abre. Render Invoice on PDF dibuja la factura en la página base a partir de los mismos datos que generaron el XML, por lo que ambos archivos nunca se desvincularán, como ocurre cuando el diseño se mantiene por separado.

¿Por qué PDF/A-3 y no un PDF común? Porque PDF/A-3 es el formato de archivo que permite adjuntar archivos, y el XML incrustado es precisamente ese archivo adjunto. Además, es lo que permite que la factura sea legible años después: las fuentes y los perfiles de color se conservan dentro del archivo, algo fundamental para un documento que la mayoría de las empresas deben conservar durante una década.


Lo que obtendrás​

Entrada: una fila con el número de factura, las fechas, la moneda, el bloque del vendedor, el bloque del comprador y una línea de artículo. Salida: una factura ZUGFeRD PDF/A-3 en la biblioteca ZUGFeRD Invoices, la fila actualizada con su estado y un enlace, y un correo electrónico al comprador con la factura adjunta.

Elemento de lista de SharePoint RE-2026-0007 en ZUGFeRD Requests que muestra InvoiceNumber RE-2026-0007, InvoiceDate 12.10.2026, DueDate 11.11.2026, Currency EUR, SellerName Muster GmbH, SellerStreet Hauptstrasse 1, SellerPostalCode 10115, SellerCity Berlin, SellerCountry DE, SellerVATID DE123456789, BuyerName Test Kunde AG, BuyerStreet Bahnhofstrasse 5, BuyerPostalCode 80331, BuyerCity München, BuyerCountry DE, ItemDescription Consulting, Quantity 10,00, UnitPrice 100,50, VATRate 19, una columna Email y Status Generated

Una fila por factura. Cada columna de este panel se convierte en una clave en el JSON que genera el flujo.

Listado de la biblioteca de facturas de SharePoint ZUGFeRD desde ZUGFeRD_RE-2026-0001.pdf hasta ZUGFeRD_RE-2026-0004.pdf y el más reciente ZUGFeRD_RE-2026-0007.pdf, todos modificados por la cuenta Pdf4me Flow.

Un archivo por número de factura, escrito por la cuenta de flujo.

Outlook muestra el correo electrónico con el archivo ZUGFeRD_RE-2026-0007.pdf adjunto y la factura alemana renderizada abierta en el panel de vista previa: vendedor Muster GmbH en Berlín con NIF DE123456789, cliente Test Kunde AG en Múnich, factura RE-2026-0007 con fecha 12.10.2026, tipo de documento 380, una línea de Consultoría con un IVA del 19%, neto 1.005,00 euros y total 1.195,95 euros.

La mitad legible del mismo archivo, tal como la ve el comprador.


Lo que necesitas​

  • Power Automate. Abre Power Automate. Un flujo automatizado en la nube con conectores estándar. SharePoint, Office 365 Outlook y PDF4me no requieren un plan premium.
  • Clave API de PDF4me. Obtenga su clave API. Este flujo utiliza una conexión de PDF4me, PDF4me PDF.
  • Una lista de SharePoint para las solicitudes. La lista capturada se llama ZUGFeRD Requests, con InvoiceNumber, InvoiceDate, DueDate, Currency, el bloque Seller (nombre, calle, código postal, ciudad, país, ID), el bloque Buyer, ItemDescription, Quantity, UnitPrice, VATRate, una columna Email, una columna de selección Status y una columna OutputLink a la que escribe el flujo.
  • Un PDF base de factura. El flujo capturado guarda BaseInvoice.pdf en una biblioteca llamada ZUGFeRD Templates. Esta es la página donde se dibuja la factura, por lo que su membrete debe ir aquí.
  • Una biblioteca para las facturas terminadas. El flujo capturado escribe en ZUGFeRD Invoices.
  • Tus datos de vendedor, incluyendo el ID fiscal (IVA). Estos datos se insertan en las columnas de la lista, de modo que el mismo proceso puede generar facturas para más de una entidad jurídica.
Comience con un objeto JSON funcional
Si prefieres ver la estructura antes de crear el Compose, aquí tienes la estructura completa ZUGFeRD 2.0 EN16931 con todas las claves que acepta el perfil. Pégala en Compose y reemplaza los valores por tus tokens.
Descargar sample-invoice-zugferd-2.0-en16931.json

El flujo de un vistazo​

  1. When an item is created (SharePoint), se supervisa la lista denominada ZUGFeRD Requests.
  2. Compose construye el JSON de la factura a partir de la fila.
  3. Get file content using path reads /ZUGFeRD Templates/BaseInvoice.pdf.
  4. Create ZUGFeRD Invoice (PDF4me PDF) convierte el JSON a XML EN 16931 y devuelve el PDF híbrido.
  5. Create file (SharePoint) lo guarda como ZUGFeRD_<invoice number>.pdf.
  6. Update item (SharePoint) establece Status en Generated y rellena OutputLink.
  7. Send an email (V2) (Office 365 Outlook) envía la factura al comprador.

Descripción general del flujo completo​

Historial de ejecución de Power Automate que muestra siete acciones que se completaron con éxito en orden: Cuando se crea un elemento a los 0,2 segundos, Redactar a los 0 segundos, Obtener el contenido del archivo usando la ruta a los 0,2 segundos, Crear factura ZUGFeRD a los 1 segundo, Crear archivo a los 2 segundos, Actualizar elemento a los 0,4 segundos y Enviar un correo electrónico V2 a los 0,4 segundos.

Cuatro segundos y pico de principio a fin, y la factura electrónica en sí tarda aproximadamente un segundo. El paso más lento es la escritura del archivo por parte de SharePoint.


Paso 1: ¿Cómo se genera una factura electrónica cuando llega una solicitud?​

Flujo hasta ahora: nada todavía, este es el detonante.

Agregar una fila es la forma en que se solicita una factura, por lo que esa es la señal.

  1. Cree un Automated cloud flow y seleccione SharePoint > When an item is created.
  2. Configurar:
    • Site Address: PDF4me Support - https://ynoox1.sharepoint.com/sites/PDF4meSupport
    • List Name: ZUGFeRD Requests

When an item is created: configuración​

SharePoint Cuando se crea un elemento, se activa con la dirección del sitio PDF4me Support en ynoox1.sharepoint.com/sites/PDF4meSupport y el nombre de la lista ZUGFeRD Requests, sin parámetros avanzados configurados.

Cada columna de la nueva fila se convierte en una ficha que las siguientes seis acciones pueden utilizar.


Paso 2: ¿Cómo se construye el JSON de la factura a partir de las columnas de la lista?​

Flujo hasta ahora: el desencadenador de SharePoint.

Una sola acción Compose describe toda la factura. Aquí es donde los nombres de las columnas coinciden con los nombres que espera el estándar, y es lo suficientemente breve como para leerse en una sola pantalla.

  1. Agregar Data Operation > Compose.
  2. Pega el objeto que aparece a continuación en Inputs y reemplaza cada valor con el token correspondiente.
{
"InvoiceId": "@{triggerBody()?['InvoiceNumber']}",
"TypeCode": "380",
"InvoiceType": "RECHNUNG",
"IssueDate": "@{triggerBody()?['InvoiceDate']}T00:00:00",
"DeliveryDate": "@{triggerBody()?['InvoiceDate']}T00:00:00",
"IsTest": false,
"Seller": {
"Name": "@{triggerBody()?['SellerName']}",
"VatId": "@{triggerBody()?['SellerVATID']}",
"Address": {
"Street": "@{triggerBody()?['SellerStreet']}",
"PostalCode": "@{triggerBody()?['SellerPostalCode']}",
"City": "@{triggerBody()?['SellerCity']}",
"Country": "@{triggerBody()?['SellerCountry']}"
}
},
"Buyer": {
"Name": "@{triggerBody()?['BuyerName']}",
"Address": {
"Street": "@{triggerBody()?['BuyerStreet']}",
"PostalCode": "@{triggerBody()?['BuyerPostalCode']}",
"City": "@{triggerBody()?['BuyerCity']}",
"Country": "@{triggerBody()?['BuyerCountry']}"
}
},
"LineItems": [
{
"ProductName": "@{triggerBody()?['ItemDescription']}",
"Quantity": @{triggerBody()?['Quantity']},
"UnitCode": "C62",
"UnitPrice": @{triggerBody()?['UnitPrice']},
"LineTotal": @{float(...)}
}
],
"Totals": {
"Currency": "@{triggerBody()?['Currency']?['Value']}",
"LineTotal": @{float(...)},
"TaxBasisTotal": @{float(...)},
"TaxPercent": @{triggerBody()?['VATRate']},
"TaxTotal": @{float(...)},
"GrandTotal": @{float(...)},
"ChargeTotal": 0,
"AllowanceTotal": 0
},
"Payment": {
"Currency": "@{triggerBody()?['Currency']?['Value']}",
"PaymentReference": "@{triggerBody()?['InvoiceNumber']}",
"DueDate": "@{triggerBody()?['DueDate']}T00:00:00"
}
}

Compose: configuración​

Acción de composición de Power Automate que contiene el JSON de la factura con InvoiceId, TypeCode 380, InvoiceType RECHNUNG, IssueDate y DeliveryDate, un objeto Seller con VatId y dirección, un objeto Buyer con dirección, una matriz LineItems con ProductName, Quantity, UnitCode C62 y UnitPrice, un objeto Totals con Currency, TaxPercent y expresiones de punto flotante para los valores monetarios, y un objeto Payment con la referencia de pago y la fecha de vencimiento.

Los valores de texto son tokens entre comillas. El dinero y las cantidades son números simples, por eso pasan por float.

De dónde proviene cada parte de la factura​

Clave JSONLo que contieneFuente
InvoiceId, TypeCode, InvoiceTypeNúmero de factura, el código de tipo de documento 380 para una factura comercial y la etiqueta impresa en la páginaInvoiceNumber, luego valores fijos
IssueDate, DeliveryDateCuándo se emitió la factura y cuándo se prestó el servicioInvoiceDate, con el sufijo T00:00:00
SellerNombre, ID fiscal y bloque de dirección completoSellerName, SellerVATID, SellerStreet, SellerPostalCode, SellerCity, SellerCountry
BuyerNombre y dirección del clienteBuyerName, BuyerStreet, BuyerPostalCode, BuyerCity, BuyerCountry
LineItemsDescripción, cantidad con código de unidad C62, precio unitario y total de la líneaItemDescription, Cantidad, UnitPrice
TotalsMoneda, total neto, base imponible, tipo y importe del IVA, total generalMoneda, VATRate y importes calculados
PaymentMoneda, la referencia que el comprador cita al pagar y la fecha de vencimientoMoneda, InvoiceNumber, DueDate

Consejo: Las claves de dinero son la única parte que requiere aritmética, y deben ser números enteros en lugar de cadenas entre comillas, para lo cual se usan las expresiones float. LineTotal es la cantidad multiplicada por el precio unitario, TaxBasisTotal es la suma de los totales de línea, TaxTotal es la base impositiva multiplicada por la tasa dividida por 100, y GrandTotal es la suma de ambos. Para la fila capturada, esto es 1005, 1005, 190.95 y 1195.95. Un "1005" entre comillas será rechazado, mientras que un 1005 simple será aceptado.


Paso 3: ¿De dónde proviene el PDF base?​

Flujo hasta ahora: el disparador más Compose.

Los archivos ZUGFeRD tienen una página legible, y aquí es donde comienza.

  1. Agregar SharePoint > Get file content using path.
  2. Configurar:
    • Site Address: PDF4me Support - https://ynoox1.sharepoint.com/sites/PDF4meSupport
    • File Path: /ZUGFeRD Templates/BaseInvoice.pdf
    • Infer content type (avanzado): Yes

Get file content using path: configuración​

SharePoint Obtener contenido de archivo usando la acción Ruta con Dirección del sitio PDF4me Support, Ruta de archivo /ZUGFeRD Templates/BaseInvoice.pdf e Inferir tipo de contenido establecido en Sí

Guarda tu membrete en este archivo. Se revisa en cada impresión, así que si lo modificas, la siguiente factura también se verá afectada.


Paso 4: ¿Cómo se convierte el JSON en un PDF/A-3 ZUGFeRD?​

Flujo hasta ahora: el disparador, Compose y Get file content using path.

Esta es la acción que genera la factura electrónica. Lee el JSON, escribe el XML EN 16931 y devuelve un único archivo con ambas partes.

  1. Agregue la Create ZUGFeRD Invoice desde la conexión PDF4me PDF.
  2. Configurar:
    • ZUGFeRD version and Input Format: 2.0-JSON
    • Output Mode: XmlWithPdf
    • Invoice JSON Data: la expresión base64(outputs('Compose'))
    • Conformance Level: EN16931
    • Render Invoice on PDF: Yes
    • File Content: una expresión base64() sobre el contenido de Get file content using path
    • File Name: BaseInvoice.pdf

Create ZUGFeRD Invoice: configuración​

PDF4me Crear acción de factura ZUGFeRD con la versión ZUGFeRD y el formato de entrada configurados en 2.0-JSON, modo de salida XmlWithPdf, el campo de datos JSON de la factura contiene la expresión base64 de las salidas Compose, nivel de conformidad EN16931, renderizar factura en PDF Sí, contenido del archivo que contiene una expresión base64 sobre el PDF base y nombre de archivo BaseInvoice.pdf, conectado a PDF4me PDF

El formato de entrada determina qué campo de datos aparece. Seleccione 2.0-JSON y la acción solicitará Invoice JSON Data, no Invoice XML Data.

Lo que decide cada configuración​

CampoValor aquíLo que controla
ZUGFeRD version and Input Format2.0-JSON¿Qué generación ZUGFeRD sigue la salida y los datos llegan como JSON? Esta elección es lo que hace que aparezca el campo Invoice JSON Data
Output ModeXmlWithPdfDevuelve un archivo híbrido, el PDF con el XML incrustado, en lugar de XML por separado
Invoice JSON Database64(outputs('Compose'))El objeto de factura, codificado base64 en el camino
Conformance LevelEN16931El perfil que la factura afirma cumplir y, por lo tanto, qué claves debe proporcionar el JSON
Render Invoice on PDFYesDibuja la factura legible sobre el PDF base en lugar de dejar la página como estaba
File Content, File NameEl PDF baseLa página en la que se emite la factura y el nombre del informe de la acción

Consejo: La acción muestra Invoice XML Data, Invoice JSON Data o Invoice CSV Data según el formato seleccionado en la mitad del menú desplegable. Complete solo la opción que coincida con su elección. La causa más común de errores de validación en esta acción es completar dos campos de datos en la misma ejecución.


Paso 5: ¿Dónde se archiva la factura?​

Flujo hasta ahora: todo a través de Create ZUGFeRD Invoice.

El número de factura identifica el archivo, lo que permite realizar búsquedas en la biblioteca.

  1. Agregar SharePoint > Create file.
  2. Configurar:
    • Site Address: PDF4me Support - https://ynoox1.sharepoint.com/sites/PDF4meSupport
    • Folder Path: /ZUGFeRD Invoices
    • File Name: ZUGFeRD_ seguido del token InvoiceNumber y .pdf
    • File Content: el token Body de Create ZUGFeRD Invoice

Create file: configuración​

Acción de creación de archivo de SharePoint con la dirección del sitio PDF4me Support, ruta de carpeta /ZUGFeRD Invoices, nombre de archivo ZUGFeRD_ seguido del token InvoiceNumber y .pdf, y contenido del archivo establecido en el token Body de la acción PDF4me.

Para RE-2026-0007 esto escribe ZUGFeRD_RE-2026-0007.pdf.


Paso 6: ¿Cómo se registra el resultado de la solicitud?​

Flujo hasta ahora: todo a través Create file.

En la fila donde se solicita la factura también debería indicarse qué sucedió con ella.

  1. Agregar SharePoint > Update item.
  2. Configurar:
    • Site Address: PDF4me Support - https://ynoox1.sharepoint.com/sites/PDF4meSupport
    • List Name: ZUGFeRD Requests
    • Id: el token ID del disparador
    • Title: el token Title del disparador
    • Status Value (avanzado): Generated
    • OutputLink (avanzado): la URL de la biblioteca seguida de ZUGFeRD_, el token InvoiceNumber y .pdf

Update item: configuración​

Acción de actualización de elemento de SharePoint con la dirección del sitio PDF4me Support, el nombre de la lista ZUGFeRD Requests, el ID y el título del desencadenador, el valor de estado establecido en Generated y el enlace de salida creado a partir de la URL de la biblioteca de facturas de ZUGFeRD más el número de factura.

El enlace se construye a partir de la URL de la biblioteca y el mismo patrón de nombre utilizado Create file, con el espacio en el nombre de la biblioteca ya codificado como %20.


Paso 7: ¿Cómo se envía la factura al comprador?​

Flujo hasta ahora: todo a través Update item.

Una factura electrónica que permanece en una biblioteca no ha sido emitida, por lo que la última acción la entrega.

  1. Agregar Office 365 Outlook > Send an email (V2).
  2. Configurar:
    • Para: el token Email del activador
    • Asunto: Your ZUGFeRD e-invoice seguida del token InvoiceNumber
    • Body: una línea que indica el nombre del comprador y la factura, y que especifica que el archivo es un PDF/A-3 con XML EN 16931 incrustado
  3. Abra Advanced parameters y añada el archivo adjunto:
    • Nombre Attachments: 1: ZUGFeRD_ más el token InvoiceNumber más .pdf
    • Contenido Attachments - 1: el token File Content de Create ZUGFeRD Invoice
    • Importance: Normal

Send an email (V2): configuración​

Office 365 Outlook Enviar un correo electrónico Acción V2 con Para tomado de la columna Correo electrónico, un asunto que termina en el número de factura, un cuerpo que nombra al comprador y describe un PDF/A-3 con XML EN 16931 incrustado, un archivo adjunto llamado ZUGFeRD_ más el número de factura y .pdf cuyo contenido es el token de contenido de archivo PDF4me, e Importancia Normal

El archivo adjunto obtiene sus bytes de la acción que los generó, por lo que SharePoint nunca se lee.


Ejecuta el flujo y verifica​

  1. Save el flujo.
  2. Agregue una fila a ZUGFeRD Requests con un comprador, un artículo, ambas fechas y una dirección que pueda verificar.
  3. Abre el historial de ejecución. Las siete acciones deberían aparecer en verde y la ejecución completa debería durar unos segundos.
  4. Abra la biblioteca ZUGFeRD Invoices y compruebe que el archivo se encuentra allí, bajo el número de factura.
  5. Vuelva a la fila: Status debería indicar Generated y OutputLink debería abrir la factura.
  6. Abre el archivo adjunto del correo electrónico y comprueba ambas partes: la página debe mostrar las cantidades correctas y el archivo debe contener el XML en su interior.

La ejecución capturada duró aproximadamente cuatro segundos en total, y la factura electrónica se generó en uno de ellos. El resultado, ZUGFeRD_RE-2026-0007.pdf, tiene un tamaño aproximado de 331 KB y se muestra como una factura alemana: vendedor Muster GmbH en Berlin con ID DE123456789, cliente Test Kunde AG en Muenchen, tipo de documento 380, una línea de Consulting con un IVA del 19 %, neto 1.005,00 EUR, IVA 190,95 EUR y un total de 1.195,95 EUR.

¿Qué creaste exactamente? Un sistema de facturación electrónica que parte de tus propios registros. Los datos se quedan donde los guarda el departamento de finanzas, el estándar se cumple con XML que nunca tuviste que escribir, el comprador recibe un archivo que su software puede leer automáticamente y que su personal puede visualizar en pantalla, y la fila de la solicitud registra que se envió.


Variaciones comunes que puedes agregar sin reconstruir​

Facturar más de una línea
LineItems ya es un array, por lo que este es el cambio más sencillo en el flujo. Mantén las líneas en una segunda lista vinculada por número de factura, obténlas con Get items y crea el array con un Select antes de Compose.
Comprueba la salida antes de que salga
Valida las primeras facturas con ZUGFeRD y compara los resultados con el Conformance Level que hayas configurado. Es la forma más rápida de detectar errores de mapeo mientras el flujo aún es nuevo.
Mantén el XML por separado también
Algunos compradores desean el archivo estructurado por separado. Ejecute la acción una segunda vez con Output Mode configurado en XmlOnly y guarde el resultado en la biblioteca junto al PDF.
Problema para varias entidades jurídicas
El objeto Seller ya proviene de columnas, por lo que una lista puede generarse para dos empresas. Simplemente configure el PDF base con un membrete seleccionado por la misma columna y la página impresa se generará automáticamente.

¿Cómo se compara esto con las otras formas de generar una factura ZUGFeRD​

Cada fila describe la alternativa. La última fila muestra este flujo.

Comparación¿Quién lo dirige?De dónde provienen los datosLo que mantienes
Software de facturación con exportación ZUGFeRD frente a este flujoCualquiera, dentro de ese productoLos propios registros del productoUna suscripción y todo lo que el producto admita
Plataforma de facturación electrónica frente a este flujoFinanzas, a través de un portalCargas o una integraciónUn contrato por documento y una conexión con el mismo
Biblioteca del desarrollador frente a este flujoUn desarrollador, dentro de una aplicaciónTu base de datos, a través del códigoEl código, las actualizaciones del esquema y las versiones
Este flujoCualquiera que pueda agregar una fila a la listaUna lista de SharePoint que el equipo mantieneUn objeto JSON y un PDF base

Preguntas frecuentes​

¿Qué es una factura ZUGFeRD?​

Una factura ZUGFeRD es un archivo que funciona de dos maneras. Es un PDF normal que se puede abrir y leer, y en su interior contiene un archivo XML adjunto con la misma factura como datos estructurados. El sistema contable del comprador lee el XML y registra la factura automáticamente, sin necesidad de que nadie la introduzca manualmente, mientras que la persona encargada de cuentas por pagar sigue viendo una página.

El formato proviene de FeRD, el foro alemán para la facturación electrónica, y su equivalente francés es Factur-X, que es la misma idea con otro nombre.

¿Qué es el formato ZUGFeRD?​

Técnicamente, se trata de un contenedor PDF/A-3 con un archivo XML incrustado en la sintaxis Cross Industry Invoice y un perfil que indica el grado de completitud de los datos. El perfil utilizado es EN16931, que se corresponde con el estándar semántico europeo para la facturación electrónica: el conjunto de campos que EN 16931 define como la base de una factura.

La consecuencia práctica para la automatización es que el resultado se evalúa en función del XML, no de la página. Si se proporcionan los datos que solicita el perfil, el archivo se procesa correctamente; si se mejora el diseño de la página, nada cambia.

¿Cómo crear una factura ZUGFeRD?​

Necesitas tres cosas: los datos de la factura en un formato estructurado, una página para la parte humana y algo que escriba el XML en el PDF como un archivo adjunto PDF/A-3.

En este flujo, los datos son una fila de SharePoint convertida a JSON, la página es BaseInvoice.pdf y Create ZUGFeRD Invoice realiza la tercera parte con Output Mode XmlWithPdf. Si sus datos ya existen como XML Cross Industry Invoice o como una fila CSV, cambie el formato de entrada y utilice ese formato. El resto del flujo no cambia.

¿Cuál es la diferencia entre ZUGFeRD y XRechnung?​

Ambos cumplen con la misma norma europea; la diferencia radica en el formato. ZUGFeRD es híbrido: un PDF legible con el XML integrado, ideal para facturas enviadas a clientes que pueden abrirlas manualmente. XRechnung en cambio, utiliza únicamente XML, el formato que solicitan los compradores del sector público alemán.

Si envía documentos a empresas, el formato híbrido suele ser la opción más segura, ya que cualquier persona que lo abra podrá leerlo. Si factura a una administración pública, compruebe el formato que requiere antes de enviar la factura.


Solución de problemas​

La acción rechaza los datos de la factura

Abre la salida Compose en el historial de ejecución y léela como JSON antes que nada. Una columna vacía deja una clave vacía, y un valor monetario que conserva sus comillas aparece como texto donde se espera un número. Ambos generan un objeto que parece correcto, pero aun así falla la conversión.

Un validador rechaza el nivel de conformidad

Conformance Level determina qué campos requiere el perfil. Si se declara la conformidad con EN16931 pero el JSON omite claves que el perfil espera, la validación fallará, aunque el archivo se abra correctamente. En ese caso, deberá proporcionar las claves que faltan o cambiar a un perfil de menor nivel.

El PDF aparece en blanco o sigue mostrando la plantilla vacía

Render Invoice on PDF está desactivada, por lo que el XML se insertó sin mostrar ningún contenido. El archivo sigue siendo una factura electrónica válida, pero la parte que contiene el usuario es la que figuraba en el PDF original.

El comprador afirma que la factura no contiene XML

Verifique el contenido del archivo adjunto en el paso de correo electrónico y el File Content en Create file. Ambos deben provenir de Create ZUGFeRD Invoice. Si adjunta el PDF base, se enviará una página que se ve bien, pero que no contiene información que su software pueda leer.


Próximos pasos​

El mismo patrón de siete pasos (llega una fila, se describe una factura como datos, se produce un archivo, se archiva, se registra y se envía) es lo que realmente solicita cualquier mandato de facturación electrónica, independientemente del formato que acaben necesitando sus compradores.