DataFirefly Factur-X SW — Factura electrónica Shopware 6: guía completa
Instalación, configuración, Leitweg-ID, perfiles Factur-X / ZUGFeRD / XRechnung 3.0 y validación de facturas electrónicas EN 16931 en Shopware 6.5 a 6.7.
Presentación
DfFacturX SW genera facturas electrónicas conformes a EN 16931 para Shopware 6.5, 6.6 y 6.7. Cada vez que se crea un documento de factura, el plugin construye un XML UN/CEFACT CII y, según el perfil elegido, lo incrusta en el PDF de factura (Factur-X / ZUGFeRD) o lo entrega como archivo autónomo (XRechnung 3.0 para el B2G alemán).
- Factur-X / ZUGFeRD EN 16931 — perfil recomendado para B2B: el PDF que descarga su cliente es la factura electrónica híbrida.
- Factur-X BASIC — perfil ligero, para destinatarios que no exigen el conjunto de datos EN 16931 completo.
- XRechnung 3.0 — XML autónomo en sintaxis CII para facturar a las administraciones alemanas, con Leitweg-ID obligatorio.
Instalación
- Copie la carpeta del plugin en
custom/plugins/DfFacturX(o suba el ZIP desde el admin, Extensiones y Mis extensiones). - Ejecute:
bin/console plugin:refresh
bin/console plugin:install --activate DfFacturX
bin/console cache:clear
La activación instala el conjunto de campos personalizados Factura electrónica (DfFacturX) con el campo df_facturx_buyer_reference en cliente y pedido. Ahí se introduce el Leitweg-ID (BT-10).
Configuración
Admin, Extensiones, DfFacturX, Configuración. Todos los ajustes se aplican por canal de venta.
General
- Activar la generación — crea el XML con cada nuevo documento de factura.
- Perfil — Factur-X EN 16931, Factur-X BASIC o XRechnung 3.0.
- Incrustar el XML en el PDF — para los perfiles Factur-X; el medio del documento se sustituye por el PDF híbrido.
- Adjuntar el XML a los correos — añade
factur-x.xml(onumero-xrechnung.xml) a los correos de pedido. - Solo B2B — genera únicamente si el pedido lleva empresa o número de IVA.
Vendedor
Razón social, calle, código postal, ciudad, país (ISO-2), número de IVA (BT-31), número fiscal (BT-32), correo (BT-34), teléfono y persona de contacto (BG-6). El correo y el contacto son exigidos por XRechnung.
Campos mínimos del vendedor: nombre, calle, código postal, ciudad, país, más el número de IVA o el número fiscal (regla BR-CO-26). Sin ellos, la generación falla con un error explícito en los logs.
Pago
IBAN y BIC (transferencia SEPA, código 58), texto de condiciones de pago (BT-20) y días de vencimiento (BT-9). Sin IBAN, el medio de pago se declara como código 1 (no definido).
Gestión del IVA
Para los tipos al 0 %, el modo Automático aplica: K entrega intracomunitaria (comprador con IVA en otro país UE), G exportación fuera de la UE, Z en el resto. Puede forzar una categoría fija (Z, E, K, G) y personalizar el motivo de exención (BT-120).
XRechnung
Nombre técnico del campo personalizado con la referencia del comprador (por defecto df_facturx_buyer_reference) y valor de respaldo si no hay campo relleno.
Leitweg-ID y referencia del comprador (BT-10)
Introduzca el Leitweg-ID una vez en la ficha del cliente (pestaña de campos personalizados): se reutilizará en todas sus facturas. Para un caso puntual, rellénelo directamente en el pedido — el valor del pedido prevalece sobre el del cliente, que prevalece sobre el de respaldo.
Con el perfil XRechnung, si no se encuentra ninguna referencia del comprador, el plugin se niega a generar un XML inválido y registra un error. Corrija el dato y relance con df:facturx:generate --force.
Funcionamiento
- Al crearse el documento de factura (admin, Flow Builder o API), el plugin carga el pedido en su versión de pedido exacta.
- El XML CII se construye y se guarda en los campos personalizados del documento (
df_facturx_xml,df_facturx_profile,df_facturx_generated_at). - Con un perfil Factur-X, el XML se incrusta en el PDF mediante actualización incremental: archivo
factur-x.xmladjunto, metadatos XMP PDF A-3 y esquema de extensión Factur-X. El medio del documento se sustituye in situ. - Si la opción está activa, el XML se adjunta a los correos de pedido.
Con Flow Builder, añada la acción de generación de factura a su flujo de pedido: la factura electrónica sigue automáticamente, sin pasos adicionales.
Por diseño, un error de factura electrónica nunca bloquea la creación del documento: el incidente se registra y la factura PDF clásica sigue disponible.
Modelo contable EN 16931
- Modelo neto — los pedidos con IVA incluido se convierten mediante los impuestos calculados de Shopware.
- Promociones — convertidas en descuentos a nivel de documento (BG-20), una entrada por tipo de IVA, porque la norma prohíbe las líneas negativas (BR-27).
- Gastos de envío — declarados como cargos a nivel de documento (BG-21), una entrada por tipo.
- RoundingAmount (BT-114) — absorbe cualquier desviación de redondeo: el GrandTotal del XML es estrictamente igual al total del pedido en Shopware.
- Pago SEPA — transferencia código 58 con IBAN/BIC, vencimiento calculado desde la fecha de factura.
Comando de consola
# Regenerar la factura electrónica de la última factura de un pedido
bin/console df:facturx:generate 10042 --force
# Exportar el XML a un archivo (para un validador)
bin/console df:facturx:generate 10042 --output=/tmp/10042.xml
# Forzar un perfil puntualmente (implica la regeneración)
bin/console df:facturx:generate 10042 --profile=xrechnung-30
Lista de comprobación antes de producción
- Cree pedidos de prueba que cubran sus casos reales: canal con IVA incluido y canal neto, promoción, gastos de envío, venta intracomunitaria con número de IVA, exportación fuera de la UE.
- Genere la factura de cada uno y exporte el XML con
--output. - Valide: validador KOSIT para XRechnung, Mustang para Factur-X / ZUGFeRD.
- Abra el PDF híbrido en Adobe Acrobat y compruebe la presencia del adjunto
factur-x.xml.
Solución de problemas
- No se genera ningún XML — compruebe que el plugin está activo para el canal de venta, que el tipo de documento es factura y que el modo solo B2B no filtra el pedido. Consulte los logs (
var/log). - Error «Missing seller configuration» — complete la tarjeta Vendedor (campos mínimos indicados arriba).
- Aviso «PDF embedding skipped» — la estructura del PDF no permitió la incrustación; el XML sigue disponible como adjunto de correo y por consola. Caso típico: PDF generado por un motor de terceros.
- XRechnung rechazado — falta la referencia del comprador: rellene el campo personalizado o el valor de respaldo, y luego
--force. - Regeneración tras cambios de configuración — los documentos ya procesados no se reprocesan automáticamente; use
df:facturx:generate --force.
Limitaciones conocidas y hoja de ruta
- Versión 1.0: solo facturas (código 380). Abonos (381) y facturas rectificativas (384) previstos para la 1.1.
- La conformidad estricta PDF/A-3B depende también de propiedades del PDF de origen producido por el motor dompdf de Shopware (fuentes incrustadas, output intent). Los destinatarios y las herramientas contables explotan el XML incrustado en todos los casos; para una exigencia estricta PDF/A-3B, use el perfil XRechnung o el adjunto XML.
- Una sola línea de IVA por línea de pedido (comportamiento estándar de Shopware).