← Todas as decisões

ADR-020

Deduplicação em três níveis, e nunca por similaridade de nome

Similaridade de nome foi recusada como chave: o custo de um falso positivo é fundir dois clientes diferentes. A contrapartida aceita é a base ter duplicatas que nenhum dos três níveis exatos pega.

Status
Aceita
Decidida em
25/04/2026
Sistema
plataforma B2B de funil comercial e propostas

Contexto

O mesmo contato chega mais de uma vez por caminhos diferentes: a caixa é relida pelo job antes do processamento anterior terminar, a pessoa pede orçamento em duas plataformas na mesma semana, e a mesma plataforma reenvia. Cliente duplicado num CRM não é só sujeira de base: é vendedor ligando duas vezes para a mesma pessoa e histórico partido em dois cadastros.

Critérios que pesaram

Em ordem de peso.

  1. Nenhum lead pode ser perdido, porque lead perdido é receita perdida e ninguém percebe.
  2. Duplicata detectada precisa apontar para o registro existente, não só ser recusada.
  3. Nada de heurística que erre em silêncio.
  4. Decisão de mesclar é humana, quando não há chave confiável.

Opções consideradas

  • Deduplicar por similaridade de nome. Pegaria variações e erros de digitação, e foi descartada nominalmente: variação e erro de digitação tornam a comparação não confiável, e o custo de um falso positivo é fundir dois clientes diferentes.
  • Bloquear automaticamente o e-mail suspeito de duplicidade: evitaria o cadastro duplo e criaria uma segunda categoria de lead invisível. Descartada pela regra registrada: nunca bloquear, sempre criar registro em status apropriado para revisão.
  • Três chaves determinísticas, em ordem, com vínculo ao registro existente quando houver.

Decisão

A deduplicação acontece em três níveis, todos por chave exata. Primeiro, o identificador único da mensagem, no momento da captura, o que evita reinserir o mesmo e-mail quando o job relê a caixa. Segundo, o e-mail do cliente, no momento do processamento: se já existe cliente com aquele endereço na empresa, o e-mail é marcado como duplicado e vinculado ao cliente existente, sem criar cadastro novo. Terceiro, o par plataforma mais identificador externo, usado para amarrar retroativamente e-mail e cliente quando o cadastro já tinha sido criado antes. O vínculo é exibido nas duas direções na interface: a lista de e-mails mostra o cliente gerado, e o cadastro do cliente mostra a faixa "lead gerado por e-mail" com plataforma, data e link para a mensagem de origem.

Consequências

As duas metades pesam igual.

Melhorou

Duplicata deixou de ser descarte e virou vínculo: o segundo e-mail do mesmo contato aparece na história daquele cliente, em vez de sumir. E o vínculo bidirecional respondeu à pergunta que a operação mais fazia: "de onde veio esse cliente?".

Piorou

As três chaves são exatas, então o mesmo contato com dois endereços de e-mail diferentes vira dois clientes, e nada acusa. Essa é a contrapartida aceita de recusar similaridade, e ela é real: a base tem duplicatas que nenhum dos três níveis pega. Também há um caso registrado de decisão que não sobreviveu ao contato com o produto: o cliente criado pela captura nasce ativo, porque não existe status "lead" no cadastro; o que marca a origem é o par plataforma e identificador externo, não o status.

Revisitando hoje

Ainda de pé em set/2026. O princípio que eu levaria adiante é o segundo critério: em captura automática, a regra "nunca bloqueie, sempre registre para revisão" vale mais do que qualquer sofisticação de detecção: o pior resultado possível não é a duplicata, é o lead que não existe em lugar nenhum.

Terceiro de quatro registros sobre a captura de leads. Os anteriores decidiram como o e-mail chega e como ele vira cliente; este trata do mesmo contato chegando duas vezes.

deduplicação CRM captura de leads

Blog do Felipe Marciano

Decisões de arquitetura, .NET e sistemas distribuídos, escritas por quem vive com as consequências delas.

© 2026 Felipe Marciano. Todos os direitos reservados.