Ocorrências
A ocorrência é a data de visita de uma atração. Ela manda no status do dia e na capacidade — é o que decide se aquela data pode ou não ser vendida.
O que é e para que serve
Sem ocorrência aberta, uma data simplesmente não existe para o cliente. É aqui que se abre e fecha dia, se define a lotação máxima e se registra o motivo de um fechamento.
Quem pode acessar
occurrences.view— ver a listagem e o calendário.occurrences.manage— criar, editar, cancelar e gerar por regra.
Como acessar
Menu lateral → Ocorrências. Dentro do módulo há três telas: a listagem, o calendário (navegação mensal por atração) e as regras de recorrência.
Visão geral da tela
A listagem tem busca, filtros avançados, seletor de colunas e um conjunto rico de listas salvas de sistema: Todas, Hoje, Abertas, Fechadas, Bloqueadas, Esgotadas, Canceladas, Próximos 7 dias, Próximos 30 dias, Alteradas manualmente e Arquivadas.
Colunas principais
| Coluna | O que mostra |
|---|---|
| Atração | A qual atração a data pertence. |
| Data | O dia da visita. |
| Status | Aberta, Fechada, Bloqueada, Esgotada ou Cancelada. |
| Capacidade máxima | Limite de pessoas do dia. Em branco = sem limite. |
| Disponível para venda | Interruptor independente do status. |
| Origem | Manual, gerada por regra ou importada. |
| Alterada manualmente | Marca que protege a data de ser sobrescrita pela regeração. |
| Motivo do fechamento / Notas | Justificativas internas. |
Status possíveis
| Status | Vende? | Uso típico |
|---|---|---|
| Aberta | sim | Operação normal. |
| Fechada | não | Dia sem operação. |
| Bloqueada | não | Data reservada para evento particular. |
| Esgotada | não | Definida automaticamente quando a capacidade acaba. |
| Cancelada | não | Data cancelada; bloqueada se houver venda futura. |
Regras de recorrência
Em vez de criar data por data, defina uma regra: atração, período (data inicial e final), dias da semana, status padrão e capacidade padrão. Ao aplicar, o sistema gera as ocorrências do período.
O que acontece ao aplicar uma regra
| Situação da data | Ação | Resultado |
|---|---|---|
| Sem ocorrência ativa | Cria | Criada |
| Ocorrência desta regra, não alterada manualmente | Atualiza status, capacidade e disponibilidade | Atualizada |
| Ocorrência marcada como alterada manualmente | Preserva | Ignorada (manual) |
| Ocorrência de outra regra ou criada manualmente | Preserva | Ignorada (de terceiro) |
| Data que saiu do período/dias da regra, sem alteração manual | Arquiva | Removida |
| Data que saiu do período, mas foi alterada manualmente | Preserva | Travada |
Existe um modo de simulação que apenas conta o que aconteceria (criadas, atualizadas, ignoradas, removidas, travadas), sem gravar nada. Use sempre antes de aplicar em um período grande.
Excluir uma regra
Ao excluir, a regra é arquivada. Opcionalmente é possível remover também as ocorrências futuras que não tenham nenhum voucher e que não tenham sido alteradas manualmente. O sistema informa antes quantas datas se enquadram.
Regras de negócio
- Uma ocorrência ativa por atração e data. Não existem duas datas iguais concorrendo.
- A capacidade se autogerencia. O sistema alterna entre Aberta e Esgotada conforme as vendas.
- Não é possível reduzir a capacidade abaixo do já vendido (erro
capacity_below_sold). - Não é possível criar ocorrência manual com data no passado. Regras e importações podem preencher retroativamente.
- Cancelar ou arquivar com venda futura é bloqueado.
- “Alterada manualmente” é soberana. Assim que alguém edita status, capacidade, disponibilidade, motivo ou notas de uma data gerada por regra, a regeração nunca mais a sobrescreve.
- Regras de recorrência não podem se sobrepor: duas regras ativas da mesma atração com períodos e dias da semana que se cruzam são recusadas (
rule_overlap). - A atração precisa estar com gera ocorrências ligada.
O bloqueio de cancelar uma data considera vouchers ativos e pendentes, mas não os já utilizados — quem já visitou não precisa mais ser protegido. Já a remoção de datas ao excluir uma regra considera qualquer vínculo, inclusive os usados, porque ali se está removendo a linha da ocorrência. A assimetria é intencional.
Passo a passo: abrir um período de temporada
- Confirme a atração e verifique se ela está com gera ocorrências ligada.
- Vá em Ocorrências → Regras e crie uma regra nova.
- Defina atração, nome, data inicial e final. Todos são obrigatórios.
- Marque os dias da semana que abrem (por exemplo, sexta a domingo).
- Informe status e capacidade padrão das datas geradas.
- Rode a prévia e confira os números antes de confirmar.
- Aplique. As datas passam a existir e a loja começa a exibi-las.
- Ajuste exceções manualmente (um feriado fechado, uma data com capacidade maior). Elas ficam protegidas de regerações futuras.
Dependências com outros módulos
- Atrações — a flag “gera ocorrências” é o portão de criação.
- Passaportes — passaportes do tipo pacote vinculam ocorrências específicas.
- Regras de preço — o tipo “ocorrência específica” aponta para uma data.
- Loja e PDV — a data só aparece se estiver aberta, disponível para venda e com capacidade.
- Check-in — o voucher de acesso só vale no dia da ocorrência.
Erros e dúvidas comuns
| Situação | Motivo | Solução |
|---|---|---|
| “Já existe uma ocorrência ativa para esta atração nesta data.” | Duplicidade de data | Editar a existente em vez de criar outra |
capacity_below_sold | Capacidade menor que o vendido | Cancelar/remarcar vendas ou manter a capacidade |
rule_overlap | Regras concorrentes | Ajustar período ou dias da semana de uma das regras |
attraction_no_occurrence | Flag da atração desligada | Ligar “gera ocorrências” na atração |
| A regeração não atualizou uma data | Ela está marcada como alterada manualmente | Editar a data diretamente, se quiser mudá-la |
| A data está aberta mas não aparece na loja | “Disponível para venda” desligada ou capacidade zerada | Ligar a disponibilidade ou aumentar a capacidade |
Boas práticas
- Use regras para o padrão e edição manual só para exceções.
- Sempre rode a prévia antes de aplicar uma regra em um período longo.
- Preencha o motivo do fechamento: ele explica ao time por que aquele dia não vende.
- Evite deixar a capacidade em branco em atrações com limite físico real.