Microservicio de extracción de facturas que recibe un PDF o una URL de documento, invoca un modelo de IA para obtener campos estructurados y persiste el resultado en SQLite.
- Python 3.11+
- Dependencias definidas en
pyproject.toml - Variable de entorno
OPENAI_API_KEY - Instalar dependencias con
uv syncopython -m pip install -e . - Si no tienes
uv, instálalo conpython -m pip install uv
- Copia
.env.exampleo crea un archivo.enven la raíz. - Establece
OPENAI_API_KEYcon la clave de OpenAI. - Opcionalmente ajusta:
OPENAI_MODEL(por defectogpt-4o-mini)DATABASE_URL(por defectosqlite:///invoice.db)REQUEST_TIMEOUTen segundos
uv run python main.pyEl servidor se expone en http://0.0.0.0:8000.
Extrae una factura desde un archivo o una URL.
- Recibe multipart form-data con
file(PDF, PNG, JPEG) - O recibe
urlcomo parámetro de consulta
Ejemplos:
curl -F "file=@invoice.pdf" http://localhost:8000/extractcurl "http://localhost:8000/extract?url=https://example.com/invoice.pdf"Respuesta:
status:ok,revisar,errorinvoice: campos extraídosvalidation_errors: lista de problemas detectadosprocessing_time_ms
Devuelve las extracciones almacenadas en la base de datos.
curl http://localhost:8000/extractionsPOST /extractcon soporte de archivo e URL- validación de consistencia entre total, conceptos e IVA
- persistencia en SQLite
GET /extractions- manejo de errores de entrada y descarga remota
- pruebas unitarias básicas
DEFINICION_DE_DONE.mdcon lista de criterios
- No hay autenticación ni autorización
- No hay cola de procesamiento o reintentos automatizados
- No hay monitoreo ni alertas de producción
- Se requiere una clave de OpenAI válida
- No hay validación avanzada de moneda o impuestos
pytest