081da999d4e3c3e0c3beb0d2225546c3322c5822
IPSExtractor
Sistema de extracción y análisis de datos desde facturas médicas PDF. Arquitectura de microservicios: cada servicio tiene su propia API, dependencias, Dockerfile y código de dominio. No hay paquetes compartidos entre servicios.
Servicios
| Servicio | Puerto | Tecnología | Descripción |
|---|---|---|---|
api_gateway |
8000 | Python/FastAPI | Puerta de enlace única; enruta hacia los demás servicios |
extraction |
8001 | Python/FastAPI | Extracción LLM de campos; orquestación de jobs y conteo |
cleaning |
8002 | Python/FastAPI | Normalización y limpieza de datos extraídos |
count-api |
8080 (→ 8081) | Go | Conteo de servicios en facturas con OCR + ONNX (sin estado) |
database |
5432 | PostgreSQL 16 | Base de datos compartida |
redis |
6379 | Redis 7 | Cola ARQ para workers de extracción |
desktop_app |
local | Electron + React | Aplicación de escritorio |
Flujo principal
Desktop app
│
├─ Conteo (OCR + ML)
│ ├─ POST /count/v1/count → count-api (lotes de 10 PDFs)
│ ├─ POST /count-jobs → extraction (guarda en PostgreSQL)
│ └─ PATCH /count-jobs → extraction (validación humana)
│
└─ Extracción (LLM)
├─ POST /tasks/extraction/from-count → extraction (lee desde /data)
├─ POST /tasks/{id}/ingest-many → extraction (subida de PDFs)
└─ GET /tasks/{id}/rows → extraction (resultados)
Arrancar el stack completo
# Clonar y configurar
cp .env.example .env
# Editar .env con las API keys del LLM y la ruta de documentos
docker compose up --build
Health checks:
curl http://localhost:8000/health # gateway (agrega estado de los 3 servicios)
curl http://localhost:8081/health # count-api (directo)
Variables de entorno principales
| Variable | Descripción |
|---|---|
IPS_DOCUMENT_ROOT |
Carpeta local con los documentos PDF (montada en /data) |
EXTRACTOR_API_KEY |
API key del LLM (OpenAI, xAI, etc.) |
EXTRACTOR_BASE_URL |
URL base del LLM (default: OpenAI) |
EXTRACTOR_MODEL |
Modelo de extracción (default: gpt-5.4-mini) |
WORKER_REPLICAS |
Réplicas del worker de extracción (default: 2) |
Ver .env.example para la lista completa.
Estructura del repositorio
services/
api_gateway/ — proxy HTTP (Python) → README
extraction/ — LLM + jobs + conteo BD (Python) → README
cleaning/ — limpieza de datos (Python) → README
count-api/ — OCR + ONNX stateless (Go) → README
db/ — migraciones Alembic → README
desktop_app/ — app Electron + React → README
docs/
database.dbml — esquema completo de la BD
docker-compose.yml — stack completo
.env.example — variables de entorno de referencia
Base de datos (esquema resumido)
jobs — contenedor de un trabajo del usuario
tasks — módulo ejecutado (counting / extraction / cleaning)
count_job_files — resultado de conteo por PDF
extraction_batches — lote de extracción
extraction_rows — fila extraída por documento
cleaning_jobs — job de limpieza
cleaned_rows — fila transformada
Esquema completo: docs/database.dbml
Documentación por servicio
Languages
Python
56.7%
TypeScript
31.3%
CSS
5.5%
JavaScript
3.7%
Go
2%
Other
0.8%