Código abiertoPublicado

invoice-extractor

Convierte fotos y PDFs de facturas en filas listas para contabilidad: Claude las lee, reglas contables revisan cada número y lo que no cuadra pasa por una persona.

Lectura de facturas y recibos en .NET 10 con Claude Haiku 5.5: validación determinística después del modelo, una cola en PostgreSQL, revisión humana con el original al lado y exportación a Excel y CSV.

Rol:
Diseño y desarrollo
Año:
2026
aprobaciones automáticas falsas en las evaluaciones
0/42
errores sembrados enviados a revisión, ninguno aprobado
7/7
de acierto en total, fecha, ID fiscal y número, con el reintento
100 %
de costo del modelo por documento
USD 0,00065

Demo

75 segundos con Claude Haiku 5.5: tres de los ejemplos que trae la app, dos aprobados por las reglas y uno corregido por una persona.

El problema

Muchas pequeñas empresas todavía pasan sus facturas a la contabilidad a mano. Un modelo de lenguaje puede leerlas, pero a veces se equivoca con total seguridad, y una factura mal leída que entra a los libros es peor que una que no entra. El objetivo era un lector en el que se pueda confiar: que apruebe solo lo que puede comprobar y que mande el resto a una persona con lo necesario para decidir rápido.

Restricciones

  • Nada se aprueba solo por lo que diga el modelo: cada lectura se comprueba con reglas
  • Fotos torcidas, escaneos de baja calidad, recibos térmicos y PDFs, en español y en inglés
  • Reglas fiscales por país: RUC e IVA de Nicaragua, RFC e IVA de México y un perfil genérico
  • Montos exactos de punta a punta: decimales, nunca números de punto flotante
  • Un costo por documento visible y un tope de gasto diario

Cómo funciona

  1. Cada archivo se valida por separado (formato real, tamaño, páginas) y se reconoce por su hash: subir dos veces el mismo no cuesta dos veces.
  2. Una cola en PostgreSQL con FOR UPDATE SKIP LOCKED y un lease reparte los documentos entre los workers: cada uno se lee exactamente una vez, aunque un worker se caiga.
  3. Claude Haiku 5.5 lee el texto de un PDF digital o la imagen de un escaneo o una foto, con salida estructurada contra un JSON Schema. Los montos viajan como texto y se convierten a decimal sin pasar por un double.
  4. Reglas determinísticas deciden: las líneas suman el subtotal, subtotal más impuesto da el total, la tasa existe en ese país y el ID fiscal tiene su formato. Lo que falla se lee una vez más con los errores como pista; si sigue fallando, va a revisión humana.
  5. Una web en Next.js, en español e inglés, muestra el estado de cada documento en vivo, la revisión con el original al lado y un panel de costos, y exporta a Excel y CSV.

Decisiones clave

El modelo propone, las reglas deciden

La aritmética y los formatos se pueden comprobar sin IA. Una lectura que no cuadra nunca se aprueba sola, por segura que parezca, y el modelo también puede decir que no está seguro de un campo.

Costo de la decisión: Las reglas detectan inconsistencias, no cualquier error: un valor mal leído que igual cuadra pasaría. Las evaluaciones cuentan esos casos, y hasta ahora son cero.

Un reintento con los errores como pista

La mayoría de las malas lecturas son un dígito o una letra. Si el modelo sabe qué regla falló, la corrige: en el set difícil, el acierto en el ID fiscal sube de 91,7 % a 100 %.

Costo de la decisión: Cerca de un 50 % más de costo en los documentos difíciles, y los que están mal de verdad se pagan dos veces antes de llegar a una persona.

Una cola en PostgreSQL, no un broker

SKIP LOCKED y un lease dan procesamiento exactamente una vez con la base de datos que la aplicación ya tiene. Un test con cuatro workers y cien documentos lo comprueba.

Costo de la decisión: Trabaja consultando la base cada pocos segundos y tiene un techo de volumen, muy por encima de lo que sube una oficina contable.

Resultados

  • En 42 documentos sintéticos de evaluación, con Claude Haiku 5.5 y el reintento: 100 % de acierto en total, fecha, ID fiscal y número, y ninguna aprobación automática falsa.
  • Los 7 documentos con errores sembrados a propósito terminan en revisión humana en todas las corridas.
  • Sin el reintento, el set difícil no pasa el umbral del ID fiscal (91,7 % frente a 95 %). Esa falla está publicada junto a los aciertos.
  • USD 0,00065 por documento en el set estándar y USD 0,00097 en el difícil, reintentos incluidos.
  • Un test de punta a punta con Playwright recorre la app real (subida, revisión, aprobación y Excel) en cada push, con respuestas grabadas del modelo: sin API key y sin costo.

Tecnologías

  • .NET 10
  • C#
  • PostgreSQL
  • Aspire
  • Claude Haiku 5.5
  • Next.js
  • TypeScript
  • Playwright