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 y funnel.

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.

KPIColorDatosTendenciaDrill-down
IngresosVerdeSum pricePaid del periodo% vs periodo anteriorScroll a grafico de ingresos
ClasesAzulCount sesiones del periodo% vs periodo anteriorScroll a metricas de sesiones
Alumnos activosMoradoCount students activosScroll a journey stats
RetencionAmbar% 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:

SectionDOM idSeccion destino
revenueinsights-revenueGrafico de ingresos (12 meses)
sessionsinsights-sessionsMetricas de calidad (progress bars)
studentsinsights-studentsJourney stats lifetime
funnelinsights-funnelFunnel de conversion

Metricas de calidad (3 barras de progreso)

Section titled “Metricas de calidad (3 barras de progreso)”
MetricaTarget por defectoColor
Asistencia95%Verde si >= target, rojo si < target
Completacion90%Mismo patron
Rebooking80%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).

EtapaColorDato
Pruebas solicitadasAzulTrials 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
TrialsMoradoTrials completados
ConvertidosVerdeEnrollments creados
RetenidosAmbarAlumnos 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
StatIconoDato
Total clasesCalendarCheckCount sesiones completadas (lifetime)
Total alumnosUsersCount alumnos (lifetime)
Total ingresosDollarSignSum pricePaid (lifetime)
Meses ensenandoStarMeses desde primera sesion

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

6 KPI cards:

KPIDescripcion
Tasa de retencion% alumnos que repiten dentro del periodo
ChurnedAlumnos que dejaron de comprar
En riesgoAlumnos sin sesion reciente (umbral configurable)
ReactivadosAlumnos que volvieron tras inactividad
Frecuencia mediaSesiones 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.


FeatureDescripcionEstadoImplementado
Alertas automaticasNo hay notificacion cuando una metrica cae por debajo del targetImplementado ✅
Comparacion de periodosIndicadores de cambio periodo-sobre-periodo en cada KPI cardBatch 3
Export de datosBoton “Exportar CSV” genera metricas del periodo en formato CSVBatch 3
Objetivos configurablesTargets de metricas (asistencia, completacion, rebooking) editables por el profesorBatch 3
Dashboard personalizableEl profesor puede ocultar/mostrar secciones de la pagina de InsightsBatch 3
Retencion con cambio period-over-periodInsightsService.getOverview() calcula retentionChange comparando la tasa de retencion del periodo actual con la del periodo anteriorBatch 3
Labels del funnel corregidosLa primera etapa del funnel renombrada de “Visitas a tu perfil” a “Pruebas solicitadas” para reflejar que cuenta trials creados, no page viewsBatch 3

BugDescripcionEstadoCorregido
Moneda hardcodeada en InsightsLa funcion formatAmount en insights.lazy.tsx tenia currency: 'EUR' hardcodeado. Ahora usa teachers.defaultCurrencyBatch 4

MejoraDescripcionDificultadEstadoImplementado
Fix labels del funnelEl label i18n insights.funnel.visits renombrado a “Pruebas solicitadas” (ES) / “Trials requested” (EN), reflejando que la primera etapa cuenta trials creadosFacilBatch 3
Targets configurablesLos targets de metricas son editablesFacilBatch 3
Content insights en dashboardRenderizar los insights del ContentInsightsService como smart actions en el dashboard principal. El tipo content_insight ya se generaFacilImplementado ✅
Drill-down en KPIsLas tarjetas KPI son clickables y hacen scroll a la seccion de detalle correspondienteMedioBatch 2

ArchivoProposito
apps/web/src/routes/teacher/insights.lazy.tsxPagina completa
apps/api/src/services/teacher/insights-service.tsKPIs, metricas, funnel, earnings, journey
apps/api/src/services/teacher/retention-metrics-service.tsRetencion, cohortes, at-risk
apps/api/src/services/teacher/content-analytics-service.tsAnalytics de contenido
apps/api/src/services/teacher/content-insights-service.tsInsights automaticos
EndpointMetodoProposito
/teacher/insights/overviewGETKPIs del periodo
/teacher/insights/metricsGETAsistencia, completacion, rebooking
/teacher/insights/funnelGET4 etapas de conversion
/teacher/insights/earningsGETIngresos mensuales (12 meses)
/teacher/insights/journeyGETStats lifetime
EndpointMetodoProposito
/teacher/insights/retentionGETKPIs de retencion
/teacher/insights/retention/cohortsGETMatriz de cohortes
/teacher/insights/retention/at-riskGETAlumnos en riesgo
/teacher/insights/retention/student/:id/journeyGETJourney individual
/teacher/insights/retention/settingsGET/PATCHUmbrales configurables
EndpointMetodoProposito
/teacher/insights/contentGETOverview + top 3 templates
/teacher/insights/content/templatesGETRanking de templates
/teacher/insights/content/templates/:idGETDetalle + comparacion A/B
/teacher/insights/content/resourcesGETImpacto por tipo de recurso
/teacher/insights/content/tagsGETCombinaciones de tags
/teacher/insights/content/categoriesGETMetricas por categoria