Estado: Aceptada. Completa el centro de notificaciones del ADR-0077.
Fecha: 2026-11-01
Contexto
El centro de notificaciones avisaba a quienes participan en un incidente: quien lo creó, quien lo atiende y quienes escriben en su chat. Quien reparte el trabajo no se enteraba de lo que necesita su atención sin abrir el listado: un incidente que llegó y nadie tomó, uno crítico, una reapertura que espera su decisión o uno que venció.
Alternativas evaluadas
Para elegir quién recibe:
Por rol (Supervisor y Super admin).
Por permiso efectivo (incidents.assign e incidents.reopen.approve).
A todo el que pueda ver el incidente.
Para detectar los vencidos:
Una tarea programada que revisa cada pocos minutos.
Calcularlos al abrir el centro de notificaciones.
Una columna overdue_notified_at en incidents.
Decisión
Cuatro tipos nuevos, en la pestaña Actividad: unassigned_created, critical_created, reopen_requested e incident_overdue.
Por permiso:
“Nuevo sin asignar” y “crítico” van a quienes tienen incidents.assign.
“Reapertura pendiente”, a quienes tienen incidents.reopen.approve.
“Vencido”, a quien lo atiende y a quienes tienen incidents.assign.
Solo cuentas activas, con la misma regla de permisos efectivos de la sesión (PermissionSql).
Un aviso por persona y por hecho, el más importante: crítico, luego asignado, luego sin asignar. Un crítico sin asignar llega como un solo aviso que lo dice.
Nunca a quien hizo la acción, como los demás avisos. El vencimiento no lo hace nadie, así que llega a todos los que corresponde.
Vencidos con una tarea cada 5 minutos (notifications:overdue). Mira lo que venció en las últimas 24 horas y no tiene un aviso de vencido creado después de su vencimiento.
Los agentes no reciben “nuevo sin asignar”: ya ven los incidentes sin responsable en su listado y en “Mis incidentes”.
Alternativas descartadas
Por rol: las reglas del proyecto consultan permisos, nunca nombres de rol. Con permisos, si a una persona se le concede asignar, empieza a recibirlos sin tocar código; si se le quita, deja de recibirlos.
A todo el que pueda verlo: a un agente le llegaría un aviso por cada incidente nuevo. El ruido termina en que nadie mira la campana.
Calcular vencidos al abrir la campana: el aviso llegaría solo cuando alguien la abre, y sin tiempo real.
Columna overdue_notified_at: guarda en incidents un dato que es de las notificaciones, y hay que acordarse de limpiarlo al mover la fecha o reabrir. Preguntar si existe el aviso da lo mismo sin tocar esa tabla.
Consecuencias
Supervisor y Super admin reciben más avisos: uno por cada incidente sin asignar y por cada vencimiento. Si en la operación real resultan muchos, la mejora propuesta es que cada persona pueda silenciar tipos de aviso.
Si la tarea programada estuvo detenida más de un día, lo que venció antes no se avisa de golpe.
El aviso de vencido no tiene registro del historial detrás, así que no muestra quién lo hizo: no lo hizo nadie.
“Crítico” es la prioridad de clave critical. Si el catálogo cambia esa clave, hay que cambiar Recipients::CRITICAL_PRIORITY.