2.6 KiB
2.6 KiB
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