Agenda
/player/agenda te muestra la semana actual (lunes a domingo) con las sesiones que tenés agendadas. Es una vista deliberadamente simple: hora, lugar, MD-N y un título genérico. No ves el tipo de sesión (entrenamiento, partido, recovery, etc.) — eso es decisión del cuerpo técnico (PR #35).
Cómo lo ves vos
Sección titulada «Cómo lo ves vos»- Una tarjeta por sesión con tres datos:
- Horario (hora de inicio y, si está cargado, fin).
- Lugar (campo, gimnasio, estadio).
- MD-N: el día relativo al partido más cercano dentro de una ventana de [-3, +7] días. Soporta MD, MD-1, MD-2, MD-3, MD-4, MD-5, MD+1, MD+2. En empate (mismo día de distancia), gana el partido futuro sobre el pasado. Si no hay match en la ventana, aparece “Libre”.
- Título genérico: “Entrenamiento” o “Partido”. No distingue entre “fuerza”, “video”, “regenerativo”, etc. — esa info la maneja el staff internamente.
- Día actual marcado con badge “Hoy” y resaltado en azul.
- Días pasados quedan grises (podés repasar lo que entrenaste en la semana).
- Sin sesiones: si un día no tiene nada cargado, te aparece “Sin sesiones”.
¿Por qué tan minimalista? Porque la planificación táctica y de carga la maneja el PF. Vos necesitás saber dónde estar y a qué hora, no qué tipo de estímulo hay detrás. Si querés más detalle, preguntá por Mensajes.
Cómo lo activa el staff
Sección titulada «Cómo lo activa el staff»- Calendario. El staff carga las sesiones desde
/dashboard/calendario(mes/semana). Lo que ellos marcan como “training” o “match” se traduce a tu vista como “Entrenamiento” / “Partido”. - Convocatorias. En el estado actual, la agenda del jugador muestra todos los eventos de la organización dentro de la semana (filtrados por
organization_idcon defensa en profundidad sobre la RLScalendar_player_selectde migration-046). El helperloadPlayerCalendarEventsno aplica filtro por convocatoria/ausencia — si en el futuro se quiere ocultar eventos segúnsession_absences, hay que sumarlo acá. - Microciclo (MD-N). El RPC
get_microcycle_day(p_org_id, p_date)busca elevent_type = 'match'más cercano a la fecha dentro de [-3, +7] días sobrecalendar_events. No requiere configuración adicional desde Settings — el rango está hardcodeado en la función (migration-024 + migration-075).
Datos y métricas
Sección titulada «Datos y métricas»- Tabla:
calendar_events(filtrada por organization y semana actual, lunes–domingo). - RPC:
get_microcycle_day(p_org_id, p_date)— devuelveMD-NoLibre. EsSECURITY INVOKER, así que corre bajo RLS del caller — un jugador no puede leer eventos de otra org. - Helper:
loadPlayerCalendarEventsagrega filtro explícito pororganization_idcomo defensa en profundidad sobre la RLS.
Integraciones
Sección titulada «Integraciones»- Calendario staff (
/dashboard/calendario) → único punto de entrada de eventos. - i18n: los labels “Entrenamiento”, “Partido”, “Hoy”, “Sin sesiones”, “Libre” están traducidos en
messages/es.json,en.json,pt.json.
Limitaciones / roadmap
Sección titulada «Limitaciones / roadmap»- Vista semanal fija — no hay navegación a semanas anteriores ni futuras. Si necesitás ver el plan de la semana siguiente, esperá al lunes o preguntá por Mensajes.
- No hay confirmación de asistencia desde la agenda. Las ausencias las carga el staff en su lado (
session_absences). - Los eventos no-match (training/meeting/travel/other) comparten el label genérico “Entrenamiento”. Solo
event_type = 'match'se muestra como “Partido”. Es intencional, no un bug. - No hay filtro de convocatoria todavía — el jugador ve todos los eventos de la org. Falta integrar
session_absenceso un campo de attendees explícito si se quiere ocultar.