Skip to content

Rendimiento

Ruta: /teacher/insights · Atajo: g i · Sidebar: Rendimiento

Dashboard analitico completo: KPIs de negocio, metricas de calidad, funnel de conversion, grafico de ingresos, estadisticas de trayectoria, retencion de alumnos y analytics de contenido.

Insights page

Toggle buttons: 30 / 60 / 90 dias. Afecta a KPIs, metricas, funnel y comparativa.

Junto al selector, se muestra una comparacion con el periodo anterior del mismo rango. Cada KPI card muestra un indicador de cambio (flecha arriba verde / flecha abajo roja + porcentaje) calculado comparando el periodo actual vs el periodo inmediatamente anterior de igual duracion.

Seccion de 4 tarjetas justo debajo de los KPIs principales. Muestra el rendimiento del periodo actual frente al periodo inmediatamente anterior de igual duracion, con iconos de tendencia:

Metrica Descripcion
Ingresos Sum de amountPaid del periodo actual vs anterior
Clases Count de sesiones del periodo actual vs anterior
Alumnos activos Count de students con sesiones en el periodo vs anterior
Asistencia % de sesiones completadas vs canceladas/no-show del periodo vs anterior

Cada tarjeta muestra: valor actual · variacion porcentual (↑ verde / ↓ rojo) · valor del periodo anterior en texto secundario.

Endpoint: GET /teacher/insights/comparison?period=30|60|90

Respuesta:

{
current: { revenue, lessons, activeStudents, attendance },
previous: { revenue, lessons, activeStudents, attendance },
changes: { revenue, lessons, activeStudents, attendance } // porcentaje de cambio
}
KPI Color Datos Tendencia Drill-down
Ingresos Verde Sum pricePaid del periodo % vs periodo anterior Scroll a grafico de ingresos
Clases Azul Count sesiones del periodo % vs periodo anterior Scroll a metricas de sesiones
Alumnos activos Morado Count students activos — Scroll a journey stats
Retencion Ambar % alumnos que repiten % vs periodo anterior (calculo period-over-period) Scroll a funnel de conversion

Cada tarjeta es clickable. Al hacer clic, la pagina hace scroll suave (scrollIntoView) hasta la seccion de detalle correspondiente y la tarjeta queda en estado active (resaltada). Un segundo clic deselecciona la tarjeta activa. La logica vive en handleKpiClick + estado activeKpi: InsightSection | null. Los IDs de seccion estan definidos en SECTION_IDS:

Section DOM id Seccion destino
revenue insights-revenue Grafico de ingresos (12 meses)
sessions insights-sessions Metricas de calidad (progress bars)
students insights-students Journey stats lifetime
funnel insights-funnel Funnel de conversion

Metricas de calidad (3 barras de progreso)

Section titled “Metricas de calidad (3 barras de progreso)”
Metrica Target por defecto Color
Asistencia 95% Verde si >= target, rojo si < target
Completacion 90% Mismo patron
Rebooking 80% Mismo patron

Formato: X% / target% con barra de progreso.

Los targets son configurables por el profesor via un icono de ajuste junto a cada metrica. Al hacer click, se abre un popover con input numerico para cambiar el target (1-100%). Los valores se guardan en teachers.insightTargets (JSONB) via PATCH /teacher/settings/scheduling.

Boton “Exportar CSV” en la toolbar de Insights genera un CSV con todas las metricas del periodo seleccionado:

  • KPIs del overview (ingresos, clases, alumnos activos, retencion)
  • Metricas de calidad (asistencia, completacion, rebooking)
  • Datos del funnel de conversion
  • Columnas: metrica, valor actual, valor periodo anterior, cambio %

API: GET /teacher/insights/export?period=30&format=csv

El profesor puede elegir que secciones de la pagina de Insights son visibles via un selector de metricas en la toolbar (icono de columnas). Las secciones ocultas se colapsan y se excluyen del scroll de drill-down de KPIs. La preferencia se guarda en teachers.insightsLayout (JSONB).

Etapa Color Dato
Pruebas solicitadas Azul Trials creados en el periodo (isTrialSession=true). El label i18n es insights.funnel.visits = 'Pruebas solicitadas' — refleja correctamente que son solicitudes de trial, no page views
Trials Morado Trials completados
Convertidos Verde Enrollments creados
Retenidos Ambar Alumnos activos

Barras horizontales con ancho relativo al valor maximo.

Recharts AreaChart con:

  • Eje X: Labels de mes (MMM)
  • Eje Y: Formato moneda (EUR)
  • Gradiente del color primary
  • Altura 256px
Stat Icono Dato
Total clases CalendarCheck Count sesiones completadas (lifetime)
Total alumnos Users Count alumnos (lifetime)
Total ingresos DollarSign Sum pricePaid (lifetime)
Meses ensenando Star Meses desde primera sesion

Selector de periodo (30d / 90d / 12m) independiente del selector global.

6 KPI cards:

KPI Descripcion
Tasa de retencion % alumnos que repiten dentro del periodo
Churned Alumnos que dejaron de comprar
En riesgo Alumnos sin sesion reciente (umbral configurable)
Reactivados Alumnos que volvieron tras inactividad
Frecuencia media Sesiones por alumno por mes
Conversion de trial % trials que se convierten en enrollment

Matriz de cohortes: Tabla heatmap con toggle 6 meses / 12 meses. Filas = mes de primera sesion, columnas = mes de seguimiento. Colores segun tasa de retencion.

Lista de alumnos en riesgo: Dias desde ultima sesion, enlace al perfil del alumno.

Endpoints: GET /teacher/insights/retention, /retention/cohorts, /retention/at-risk.

Cards de insights: Recomendaciones automaticas generadas por ContentInsightsService. Variantes: positive, warning, info.

Ranking de templates: Grafico de barras horizontal (Recharts) ordenable + tabla de datos con metricas de uso.

Impacto por tipo de recurso: Grafico de barras + tabla comparando rendimiento por tipo (link, drive, youtube, vimeo).

Efectividad de tags: Barras de progreso por tag con puntuacion de impacto.

Metricas por categoria: Tabla con sesiones, alumnos unicos y tasa de completacion por categoria.

Endpoints: GET /teacher/insights/content, /content/templates, /content/resources, /content/tags, /content/categories.


Feature Descripcion Estado Implementado
Alertas automaticas No hay notificacion cuando una metrica cae por debajo del target Implementado ✅
Comparacion de periodos Indicadores de cambio periodo-sobre-periodo en cada KPI card ✅ Batch 3
Export de datos Boton “Exportar CSV” genera metricas del periodo en formato CSV ✅ Batch 3
Objetivos configurables Targets de metricas (asistencia, completacion, rebooking) editables por el profesor ✅ Batch 3
Dashboard personalizable El profesor puede ocultar/mostrar secciones de la pagina de Insights ✅ Batch 3
Retencion con cambio period-over-period InsightsService.getOverview() calcula retentionChange comparando la tasa de retencion del periodo actual con la del periodo anterior ✅ Batch 3
Labels del funnel corregidos La primera etapa del funnel renombrada de “Visitas a tu perfil” a “Pruebas solicitadas” para reflejar que cuenta trials creados, no page views ✅ Batch 3
Seccion “Comparativa por periodo” 4 tarjetas dedicadas (ingresos, clases, alumnos activos, asistencia) con valores absolutos + % de cambio vs periodo anterior ✅ Batch 6

Bug Descripcion Estado Corregido
Moneda hardcodeada en Insights La funcion formatAmount en insights.lazy.tsx tenia currency: 'EUR' hardcodeado. Ahora usa teachers.defaultCurrency ✅ Batch 4

Mejora Descripcion Dificultad Estado Implementado
Fix labels del funnel El label i18n insights.funnel.visits renombrado a “Pruebas solicitadas” (ES) / “Trials requested” (EN), reflejando que la primera etapa cuenta trials creados Facil ✅ Batch 3
Targets configurables Los targets de metricas son editables Facil ✅ Batch 3
Content insights en dashboard Renderizar los insights del ContentInsightsService como smart actions en el dashboard principal. El tipo content_insight ya se genera Facil Implementado ✅
Drill-down en KPIs Las tarjetas KPI son clickables y hacen scroll a la seccion de detalle correspondiente Medio ✅ Batch 2

Archivo Proposito
apps/app/src/routes/teacher/insights.lazy.tsx Pagina completa
apps/api/src/services/teacher/insights-service.ts KPIs, metricas, funnel, earnings, journey
apps/api/src/services/teacher/retention-metrics-service.ts Retencion, cohortes, at-risk
apps/api/src/services/teacher/content-analytics-service.ts Analytics de contenido
apps/api/src/services/teacher/content-insights-service.ts Insights automaticos
Endpoint Metodo Proposito
/teacher/insights/overview GET KPIs del periodo
/teacher/insights/metrics GET Asistencia, completacion, rebooking
/teacher/insights/funnel GET 4 etapas de conversion
/teacher/insights/earnings GET Ingresos mensuales (12 meses)
/teacher/insights/journey GET Stats lifetime
Endpoint Metodo Proposito
/teacher/insights/retention GET KPIs de retencion
/teacher/insights/retention/cohorts GET Matriz de cohortes
/teacher/insights/retention/at-risk GET Alumnos en riesgo
/teacher/insights/retention/student/:id/journey GET Journey individual
/teacher/insights/retention/settings GET/PATCH Umbrales configurables
Endpoint Metodo Proposito
/teacher/insights/content GET Overview + top 3 templates
/teacher/insights/content/templates GET Ranking de templates
/teacher/insights/content/templates/:id GET Detalle + comparacion A/B
/teacher/insights/content/resources GET Impacto por tipo de recurso
/teacher/insights/content/tags GET Combinaciones de tags
/teacher/insights/content/categories GET Metricas por categoria
/teacher/insights/comparison GET Comparativa actual vs anterior (?period=30|60|90)
/teacher/insights/heatmap GET Mapa de calor hora×dia (?days=7|14|30|90)