Skip to main content

Lógica de Envio de Notificações Sequenciais (Intervalos 1, 3 e 5 dias)

Visão Geral

Este documento explica a lógica de agendamento de notificações de faturas vencidas, implementada para evitar múltiplas notificações em sequência e respeitar dias úteis (finais de semana e feriados).

Conceitos Fundamentais

Dia Útil
  • Não é sábado ou domingo
  • Não é feriado (registrado na tabela gk2_hollidays)
  • Notificações só são enviadas em dias úteis
Intervalos de Notificação

Por padrão, enviamos notificações em 3 momentos:

  • Intervalo 1: 1 dia após o vencimento
  • Intervalo 3: 3 dias após o vencimento
  • Intervalo 5: 5 dias após o vencimento
Janela de Envio

Apenas faturas com ≤ 5 dias de atraso (contados a partir do vencimento original) recebem notificações.

Lógica de Agendamento Sequencial

Regra Principal

As datas de notificação são calculadas de forma sequencial e sempre normalizadas para dia útil:

1. Primeiro intervalo (N=1)

Data agendada = vencimento original + 1 dia. Se cair em fim de semana/feriado → empurra para o próximo dia útil.

2. Demais intervalos (N=3, N=5)

Sempre calculados a partir da data do primeiro intervalo. Se cair em fim de semana/feriado → empurra para o próximo dia útil.

Exemplo Detalhado

Case 1: Vencimento no Sábado (27/09/2025)

Resumo:

Vencimento: 27/09 (sáb) → 1 dia: 29/09 (seg) → 3 dias: 01/10 (qua) → 5 dias: 03/10 (sex)

Case 2: Vencimento no Domingo (21/09/2025)

Resumo:

Vencimento: 21/09 (dom) → 1 dia: 22/09 (seg) → 3 dias: 24/09 (qua) → 5 dias: 26/09 (sex)

Case 3: Vencimento em Dia Útil (26/09/2025)

Resumo:

Vencimento: 26/09 (sex) → 1 dia: 29/09 (seg) → 3 dias: 01/10 (qua) → 5 dias: 03/10 (sex)

Case 4: Com Feriado no Meio (03/10 é feriado)

Resumo:

Vencimento: 26/09 (sex) → 1 dia: 29/09 (seg) ✓ → 3 dias: 01/10 (qua) ✓ → 5 dias: descartado (excede janela de 5 dias)

Regras de Elegibilidade

Métodos de Pagamento Aceitos
  • lknbbpix (PIX)
  • mmhospedagem_API_BS2 (Boleto)
  • ❌ Outros métodos não recebem notificações
Exclusões
  • paymentmethod = 'freeproducts'
  • total = '0.00'
  • ❌ Status diferente de Overdue

Condições de Envio

  1. Hoje precisa ser dia útil (não sábado/domingo/feriado)
  2. Fatura com status Overdue
  3. Fatura vencida há ≤ 5 dias (do vencimento original)
  4. Hoje coincide com a data agendada do intervalo (1, 3 ou 5)

Implementação

Arquivos Principais
Scheduler Utilitário

Arquivo: src/Notifications/Custom/Helpers/InvoiceNotificationScheduler.php

Função: Contém toda a lógica de dia útil, normalização e agendamento sequencial.

Notificação Inteligente

Arquivo: src/Notifications/Custom/OrderDetailsSmartLateNotification.php

Função: Implementa o envio usando o scheduler.

Como Adicionar Novos Intervalos

    // Em OrderDetailsSmartLateNotification.php
    private array $intervals = [1, 3, 5, 7]; // Adiciona intervalo de 7 dias
    

Testes

Script de Teste

Arquivo: src/Notifications/Custom/tests_scheduler_instancias.php

Execução: php modules/addons/lknhooknotification/src/Notifications/Custom/tests_scheduler_instancias.php

Vantagens desta Abordagem

  • Evita envios em cascata.
  • Respeita dias úteis.
  • Flexível na configuração de intervalos.
  • Previsível nas datas agendadas.
  • Seguro, com janela de 5 dias.

Fluxograma de Decisão

┌─────────────────────┐
│ Hoje é dia útil?    │
└──────┬──────────────┘
       │ Não → FIM (não envia nada)
       │ Sim
       ▼
┌─────────────────────┐
│ Busca faturas       │
│ status = Overdue    │
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ Para cada fatura:   │
│ Método elegível?    │
└──────┬──────────────┘
       │ Não → próxima fatura
       │ Sim
       ▼
┌─────────────────────┐
│ Calcula agenda      │
│ para [1, 3, 5]      │
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ Algum intervalo     │
│ bate com hoje?      │
└──────┬──────────────┘
       │ Não → próxima fatura
       │ Sim
       ▼
┌─────────────────────┐
│ Atraso ≤ 5 dias?    │
└──────┬──────────────┘
       │ Não → próxima fatura
       │ Sim
       ▼
┌─────────────────────┐
│ ✓ ENVIA NOTIFICAÇÃO │
└─────────────────────┘

Perguntas Frequentes

Por que não enviar no dia do vencimento efetivo?

Porque queremos dar um dia de "tolerância" antes de começar as cobranças.

O que acontece se a fatura for paga entre notificações?

O sistema considera apenas faturas com status Overdue.

E se o feriado empurrar a notificação para além de 5 dias?

A notificação é descartada.

Posso ter intervalos não sequenciais?

Sim! O scheduler ordena automaticamente.

Como adicionar feriados?

Insira na tabela gk2_hollidays com a coluna date.

Manutenção

Para ajustar o comportamento:

  • Mudar intervalos em OrderDetailsSmartLateNotification.php.
  • Mudar janela de dias na chamada de intervalsMatchingToday().
  • Adicionar feriados na tabela.
  • Testar nova lógica em tests_scheduler_instancias.php.

Dados da revisão

Data: 02/09/2024 Rev. 1.0 Criado por: Raphael Ichiro Revisado por: Visibilidade: Interna
Informações de cabeçalho
Assunto

Lógica de Envio de Notificações Sequenciais (Intervalos 1, 3 e 5 dias)

Palavras-Chave

< Notificações | Whatsapp | Fatura | Cobrança | Notificação >

Introdução

Este guia tem como objetivo instruir aos colaboradores da GK2 como o envio das notificações funciona.

Segurança da Informação

O conhecimento desse guia não deve ser fornecido a terceiros de forma indiligente.