Esto no es una lista de intenciones. Es lo que hace el código, y cada punto se puede enseñar y comprobar en una demo.
⛓Huella SHA-256, canon exacto
Ocho campos, en el orden que fija la norma: NIF del emisor, número de serie, fecha de expedición, tipo de factura, cuota total, importe total, huella anterior y fecha-hora con huso horario. En hexadecimal y en mayúsculas, como se espera. La anulación tiene su propio canon de cinco campos, porque la norma lo pide distinto.
⧉Una cadena continua, no una por serie
El eslabón se toma del último registro enviado de la entidad, no del último de su serie ni del mes en curso. El marcador de primer registro solo vale «S» cuando de verdad no hay ninguno antes. Es la diferencia entre una cadena y una colección de trozos.
⚿Cerrojo real de concurrencia
Dos facturas validadas en el mismo segundo no pueden leer el mismo eslabón anterior. El acceso a la cadena está bajo un cerrojo por entidad, tomado antes de leer y liberado siempre, y las cinco vías de envío del módulo pasan por él: la validación de factura, el envío por lotes, el reintento manual, el hook del TPV y la tarea programada.
↺Un rechazo no consume eslabón
Si la AEAT responde con error o la red se cae, la cadena no avanza. El reintento vuelve a partir de la misma huella anterior. Ese detalle es la diferencia entre reintentar y tener que reconstruir.
⇄Envío autenticado con tu certificado
HTTPS con certificado de cliente, con verificación de par y de host activas. Dos entornos y solo dos: producción y el sandbox oficial de la AEAT. El mismo interruptor cambia altas, anulaciones y consultas a la vez, así que no existe la situación de estar medio en pruebas y medio en real.
✓XML validable contra los esquemas oficiales
Los XSD y el WSDL de la AEAT viajan dentro del módulo. El XML puede validarse antes de salir, con el acceso a red del parseador desactivado. Un error de estructura se ve aquí, no en el rechazo.
▤Trazabilidad completa de cada envío
Se conserva el XML exacto que salió, la respuesta cruda de la AEAT, el estado, el código seguro de verificación y la hora, vinculados a la factura. Y cada intercambio deja su línea de auditoría con dirección, código y mensaje. Cuando hay que demostrar algo, se demuestra con el documento, no con un recuerdo.
▣QR de 30 mm sobre cualquier plantilla
El QR se estampa sobre el PDF ya generado, después del generador. Por eso funciona con las plantillas estándar de Dolibarr y con las tuyas, sin tocarlas. Mide 30 mm de lado, el mínimo de la Orden, y la zona de silencio de cuatro módulos se calcula con el QR real de cada factura, no a ojo. En el ticket del TPV el QR va incrustado en el propio documento: imprime aunque el terminal no tenga salida a internet.
⚠Aviso antes del rechazo, no después
Antes de enviar se comprueba el formato y el dígito de control del DNI, el NIE y el CIF, y el nombre fiscal, usando exactamente la misma cadena de resolución del NIF que usará el envío. Lo que se valida es lo que se manda. Y si la AEAT rechaza igual, el error se muestra traducido, con su código, y con un camino directo a corregir la ficha del cliente.