Saltar a contenido

ADR 0003 — Comandos de gestión + cron, no orquestador

Estado: aceptado Fecha: 2026-09

Decisión

Comandos de gestión de Django invocados por cron. No Celery todavía, no Airflow, no Dagster, no Prefect.

Razones

El volumen es de cientos de registros diarios, no millones. La cadencia es diaria y semanal, no por minuto. Las dependencias entre tareas son lineales, no un grafo.

Un orquestador resolvería problemas que aún no tenemos, a cambio de un segundo sistema que aprender, desplegar y monitorear.

Forma de los comandos

Cada uno debe poder correrse a mano, ser idempotente y aceptar una ventana de fechas explícita para backfill.

python manage.py ingerir --fuente=wb_procnotices --desde=2026-01-01 --hasta=2026-01-31
python manage.py renormalizar --fuente=wb_procnotices        # sobre el crudo guardado
python manage.py diff_proyectos
python manage.py extraer_documentos --limite=50
python manage.py puntuar --solo-pendientes
python manage.py reporte --carril=A --desde=ultima-edicion
python manage.py check_debarment "Nombre Empresa"

Idempotencia

Correr dos veces el mismo comando con la misma ventana no debe duplicar nada. La deduplicación por fuente_id + id_nativo lo garantiza a nivel de datos, pero el comando también debe ser seguro de reintentar a nivel de efectos.

Cuándo revisar esta decisión

Celery entra cuando la extracción de PDF empiece a bloquear la corrida, o cuando haga falta reintento con backoff a nivel de tarea individual.

Dagster u otro orquestador entra si pasamos de unas 40 fuentes, si el grafo de dependencias deja de ser lineal, o si el backfill se vuelve una operación semanal en vez de ocasional.

Consecuencias

  • Los fallos se ven en logs y en la tabla ingestas, no en una UI de orquestador
  • Hay que construir a mano la observabilidad mínima
  • A cambio: cero infraestructura adicional en las primeras cinco fases