Caso de cliente · Producto propio · verifactu.biz
Desde 2026 cada factura de un autónomo tiene que llevar un registro encadenado y un QR de cotejo. Si se usa VERI*FACTU, también tiene que llegar a la AEAT. Hicimos una app de facturación en la que basta con escribir o dictar una frase, revisar el borrador y confirmar. El resto lo hace el sistema.
· 4 min de lectura

- Sector
- Software de facturación para autónomos y pymes · VERI*FACTU
- Ubicación
- España
- Periodo
- Septiembre – octubre 2026
- Alcance
- Asistente por chat y vozEmisión VERI*FACTURemisión a la AEATClientes y cobrosModelos 303 y 130Planes y pagos con StripeApp móvil (PWA)
- Beneficios
- Una frase como «reparación de ventana 180 € IVA incluido» se convierte en un borrador con base, IVA e IRPF calculados
- Cada factura lleva su huella SHA-256 encadenada y su QR, y se envía sola a la AEAT
- El estado del envío a Hacienda está en cada factura y en el listado, con avisos cuando algo falla
- Lo que escribes o dictas no sale de tu navegador: el asistente no usa ninguna IA externa
Del primer commit a la beta privada en producción
Emisiones simultáneas en los tests de integración sin romper la cadena de huellas
Peticiones a una IA externa: el asistente y el dictado funcionan en el navegador
Tiempo real de la frase a la factura emitida (el objetivo es menos de 30 segundos)
Contexto
Con el reglamento de sistemas de facturación (VERI*FACTU), el programa de facturación de un autónomo tiene que generar un registro por cada factura. Tiene que encadenar cada registro con el anterior mediante una huella e imprimir un QR que Hacienda pueda cotejar. En la modalidad VERI*FACTU, también tiene que enviar el registro a la AEAT.
Para un fontanero, una diseñadora o un pequeño taller, eso suele significar aprender un programa de contabilidad. Quisimos lo contrario: que hacer una factura legal costara lo mismo que mandar un mensaje.

Cómo funciona, paso a paso
Seguimos a un autónomo desde que abre la web hasta que su factura llega a Hacienda:
- Describe
- Escribe o dicta lo que ha vendido: «Factura a Talleres Martínez SL, dos horas de diseño a 30 € la hora más IVA». No hace falta cuenta para empezar.
- Revisa
- El asistente rellena concepto, cantidad, precio, IVA e IRPF, y busca al cliente por su CIF. Los cambios se piden también por chat: «IVA al 10», «añade material 20 €».
- Alta
- La primera vez se pide el correo y un código de 6 dígitos. El NIF y el nombre del emisor se comprueban contra el censo de la AEAT. Si no se puede identificar, no se emite.
- Confirma
- La factura se enseña como documento. Solo se emite cuando el usuario marca que la ha revisado: una factura emitida no se puede editar ni borrar.
- Emite
- En una sola transacción se asigna el número, se calcula la huella encadenada, se guarda el registro y se pone en la cola de envío.
- Remite y sigue
- Un proceso en segundo plano envía el registro a la AEAT y guarda la respuesta. La factura muestra si está en cola, aceptada o rechazada, con el PDF y el QR para enviar al cliente.



Lo difícil
La cadena de huellas no puede romperse. Si dos facturas del mismo emisor se emiten a la vez, las dos no pueden apuntar a la misma anterior. Toda la emisión ocurre en una transacción que bloquea al emisor, y un índice único en la base de datos impide que la cadena se bifurque. Lo probamos con 50 emisiones simultáneas contra un Postgres real.
Hacienda trabaja en hora de Madrid. La fecha y hora del registro, la numeración anual y los límites diarios se calculan siempre en Europe/Madrid, sin importar dónde corra el servidor.
La AEAT no siempre responde a la primera. El envío sale justo después de emitir y va por lotes que respetan el tiempo de espera que pide la propia AEAT. Reintenta, y clasifica cada error (falta de apoderamiento, duplicado…) para decirle al usuario qué tiene que hacer.
El asistente no puede inventarse un importe. Por eso no es un modelo de lenguaje. Son reglas que entienden números dichos en palabras, «más IVA» o «IVA incluido». Lo que las reglas no entienden, lo dejan en blanco. El dictado usa Whisper dentro del navegador, así que el audio no sale del dispositivo.
Y lo emitido es inmutable: los registros, las facturas y el historial de auditoría no se pueden modificar ni borrar, ni siquiera desde el servidor.
Todo lo demás de una app de facturación
Además de emitir, la app tiene lo que un autónomo necesita el resto del mes. El inicio muestra lo facturado y lo pendiente de cobro. El listado de facturas tiene filtros y exporta a CSV, Excel o un ZIP de PDFs. Hay una ficha para cada cliente, además de avisos de vencimiento y recordatorios de cobro.
En Impuestos calcula lo que irá en el modelo 303 (IVA) y el 130 (IRPF) del trimestre a partir de las facturas emitidas, con los días que quedan para presentarlo. Y si lo lleva un asesor, se le puede invitar.
El plan gratuito tiene un límite de facturas al día y al mes. Los planes de pago (cuota mensual o por factura emitida) se cobran con Stripe. Cada factura cobrada se registra en la misma transacción que la emite, para no perder ni duplicar ninguna.




Cómo lo probamos
Con dinero y Hacienda de por medio, cada cambio pasa por un workflow de integración continua antes de llegar a producción:
- Tipos y estilo
- TypeScript estricto y ESLint en cada push a main y en cada pull request.
- Unitarios
- Céntimos enteros y redondeos, fechas en hora de Madrid, el intérprete del chat con frases reales, la huella calculada con una librería independiente, el PDF y el QR.
- Contra la AEAT
- Los lotes de envío se validan contra los esquemas XSD oficiales de la AEAT, sin enviar nada.
- Integración
- Un Postgres real embebido: 50 emisiones simultáneas, borradores, clientes, cobros, pagos, varios NIF por cuenta y el proceso de envío con una AEAT simulada.
- De punta a punta
- Playwright recorre la web sin cuenta en cada cambio. Hay preparada otra prueba que emite la primera factura completa contra el despliegue de prueba, con Supabase y el entorno de pruebas de la AEAT.
- Despliegue
- Cada pull request genera un despliegue de previsualización en Vercel. Producción corre en Fráncfort, junto a la base de datos.
Resultado
En once días pasamos de un repositorio vacío a una beta privada en producción. Tiene emisión VERI*FACTU completa, envío a la AEAT, cobros, impuestos, planes de pago y una app que se instala en el móvil.
Antes de abrirla a todo el mundo, quedan tres cosas que no dependen del código. Tenemos que validar la remisión con certificados reales, pasar la revisión jurídica de los textos legales y medir el tiempo real de la frase a la factura aceptada. Por eso esa cifra aparece arriba como pendiente.
Siguiente paso
¿Tienes un proceso con reglas estrictas que hoy se hace a mano? Hablemos de convertirlo en producto.