Tema
Inventário de Dados Pessoais
Mapeamento completo dos dados pessoais tratados pelo sistema, sua origem, onde ficam armazenados e para quem são acessíveis.
Dados de Clientes
Origem: Sync com Millennium ERP + interações diretas.
Tabela: Customer
| Campo | Tipo | Sensível | Proteção |
|---|---|---|---|
name | String | Não | — |
email | String | Sim (PII) | Criptografia em trânsito (HTTPS) |
phone | String | Sim (PII) | Criptografia em trânsito |
cpfHash | String | Não | SHA-256 irreversível |
cpfEncrypted | String | Sim (PII) | AES-256-GCM, uso interno apenas |
cpfMasked | String | Parcial | ***.***.XXX-**, para display |
birthDate | DateTime | Sim (PII) | Criptografia em trânsito |
zipCode, city, state, address, neighborhood | String | Sim (PII) | Criptografia em trânsito |
rfmStatus | String | Não | Segmento calculado (não sensível) |
totalSpent, orderCount, lastOrder | — | Não | Financeiro agregado |
whatsappOptOut, emailOptOut, smsOptOut | Boolean | Não | Preferência do titular |
whatsappUnsubscribeToken | String | Sim | Token único para opt-out |
tags | String[] | Não | Labels livres |
Quem acessa: Usuários do CRM com permissão app:customers.
Dados de Vendedores
Origem: Sync com Millennium ERP.
Tabela: Seller
| Campo | Proteção |
|---|---|
name, email, phone | PII em trânsito |
cpfHash | SHA-256 irreversível |
cpfEncrypted | AES-256-GCM |
cpfMasked | Display mascarado |
Quem acessa: Administradores do CRM.
Dados de Conversas
Origem: Mensagens WhatsApp via webhook Meta / Evolution.
Armazenamento: Chatwoot (instância self-hosted da organização) + tabelas Conversation, Message e WhatsappMessage no banco CRM.
| Dado | Onde fica |
|---|---|
| Histórico de mensagens | Chatwoot DB (principal) |
| Status da conversa | Tabela Conversation |
| wamId (ID da mensagem na Meta) | Tabela WhatsappMessage |
| Eventos de entrega/leitura | Tabela WhatsappMessage |
Retenção no Chatwoot: Conforme configuração do Chatwoot (sem retenção automática no CRM).
Dados de Pesquisas de Satisfação
Origem: Respostas de clientes via link enviado por WhatsApp ou email.
| Tabela | Dados armazenados |
|---|---|
SurveyResponse | Telefone, nome, loja, nota (1–5), comentário, hash do token |
PostSaleSurveyResponse | Telefone, nome, loja, CSAT/NPS, comentário, hash do token |
Pseudonimização: tokenHash = SHA-256(token) — nunca o token real.
Dados de Navegação e Auditoria
Tabela: AccessLog
| Campo | Proteção |
|---|---|
ip | Mascarado no log HTTP (x.x.x.*) |
userId | SHA-256 no log HTTP (rastreável internamente, não externamente) |
userAgent | Armazenado sem mascaramento |
endpoint, method | Não sensível |
Retenção: Sem expiração automática — recomendado purgar logs com mais de 1 ano.
Dados de Redirecionamento de Campanha
Tabela: CampaignRedirectToken
| Campo | Proteção |
|---|---|
token | UUID aleatório, expira em 30 dias |
customerId, campaignId | FKs, nenhum PII direto |
redirectedTo | URL final visitada |
clickedAt | Timestamp do clique |
Dados de Credenciais WhatsApp / SMTP
Tabela: StoreWhatsappNumber
| Campo | Proteção |
|---|---|
accessToken | AES-256-GCM |
appSecret | AES-256-GCM |
token (Evolution) | AES-256-GCM |
Tabela: EmailSettings / OrganizationSmtpSettings
| Campo | Proteção |
|---|---|
pass (senha SMTP) | AES-256-GCM |
Fluxo entre sistemas
Millennium ERP → sync HTTP pull → PostgreSQL (banco CRM)
↓
CRM Backend → Chatwoot API (read/write conversas)
↓ (webhook)
Meta WhatsApp → CRM Backend → Chatwoot + PostgreSQL
↓ (opt-out link)
Cliente clica → CRM registra opt-out em CustomerDados que NUNCA saem do servidor:
- CPF descriptografado (só usado internamente para comparação)
- Tokens de acesso WhatsApp (retornados mascarados pela API)
- Senhas SMTP (retornadas mascaradas pela API)