Productor: Input Creativity SL (NIF B18978924) · Versión del manual: 1.7.2 (15-sep-2026)
Productor: Input Creativity SL (NIF B18978924) · Módulo libre (clean-room) basado en las
especificaciones públicas de la AEAT.
Versión del manual: 1.7.2 (15-sep-2026) · Se aplica a la versión 1.7.2 del módulo.
VeriFactu es el sistema de la Agencia Tributaria (AEAT) que obliga a los sistemas de facturación a registrar cada factura emitida (alta, anulación y rectificación), firmarla electrónicamente y conservarla a disposición de la AEAT. Las obligaciones entran en vigor el 1 de enero de 2027 si su empresa tributa por el Impuesto sobre Sociedades, y el 1 de julio de 2027 en el resto de casos (autónomos y profesionales). Este módulo, instalado en su AppVanza CRM, hace automáticamente todo el trabajo:
| Función | Qué hace |
|---|---|
| Registro automático | Al emitir una factura (pasarla de borrador a no pagada), genera el registro VeriFactu y lo envía a la AEAT sin intervención manual. |
| Huella encadenada | Cada registro lleva una huella SHA-256 que enlaza con el anterior (cadena inalterable). |
| Firma electrónica | Cada registro se firma con su certificado electrónico, en formato XAdES Enveloped (el que exige la normativa), sobre el contenido del propio registro. |
| Código QR | Las facturas emitidas llevan un QR que la AEAT valida en su web. |
| Consulta | Puede consultar qué facturas están registradas en la AEAT (estado, fechas). |
| Bloqueo de integridad | Una factura ya registrada no se puede modificar en sus datos fiscales ni borrar (solo anularse con su registro). |
| Eventos | Registra eventos del sistema (inicio/fin NoVeriFactu, resúmenes, anomalías) como exige la norma. |
| Anulaciones y abonos | Al cancelar una factura o crear un abono, registra la anulación/rectificativa correspondiente. |
Desde el menú VeriFactu → Configuración:
💡 Importante: el cambio de pruebas a producción reinicia la cadena de huellas
(la AEAT de producción no conoce los registros de pruebas). El módulo le pedirá confirmación
explícita la primera vez.
Mientras el CRM está en Pruebas (preproducción) las facturas, anulaciones y abonos que se emitan son de prueba: se registran en el entorno de pruebas de la AEAT y no tienen ningún valor fiscal. Antes de pasar a Producción hay que limpiarlas, por dos motivos:
Quién lo hace: su administrador (o Input Creativity SL) desde VeriFactu → Configuración → tarjeta «Datos de preproducción (pruebas)». También está disponible:
Qué borra y qué no (garantías del módulo):
| Alcance | Detalle |
|---|---|
| Sí borra | Los registros VeriFactu de prueba (facturas y eventos) y sus ficheros JSON. |
| No borra nunca | Los registros de producción. |
| No borra nunca | Facturas ajenas al módulo (creadas a mano, importadas o de otros fines): solo toca las que tienen registro de prueba del módulo. |
| No borra | El registro local de números ya enviados (§2.2): es justo lo que conviene recordar después de limpiar. |
Recomendación: si solo quiere poder repetir las pruebas sin liarse con la numeración, desmarque la casilla de facturas y limpie solo los registros. Así el CRM no recicla números y no se encuentra con rechazos por duplicado (ver §2.2). Si prefiere empezar de cero, limpie también las facturas: el módulo reinicia la numeración, pero entonces apunte hasta qué número se envió, porque la AEAT no lo olvida.
La AEAT no olvida lo que ha recibido. Si se le vuelve a enviar el mismo NIF, el mismo número de factura y la misma fecha, responde 3000: Registro de facturación duplicado y el registro queda Incorrecto. Es lo que ocurre cuando, tras una limpieza de pruebas, el CRM reutiliza un número que ya se había enviado (la limpieza libera la numeración). Para evitarlo, desde la versión 1.6 el módulo:
writable/verifactu_numeros_enviados.json. La limpieza de pruebas no borra ese fichero.💡 En producción no hay nada que duplicar (no hay registros previos), así que este aviso solo
aparece en pruebas. Puede borrar el fichero a mano cuando empiece de cero.
El CRM de AppVanza no trae un actualizador propio: el botón «Actualizar» de Ajustes → Plugins solo puede mostrar información, y subir un ZIP de un módulo ya instalado lo rechaza el propio CRM («Este complemento ya está instalado»). Por eso, desde la versión 1.6, el módulo es el que avisa:
La comprobación consiste en descargar un fichero público de versiones (https://appvanza.com/verifactu_ultima_version.json): no envía ningún dato de su empresa, de sus facturas ni de sus clientes, y no afecta al registro en la AEAT (si no hay conexión, simplemente se muestra «no se pudo comprobar» y todo sigue funcionando).
💡 Cómo se actualiza: Ajustes → Plugins → ⋮ → Borrar VeriFactu → Subir el ZIP nuevo →
Instalar → Activar. Al borrar se van solo los ficheros del módulo: su configuración, el
certificado, los registros enviados, los JSON firmados y el registro de números ya enviados
se conservan (están fuera de la carpeta del módulo, en la base de datos,
files/Verifactu/y
writable/). La versión nueva trae su declaración responsable y su registro de cambios (§8).
El módulo puede funcionar de dos maneras, y se elige por empresa en VeriFactu → Configuración («Modo VeriFactu / NoVeriFactu»):
| Modalidad | Qué hace |
|---|---|
| VeriFactu (por defecto) | Genera el registro al emitir, lo firma, lo encadena y lo envía a la AEAT. Es la modalidad normal y la que se usará en producción |
| No VeriFactu | Hace lo mismo excepto el envío: el registro y los eventos se generan, se firman, se encadenan y se conservan a disposición de la AEAT. No se remite nada |
Lo que debe saber si trabaja en No VeriFactu:
ValidarQRNoVerifactu).⚠️ Antes de pasar a Producción, si ha estado en No VeriFactu, tenga en cuenta que esas facturas de
prueba no están en la AEAT: es lo esperado. Los registros de prueba se limpian con la herramienta de
limpieza de preproducción (§2.1).
El módulo incorpora IVA % y Descuento % en cada línea de la factura.
base − descuento + IVA, menos la retención global.Ejemplo: línea de 50 € con IVA 21 % y Dto 10 % → base 45 + IVA 9,45 = 54,45 €. La AEAT recibe 54,45 € (sin IRPF, que no forma parte del registro).
La AEAT no «sustituye» su factura: incorpora el registro a su sistema, lo encadena con los registros anteriores de su empresa y le devuelve el resultado de ese registro:
| Resultado | Significado | Qué debe hacer |
|---|---|---|
| Correcto | El registro se ha aceptado y queda almacenado en la AEAT. | Nada: la factura está registrada. |
| AceptadoConErrores | Se ha almacenado, pero con algún aviso formal. | Revise el código y la descripción en Registros y contacte con Input Creativity. |
| Incorrecto | Lo ha rechazado (no queda registrado). | Lea el error, corrija la factura si es posible y vuelva a emitirla. |
| Pendiente | Todavía no hay respuesta (envío en curso o reintento). | Espere unos minutos: el cron lo reintenta solo. |
| Dónde | Qué verá |
|---|---|
| VeriFactu → Registros | Una fila por factura, evento Alta, estado Correcto, el código de respuesta de la AEAT y el JSON firmado descargable. |
| El PDF de la factura | El QR VeriFactu, que la AEAT valida en su web (en modo pruebas, solo en la web de pruebas). |
| VeriFactu → Consulta AEAT | El listado de facturas registradas de un periodo, con su estado y fecha de presentación. |
| La factura en el CRM | Queda bloqueada en sus datos fiscales (no se puede editar ni borrar): es la obligación de inalterabilidad. Para corregirla, ver §4. |
| La numeración | Cada factura conserva su número para siempre, incluso si después se anula. |
⚠️ Genere el PDF después de emitir: el QR se estampa al crear el documento, así que emita
primero y envíe el correo/PDF después (desde el borrador saldría sin QR).
| Situación | Qué debe hacer | Qué registra el módulo |
|---|---|---|
| Factura emitida por error: datos del cliente o fechas equivocados, factura duplicada, o una operación que no existió | Cancelar la factura (estado «Cancelada») y, si procede, emitir una nueva correcta | Registro de anulación de esa factura |
| Cambio de precios o de servicios ya facturados, o devolución/reembolso al cliente | Crear un abono desde la factura | Factura rectificativa (R4 si abona el 100 %, R1 si es parcial), con su propio registro y QR |
| La factura todavía es un borrador (no está registrada) | Corregirla con tranquilidad y emitirla después | Alta (un solo registro) |
⚠️ Criterio: la anulación es para facturas emitidas por error (los datos no reflejan la
realidad: cliente o fechas equivocados, factura duplicada, operación inexistente). Si lo que cambia es
el precio o el servicio —o el cliente devuelve el producto—, lo correcto es la **factura
rectificativa de un abono, que es lo que hace el módulo por defecto. Nunca se envían las dos cosas**
por la misma operación: es un solo registro en cada caso.
| Dónde | Qué verá |
|---|---|
| VeriFactu → Registros | Una fila nueva, evento Anulación, estado Correcto. La fila del alta original se conserva (la AEAT ya la había aceptado). |
| El estado de la factura | Cancelada: deja de contar como factura emitida. |
| VeriFactu → Consulta AEAT | La factura aparece con estado Anulado. |
| La numeración | No se reutiliza: la factura anulada conserva su número y la siguiente factura toma el siguiente de la serie. |
| El QR de la factura anulada | Sigue localizándose en la AEAT, que la muestra como anulada. |
⚠️ Una anulación no se puede deshacer. Si canceló una factura por error, emita una nueva.
El abono se prepara en borrador (igual que una factura): se ajusta con calma y se registra al emitirlo. Así se pueden corregir precios, cantidades o descuentos antes de que exista ningún registro.
| Dónde | Qué verá |
|---|---|
| VeriFactu → Registros | Una fila nueva para el abono (evento Alta: es una rectificativa), con su propio número y estado Correcto. |
| El detalle del registro | El tipo de rectificativa (R4/R1) y, si la AEAT devolviera algún aviso, su código y descripción, que aparecen bajo el estado. |
| El PDF del abono | Su propio QR, independiente del de la factura original. |
| La factura original | Estado abonada en el CRM; conserva su registro de alta y su número. |
| VeriFactu → Consulta AEAT | Aparecen los dos registros: la factura original y su rectificativa. |
| La numeración | El abono tiene su propio número de serie. |
💡 Si empieza un abono y no lo va a usar, bórrelo: al estar en borrador no hay nada registrado ni
enviado. Mientras exista un abono sin emitir, el CRM no dejará crear otro para la misma factura,
para no duplicar la rectificativa.
⚠️ El abono debe crearse desde la factura. Si se crea una nota de crédito suelta (sin factura
de origen), el módulo no puede registrarla —la AEAT exige indicar qué factura se rectifica— y
deja un aviso en el registro del sistema. En ese caso, anule ese abono suelto y créelo desde la
factura.
Cuando una factura ya tiene registro en la AEAT, el módulo bloquea la edición de sus datos fiscales (cliente, fechas, impuestos, importes, líneas), el borrado de sus líneas y su propia eliminación, con un aviso en pantalla. Es la obligación de inalterabilidad de la normativa. Para corregirla: cancele la factura (si fue un error) o cree un abono (si es una devolución), y emita una nueva si procede.
💡 Lo mismo vale para las facturas emitidas en modo No VeriFactu (aunque no se hayan enviado): una
factura emitida no se modifica ni se borra; se anula o se abona.
⚠️ Si alguna vez desaparece una factura que tenía registro (por ejemplo, borrada desde fuera del CRM),
el módulo deja constancia: escribe un aviso en el registro del sistema, genera un **evento de
anomalía (art. 9 de la Orden HAC/1177/2024) y lo muestra en VeriFactu → Configuración** como
«registro huérfano». Avise a Input Creativity SL: una factura registrada es inalterable y hay que valorar
restaurarla.
F1, rectificativa R1/R4, anulación…) y puede descargar el JSON firmado de cada registro.⚠️ En modo pruebas, el QR apunta al entorno de preproducción de la AEAT: la app oficial
del móvil no lo validará (solo la web de pruebas). En producción el QR valida con normalidad.
La normativa exige que el sistema permita exportar a un soporte externo todos los registros de facturación generados en un periodo (art. 8.2 de la Orden HAC/1177/2024). Está en VeriFactu → Configuración → tarjeta «Exportar registros»:
El ZIP contiene los JSON firmados tal y como los conserva el sistema (no se rehacen: su firma electrónica sigue siendo válida), organizados en facturacion/ y eventos/, más un manifiesto con la identificación de cada registro, su huella y el SHA-256 de cada fichero, y un LEEME.txt con el periodo, la empresa y el contenido. Al terminar, el módulo registra el evento de exportación que exige la norma (art. 9.1 de la Orden).
💡 Es la vía para entregar los registros a la AEAT si se los requiere y para **cambiar de
sistema** sin perder nada. No sustituye a las copias de seguridad del CRM: es la exportación
oficial de los registros conservados.
| Problema | Solución |
|---|---|
| Un registro sale "Incorrecto" | Abra el registro en VeriFactu → Registros y lea el código/descripción del error (p. ej. NIF inválido, fecha mal formada). Corrija la factura si se puede o contacte con Input Creativity. |
| El QR "no encuentra la factura" | Compruebe que la factura está registrada como Correcto y que está en el entorno correcto (pruebas = web de pruebas; producción = app/web real). |
| No puedo editar una factura | Es el bloqueo de integridad de VeriFactu: la factura ya está registrada. Anúlela y emita una nueva, o cree un abono (§4). |
| La cola no se envía | El cron del servidor debe estar activo (cada 5 min). Contacte con su administrador/Input Creativity. |
| Mi abono no aparece registrado en la AEAT | Compruebe que lo creó desde la factura original (§4.3): un abono suelto, sin factura de origen, no se puede registrar. |
| Cancelé una factura y quiero recuperarla | No es posible: la anulación no se deshace. Emita una factura nueva. |
| "Registro de facturación duplicado" (3000) | La AEAT ya tiene una factura con ese mismo número y esa fecha. Cambie el número (o la fecha) de la factura y vuelva a emitirla: el módulo no la reintenta solo, porque reenviarla daría el mismo error. Para saber qué números se enviaron ya, mire VeriFactu → Configuración → «Números ya enviados a la AEAT» y el aviso que el módulo deja al emitir (§2.2). |
| "…el bloque ImporteRectificacion no debe tener valor" (1119) | Es un error de versión antigua del módulo: actualícelo. Si persiste, contacte con Input Creativity. |
| El total de un abono no lleva el IVA (solo la suma de las líneas) | Error de versiones anteriores a la 1.6 al abonar facturas hechas con IVA por línea: el abono heredaba el cálculo antiguo y le faltaba el IVA, aunque el registro enviado sí lo llevaba. Actualice el módulo a la 1.6 y vuelva a crear el abono (el que ya emitió no se puede corregir: anúlelo o déjelo como está y haga uno nuevo). Desde la 1.6 el módulo cuadra el abono antes de registrarlo. |
| Un registro aparece como «Descartado · revisar» | No se ha podido preparar (su JSON es ilegible o no supera las validaciones y no se puede reconstruir), así que no se envía a la AEAT. La cadena de huellas sigue funcionando (el módulo se encadena al último registro válido, esto ya no se bloquea). Mire el motivo que sale bajo el estado, arregle la causa y pulse «Reintentar» en la fila. Si no, avise a Input Creativity SL: ese registro no se puede remitir y quizá haya que anular la factura o emitirla de nuevo. |
| En Configuración sale un aviso de «registros huérfanos» | Una factura con registro ha desaparecido (borrada por una vía que el módulo no puede bloquear). El módulo deja traza (aviso en el log y evento de anomalía). Avise a Input Creativity SL: una factura registrada es inalterable y hay que valorar restaurarla desde la copia de seguridad. |
| Versión | Fecha | Novedades |
|---|---|---|
| 1.7.2 | 15-sep-2026 | Firma electrónica en el formato que exige la normativa. Cada registro (de facturación y de evento) se firma ahora en formato XAdES Enveloped (ETSI EN 319 132, el que pide el art. 14 de la Orden HAC/1177/2024 y detalla el documento de firma de la AEAT), calculada sobre el contenido del propio registro y con la política de firma de la Administración General del Estado; antes la firma se calculaba sobre un documento auxiliar que no incluía el registro, así que no acreditaba su contenido. Leyenda correcta en la factura: donde decía «Código QR VeriFactu» ahora aparece la frase que exige la norma («Factura verificable en la sede electrónica de la AEAT») cuando el sistema remite todos los registros. Exportación por periodo: nuevo apartado para descargar todos los registros de un periodo (y sus eventos) a un soporte externo, con un manifiesto y la huella y el resumen criptográfico de cada fichero (art. 8.2 de la Orden), documentada con su evento de exportación (art. 9.1). Los registros de evento declaran ya la versión real del módulo (declaraban la 1.5, un valor fijo que se quedó descolgado). Cron por línea de comandos: el módulo resuelve por sí mismo la contraseña del certificado, sin depender de ficheros auxiliares que solo se cargan al atender una petición web; antes, esa tarea por CLI no podía firmar ni registrar eventos. Declaración responsable 1.7.2. |
| 1.7 | 14-sep-2026 | Modo No VeriFactu: no se envía nada a la AEAT. Los registros y los eventos de esa etapa se generan, se firman, se encadenan y se conservan a disposición de la AEAT, pero no se remiten (ni siquiera si después se vuelve a VeriFactu); en Registros aparecen como «Conservado · No VeriFactu» y en Configuración se ve cuántos hay. Nuevo apartado §2.4 con esta modalidad. Inalterabilidad reforzada: ya no se pueden borrar líneas de una factura registrada (antes sí) y, si una factura con registro desaparece por otra vía, queda constancia (aviso en el log, evento de anomalía y aviso de «registro huérfano» en Configuración). Un registro que no se puede preparar ya no bloquea la cadena: se marca «Descartado · revisar» con su motivo, el encadenamiento continúa con el último registro válido y se puede reintentar desde Registros. La cola de envío filtra por empresa. Si el aviso de versión nueva no responde, el módulo prueba una segunda dirección de respaldo. Declaración responsable 1.7. |
| 1.6 | 13-sep-2026 | El abono se cuadra al emitirlo: se recalculan y guardan sus totales (subtotal, descuento, IVA e IRPF) con el IVA % de cada línea, para que el importe del CRM, el del PDF y el del QR coincidan con el registro enviado. Aviso de número ya enviado (rechazo 3000 por duplicado): el módulo anota los números que la AEAT acepta, avisa si se intenta enviar otra vez el mismo número y fecha, y los muestra en Configuración (§2.2). Aviso de versión nueva (§2.3): el módulo comprueba a diario si hay una versión publicada más reciente y lo muestra en Configuración y en la ventana «Actualizar» de Ajustes → Plugins, con enlace de descarga y SHA-256. Nuevos apartados del manual sobre la limpieza de datos de preproducción (§2.1). El histórico de declaraciones muestra la fecha real de cada declaración (la de su firma electrónica), quién la firmó y su SHA-256 (§5). La lista de Registros y la Consulta AEAT indican el tipo de cada registro (factura F1/F2, rectificativa R1/R4, anulación), no solo el evento. La versión del módulo se define en un único sitio (Config/Version), para que la caja de Configuración, el JSON enviado y la declaración responsable digan siempre lo mismo. Declaración responsable del productor actualizada a la 1.6 (viaja con el módulo, junto a las anteriores). |
| 1.5 | 12-sep-2026 | Abonos editables: el abono se crea en borrador, se ajustan sus líneas (precio, cantidad, descuento, añadir o quitar líneas) y se registra al emitirlo, como rectificativa R4 (abono total) o R1 (por diferencias). Un solo registro por operación (abono → rectificativa; cancelar una factura → anulación). El motivo que devuelve la AEAT se muestra bajo el estado en Registros. La limpieza de pruebas no borra facturas ajenas al módulo. Declaración responsable 1.5 firmada. |
| 1.0 | 07-sep-2026 | Primera versión: registro de facturas (alta, anulación y abonos), huella encadenada, firma electrónica, QR en el PDF, consulta a la AEAT, eventos del sistema, licencia por instalación y las medidas de seguridad S1–S5. |
Este registro se actualiza con cada versión del módulo. La versión del manual coincide con la del
software y con la de la declaración responsable publicada en el plugin.
Documento generado por Input Creativity SL. Para soporte: clientes@inputcreativos.es · 652295585.