Módulos VeriFactu
El código de facturación se organiza en cuatro módulos dentro delefa/verifactu/:
Cadena de hashes
La cadena VeriFactu es única e ininterrumpida para todo el sistema, independientemente de la serie de facturación. Una factura rectificativa (serieRECT) no enlaza con la rectificativa anterior, sino con la última factura emitida cronológicamente en el sistema, sea de la serie que sea.
El orden de la cadena se determina por fecha de emisión y, ante igualdad de fecha, por ID de factura. No se filtra por serie en ningún momento.
El payload que se firma con SHA-256 sigue este esquema estable:
BEGIN IMMEDIATE que asigna el número correlativo y calcula el hash encadenado en el mismo commit, sin posibilidad de condiciones de carrera entre dos emisiones simultáneas.
El primer registro de la cadena (la primera factura emitida en el programa) tiene
hash_anterior vacío (""). Esto es el comportamiento correcto: la cadena arranca desde cero.QR tributario
Cada PDF de factura lleva impreso el código QR en la esquina inferior derecha a 35 × 35 mm, acompañado de la leyenda legal obligatoria.URL de verificación
La URL sigue el formato oficial de la AEAT con los siguientes parámetros:
En el modo actual (no VeriFactu) el endpoint es
ValidarQRNoVerifactu. Cuando se active el modo VeriFactu, el endpoint pasa a ser ValidarQR y se añade el parámetro hash con los 64 caracteres hexadecimales en minúsculas.
La constante VERIFACTU_URL_BASE en config.py almacena únicamente el dominio base:
qr.py añade el segmento de ruta /wlpl/TIKE-CONT/ y el nombre del endpoint al construir cada URL:
Leyenda legal
Modos de operación
La constanteVERIFACTU_MODO_VERIFACTU en lefa/config.py controla el comportamiento del módulo:
LEFA opera actualmente en modalidad no VeriFactu. Esto es el comportamiento correcto y legal mientras la AEAT no haya habilitado el envío oficial obligatorio para todos los contribuyentes. El QR tributario, la cadena de hashes y los registros JSON se generan y conservan con independencia del modo activo.
Registros en disco
Cada factura emitida genera un fichero JSON en:{factura_id}_{numero_factura}.json, con las barras / sustituidas por guiones. Ejemplo:
"tipo": "rectificativa" y el campo factura_rectificada_id relleno con el ID de la factura original.
Exportar registros
Para generar un archivo ZIP con todos los registros (por ejemplo, para una auditoría o para conservar una copia en un soporte externo), use: Herramientas → Exportar registros VeriFactu… El ZIP resultante contiene:- Una carpeta
registros/con todos los ficheros JSON individuales. - Un fichero
indice.jsonen la raíz con el array completo de todos los registros, para facilitar el procesamiento automatizado.
verifactu_export_YYYY-MM-DD.zip y se guarda en ~/.lefa/verifactu/.