Calendario
El calendario del staff concentra entrenamientos, partidos y eventos
del microciclo. Permite crear/editar sesiones, copiar una sesión
modelo a múltiples fechas, marcar ausencias por jugador y registrar
convocatorias a selección en bloque. Vive en /dashboard/calendario
y se alimenta de calendar_events + session_absences.
Para comercial
Sección titulada «Para comercial»- Problema que resuelve: la mayoría de los clubes planifica en Google Sheets o Excel y los datos no se cruzan nunca con carga, wellness o lesiones. CÉNIT unifica calendario y métricas para que un MD-2 borrado por convocatoria se vea reflejado automáticamente en el ACWR del jugador.
- Casos de uso típicos: programar la semana, copiar el “entreno de activación” a las próximas 4 semanas en 30 segundos, descontar del cómputo a un jugador que se fue a la selección, dejar nota post-partido (lineup, sustituciones, observaciones).
- Planes que lo incluyen: todos (esencial, pro, enterprise).
- Diferenciador: la copia masiva con preservación de hora UTC y el bloque de convocatorias multi-jugador son únicos vs ofertas competidoras genéricas tipo “calendario CRUD”.
Cómo lo usa el staff
Sección titulada «Cómo lo usa el staff»Acceso y permisos
Sección titulada «Acceso y permisos»- Lectura: todos los roles del staff.
- Crear / editar eventos: cualquier staff con sesión activa
(
createEvent/updateEventno enforzan rol server-side; la UI oculta el botón para roles no-admin, pero un payload manipulado pasa el guard básico). - Copiar eventos a múltiples fechas y marcar convocatoria
(
national_team) en bulk:hop,dir,sc. - Borrar eventos:
hop,dir,sc,ss,rtp. - Marcar / quitar ausencias individuales:
hop,dir,sc,ss,rtp,fisio,med,nut,psi(el quién las registró queda ensession_absences.recorded_by).
Flujos paso a paso
Sección titulada «Flujos paso a paso»- Crear sesión. Botón ”+” en mes/semana → modal con título,
tipo de evento, tipo de sesión personalizado (de
org_session_types, configurable en Settings), horario, lugar y notas. La fecha/hora se arma en el browser y se manda en ISO con offset para no depender del TZ del runtime SSR. - Copiar sesión a múltiples fechas. Desde el modal de una sesión existente → “Copiar” → seleccionar hasta 30 fechas destino. El sistema preserva la hora UTC original y duración, y omite fechas que ya tengan un evento idéntico creado por el mismo usuario.
- Marcar ausencia individual. Click en el evento → panel de
asistencia → “Marcar ausente” → motivo:
injury,illness,personal,load_management,tactical,other. - Marcar convocatoria a selección (bulk). Botón “Selección” →
elegir jugadores (1-50) + rango de fechas → el sistema crea
ausencias con motivo
national_teamen todos los eventos del rango para esos jugadores. Salta los que ya existían. - Notas de partido. En eventos tipo partido se puede editar
texto libre que queda en
calendar_events.match_notes.
Configuración relacionada
Sección titulada «Configuración relacionada»- Tipos de sesión (Settings → Tipos de sesión): cada org define
sus propios labels y colores para el campo
session_type_iddecalendar_events. - Microciclo MD-N: el cálculo se hace con
get_microcycle_dayy se usa en/player/agendapara mostrar al jugador su semana.
FAQ / casos límite
Sección titulada «FAQ / casos límite»- Hora corrida al copiar: se preserva la hora UTC del evento origen. Si el origen quedó “8 AM Buenos Aires” en invierno y se copia a una fecha en verano, sigue siendo el mismo instante UTC.
- Convocatoria sin eventos en el rango: la action retorna
{ created: 0, skipped: 0 }sin error. - Cross-tenant guard: la action de selección filtra los
playerIdsrecibidos a los que están en la org del caller antes de crear absences — un payload manipulado no puede tocar otra org.
Cómo lo ve el jugador
Sección titulada «Cómo lo ve el jugador»Player surface: la agenda del jugador (/player/agenda) consume
los mismos calendar_events pero oculta event_type (PR #35).
Solo muestra horario, MD-N, lugar y un título genérico. Si el
jugador tiene una ausencia registrada para un evento, el evento
queda con flag visual en su agenda.
Datos y métricas
Sección titulada «Datos y métricas»Tablas DB / RPCs
Sección titulada «Tablas DB / RPCs»calendar_events— eventos (title, description, event_type, start_datetime, end_datetime, location, is_all_day, session_type_id, match_notes, created_by, organization_id).session_absences— ausencias (event_id, player_id, reason, source, recorded_by). Constraint único(event_id, player_id).org_session_types— tipos de sesión configurables por org (name, color, sort_order).competition_logos— catálogo de logos de competiciones para partidos.- RPC
get_microcycle_day— calcula el día del microciclo (MD-N) para una fecha de un evento.
Integraciones
Sección titulada «Integraciones»- Carga GPS: los eventos con
session_type_idse usan como referencia para clasificar sesiones GPS importadas. - Risk Advisor: las ausencias por
injurycontribuyen al historial de lesiones del jugador. - Informe HoP: el resumen semanal cuenta sesiones y ausencias
para
matchLoadyinjuryRate.
Limitaciones / roadmap
Sección titulada «Limitaciones / roadmap»- No hay sincronización con calendarios externos (Google Calendar, iCal). [NEEDS_USER: ROADMAP confirmar.]
- No hay recurrencia nativa — el flujo de copia masiva la suple.
- Las ausencias por
national_teamse registran como bloque pero no hay reporte agregado de “días perdidos por convocatoria” por jugador. [NEEDS_USER: ROADMAP validar si interesa exponerlo en Informe HoP.]