Privacidade e dados pessoais
Este documento descreve o que o sistema faz hoje, conferido contra o código e o schema do banco. Ele não é parecer jurídico: antes de publicar como política oficial para clientes, mostre a um advogado. O que está aqui é a parte que o software pode garantir — a base legal e os avisos ao titular são decisão do negócio.
Atualizado em 18/out/2026.
O que o sistema guarda
Do cliente de delivery
| Dado | Onde | Para quê |
|---|---|---|
| Nome | Customer.nome | identificar o pedido na entrega |
| Telefone | Customer.telefone | combinar a entrega; é a chave que evita cadastro duplicado |
| Endereço, número, bairro, referência | Customer.* | entregar |
Não coletamos CPF, e-mail nem data de nascimento. Isso é escolha de projeto, está escrito no schema, e é a forma mais barata de proteger dado: o que não se coleta não vaza.
O CPF só aparece se o cliente pedir CPF na nota — e nesse caso ele vai para o documento fiscal, não para o cadastro.
De quem trabalha na loja
| Dado | Onde |
|---|---|
| Nome | User.nome |
| E-mail (opcional) | User.email |
| PIN | User.pinHash — guardado como hash scrypt, nunca em texto |
| Último acesso, tentativas erradas, bloqueio | User.* |
Da empresa e de fornecedores
CNPJ, razão social, inscrição estadual e endereço da pastelaria (FiscalProfile); nome, CNPJ e telefone de fornecedores (Supplier); linha digitável e CNPJ do beneficiário dos boletos importados do DDA (Payable, DdaImport).
De operação
AuditLog registra quem fez o quê: venda, pagamento, cancelamento, baixa de conta, mudança de preço e alteração de configuração — com endereço IP e o conteúdo antes e depois.
Por quanto tempo
Prazos implementados em scripts/retencao.ts:
| Dado | Prazo | Por quê |
|---|---|---|
AuditLog | 18 meses | precisa durar o bastante para explicar um fechamento antigo, não a vida inteira |
SyncOp (fila do PDV) | 90 dias | serve só para não duplicar venda reenviada |
| Cliente sem pedido | 24 meses → anonimizado | quem não volta há dois anos não precisa continuar no cadastro |
Conteúdo bruto do DDA (DdaImport.payloadJson) | 90 dias | serve para investigar um boleto que entrou errado; depois disso a conta a pagar já guarda o que importa |
| Pedido e documento fiscal | 5 anos | prazo legal de guarda. Nunca são apagados pelo expurgo |
O expurgo roda sozinho todo domingo às 04h30, pelo cron, depois do backup da madrugada. Para ver o que ele faria sem apagar nada: npm run retencao -w @massa/web -- --simular.
Como apagar um cliente
Em Clientes (menu Gestão, só o dono): busque pelo telefone e use "Apagar dados". Por trás, é a mesma chamada que já existia:
`` DELETE /api/clientes/<id> ``
O que acontece: nome, telefone, endereço, número, bairro e referência são sobrescritos, não só marcados como apagados. A linha continua existindo com o rótulo "Cliente removido".
Por que a linha fica: os pedidos daquele cliente apontam para ela, e apagá-la derrubaria o histórico de vendas e os números que já foram para a nota fiscal. A nota emitida não pode ser alterada, e o faturamento de um mês fechado não pode encolher porque alguém pediu exclusão. O pedido continua; a pessoa sai.
O registro de auditoria dessa exclusão não guarda o que foi apagado — seria recriar o dado pessoal noutro lugar e chamar de conformidade.
Como o cliente pede os dados dele
Hoje não há autoatendimento: o dono exporta em /api/exportar?tipo=clientes (só dono) e entrega. Portal do titular é tarefa aberta.
Onde o dado fica
Tudo num PostgreSQL na mesma máquina do sistema. Não há envio para serviço de análise, publicidade ou IA. As duas únicas chamadas para fora são:
- ViaCEP, ao preencher o endereço da própria empresa. Vai só o CEP.
- Servidor DDA, de onde vêm os boletos. Vai só o pedido de leitura; nenhum
dado de cliente sai daqui.
Backups diários ficam em /home/admin/backups/massa, na mesma máquina. Se um dia forem para fora, este documento precisa dizer para onde.
O que ainda não está em pé
Por honestidade, e porque afeta a proteção do dado:
- RLS no banco não está ligada. O isolamento entre lojas depende hoje de
cada consulta filtrar pela loja. Com uma loja só não há exposição, mas a segunda camada que o ARCHITECTURE.md descreve ainda não existe.
- O expurgo por retenção não é automático.
- Não há portal do titular para o cliente pedir ou apagar os dados sozinho.
- O backup não sai da máquina.