Runbook¶
Operación normal¶
| Cuándo | Qué corre |
|---|---|
| Diario 06:00 UTC | ingerir para fuentes de cadencia diaria (carril A) |
| Diario 07:00 UTC | extraer_documentos, puntuar |
| Diario 07:30 UTC | Evaluación de alertas por ventana corta |
| Lunes 06:00 UTC | ingerir semanales (carriles B y C), diff_proyectos |
| Lunes 08:00 UTC | reporte |
| Jueves 08:00 UTC | reporte |
Por qué la ingesta es diaria y el reporte no
Si solo buscamos cuando reportamos, ampliamos la ventana y perdemos avisos cortos. Ingesta diaria, reporte dos veces por semana, alerta por evento.
El reporte salió vacío¶
Diagnóstico en orden:
- Revisar la tabla
ingestas: ¿alguna fuente falló o devolvió cero? - Si una fuente devolvió cero varias corridas seguidas → probablemente cambió su contrato. Correr los tests de normalizador contra un payload fresco
- Si todas devolvieron datos pero el reporte está vacío → los filtros duros están descartando de más. Revisar el panel de calibración
Silencio ≠ no hubo avisos
Es el modo de fallo más peligroso del sistema. Una fuente que devuelve cero
silenciosamente parece funcionar. Por eso existe la alerta de ultimo_ok.
Una fuente cambió su contrato¶
- Capturar un payload fresco y guardarlo como fixture nuevo en
tests/fixtures/<fuente>/<fecha>.json - No borrar el fixture viejo. El histórico guardado en
crudotiene la forma antigua y el normalizador debe seguir manejándola - Actualizar el normalizador para manejar ambas formas
- Correr
renormalizar --fuente=<x>sobre el histórico - Verificar que el conteo de registros no cambió inesperadamente
Backfill¶
python manage.py ingerir --fuente=<x> --desde=YYYY-MM-DD --hasta=YYYY-MM-DD
Idempotente. Correrlo dos veces con la misma ventana no duplica.
Ojo con las cuotas: SAM.gov e IATI tienen límites duros. Revisar la página de la fuente antes de un backfill amplio.
Reprocesar tras mejorar una regla¶
python manage.py renormalizar --fuente=<x> # no vuelve a descargar
python manage.py puntuar --solo-pendientes # respeta el caché de LLM
Antes de firmar con un socio o prime¶
python manage.py check_debarment "Nombre Empresa"
No saltarse este paso
Un socio inhabilitado nos contamina en todo el sistema multilateral. El dataset del BID incluye la inhabilitación cruzada de Banco Mundial, BAD, BAfD y BERD.
Revisión trimestral¶
- Muestra manual de descartes automáticos: ¿los filtros duros se están equivocando en silencio?
- Auditoría de recall: consultar adjudicaciones AR IV y contar cuántas de nuestro nicho el sistema nunca vio
- Medir la mediana de días entre primera detección y fecha límite. Debe crecer
- Revisar Pendientes de verificación: ¿qué se confirmó, qué sigue abierto?