Files
IPSExtractor/README.md
T

3.9 KiB

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