104 lines
2.6 KiB
Markdown
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
|
|
```
|