Um gap é uma janela de 1, 2 ou 3 noites disponíveis encravada entre dois períodos ocupados ou bloqueados. Essas noites têm probabilidade muito baixa de venda ao preço normal — o hóspede precisaria encaixar exatamente o check-in e checkout entre reservas vizinhas.
A estratégia Gapper aplica um desconto pontual nessas datas para torná-las vendáveis, sem comprometer o ADR das reservas adjacentes.
Sex-Sáb = gap de 2 noites (bounded). Ter-Qui = disponibilidade normal (não é gap — sem vizinho bloqueado na direita).
A detecção roda sobre a tabela daily_revenue_sapron_active (Sirius/Athena). O algoritmo usa a técnica de date − row_number para agrupar dias consecutivos disponíveis:
status = 'Active' e churn = falsedays_until_gap ≥ 0 — hoje ainda conta como limitegaps.gaps_rm (GCP) contém a visão do robô de Gapper. Os resultados desta detecção podem ser comparados como sanity check, mas a lógica própria dá controle total sobre os critérios.
Cada imóvel tem um tipo de sazonalidade registrado na rm_controle. O sistema usa esse tipo + o mês do gap para determinar em qual temporada o gap cai.
Não sazonal e Clima-CO são tratados de forma idêntica — sem variação por mês.
| Tipo | Jan | Fev | Mar | Abr | Mai | Jun | Jul | Ago | Set | Out | Nov | Dez |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 🌊 Quente | Alta | Alta | Alta | Média | Baixa | Baixa | Baixa | Baixa | Baixa | Média | Média | Alta |
| ⛰️ Fria | Baixa | Baixa | Baixa | Baixa | Média | Alta | Alta | Alta | Média | Baixa | Baixa | Média |
| 📍 Não sazonal | Não sazonal — desconto fixo por lead time, sem variação mensal | |||||||||||
O lead time é calculado como days_until_gap = first_day − hoje. É dividido em 4 buckets:
| Bucket | Dias até o gap | Significado |
|---|---|---|
| ⚡ Extremamente curto | 0 – 2 dias | Última chance — decisão imediata |
| 🔴 Curto | 3 – 14 dias | Janela de ação urgente |
| 🟡 Médio | 15 – 45 dias | Ação recomendada com antecedência |
| ⚪ Longo | > 45 dias | Aguardar — normalmente Ignorar |
A urgência combina temporada × lead time:
| Temporada ↓ / Lead time → | ⚡ Ext. curto < 3 dias |
🔴 Curto 3-14 dias |
🟡 Médio 15-45 dias |
⚪ Longo > 45 dias |
|---|---|---|---|---|
| 🌊⛰️ Alta temporada | CRÍTICO | CRÍTICO | ALTO | Informativo |
| Média temporada | CRÍTICO | CRÍTICO | Informativo | Ignorar |
| Baixa temporada | CRÍTICO | ALTO | Informativo | Ignorar |
| 📍 Não sazonal | ALTO | ALTO | Informativo | Ignorar |
O desconto é aplicado sobre o preço base (sem qualquer desconto de Gapper existente). A tabela abaixo define o desconto por combinação temporada × lead time:
| Temporada ↓ / Lead time → | ⚡ Ext. curto < 3 dias |
🔴 Curto 3-14 dias |
🟡 Médio 15-45 dias |
⚪ Longo > 45 dias |
|---|---|---|---|---|
| Alta temporada | 5% | 10% | 15% | N/A |
| Média temporada | 10% | 15% | 20% | N/A |
| Baixa temporada | 15% | 20% | 25% | N/A |
| Não sazonal | 10% | 15% | 20% | N/A |
last_offered_raw_price, filtro origin NOT LIKE '%Gapper%')last_offered_price, campo min_price com min_stay = 1)last_offered_raw_price (lookback de ~7 dias de atualização). Imóveis não precificados recentemente podem aparecer sem preço — nesse caso o campo fica em branco no dashboard.
Quando min_stay_vigente > gap_nights, o hóspede não consegue reservar — o sistema exige mais noites do que o gap tem. Nesse caso, o desconto de preço não resolve: a ação é reduzir o min_stay pontualmente.
blocked, occupied, min_stay, preço, OTA. Base da detecção de gaps.preco_base.min_price (floor operacional).Active / Inactive) e flag de churn. Usado para filtrar escopo ativo (~2.900 imóveis).Região quente, Região fria, Não sazonal, Clima-CO), categoria e carteira do precificador.