Files
IPSExtractor/services/cleaning
..

cleaning

Microservicio Python (FastAPI) de limpieza y normalización de datos extraídos. Recibe lotes de filas extraídas por el servicio extraction y aplica reglas configurables de transformación de columnas.


Puerto

8002


Endpoints

Método Ruta Descripción
GET /health Liveness
GET /rules Lista de reglas de limpieza disponibles
GET /batches/{batch_id}/analysis Análisis de columnas de un lote de extracción
POST /analyze-csv Análisis de columnas desde CSV (multipart)
POST /preview Vista previa Antes/Después sobre muestra (sin persistir)
POST /jobs Limpieza desde extraction_batch_id (+ job_id opcional)
POST /jobs/from-csv Limpieza desde CSV (multipart + reglas JSON)
GET /jobs?job_id= Listar jobs (filtro opcional por trabajo Desktop)
GET /jobs/{job_id} Estado y detalle del job
GET /jobs/{job_id}/rows Filas limpias del job

Crear un job de limpieza

POST /jobs
{
  "extraction_batch_id": "...",
  "rules_per_column": {
    "valor":  ["to_integer"],
    "fecha":  ["date_to_ddmmyyyy"],
    "codigo": ["strip_spaces"]
  }
}

Las reglas disponibles se listan en GET /rules.


Reglas de limpieza

Definidas en el paquete domain/csv_cleaning/ (registro en rules/builtins.py). Cada regla transforma los valores de una columna; se pueden encadenar varias por columna. Para agregar una regla nueva, ver rules/registry.py.


Variables de entorno

Variable Descripción
DATABASE_URL PostgreSQL (postgresql+psycopg://...)

Modelo de datos

extraction_batches  — lote de filas de extracción (leído, no modificado)
  extraction_rows   — filas originales

cleaning_jobs       — job de limpieza (FK → extraction_batches)
  cleaned_rows      — filas transformadas

Estructura del código

api/
  main.py              — FastAPI app con todos los endpoints
domain/
  csv_cleaning/        — paquete de limpieza (análisis + reglas)
    analyze.py         — resumen por columna
    apply.py           — aplicación de reglas
    rules/             — registro e implementaciones de reglas
infrastructure/
  database.py          — modelos SQLAlchemy y sesión
Dockerfile
requirements.txt

Arrancar localmente

# Con Docker Compose (desde la raíz del repositorio):
docker compose up --build cleaning

# Sin Docker:
cd services/cleaning
pip install -r requirements.txt
uvicorn api.main:app --host 0.0.0.0 --port 8002