LGPD e IA: como manter conformidade usando OpenAI/Anthropic em SaaS brasileiro
Checklist prático pra DPO + dev: bases legais, contratos, anonimização, data residency, direito ao esquecimento. Com exemplos de cláusulas reais.
Você é dev/CTO de SaaS BR e usa IA via OpenAI/Anthropic/Tokia. Cliente empresarial pergunta no contrato: "como você garante LGPD se os dados saem do Brasil?". Esse post é o checklist técnico-jurídico que você precisa pra responder com segurança.
⚠️ Esse post é educativo, não substitui consultoria jurídica. Pra cláusulas contratuais finais consulte advogado especializado em proteção de dados.
Os 4 cenários comuns
| Cenário | Risco LGPD | Mitigação técnica | |---|---|---| | A. Você manda CPF/email/telefone pra OpenAI no prompt | Alto — vazamento real | Anonimiza antes (regex), nunca persiste prompts | | B. Cliente faz chatbot, user digita dados pessoais | Médio — transferência internacional | Disclosure no termo + base legal | | C. RAG indexa documentos contendo dados clientes | Alto — dataset persiste em vector DB gringa | Vector DB local (Postgres pgvector, Supabase) | | D. Logs/observability incluem trechos de prompt | Baixo — dado é pseudonimizado | Truncar prompts em logs, mascarar |
Base legal — qual escolher
LGPD tem 10 bases legais (art. 7º). Pra IA, as 3 mais usadas:
1. Execução de contrato (art. 7º, V)
Quando usar: o cliente CONTRATOU funcionalidade que depende de IA (ex: "meu chatbot atende em 24/7"). Aí processar dados pra entregar o serviço é parte do contrato.
Cláusula exemplo:
"Para entrega das funcionalidades de [nome do serviço], que envolvem processamento por modelos de IA, o CONTRATANTE autoriza o tratamento de dados pessoais inseridos voluntariamente em conversas pelo usuário final, com transferência internacional para os provedores listados em [Anexo X]."
2. Legítimo interesse (art. 7º, IX)
Quando usar: analytics agregados, telemetria, melhoria de produto. Precisa fazer LIA (Legítimo Interesse Assessment) escrito.
3. Consentimento (art. 7º, I)
Quando usar: features opt-in onde user pode recusar (ex: "treinar o bot com suas conversas"). Granular, revogável.
Erro comum: usar consentimento como "guarda-chuva" pra tudo. Errado — LGPD prefere bases mais robustas (contrato/legítimo).
Transferência internacional (ANPD)
Art. 33-36 LGPD: dado pessoal só pode sair do Brasil se:
- País tem nível adequado (ANPD ainda não publicou lista — EUA NÃO está adequado por default)
- Cláusulas contratuais padrão (ANPD publicou resolução 19/2024)
- Selos/certificações (futuro)
- Consentimento específico
- Execução de contrato com titular (situação mais comum)
Prático: seu contrato com OpenAI/Anthropic + seu contrato com cliente final devem mencionar isso. Modelo de cláusula:
"O CONTRATANTE reconhece que o tratamento envolvendo modelos de IA realiza transferência internacional de dados para [OpenAI Inc., EUA / Anthropic PBC, EUA / OpenRouter Ltd, Singapore]. A base legal é execução de contrato (art. 7º, V LGPD + art. 33, V). Os provedores listados possuem cláusulas contratuais padrão (DPA) assinadas com o CONTRATADO."
Data residency — quem fica onde
| Provider | Onde processa | Onde armazena (logs) | |---|---|---| | OpenAI direta | EUA (Azure) | EUA, 30 dias | | Anthropic direta | EUA (AWS us-east) | EUA, 30 dias | | OpenRouter | Rotear: EUA, Singapore, EU | Singapore default, 7 dias | | Google Gemini | EUA + multi-region | varia | | Fal.ai | EUA (AWS) | EUA, 24h | | Modelos open-source via OpenRouter (Llama, DeepSeek, Mistral) | Singapore ou EU | conforme provider | | Tokia (gateway) | BR (passagem) + EUA/SG (upstream) | BR apenas metadata |
Truque pra cliente sensível: use modelos open-source via OpenRouter configurado pra Singapore/EU (não EUA). Llama 3.3 70B + Mistral Large + Qwen 3 atendem 80% dos casos com qualidade comparável a Claude/GPT-4o.
Anonimização antes do prompt
O jeito mais seguro: nunca mandar CPF/RG/email puro pra IA. Anonimiza antes:
function anonimizar(prompt: string): string {
return prompt
.replace(/\b\d{3}\.?\d{3}\.?\d{3}-?\d{2}\b/g, "[CPF]")
.replace(/\b\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2}\b/g, "[CNPJ]")
.replace(/\b[\w.+-]+@[\w-]+\.[\w.-]+\b/g, "[EMAIL]")
.replace(/\b\(?\d{2}\)?\s?9?\d{4}-?\d{4}\b/g, "[TELEFONE]");
}
const safePrompt = anonimizar(userInput);
const response = await ai.chat.completions.create({
model: "claude-sonnet-46",
messages: [{ role: "user", content: safePrompt }],
});
Trade-off: IA não vê o CPF, então não pode validar/buscar nele. Pra usar em validação real, faça num backend só com regex/lookup, sem mandar pra LLM.
Direito ao esquecimento (art. 18, VI)
User pede "apague todos os meus dados". Você precisa:
- Deletar registro user no seu DB: trivial
- Anonimizar conversas anteriores (se persistiu): troca user_id por "DELETED-2026-05-13"
- Apagar embeddings RAG (se indexou): query vector DB + delete
- Pedir provedor IA pra apagar logs (raramente factível em SLA menor que 30d)
// Endpoint /me/delete
app.delete("/me", { onRequest: [authenticate] }, async (req, reply) => {
const userId = req.user.id;
// 1. Anonimiza conversas (mantém pro audit, mas sem PII)
await db.chatMessages.updateMany({
where: { userId },
data: { content: "[DELETED]", userId: "anonymized" },
});
// 2. Apaga embeddings
await vectorDB.delete({ filter: { userId } });
// 3. Apaga API keys
await tokia.apiKeys.revokeAll(userId);
// 4. Hard delete user (cascade pra outras tabelas)
await db.users.delete({ where: { id: userId } });
// 5. Tenta apagar nos providers (best effort)
await openai.deleteUser(userId).catch(() => {});
return { ok: true };
});
Logs sem PII
Em production logs (Sentry/GlitchTip/CloudWatch) nunca logue prompt cru. Patterns seguros:
// ERRADO
logger.info({ prompt: userInput }, "ai call");
// CERTO — só metadata
logger.info({
userId: hash(userId),
model: "claude-sonnet-46",
promptHash: crypto.createHash("sha256").update(userInput).digest("hex"),
tokens: response.usage.total_tokens,
}, "ai call");
// Se quiser debug em dev local:
if (process.env.NODE_ENV === "development") {
logger.debug({ prompt: userInput.slice(0, 200) }, "prompt sample");
}
Política de privacidade — seções mínimas
Sua /privacy (ou /politica-privacidade) deve ter:
- Quais dados são tratados (lista explícita: nome, email, CPF se for o caso, conversas IA)
- Bases legais (cita o art. 7º correspondente)
- Finalidades específicas (não pode ser "melhorar serviço" genérico)
- Compartilhamento com terceiros (OpenAI, Anthropic, Tokia, hospedagem, etc — listar TUDO)
- Transferência internacional (explica EUA/Singapore + base legal)
- Tempo de retenção (ex: "conversas 90 dias, depois anonimizadas")
- Direitos do titular (art. 18: acesso, correção, deleção, portabilidade)
- Canal pra exercer direitos (email do DPO ou form)
- DPO contato (nome + email)
Encarregado de Dados (DPO)
Pra empresa B2B com mais de 5k users ou tratamento sensível: nomeia DPO formal, publica nome+email na privacy. Pra micro-SaaS solo founder, você é o DPO default. Aceita.
Checklist final pra dev
- [ ] Política privacidade atualizada com IA
- [ ] Termos de uso disclosure OpenAI/Anthropic
- [ ] Anonimização CPF/email/telefone em prompts
- [ ] Endpoint
/me/deletefuncional - [ ] Logs sem prompt cru
- [ ] Cláusula contratual com clientes empresariais
- [ ] DPA com providers (OpenAI tem oferta enterprise)
- [ ] Anexo "Provedores e dados transferidos" no contrato
- [ ] Cron auto-anonymize conversas após 90d
- [ ] DPO email funcional + tempo resposta até 30d (LGPD exige 15d, ANPD permite +15)
Conclusão
LGPD + IA estrangeira é resolvível — basta documentar bases legais, anonimizar
no prompt, ter /me/delete funcional, e citar transferência internacional no
contrato. Tokia não armazena prompts (gateway transparente), o que reduz
1 ponto do checklist.
Pra dúvida específica de cláusula contratual ou disputa real, contrate advogado especializado. Esse post cobre o 80% dev, não substitui consultoria.
Posts relacionados:
Quer testar Tokia com R$ 10 via PIX?
Criar conta grátis →