FrancodesystemsFran<code>systems
28 de mayo de 2026 · 11 min de lectura · Por Juan Cantón Rodríguez

Verifactu en ecommerce: cómo no romper la cadena de huellas

Si Shopify, Stripe o Amazon generan facturas en tu ERP automáticamente, una mala integración rompe la cadena SHA-256 encadenada que Verifactu exige. Esto es lo que tienes que auditar en cada flujo antes del 1 enero 2027 — y cómo evitar 50.000€ de sanción.

Decisión rápida
Fecha límite sociedades1 enero 2027 (RD-ley 15/2025)
Fecha límite autónomos1 julio 2027
Sanción máxima50.000€ (art. 201 bis LGT)
Lo que rompe la cadenaReintentos no idempotentes · webhooks en paralelo · campos vacíos en origen
Ventana para auditar/migrar sin cuello de botellaH1 2026 (sociedades) · Q3 2026 (autónomos)

El problema específico del ecommerce

Si tu negocio vende online, no eres tú quien crea la factura. La crea Shopify cuando confirma un pedido. La crea un webhook de Stripe cuando se cobra. La crea Amazon cuando el cliente compra. El humano no toca nada, y eso es lo bueno — excepto cuando llega Verifactu, que asume que el software de facturación es uno y los registros están encadenados criptográficamente.

Verifactu (regulado por el RD 1007/2023 más el RD 254/2025, la Orden HAC/1177/2024 y la última prórroga del RD-ley 15/2025) obliga a que cada factura lleve una huella SHA-256 calculada sobre el contenido de la factura encadenada con la huella de la factura inmediatamente anterior. Si el orden se rompe, si un duplicado se cuela, si una factura aparece "sin huella anterior", la AEAT detecta el hueco en una inspección automatizada. No hay margen de "ya lo arreglamos el mes que viene".

La gente que viene de Excel o de un programa monoplaza piensa: "tengo Holded con Verifactu nativo, ya está". Y para emisiones manuales es verdad. El problema aparece cuando dejas a Shopify, Stripe o Amazon crear facturas por ti vía integración. Si la integración no respeta los tres principios que veremos abajo, la cadena se rompe sin que nadie se entere hasta que llega la inspección.

Cómo funciona la cadena de huellas SHA-256 (la versión sin paja)

Para cada factura nueva, el software calcula:

// pseudo-código
huella(N) = SHA256(
contenido_factura(N)
+ huella(N-1) // la inmediatamente anterior
)

El "contenido de la factura" incluye NIF emisor, NIF receptor, fecha de expedición, importe total, tipo de IVA, serie y otros campos definidos por la Orden HAC/1177/2024. Si cualquier campo cambia tras emitir, la huella ya no encaja con la siguiente factura, y eso pone una bandera roja a la AEAT.

Lo que esto significa en práctica: el orden de creación de las facturas importa. No puedes procesar 10 webhooks en paralelo y dejar que la base de datos resuelva el orden por timestamp. Tienes que serializar la entrada al módulo Verifactu, o asegurarte de que tu cola garantiza orden.

Tres patrones de integración que rompen la cadena (y cómo evitarlos)

#1 — Reintentos no idempotentes que duplican facturas

Shopify reintenta los webhooks que no devuelven 200 en 5 segundos hasta 19 veces durante 48 horas. Si tu integración crea una factura Holded pero falla justo antes de devolver 200, Shopify reintenta. Si no tienes deduplicación por X-Shopify-Webhook-Id o por order_id, creas dos facturas para el mismo pedido. Dos huellas SHA-256 distintas para la misma operación. La cadena queda incoherente.

Solución: deduplicación a nivel de cola (BullMQ con jobId fijo por webhook_id), tabla de webhooks procesados con UNIQUE constraint, o token de idempotencia hacia el API de Holded. Cualquiera de los tres. Pero uno tiene que estar.

#2 — Procesamiento en paralelo sin garantía de orden

Si tu cola procesa 4 jobs en paralelo y dos pedidos Shopify entran en milisegundos de diferencia, puedes acabar creando la factura del pedido B antes que la del pedido A. La cadena Verifactu en Holded se asigna en el orden en que el módulo recibe la llamada, no en el orden de pedido. Resultado: la huella de la factura A apunta a la huella de la factura B en vez de la anterior real.

Solución: concurrencia 1 para el worker que crea facturas Verifactu, o un lock distribuido (Redis SETNX) sobre el módulo de facturación. La pérdida de throughput es ridícula — el módulo Verifactu de Holded procesa cientos de facturas por minuto en una sola conexión — y la garantía vale el coste.

#3 — Campos obligatorios que llegan vacíos del origen

Verifactu exige campos específicos: NIF del receptor (válido para B2B), forma de pago, tipo de IVA correcto. Shopify no siempre te da el NIF (Customer Tax ID es opcional). Stripe te da el email pero no el NIF de empresa salvo que actives Stripe Tax. Amazon Seller Central, para clientes finales, no proporciona NIF.

Si tu integración crea una factura sin NIF cuando es un B2B intracomunitario que sí lo requiere, técnicamente la factura es no conforme. La huella se calcula igual y la cadena no rompe técnicamente, pero ante una inspección la AEAT puede sancionarte por factura mal emitida, lo cual cae bajo el mismo art. 201 bis LGT.

Solución: validación de campos obligatorios en la integración antes de mandar a Holded. Si falta NIF en un pedido que requiere factura B2B, mejor encolarlo a una cola de revisión manual que crear una factura mal.

Qué auditar específicamente en cada plataforma

Shopify → Holded

  • Webhook orders/create con deduplicación por order_id + serie de Holded correcta (B2C / B2B intracomunitario / exportación).
  • Validación VIES del NIF intracomunitario antes de marcar la factura como exenta de IVA. Si el VIES dice "inválido" y la factura va con 0% IVA, te van a reclamar el IVA en una inspección.
  • Webhook refunds/create que dispara factura rectificativa Holded encadenada — no modificación de la original.
  • Multidivisa con contravalor EUR registrado al tipo de cambio del pedido.

Detalle técnico completo en /integraciones/holded-shopify.

Stripe → Holded

  • Decidir quién emite la factura formal: Stripe (con Stripe Tax) o Holded. Recomendación: Holded, porque Verifactu nativo.
  • Webhook charge.succeeded idempotente con charge_id como clave de deduplicación.
  • Reconciliación periódica: comparar transacciones Stripe del mes con facturas Holded del mismo periodo. Cualquier hueco se investiga.

Detalle técnico en /integraciones/holded-stripe.

Amazon Seller Central → Holded

  • Distinguir facturas Amazon (Amazon Tax / Amazon Business Invoices) de facturas propias. Solo las propias entran en tu cadena Verifactu.
  • Settlement reports descargados desde SP-API procesados con orden, no en paralelo.
  • Gestión de devoluciones FBA con factura rectificativa en Holded encadenada.

Más detalle en /integraciones/holded-amazon.

Caso real: marca DTC con 500 pedidos/mes Shopify

En un proyecto reciente para una marca DTC que vende moda en Shopify, el cliente tenía Holded conectado vía un plugin community. Al auditarlo, encontramos lo siguiente:

  • No había deduplicación por webhook_id. Habían tenido un fallo de red durante un Black Friday y Shopify había reintentado un webhook 4 veces. Resultado: 4 facturas Holded duplicadas para el mismo pedido, todas con huella distinta. La cadena Verifactu técnicamente seguía sin romperse — porque cada huella se encadenó con la anterior — pero contablemente había 4 facturas que no debían estar. La AEAT podría detectarlo en cruzando con Shopify Tax.
  • Concurrencia del worker = 5. Aleatoriamente el orden de facturación no coincidía con el orden de pedido. Cadena Verifactu inconsistente.
  • Validación VIES desactivada. 12 facturas a empresas portuguesas e italianas marcadas como exentas sin validar el NIF. Riesgo de reclamación de IVA.

Tras 5 días de auditoría + 2 semanas de reescritura de la integración (cola BullMQ con concurrencia 1 sobre el módulo Verifactu, dedupe por webhook_id, validación VIES obligatoria, reconciliación nocturna): cero duplicados desde hace 4 meses, cadena Verifactu auditable, asesoría tranquila.

Cuándo auditar tu setup (timing realista)

Las fechas vigentes tras el RD-ley 15/2025:

  • 1 de enero de 2027 — sociedades (SL, SA, cooperativas) sujetas al IS deben emitir todas las facturas con software Verifactu compliant. Si tu ecommerce es S.L. y emites con Shopify integrado, hay que auditar AHORA para tener margen.
  • 1 de julio de 2027 — autónomos (IRPF), entidades en atribución de rentas, no residentes con establecimiento permanente.

Si tu sociedad tiene ecommerce y la integración es vieja o community: empieza en H1 2026. Para autónomos vale dejarlo a Q3 2026 pero no más. Q4 2026 será cuello de botella en partners técnicos — todos van a llegar tarde.

Preguntas frecuentes

¿Verifactu afecta a las facturas que genera Shopify automáticamente?

Sí. La obligación Verifactu (RD 1007/2023, fechas vigentes 1 enero 2027 sociedades y 1 julio 2027 autónomos por RD-ley 15/2025) aplica a CUALQUIER factura emitida, da igual si la genera un humano en el ERP o un webhook desde Shopify. La integración Shopify → Holded debe respetar la cadena SHA-256 encadenada y el código QR para cada factura creada automáticamente, igual que si fuera manual.

¿Qué es exactamente la 'cadena de huellas' Verifactu?

Cada factura conforme Verifactu lleva una huella criptográfica SHA-256 que se calcula sobre el contenido de la factura (NIF emisor, NIF receptor, importe, fecha, etc.) Y la huella de la factura inmediatamente anterior. Eso encadena todas las facturas — si una se modifica o se inserta en mitad de la cadena, el siguiente cálculo no coincide y la AEAT detecta el hueco. Es lo que evita modificaciones a posteriori.

¿Por qué una integración mal hecha puede romper esa cadena?

Tres razones típicas: (1) reintentos no idempotentes que crean una factura duplicada sin saberlo, (2) procesamiento en paralelo de webhooks que registra facturas fuera de orden, (3) campos obligatorios que llegan vacíos del origen (Shopify, Stripe) y la factura se crea sin pasar por el módulo Verifactu del ERP. Si tu integración escribe facturas y no respeta los tres puntos, tienes riesgo.

Si uso Holded y la integración la hizo el plugin oficial de Shopify, ¿estoy a salvo?

Probablemente sí para casos básicos, pero no garantizado. Holded tiene Verifactu nativo (es Colaborador Social oficial de la AEAT) y los plugins oficiales suelen apuntar bien. Los puntos a verificar manualmente: que cada webhook fuerce la creación dentro del módulo Verifactu, que los reintentos sean idempotentes (no dupliquen), que las facturas con descuentos por línea y multimoneda mantengan los campos requeridos. Si tu volumen es alto o tienes B2B intracomunitario, recomendamos auditoría externa.

¿Qué pasa con las facturas que Stripe genera automáticamente al cobrar?

Si tu modelo es ecommerce y Stripe es la pasarela pero la factura formal la emite Holded, lo importante es que el webhook charge.succeeded → Holded mantenga la idempotencia (clave: stripe charge_id como identificador único). Si Stripe Tax o Stripe Billing emite la factura directamente sin pasar por Holded, esa factura NO está en tu cadena Verifactu — tienes que decidir si quieres que Stripe sea el sistema oficial de facturación (en cuyo caso Stripe debe cumplir Verifactu, complicado en práctica) o si Holded re-emite la factura con QR/huella correcta tras el cobro.

Amazon Seller Central emite facturas a clientes finales — ¿son válidas Verifactu?

Las facturas que Amazon emite por su cuenta (Amazon Tax / Amazon Business Invoices) son facturas de Amazon, no del vendedor. Si tú emites tus propias facturas paralelamente (cada vez más recomendado para B2B), esas sí tienen que ser Verifactu compliant. La integración Amazon → Holded debe diferenciar entre 'facturas Amazon' (registro contable, no rompen tu cadena) y 'facturas tuyas' (entran a la cadena Verifactu). Es una diferenciación que se nos olvida con frecuencia y trae sorpresas.

¿Refunds y devoluciones parciales rompen la cadena?

No deberían — la cadena se mantiene porque la factura rectificativa que se genera al devolver lleva su propia huella encadenada al inmediato anterior. Lo que sí pasa: una mala integración que cancela y reemite la factura original en vez de generar una rectificativa rompe la lógica fiscal aunque la cadena técnica esté bien. Verifica que cada refund de Shopify dispara una rectificativa Holded, no una modificación de la factura original.

¿Cuánto cuesta auditar una integración Verifactu compliant?

Una auditoría de integración existente (Shopify, Stripe o Amazon hacia Holded): 4-7 días laborables, precio cerrado tras diagnóstico de 30 min sin compromiso. Una integración nueva con flujo Verifactu compliant: 2-3 semanas según volumen y casos límite (multimoneda, B2B intracomunitario, multi-tienda). En francodesystems lo hacemos como servicio fijo, ver /verifactu para detalles.

Autor

Juan Cantón Rodríguez

Founder & lead developer de Francodesystems. Lleva el nodo open-source n8n-nodes-holded con cobertura 100% de Holded API v2 (42 recursos · 323 ops). Diseña arquitecturas DDD con queues idempotentes y retries con backoff para integraciones Verifactu compliant en pymes españolas.

¿Quieres auditar tu integración Verifactu antes de 2027?

30 minutos. Te decimos qué patrones rompen tu cadena, qué auditar y qué cuesta dejarlo limpio. Sin compromiso.