macomore
Todos los proyectos

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

Nueva factura: la frase del usuario, la respuesta del asistente y el borrador con concepto, cantidad, precio, IVA e IRPF
Nueva factura: escribes una frase y el asistente rellena el borrador, con el total a pagar a la vista
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
11 días

Del primer commit a la beta privada en producción

50

Emisiones simultáneas en los tests de integración sin romper la cadena de huellas

0

Peticiones a una IA externa: el asistente y el dictado funcionan en el navegador

KPI pendiente

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.

Portada de verifactu.biz: «Hola, autónomo.» con una caja de texto y un ejemplo de factura verificada
La portada: una caja para escribir lo que has vendido y un ejemplo de factura verificada

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.
Confirmación de la emisión: la factura como documento y el último paso con la casilla de revisión
Último paso: la factura como documento y una confirmación explícita antes de emitir
Ficha de una factura emitida con su QR, el aviso de que la AEAT la ha aceptado y las acciones de compartir y cobro
La factura emitida: QR, huella, estado en Hacienda, PDF y seguimiento del cobro
Nueva factura en el móvil con el chat y el total a pagar
En el móvil: la misma conversación, con el total siempre a la vista

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.

Inicio con lo facturado este mes, cifras del periodo y facturas vencidas
Inicio: lo facturado, lo pendiente de cobro y lo vencido
Listado de facturas con su estado de cobro y su estado en la AEAT
Facturas: estado de cobro y estado en la AEAT de cada una
Impuestos del trimestre con las tarjetas del modelo 303 y del modelo 130
Impuestos: el 303 y el 130 del trimestre, calculados con tus facturas
Listado de clientes con NIF, número de facturas e importe facturado
Clientes: lo facturado a cada uno y la última factura

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.

Más proyectos