Informe HoP
Informe HoP es el reporte ejecutivo semanal del cuerpo técnico: una sola pantalla que cruza plantel, físico, médico, nutrición y mental con KPIs comparados contra la semana / mes / temporada anterior. Incluye injury rate por 1000h, match load por jugador, notas editables persistidas en DB y export a PDF.
Para comercial
Sección titulada «Para comercial»- Problema que resuelve: el HoP arma un PowerPoint cada lunes cruzando 6 planillas distintas. CÉNIT genera ese informe en tiempo real con los datos del sistema, lo deja editar comentarios contextuales y exporta a PDF listo para imprimir o mandar al cuerpo técnico.
- Casos de uso típicos [NEEDS_USER: CASE_STUDY caso real de Nacional]:
- Lunes de microciclo: revisar la semana cerrada con KPIs versus la anterior.
- Mensual: ver injury rate del mes y decidir si hay que ajustar cargas globales.
- Reunión con dirigencia: PDF de temporada con notas explicativas del HoP.
- Planes que lo incluyen:
esencial,proyenterpriselo tienen accesible. El feature flagpdf_exportestá entruepara los tres planes. - Diferenciador: único informe del mercado que combina injury rate (epidemiología deportiva), match load real (GPS), composición corporal y mental en un solo documento auditable.
Cómo lo usa el staff
Sección titulada «Cómo lo usa el staff»Acceso y permisos
Sección titulada «Acceso y permisos»Solo hop, dir y coord_form pueden ver /dashboard/informe.
El resto de los roles, aunque tengan el link oculto en el nav, son
redirigidos server-side a /dashboard si pegan la URL directa.
(page.tsx chequea callerRole contra ALLOWED_ROLES antes de
renderizar.)
Flujos paso a paso
Sección titulada «Flujos paso a paso»Selector de período en el shell:
weekly— semana ISO en curso vs semana anterior (lunes a domingo).monthly— mes calendario vs mes anterior.season— desdeorganizations.season_starthasta hoy, sin comparativa.
Tabs del informe:
- Resumen ejecutivo — KPIs: disponibles / total, compliance wellness, wellness promedio, lesiones nuevas, injury rate /1000h con semáforo. Plantel con observaciones automáticas (leave médico / RTP / carga alta / sin GPS / wellness bajo).
- Físico —
LoadMetricpor jugador (distance / HSR / sprint / HMLD), top performers,MatchSummaryRowconmatchLoadpor partido jugado en la ventana. - Médico —
ActiveInjury[](lesiones en curso),MedConsultation[](consultas), epidemiología. - Nutrición —
NutritionAnthroRow(composición corporal última + previa),NutritionTeamKpis(compliance objetivos). - Mental — solo visible para
hop,dir,psi.MentalGroupStats+MentalIndividual. - Comparativa semanal —
WeekComparisonRow[]con delta entre ventanas.
Flujo principal — revisar y exportar:
- Abrir
/dashboard/informe(defaultweekly). - Revisar tabs y agregar notas en los bloques
EditableNote. - Click Exportar PDF (
pdf-export-button.tsx) — render server-side con@react-pdf/renderer.
Flujo secundario — notas editables: cada nota tiene note_type
y se persiste en report_notes con clave (week_start, note_type).
Solo se ven en el período weekly (las notas están scopeadas a la
semana).
Configuración relacionada
Sección titulada «Configuración relacionada»organizations.season_start— fecha de inicio de temporada, usada para el períodoseason.- Roles configurables en
user_profiles.role— agregar / sacar usuarios del set ALLOWED_ROLES requiere migration.
FAQ / casos límite
Sección titulada «FAQ / casos límite»- “El injury rate me da NULL” —
total_player_hours = 0en la ventana. Sucede si no hay sesiones GPS cargadas. Fórmula:(lesiones nuevas / total_player_hours) * 1000. Sin GPS no hay denominador. - “Vi el módulo y desapareció” —
coord_formse agregó al set permitido. Si tu rol no eshop / dir / coord_form, el link desaparece y la URL redirige. - “El PDF salió en blanco” — verificar Sentry.
@react-pdf/ rendererpuede fallar silenciosamente en Workers si una sección no tiene datos.
Cómo lo ve el jugador
Sección titulada «Cómo lo ve el jugador»Player surface: N/A. El informe HoP es de uso interno del cuerpo técnico. Los jugadores no acceden ni reciben copia automática.
Datos y métricas
Sección titulada «Datos y métricas»Fórmulas y cálculos
Sección titulada «Fórmulas y cálculos»- Injury rate /1000h:
(newInjuries / totalPlayerHours) * 1000, dondetotalPlayerHours = MAX(total_player_hours)entre filas GPS de la ventana. Se usa MAX porque cada fila ya trae el total del equipo (sesión × team_size). Semáforo:< 2.0verde,< 3.5amarillo,≥ 3.5rojo. - Match load por jugador:
match_distance_m,match_hsr_m,match_session_countextraídos deweekly_gps_summary(splitsmatch_*agregados pormigration-105). - Wellness compliance:
wellnessSubmitted / totalPlayers. - Wellness avg: promedio del último
hooper_indexpor jugador dentro de la ventana. - Observaciones automáticas (
plantelRows): primer match gana →injured→recovering→ distance NULL → distance > 50km → hooper > 20.
Importadores y fuentes
Sección titulada «Importadores y fuentes»- No tiene importadores propios. Consume datos de Carga, Wellness, Lesiones, Médico, Nutrición y Mental.
Tablas DB / RPCs / vistas materializadas
Sección titulada «Tablas DB / RPCs / vistas materializadas»- Tablas leídas:
players,injuries,medical_consultations,physio_sessions,wellness_entries,mental_records,nutrition_targets,report_notes,organizations. - Vista:
weekly_gps_summary(víafetchWgsSummary, splits total / training / match). - RPC:
get_body_composition_latest_and_prior(p_player_ids)para composición corporal con delta.
Integraciones
Sección titulada «Integraciones»- Carga GPS aporta GPS + match load.
- Plantel aporta status (
available / injured / recovering). - Wellness aporta Hooper diario.
- Médico / Fisio aportan lesiones activas + consultas + sesiones.
- Nutrición aporta composición + objetivos.
- Psicología aporta
mental_records(solo hop/dir/psi). - @react-pdf/renderer para export.
Limitaciones / roadmap
Sección titulada «Limitaciones / roadmap»- Sin export Excel —
excel_exportprometido pero no implementado (gap comercial transversal). - Sin notas en
monthly/season:report_notesestá scopeado aweek_start. Las notas en otros períodos requieren schema change. - Sin envío automático por email — el HoP exporta y manda manualmente. Roadmap: integración con Resend para envío programado.
coord_formen allowlist — rol añadido al set permitido además de hop/dir. Si el ABAC se rediseña, este chequeo hardcoded debería ir alib/auth-guard.ts.