feat(alertas): los siete indicadores de licenciamiento viajan entre entornos
20260901_kpi_indicadores.sql crea la tabla y nada más, así que al mergear a
qa llegó vacía: el merge mueve código, no datos, y cada entorno tiene su propio
Postgres. La única forma de tenerlos en QA era recapturarlos uno por uno.
Recapturar a mano no es sólo lento, es la causa de un error real y silencioso: copiar «Licencias ya vencidas» en QA devolvía 0. Un filtro de texto con otra capitalización no falla, devuelve cero; y si el número de días sale de un umbral en vez de un valor fijo, la pregunta cambia a «venció hace más de 30 días», que hoy da 0 porque el vencimiento más antiguo es de hace dos semanas. La definición ahora viaja verbatim.
No se migra ninguna alarma. La migración escribe en una sola tabla, kpi_indicadores; un indicador que ninguna regla apunte es inerte, porque el evaluador itera sobre alert_rules y sólo llega al indicador vía indicador_id.
Idempotente por ON CONFLICT (clave): si alguien ya capturó esa clave en el destino, su versión gana. Un bloque final avisa en el log del deploy cuántos indicadores quedaron y si falta algún umbral referenciado por value_param.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01Dy1oTZc5vwiws7EFFQwnHF