R-003 — Flag scheduling_suspension suspende o agendamento na interface

TLDR: com a flag scheduling_suspension ligada, o Header exibe o aviso de suspensão e todo agendador do front se comporta como se o terapeuta não tivesse horários disponíveis — para clientes, terapeutas e visitantes deslogados.

Given / When / Then

Dado que a flag scheduling_suspension está ligada para o usuário ou visitante Quando ele acessa uma rota fora das exclusões do useTopBanner, logado ou não Então o TopBanner exibe “Novos agendamentos estão temporariamente indisponíveis devido a uma manutenção. Agradecemos a compreensão.”, sem link, até ser dispensado

Dado que a flag scheduling_suspension está ligada Quando qualquer agendador é aberto — perfil público do terapeuta, modal do card de terapeuta, “Agendar Nova Sessão” em Meus Terapeutas, “Reagendar Sessão” (painel, Minhas Sessões, Minha Agenda) ou “Agendar sessão” do voucher Então a disponibilidade não é buscada, todos os dias do calendário ficam desabilitados, aparece “Sem horários disponíveis para estas datas.” e “Confirmar Agendamento” fica desabilitado

Dado que um visitante não está logado Quando o front busca flags Então consulta /features/anonymous e recebe apenas as features ligadas globalmente no Flipper

Restrições

  • A mesma flag controla banner e suspensão; não há flag separada para o aviso.
  • Para valer para deslogados, a flag precisa estar “Fully enabled” no Flipper; habilitar por ator não afeta visitantes (regra correspondente no trgclub-api).
  • Menus, páginas (Minha Agenda, Minha Disponibilidade, carteira, checkout) e a configuração de disponibilidade do terapeuta continuam visíveis — só os horários somem.
  • A suspensão é apenas de interface: o backend não bloqueia criação, reagendamento nem checkout por URL já montada.
  • A dispensa do banner é persistida em top-banner-storage-v2 por navegador e não é resetada no logout; trocar a chave faz o banner reaparecer para todos.

Teste vinculado

src/hooks/__tests__/useScheduler.test.ts (flag ligada → sem fetch e sem dias), src/infra/FeatureManager/test/useFeature.test.ts (ator anonymous), src/components/TopBanner/TopBanner.test.tsx (banner sem link), src/stores/topBanner/topBanner.test.ts (chave v2).