Saltar a contenido

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:

  1. Revisar la tabla ingestas: ¿alguna fuente falló o devolvió cero?
  2. Si una fuente devolvió cero varias corridas seguidas → probablemente cambió su contrato. Correr los tests de normalizador contra un payload fresco
  3. 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

  1. Capturar un payload fresco y guardarlo como fixture nuevo en tests/fixtures/<fuente>/<fecha>.json
  2. No borrar el fixture viejo. El histórico guardado en crudo tiene la forma antigua y el normalizador debe seguir manejándola
  3. Actualizar el normalizador para manejar ambas formas
  4. Correr renormalizar --fuente=<x> sobre el histórico
  5. 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?