Versão: 1.0
Público: produto, engenharia e operações da arena.
Relaciona com: Onda 3.1 Booking, Academy — horários e vínculos, Mudança court picker + holds.
Dar ao dono da arena uma visão e controlo claros sobre:
Sem duplicar verdades: o tempo na quadra continua centralizado em bookings (com tipos distintos) e, para turmas, complementado por academy_class_schedule_slots (padrão semanal + court_id) e sincronização de holds.
Plataformas de clubes e reservas desportivas (ex.: gestão por recurso estilo CourtReserve / Playtomic Business / conceitos de facility management) convergem em padrões úteis:
| Padrão | Porquê importa no KOLOS |
|---|---|
| Vista por recurso (quadra) + tempo | O dono pensa “Quadra 1, sábado de manhã” — a UI deve espelhar isso. |
| Cores / ícones por tipo de ocupação | Diferenciar jogo/aluguer, aula fixa, manutenção, evento interno. |
| Calendário semanal + mensal + dia | Semana para operações; mês para planeamento; dia para conflitos finos. |
| Drill-down | Clicar num bloco → detalhe (turma, reserva, manutenção). |
| Bloqueios e exceções | Manutenção pontual, evento, fecho; não misturar com “aula recorrente”. |
| Regras de conflito explícitas | Evitar double booking; mensagens acionáveis para staff. |
No KOLOS, Academy já gera ACADEMY_CLASS_HOLD a partir de slots com quadra; o dono precisa de ver isso na mesma agenda que BOOKING (jogador) e MAINTENANCE.
| Área | Já existe | Lacuna para a estratégia |
|---|---|---|
| Quadras | ManageCourts: criar/listar; policy manageCourts |
Edição completa no mesmo ecrã (nome, superfície, flags, ativo); impacto ao desativar quadra com reservas futuras |
| Manutenção | DeclareMaintenance → MAINTENANCE |
Integrar na agenda unificada (hoje é fluxo separado) |
| Reservas jogador | /booking (role player) |
Dono não tem visão consolidada por arena/quadra |
| Turmas + quadra | TrainingClasses, slots com court_id, holds ACADEMY_CLASS_HOLD |
Dono não tem calendário que mostre holds + resto |
| Conflitos | Overlap em CreateBookingAction + assert em Academy |
OK; UI dono deve antecipar conflitos antes de agir |
courts: identidade da quadra, atributos, is_active.academy_class_schedule_slots (weekday, horas, court_id) + academy_classes.sync_court_holds → gera N semanas de bookings tipo ACADEMY_CLASS_HOLD com academy_class_id.bookings: intervalo [starts_at, ends_at) por court_id, type, opcionalmente academy_class_id.Regra de ouro: qualquer UI de “agenda do dono” deve ler principalmente de bookings por court_id, enriquecendo labels com joins (turma, utilizador criador). Slots Academy são a fonte do padrão; holds são a materialização para conflito com jogadores e manutenção.
Sugestão de navegação (uma arena selecionada):
| Secção | Função |
|---|---|
| Visão geral | Resumo: quadras ativas, alertas (conflitos, manutenção hoje, turmas sem quadra). |
| Quadras | CRUD + estado; link “ver agenda desta quadra”. |
| Agenda | Novo eixo central: multi-quadra, filtros por tipo, semana/dia, detalhe ao clicar. |
| Manutenção | Atalho para fluxo existente ou incorporado na Agenda como “criar bloqueio”. |
| Turmas (Academy) | Já existe; reforçar copy: “ocupação na agenda” quando sync_court_holds ativo. |
| Professores | Já existe; vínculo com quem pode gerar slots. |
Isto alinha o mental model do dono com operações diárias (agenda) e configuração (quadras, turmas).
venue_owner + policy na arena (ex.: manageCourts ou permissão nova tipo VenueViewSchedule).bookings.BOOKING, MAINTENANCE, ACADEMY_CLASS_HOLD (ex.: “Turma: {nome}”).ACADEMY_CLASS_HOLD → link para roster/sessões da turma (rotas já existentes).Critério de pronto: dono consegue responder “o que está na Quadra 2 na próxima terça?” em < 30 s.
bookings futuros ou slots Academy ativos com essa quadra; fluxo guiado (migrar turma, cancelar holds, etc.) — pode ser MVP com mensagem + lista de bloqueios.BOOKING com created_by_user_id = dono/staff.CANCELLED quando existir no enum).court_picker_* em config).court_id + opcionalmente sync_court_holds (UI já orientada no treinador e no dono em Turmas).ACADEMY_CLASS_HOLD para as próximas N semanas; conflitos com BOOKING e outros holds são validados nas actions existentes.Documentar para suporte: “Se desligares reserva recorrente na turma, os holds futuros são removidos; a quadra fica livre para jogadores.”
VenueManageCourts para quadras e, se necessário, introduzir VenueViewBookings ou VenueManageSchedule para separar “vê agenda” de “cria reserva manual”.venue_id (dono só vê as suas arenas), coerente com matriz ACL.| Risco | Mitigação |
|---|---|
| Duas UIs de verdade (turma vs booking) | Agenda dono lê bookings; turma edita padrão + sync. |
| Performance com muitas semanas de holds | Índices em (court_id, starts_at); vistas podem limitar janela (ex.: +8 semanas). |
| Desativar quadra com turmas | Fase B: validação + UX de correção. |
| Staff sem modelo de vínculo | Doc Onda 3.1: staff por arena ainda não modelado — dono ou super_admin primeiro. |
GET /venues/{venue}/schedule (App\Livewire\Venue\VenueSchedule), policy manageCourts, vista semanal por quadra, legenda por BookingType, link para roster quando ACADEMY_CLASS_HOLD + AcademyClassPolicy::view. Atalhos em «Minhas arenas» e «Quadras».tests/Feature/Venue/VenueScheduleTest.php + rota em VenueUiAuthorizationTest.ManageCourts; horário diário daily_opens_at / daily_closes_at na mesma página (picker Academy usa estes limites); reserva manual na página VenueSchedule. Seguinte: desativar quadra com aviso de conflitos; dashboard dedicado.A melhor estratégia para o KOLOS é tratar a agenda multi-quadra baseada em bookings como centro operacional do dono, com quadras e turmas Academy como fontes de configuração que alimentam essa agenda. Referências de mercado reforçam vista por recurso, tipos visíveis e drill-down — já compatíveis com BookingType e academy_class_id. Entregar primeiro leitura (Fase A) maximiza confiança e reduz suporte; edição de quadras e ações na agenda seguem em ondas claras.