Skip to main content

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).

PantallaPreguntaFuenteEndpoint
Analíticas (/analytics)¿Qué tan buenas son las sugerencias?tabla feedbackGET /feedback/stats
Operación (/operations)¿Cómo se comporta el sistema?tabla event_logGET /metrics/operational
Logs (/logs)¿Quién hizo qué?tabla event_logGET /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_queried con 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 a call_sessions); si la llamada aún no terminó y no hay sesión persistida, cae a un fragmento del callId.
  • Columna Detalle: acción mapeada a español (Usada / Incorrecta / Descartada).

Notas de implementación

  • La lógica de rango current/previous es compartida: backend common/period.util.ts (resolvePeriodRange) y frontend lib/period.ts.
  • No hay migración de datos: event_log es 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.