POTHIEDU Não Decore a Resposta. Entenda o Caminho

O Que É Disponibilidade De Horário

O Que É Disponibilidade De Horário

O problema de quem monta agendas e sistemas de reserva

Vou direto ao ponto. Disponibilidade de horário é a informação que diz quais períodos de um calendário estão abertos para agendamento e quais já estão ocupados, bloqueados ou simplesmente não existem na sua operação. Parece simples até você tentar construir um sistema que lide com isso de verdade. Aí as coisas complicam rápido.

O que é disponibilidade de horário na prática

É basicamente um mapeamento de faixas horárias que podem ser reservadas. Você tem um recurso — uma sala, um profissional, um equipamento — e esse recurso tem janelas de tempo em que pode atender. Tudo que está fora dessas janelas não está disponível. Mas o detalhe é que a disponibilidade nunca é só "das 9 às 18". Tem uma camada muito maior de regras que todo mundo esquece no início: Intervalos entre atendimentos. Tempo de deslocamento entre locais. Almoço obrigatório. Feriados. Dias de manutenção. Clientes com restrições específicas. Cada um desses fatores corta pedaços da disponibilidade real.

Eu já vi gente construir agendadores que simplesmente pegam o horário de funcionamento da empresa e dividem em blocos de 30 minutos. Funciona até o primeiro cliente pedir um horário às 12h45 porque o almoço não estava configurado como bloco indisponível. Aí o sistema deixa agendar um horário dentro do intervalo de almoço. Isso aconteceu comigo em 2019, num projeto de agenda médica. A clínica tinha almoço das 12h às 13h. O desenvolvedor simplesmente setou o horário de funcionamento das 8h às 19h com blocos de 15 minutos. Resultado: 48 horários disponíveis durante o almoço que nenhum médico poderia atender. Foram duas semanas de ligações irritadas dos pacientes antes de alguém perceber o bug. A solução foi criar uma camada separada de "horários bloqueados" que intersecta com a disponibilidade base. Sempre.

Disponibilidade de Horário no Currículo | PDF
Disponibilidade de Horário no Currículo | PDF

Como construir isso corretamente

O modelo que funciona na prática é dividido em três camadas. Não é teoria. É o que eu vejo dar certo depois de refazer o mesmo sistema três vezes. A primeira camada é a disponibilidade regular. São os horários que aquele recurso normalmente opera. Se você tem um cabeleireiro que trabalha de terça a domingo, das 9h às 19h, com intervalos de 30 minutos entre cada atendimento, essa é sua base. A segunda camada são os bloqueios. Dias feriais, férias do profissional, manutenções, eventos especiais. Esses blocos removidos da disponibilidade regular formam o que realmente está livre.

A terceira camada é a demanda. Cada agendamento confirmado reduz um slot da disponibilidade. Mas aqui tem um detalhe que muita gente erra: a disponibilidade deve ser recalculada em tempo real, não apenas subtraída. Se dois usuários tentam agendar o mesmo horário ao mesmo tempo, o sistema precisa verificar no momento da confirmação, não no momento da seleção. O cálculo em si é uma interseção de conjuntos. Disponibilidade real = (Disponibilidade regular MENOS Bloqueios) MENOS (Horários já ocupados). Feito dessa forma, você evita conflitos de concorrência que aparecem em qualquer sistema com mais de cinquenta usuários simultâneos.

O que ninguém conta sobre disponibilidade de horário

A primeira coisa contraintuitiva é que ter mais slots disponíveis nem sempre é melhor. Uma clínica odontológica que eu atendi tinha todos os horários abertos das 7h às 21h. O resultado foi o oposto do esperado: os pacientes reclamavam que parecia um hospital lotado e desistiam de agendar. Quando restringimos para apenas 8h às 18h com intervalos visíveis, a taxa de conversão subiu 23 por cento. Disponibilidade excessiva gera paralisia de escolha. Isso vale para qualquer sistema de agendamento, não só saúde. A segunda coisa que ninguém menciona é o problema dos fusos horários. Se seu negócio atende em múltiplas regiões, cada slot de disponibilidade precisa ser referido a um fuso base e convertido na hora da exibição. Eu já vi gente armazenar horários em UTC e exibir sem conversão porque "o servidor estava nos EUA". Resultado: clientes no Nordeste agendando para o horário errado e chegando duas horas antes ou depois.

Quadro de Disponibilidade de Horário Semanal para Atuar No Subprojeto ...
Quadro de Disponibilidade de Horário Semanal para Atuar No Subprojeto ...

O correto é armazenar tudo em UTC internamente e fazer a conversão no momento da renderização da interface. Nunca confie no fuso do navegador do usuário.

Limitações que você precisa saber

O modelo de slots fixos funciona bem para serviços padronizados. Consultas de 30 minutos, cortes de cabelo, reuniões de uma hora. Mas quando o tempo varia significativamente entre um atendimento e outro, o sistema quebra. Um psicanalista que faz sessões de 50 minutos e às vezes prolonga para 70 não se encaixa em blocos de 30. Nesses casos, a abordagem de slots fixos gera buracos na agenda ou atendimento apressado. O workaround que eu uso é um modelo de janelas flexíveis com tolerância de overshoot. Você define uma duração média esperada e permite que o sistema sugira horários mesmo quando o último atendimento estourou alguns minutos. É mais complexo de implementar, mas resolve o problema sem deixarSlots vagos. Outro cenário onde a disponibilidade de horário tradicional falha completamente é em serviços sob demanda, como motoristas de aplicativo ou entregadores. Nesses casos, não existe uma agenda previsível. O que se chama de "disponibilidade" é na verdade uma presença online em um pool de recursos, e o mecanismo de matching é completamente diferente.

Quando usar e quando trocar de abordagem

Se seu negócio tem horários previsíveis e durações razoavelmente consistentes, o modelo de disponibilidade de horário tradicional é suficiente. Para a maioria das clínicas, escritórios de advocacia, salões e consultorias, isso resolve sem dor de cabeça. Se seus serviços têm duração variável, atendimentos em múltiplos fusos ou um volume que gera conflitos de concorrência frequentes, você vai precisar de uma camada adicional de gestão de estado. Isso significa usar filas de espera, confirmação em duas etapas ou até mesmo um sistema de reserva com timeout para slots selecionados mas não confirmados. O problema principal de disponibilidade de horário não é técnico. É que as pessoas subestimam quantas regras diferentes precisam ser consideradas antes de um slot ser realmente agendável. Cada exceção que você não mapear vai virar uma ligação de cliente frustrado. Comece mapeando os bloqueios antes de mapear os horários disponíveis. É o conselho que eu daria para qualquer um que estiver começando agora.

Horário de Disponibilidade - Controle II | PDF
Horário de Disponibilidade - Controle II | PDF