Métricas y paneles
Hay tres pantallas de supervisor. Dos son de métricas (miden cosas distintas, con
fuentes distintas) y una es de auditoría. Las tres están gateadas a supervisor /
superadmin (front + back).
| Pantalla | Pregunta | Fuente | Endpoint |
|---|---|---|---|
Analíticas (/analytics) | ¿Qué tan buenas son las sugerencias? | tabla feedback | GET /feedback/stats |
Operación (/operations) | ¿Cómo se comporta el sistema? | tabla event_log | GET /metrics/operational |
Logs (/logs) | ¿Quién hizo qué? | tabla event_log | GET /audit/logs |
Analíticas — calidad (según el humano)
Mide sobre lo que el operario marcó: % aciertos, sugerencias usadas / incorrectas /
descartadas, % aceptación. Depende de que haya feedback. Soporta modo Ver y
Comparar (período A vs B).
Operación — salud (automático)
Se registra solo en cada llamada, sin depender de marcas. MetricsService agrega sobre
event_log con SQL (percentile_cont) y devuelve { current, previous } para trends.
- Cobertura (turno):
knowledge_queriedcon hit / total. Qué tan seguido el RAG tiene algo confiable. - Cobertura (llamada): llamadas con ≥1 sugerencia / llamadas iniciadas.
- Se calló: turnos sin contexto RAG (miss / bajo threshold / turno corto).
- Derivó:
transfer_initiated/ llamadas. - Latencia p50/p95 por capa:
embedMs(embedding),queryMs(búsqueda),llmMs(LLM). - Buckets diarios para los gráficos.
"Se calló" y "derivó" son métricas distintas (mudo vs escaló). En sus deltas, que suban es malo (color invertido).
Logs — auditoría de acciones de usuario
GET /audit/logs (gateado a supervisor). Lista solo acciones de usuario
(feedback_given, claim_initiated, call_released) vía queryUserActions: paginado,
filtros por evento / usuario / llamada / fecha, orden por fecha desc.
- Columna Usuario:
user_email(los eventos previos a la feature muestran "—"). - Columna Llamada: teléfono del llamante (
caller_id, LEFT JOIN acall_sessions); si la llamada aún no terminó y no hay sesión persistida, cae a un fragmento delcallId. - Columna Detalle: acción mapeada a español (Usada / Incorrecta / Descartada).
Notas de implementación
- La lógica de rango
current/previouses compartida: backendcommon/period.util.ts(resolvePeriodRange) y frontendlib/period.ts. - No hay migración de datos:
event_loges la fuente; los paneles solo leen y agregan. - Complementariedad: Operación te dice que algo cambió (bajó cobertura, subió latencia); Analíticas te dice si lo que sí responde es acertado. Pueden divergir.