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.
Que hay
Section titled “Que hay”Selector de periodo
Section titled “Selector de periodo”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.
KPIs (4 tarjetas, clickables)
Section titled “KPIs (4 tarjetas, clickables)”| 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.
Export de metricas
Section titled “Export de metricas”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
Dashboard personalizable de Insights
Section titled “Dashboard personalizable de Insights”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).
Funnel de conversion (4 barras)
Section titled “Funnel de conversion (4 barras)”| 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.
Grafico de ingresos (12 meses)
Section titled “Grafico de ingresos (12 meses)”Recharts AreaChart con:
- Eje X: Labels de mes (MMM)
- Eje Y: Formato moneda (EUR)
- Gradiente del color primary
- Altura 256px
Journey stats (4 cards, lifetime)
Section titled “Journey stats (4 cards, lifetime)”| 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 |
Tab Retencion
Section titled “Tab Retencion”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.
Tab Contenido
Section titled “Tab Contenido”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.
Que falta
Section titled “Que falta”| 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 |
Que falla
Section titled “Que falla”| 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 |
Que cambiaria
Section titled “Que cambiaria”| 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 |
Referencia tecnica
Section titled “Referencia tecnica”Archivos clave
Section titled “Archivos clave”| Archivo | Proposito |
|---|---|
apps/web/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 |
API — Overview
Section titled “API — Overview”| 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 |
API — Retencion
Section titled “API — Retencion”| 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 |
API — Content Analytics
Section titled “API — Content Analytics”| 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 |