Files

104 lines
2.6 KiB
Markdown

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