Saltar al contenido principal
Open Source · IA

docu-ai-flow

Servicio .NET 10 que vigila una carpeta, extrae datos de facturas PDF mediante Google Document AI, los persiste en SQLite y envía archivos trimestrales en ZIP al asesor fiscal por email. Lo singular: cada fase del desarrollo la planificó y ejecutó un flujo de agentes de Claude Code — orquestador, planificadores, coders y reviewer — siguiendo TDD estricto.

El problema

Gestionar facturas de proveedores es trabajo manual repetitivo: descargar PDFs, abrirlos uno a uno, copiar datos a una hoja de cálculo, enviarlos al asesor cada trimestre. Un error en cualquier paso significa declaraciones incorrectas. Necesitaba un sistema que hiciera ese trabajo solo, sin intervención manual, y que sirviera como campo de pruebas real para un workflow de desarrollo asistido por IA.

La solución

  • Watcher de carpeta

    Detecta PDFs en ./data/inbox/ en tiempo real. Un watcher de filesystem más polling de seguridad garantizan que ninguna factura se pierda. Un gate de concurrencia evita procesar el mismo archivo dos veces.

  • Extracción con IA

    Google Document AI (Invoice Parser) extrae proveedor, CIF, número, fecha, base imponible, IVA y total como campos tipados, detrás de un único port IInvoiceDataExtractor. El adaptador de LlamaParse se conserva como referencia. Un umbral de confianza configurable descarta extracciones dudosas y las mueve a ./data/failed/ automáticamente.

  • Exportación a Excel

    ClosedXML genera un Excel trimestral con tipos nativos — fechas y números reales para ordenar, filtrar y sumar sin conversiones. El maestro acumulativo se regenera con cada nueva factura.

  • Envío al asesor

    Resend empaqueta los PDFs del trimestre en un ZIP y los envía al asesor fiscal. Si el ZIP supera el límite de 40 MB de Resend, se divide automáticamente por mes y se envían varios correos.

Stack técnico

Backend

  • .NET 10
  • C#
  • Hexagonal
  • Result/Error
  • SQLite
  • Google Document AI
  • Resend
  • Polly

Tests

  • xUnit
  • NSubstitute
  • WireMock.Net
  • NetArchTest

Workflow IA

  • Claude Code
  • Agents
  • Skills
  • TDD

Decisiones técnicas

  • Arquitectura hexagonal

    Google Document AI, SQLite, el archivador y Resend son adaptadores intercambiables detrás de interfaces (ports). Los use cases del Application no conocen ningún detalle de implementación. Un test de arquitectura con NetArchTest verifica que las fronteras nunca se crucen en cada build.

  • Extracción intercambiable

    El extractor empezó siendo LlamaParse, pero su precisión se quedó corta. Cambiarlo a Google Document AI fue una sola línea en el composition root: el dominio, los use cases y los tests de pipeline no se tocaron, porque dependen del port IInvoiceDataExtractor, no del proveedor. LlamaParse permanece en el repo como prueba de resultado, con sus tests de contrato en verde.

  • Result/Error para errores de negocio

    Un error de extracción (confianza baja, total incoherente, número ausente) es un caso de negocio esperado, no una excepción. Result<TValue, TError> lo expresa como un valor de retorno. Las excepciones quedan para lo transitorio — API caída, disco lleno — que Polly reintenta automáticamente.

  • Desarrollado con agentes de Claude Code

    Cada feature siguió el mismo ciclo: el orquestador exploró y debatió el enfoque, el planner-backend diseñó la arquitectura, el coder-backend implementó en TDD y el reviewer auditó contra el plan aprobado. El resultado: código consistente y un historial de commits que cuenta la historia de cada decisión.

Construido con Claude Code

El proyecto es también un experimento sobre cómo organizar el desarrollo asistido por IA. Los agentes y skills están en .claude/ y forman parte del repo público.

  • Orquestador

    Coordina el flujo completo: explora, debate, planifica, implementa y revisa. Ninguna fase comienza sin acuerdo explícito. El plan vive en workflow/ y viaja por plans/ → in-progress/ → reviewing/ → done/.

  • Agentes especializados

    planner-backend diseña la arquitectura y los contratos; coder-backend implementa en TDD estricto; reviewer audita contra el plan aprobado. Cada agente tiene su propio system prompt en .claude/agents/.

  • Skills reutilizables

    Skills en Markdown cargadas al inicio de cada sesión: commit.md define el formato de commits, tdd.md codifica el ciclo Red-Green-Refactor y orchestrate.md el flujo completo de orquestación.

  • TDD asistido por IA

    Cada feature empieza con un test en rojo. El coder escribe el mínimo código para que pase, luego refactoriza. 111 tests en tres capas: Domain (puro), Application (use cases con dobles NSubstitute) e Integration (SQLite, Excel, zip, watcher, golden-master del mapper y pipeline end-to-end con un extractor fake).

¿Te interesa el workflow de IA?

El repo es público. Los agentes, skills y el flujo de orquestación están en .claude/ junto al código fuente. Úsalos como plantilla para tus propios proyectos.