feat(alertas): las evaluadoras del sistema se pueden apagar una por una
Las siete viven en código y no tenían forma de pausarse: el único interruptor
era alerts_enabled, que apaga TODO. En QA eso obliga a elegir entre aguantar
alertas de otras áreas calculadas sobre datos de prueba, o quedarse sin poder
probar las propias. Las reglas declarativas ya se pausaban una por una
(AlertRule.activa); esto empareja a las de código.
El caso que lo detonó: salió un correo [CRÍTICO] 280 créditos con >30d de atraso desde evaluate_credito_atrasado, a toda el área de Finanzas más los
admins, y con dedupe_window de 1 día — o sea, todos los días.
El estado vive en kpi_parameters (alert_eval_<name>_enabled), mismo lugar
que alerts_enabled y alert_email_enabled, y el parámetro sólo se crea
cuando alguien apaga una: ausente significa encendida, así que ningún entorno
cambia de conducta mientras nadie toque el interruptor.
Apagada es apagada también a mano: POST /alerts/run sobre una evaluadora
pausada responde 409 en vez de emitir. Dejar que un clic le escribiera a la
gente sería la peor sorpresa posible — se apaga justamente para que deje de
hacerlo.
Y la corrida REPORTA lo que no corrió (evaluadoras_apagadas). Apagar una es
una decisión, pero su efecto —cero alertas de esa familia— es idéntico a «no
había nada que avisar»; sin decirlo, en un mes nadie recuerda por qué Finanzas
dejó de avisar. Es la misma razón por la que existen las incidencias.
El log ahora dice a quién le llegó y de dónde salió
El detalle por alerta traía conteos. Un conteo no contesta la pregunta que se hace quien lo lee, que es «¿me llegó a mí?» y «¿qué alarma mandó esto?».
- Destinatarios por nombre, cada uno marcado según lo que recibió: correo, sólo campana, o excluido del correo por la lista de infraestructura. Los inactivos se marcan.
-
_emit_emaildevuelve a quién le escribió (enviados,excluidos, el asunto), no sólo cuántos. - Procedencia: para una regla declarativa, cuál es, qué midió, contra qué umbral y sobre qué tabla; para una built-in, su nombre. Sin esto el renglón nombra la alerta pero no permite llegar a lo que la produjo — que es exactamente lo que pasó con el correo de créditos.
- Ventana anti-repetición, marca de modo prueba y el enlace de destino.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Claude-Session: https://claude.ai/code/session_0116hwhMUGwq5tsrsNxMYoZm