# 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 ```bash 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 ```bash # 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 ```