PATCH V48 - CLIENTE DUPLICADO, MAIS DE UM PONTO E TROCA DE CÓDIGO
================================================================

PACOTE DE ORIGEM ANALISADO
--------------------------
launcher(20260818-070210).zip
SHA-256: ee8cc358fb568b4523782195e6e395034708aa2c6f056da7dc7b8385a3307594

COMO INSTALAR
-------------
1. Faça um backup da pasta launcher e do arquivo launcher/api/max.db.
2. Extraia este patch DIRETAMENTE DENTRO da pasta launcher atual.
3. Confirme a substituição dos arquivos existentes.
4. Não apague nem substitua o banco launcher/api/max.db.
5. Atualize a página do painel. No PWA, feche e abra novamente uma vez.

Não precisa configurar novo Cron Job.

O QUE FOI IMPLEMENTADO
----------------------
1. Verificação de cliente que já existe
   - A verificação ocorre antes de consumir crédito.
   - O WhatsApp brasileiro normalizado é a identificação principal.
   - Quando não existe WhatsApp, usa o nome normalizado como alternativa.
   - A busca fica limitada à lista do revendedor autenticado.

2. Duas escolhas no painel
   A) MAIS UM PONTO
      - Cria ou assume o novo código.
      - Mantém o ponto antigo.
      - Consome exatamente 1 crédito.
      - Libera o novo ponto por 30 dias, conforme a regra atual.

   B) APARELHO FORMATADO
      - Troca o código antigo pelo novo.
      - Mantém nome, WhatsApp, revendedor, status, preço e vencimento antigos.
      - Usa o identificador do novo aparelho.
      - Não consome crédito.
      - O novo código precisa já ter aparecido no servidor como aguardando ativação.

3. Cliente que já possui vários pontos
   - Ao escolher aparelho formatado, o painel pergunta qual código antigo será trocado.

4. Integridade da troca de código
   - A alteração é transacional: se qualquer parte falhar, volta tudo ao estado anterior.
   - Atualiza as referências nas tabelas auxiliares de cliente, renovação, pagamentos,
     créditos, Nexxa, API do revendedor, notificações PWA e versão da launcher.
   - Mantém a referência externa antiga de pagamentos Mercado Pago pendentes para não
     invalidar a conferência do pagamento já criado.
   - Move a seleção individual de apps e eventual código autorizado para teste de APK.
   - Registra auditoria automática na tabela client_code_replacements.

5. PWA com vários códigos
   - Migra automaticamente o código único salvo pelas versões anteriores.
   - Permite guardar, escolher, consultar, adicionar e remover vários códigos/pontos.
   - As notificações continuam podendo ser registradas para cada código consultado.
   - Se um código foi substituído, o PWA reconhece o código antigo, troca pelo atual e
     permite renovar normalmente usando o novo.

6. Fluxo Buscar e Ativar
   - Agora abre o cadastro completo para pedir nome e WhatsApp.
   - Isso impede consumo de crédito antes da verificação de cliente repetido.

DIAGNÓSTICO DO PACOTE RECEBIDO
------------------------------
- 307 ativações no banco analisado.
- 284 ativações vinculadas a revendedores.
- 10 códigos aguardando revendedor.
- 30 grupos já possuíam o mesmo WhatsApp com mais de um código (60 pontos).
- As tabelas auxiliares antigas não continham todos os clientes da tabela principal.
  Por segurança, o patch usa activations como fonte principal e sincroniza os registros
  novos ou tocados por esta atualização, sem fazer limpeza global nem apagar dados.

ARQUIVOS DO PATCH
-----------------
- mac.php
- painel_reseller.php
- renovar.php
- sw.js
- actions/customer_actions.php
- includes/customer_identity.php (novo)
- LEIA-ME_PATCH_V48_CLIENTE_DUPLICADO_MULTI_PONTO.txt

VALIDAÇÕES EXECUTADAS
---------------------
- Integridade do ZIP original: aprovada.
- Sintaxe JavaScript das telas e Service Worker: aprovada.
- Estrutura e balanceamento dos blocos PHP: aprovados.
- Teste transacional de troca de código em cópia isolada do banco: aprovado.
- Preservação de vencimento, status e revendedor: aprovada.
- Troca para o identificador do aparelho novo: aprovada.
- Mesclagem das notificações PWA: aprovada.
- Saldo sem alteração na troca de aparelho: aprovado.
- Ponto adicional consumindo somente 1 crédito: aprovado.

OBSERVAÇÃO
----------
Este patch não contém banco de dados, APKs, clientes ou credenciais. Ele substitui
somente os arquivos de código listados acima.

