Pular para o conteúdo principal

Compliance de contato

Esta é a garantia central do produto: nenhuma mensagem sai sem passar pelo motor de compliance — avaliado imediatamente antes de cada envio, com o estado mais fresco do banco, e não como uma configuração estática checada uma vez por dia. Cobrar no horário errado, no dia errado ou a pessoa errada não é só má prática: dependendo da UF, é infração legal.

A ordem dos vetos

Antes de todo envio, o motor avalia quatro barreiras, nesta ordem. A primeira que reprovar decide o destino da mensagem:

  1. Supressão ativa — vence qualquer condição de etapa. Se existe uma supressão cobrindo a pessoa, a dívida ou o canal, a mensagem é suprimida (não sai, com o motivo registrado).
  2. Trava jurídica (legal hold) — cobrança sob trava jurídica não gera nenhum contato.
  3. Janela legal da jurisdição — fora da janela de horário permitida na UF do devedor, a mensagem é reagendada para a próxima abertura, nunca descartada.
  4. Limites por pessoa — teto diário, semanal e intervalo mínimo entre contatos. Estourou, reagenda.

O resultado é sempre um de três: enviar, suprimir (com motivo tipado) ou reagendar (com o próximo horário permitido calculado). Tudo fica registrado.

Janelas legais por UF

Não existe "janela nacional" na lei brasileira — as regras de horário de cobrança são estaduais. O sistema mantém uma biblioteca de políticas por jurisdição, versionada e com vigência:

  • São Paulo (BR-SP) — Lei estadual 15.426/2014: segunda a sexta das 8h às 20h, sábado das 8h às 14h; vedado aos domingos e feriados.
  • Default conservador nacional (BR) — aplicado quando não há lei estadual mapeada para a UF do devedor: a mesma janela conservadora (seg–sex 8h–20h, sáb 8h–14h, domingos e feriados vedados).

A jurisdição vem da UF do endereço do devedor; devedor sem UF válida no cadastro cai na regra nacional conservadora. A política pode variar também por canal e por tipo de pessoa (física/jurídica), e a resolução segue a precedência: regra da UF específica da sua organização → regra da UF na biblioteca legal → regra nacional da organização → regra nacional da biblioteca. Se nada casar, vale o default conservador embutido no código.

Os horários são avaliados no fuso da organização (padrão America/Sao_Paulo).

Feriados

Quando a política veda feriados (o padrão), o motor bloqueia os feriados nacionais: os fixos (1º/jan, Tiradentes, 1º/mai, 7/set, 12/out, 2/nov, 15/nov, Consciência Negra — Lei 14.759/2023 — e Natal) e os móveis calculados pela Páscoa (segunda e terça de carnaval, sexta-feira santa e Corpus Christi). Envio que cairia num feriado é reagendado para o próximo dia com janela aberta.

Limites por pessoa — não por cobrança

Os limites de frequência valem para a pessoa, somando todos os canais, todas as cobranças e todas as réguas. Um devedor com cinco dívidas não recebe cinco vezes mais mensagens.

LimitePadrão
Máximo por dia2 contatos
Máximo por semana6 contatos
Intervalo mínimo entre contatos4 horas

Esses são os padrões conservadores; podem ser personalizados por organização (configuração contactPolicy da conta). Contam para o limite apenas mensagens efetivamente enviadas/entregues/lidas — supressões e falhas não consomem cota. Estourou o teto, o envio é reagendado.

Supressões: por que um contato NÃO pode ocorrer

Supressão é um registro tipado, com escopo e evidência — diferente de preferência de canal. "Não quero WhatsApp" é uma coisa; "esta dívida não pode ser cobrada" é outra. Os 12 tipos:

TipoSituação
opt_outDevedor pediu para não ser contatado
third_partyContato de terceiro (o famoso "não sou eu")
invalid_contactE-mail/telefone inválido
deceasedPessoa falecida
fraudSuspeita de fraude
disputeDisputa aberta sobre a dívida
judicialDeterminação judicial
lawyer_representedDevedor representado por advogado
bankruptcyRecuperação judicial / falência
prescriptionDívida prescrita
vulnerablePessoa em situação de vulnerabilidade
channel_blockedCanal bloqueado pelo provedor

Cada supressão tem escopo: pode valer para uma pessoa, para uma dívida específica, ou ambos — e para um canal específico ou todos (channel vazio = todos). Tem também vigência (activeFrom/expiresAt) e pode ser revogada com registro. Na avaliação, basta uma supressão ativa cobrindo pessoa ou dívida, no canal em questão ou em todos, para vetar o envio — e supressão tem precedência sobre tudo: condição de etapa, campanha, urgência da operação.

A criação e a revogação de supressões entram na trilha de auditoria com tipo, escopo, origem e evidência.

Reagendamento — nunca descarte silencioso

Quando o veto é temporal (fora de janela, limite diário/semanal, intervalo mínimo), o motor calcula o próximo instante permitido — a abertura da janela de hoje, o início do próximo dia útil com janela, ou o fim do intervalo mínimo — e reagenda. A mensagem não some: ela sai na primeira oportunidade legal, e o registro mostra o motivo do adiamento (outside_legal_window_BR-SP, daily_contact_limit, min_contact_interval...).

Última linha de defesa: revalidação no worker

Compliance na hora de agendar não basta: o pagamento pode chegar com o job já na fila. Por isso o worker revalida tudo imediatamente antes de entregar ao provedor: cobrança paga, cancelada, baixada ou negociada, "já paguei" pendente de verificação, trava jurídica e régua pausada — qualquer um desses barra o envio no último milissegundo, com o motivo registrado.