# Como Implementar Controle de Consentimento Granular para Consultas de CPF

> Aprenda a implementar controle de consentimento granular para consultas de CPF, atendendo às exigências da LGPD com exemplos práticos.

**Publicado:** 30/06/2024
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/controle-consentimento-granular-consultas-cpf

---


Consentimento granular para consultas de CPF significa permitir que o titular autorize — ou recuse — cada finalidade de tratamento separadamente, em vez de assinar um único termo genérico. Conforme o Art. 8º, §4º da [LGPD](https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2018/lei/l13709.htm), o consentimento vago é considerado nulo; por isso, cada uso distinto do CPF (validação de cadastro, análise de perfil, compartilhamento com parceiros) deve ter seu próprio registro de consentimento, revogável a qualquer momento pelo titular.

## Introdução

O consentimento é uma das bases legais previstas na LGPD para o tratamento de dados pessoais, e quando utilizado, deve ser livre, informado, inequívoco e referir-se a finalidades determinadas. No contexto de APIs de CPF, o consentimento granular permite que o titular escolha especificamente para quais finalidades seus dados de CPF podem ser utilizados, ao invés de autorizar um tratamento genérico e abrangente.

## O que a LGPD exige do consentimento

O consentimento na LGPD possui requisitos específicos que o diferenciam de uma simples autorização:

| Requisito | Artigo LGPD | Aplicação com CPF |
|-----------|------------|-------------------|
| Livre | Art. 5o, XII | Não pode condicionar serviço ao consentimento total |
| Informado | Art. 5o, XII | Titular sabe exatamente como o CPF será usado |
| Inequívoco | Art. 5o, XII | Manifestação clara, não silêncio ou pré-seleção |
| Finalidade determinada | Art. 8o, par. 4o | Cada uso do CPF tem consentimento separado |
| Revogável | Art. 8o, par. 5o | Titular pode revogar a qualquer momento |
| Documentado | Art. 8o, par. 1o | Ônus da prova cabe ao controlador |
| Nulidade de vícios | Art. 8o, par. 3o | Consentimento genérico é considerado nulo |

---

## Arquitetura de consentimento granular

Implemente um sistema que permita ao titular gerenciar consentimentos individuais por finalidade:

```python
from datetime import datetime
from typing import Optional
import uuid
import hashlib

class GestorConsentimento:
 """Sistema de gestão de consentimento granular para CPF."""

 FINALIDADES = {
 "validacao_cadastro": {
 "descricao": "Validar seu CPF durante o processo de cadastro",
 "dados_tratados": ["cpf"],
 "base_alternativa": "Art. 7, V - Execução de contrato",
 "obrigatorio": True
 },
 "verificacao_nome": {
 "descricao": "Verificar se o nome informado corresponde ao CPF",
 "dados_tratados": ["cpf", "name"],
 "base_alternativa": None,
 "obrigatorio": False
 },
 "analise_perfil": {
 "descricao": "Analisar perfil demográfico para personalização",
 "dados_tratados": ["cpf", "name", "birthDate", "gender"],
 "base_alternativa": None,
 "obrigatorio": False
 },
 "compartilhamento_parceiros": {
 "descricao": "Compartilhar dados com parceiros comerciais",
 "dados_tratados": ["cpf", "name"],
 "base_alternativa": None,
 "obrigatorio": False
 }
 }

 def __init__(self, db):
 self.db = db

 def registrar_consentimento(self, cpf: str, finalidade: str,
 concedido: bool, ip: str) -> dict:
 """Registra decisão de consentimento do titular."""
 if finalidade not in self.FINALIDADES:
 raise ValueError(f"Finalidade desconhecida: {finalidade}")

 registro = {
 "id": str(uuid.uuid4()),
 "cpf_hash": hashlib.sha256(cpf.encode()).hexdigest(),
 "finalidade": finalidade,
 "concedido": concedido,
 "timestamp": datetime.utcnow().isoformat(),
 "ip_origem": ip,
 "versao_termos": "v2.1",
 "metodo": "formulario_web"
 }
 self.db.insert("consentimentos", registro)
 return registro

 def verificar_consentimento(self, cpf: str,
 finalidade: str) -> bool:
 """Verifica se existe consentimento ativo."""
 cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
 consentimento = self.db.find_latest(
 "consentimentos",
 {"cpf_hash": cpf_hash, "finalidade": finalidade}
 )
 if not consentimento:
 return False
 return consentimento["concedido"]

 def revogar_consentimento(self, cpf: str,
 finalidade: str, ip: str) -> dict:
 """Registra revogação de consentimento."""
 return self.registrar_consentimento(
 cpf, finalidade, False, ip
 )

 def listar_consentimentos(self, cpf: str) -> list:
 """Lista todos os consentimentos do titular."""
 cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
 return self.db.find_all(
 "consentimentos", {"cpf_hash": cpf_hash}
 )
```

---

## Interface de consentimento para o usuário

A interface deve apresentar cada finalidade de forma clara e independente:

- **Linguagem acessível** -- descreva cada finalidade em termos que qualquer pessoa compreenda, sem jargão jurídico
- **Opções independentes** -- cada finalidade deve ter seu próprio toggle ou checkbox, sem agrupamento forçado
- **Pré-seleção proibida** -- nenhum consentimento deve vir pré-marcado, o titular deve agir ativamente
- **Informação contextual** -- ao lado de cada opção, forneça link para mais detalhes sobre o tratamento
- **Revogação acessível** -- o mesmo painel deve permitir revogar consentimentos anteriores com a mesma facilidade

```javascript
// API para painel de consentimento do usuário
app.get("/api/meus-consentimentos", authMiddleware, async (req, res) => {
 const cpf = req.user.cpf;
 const gestor = new GestorConsentimento(db);

 const finalidades = Object.entries(gestor.FINALIDADES).map(
 ([key, config]) => ({
 id: key,
 descricao: config.descricao,
 dados_utilizados: config.dados_tratados,
 obrigatorio: config.obrigatorio,
 consentido: gestor.verificarConsentimento(cpf, key),
 base_alternativa: config.base_alternativa
 ? "Tratamento também amparado por base legal independente"
 : null
 })
 );

 res.json({
 titular: { cpf_mascarado: mascararCPF(cpf) },
 consentimentos: finalidades,
 instrucoes: "Você pode alterar suas preferências a qualquer " +
 "momento. Consentimentos obrigatórios são necessários " +
 "para a prestação do serviço."
 });
});

app.post(
 "/api/meus-consentimentos/:finalidade",
 authMiddleware,
 async (req, res) => {
 const { finalidade } = req.params;
 const { concedido } = req.body;
 const resultado = await gestor.registrarConsentimento(
 req.user.cpf, finalidade, concedido, req.ip
 );
 res.json({ sucesso: true, registro: resultado });
 }
);
```

---

## Consentimento vs. outras bases legais

Nem toda consulta de CPF via API exige consentimento. Avalie se outra base legal é mais adequada:

| Situação | Base Legal Recomendada | Consentimento Necessário? |
|----------|----------------------|--------------------------|
| Cadastro de cliente | Execução de contrato (Art. 7o, V) | Não |
| Análise de crédito | Proteção ao crédito (Art. 7o, X) | Não |
| KYC regulatório | Obrigação legal (Art. 7o, II) | Não |
| Personalização de ofertas | Legítimo interesse (Art. 7o, IX) | Depende do RIPD |
| Envio de publicidade | Consentimento (Art. 7o, I) | Sim |
| Compartilhamento com terceiros | Consentimento (Art. 7o, I) | Geralmente sim |

Quando existe base legal independente, o consentimento pode ser dispensado, mas a transparência sobre o tratamento continua obrigatória.

---

## Registro e auditoria de consentimentos

Mantenha trilha de auditoria completa de todas as decisões de consentimento:

| Informação | Finalidade | Retenção |
|-----------|-----------|----------|
| Hash do CPF do titular | Identificação sem exposição | Enquanto houver relação |
| Finalidade do consentimento | Demonstrar especificidade | 5 anos após revogação |
| Data e hora da decisão | Comprovar temporalidade | 5 anos após revogação |
| IP de origem | Comprovar autenticidade | 5 anos após revogação |
| Versão dos termos aceitos | Comprovar informação adequada | 5 anos após revogação |
| Histórico de alterações | Demonstrar direito de revogação | 5 anos após última ação |

---

## Perguntas frequentes

### Por que o consentimento genérico para uso do CPF é nulo pela LGPD?
O Art. 8º, §4º da LGPD determina que o consentimento deve referir-se a finalidades determinadas. Um termo do tipo "autorizo o uso dos meus dados" sem especificar cada tratamento é considerado nulo, pois não cumpre o requisito de finalidade determinada. Isso significa que qualquer uso de CPF baseado nesse consentimento fica sem base legal, expondo a empresa a sanções da [ANPD](https://www.gov.br/anpd).

### Como armazenar o CPF do titular sem comprometer a segurança no registro de consentimentos?
A boa prática é armazenar apenas o hash criptográfico do CPF (SHA-256 ou similar) na tabela de consentimentos, nunca o número em claro. Isso permite verificar se um consentimento existe para um determinado titular sem expor o CPF em caso de vazamento do banco de dados de consentimentos.

### O titular pode revogar o consentimento e exigir que a empresa pare de usar seu CPF?
Sim. O Art. 8º, §5º da LGPD garante o direito de revogação a qualquer momento, sem ônus para o titular. A empresa deve parar o tratamento fundamentado naquele consentimento, mas pode continuar tratando o CPF se houver outra base legal válida — como execução de contrato ou obrigação legal.

### Com que frequência devo atualizar os termos de consentimento e como tratar consentimentos anteriores?
A atualização dos termos exige novo consentimento sempre que houver mudança na finalidade do tratamento. Consentimentos obtidos com base nos termos anteriores permanecem válidos para as finalidades originalmente declaradas. A versão dos termos deve ser registrada em cada consentimento para facilitar a gestão de versões.

### Leia também

- [LGPD: CPF é dado pessoal sensível ou não? Entenda a classificação correta](https://cpfhub.io/blog/lgpd-cpf-e-dado-pessoal-sensivel-ou-nao-entenda-a-classificacao-correta)
- [Vazamento de CPF: responsabilidades da empresa e como prevenir](https://cpfhub.io/blog/vazamento-de-cpf-responsabilidades-da-empresa-e-como-prevenir)
- [KYC no Brasil: quais setores são obrigados a validar CPF por lei](https://cpfhub.io/blog/kyc-no-brasil-quais-setores-sao-obrigados-a-validar-cpf-por-lei)
- [Como atender às exigências do COAF para PLD/FT usando validação de CPF](https://cpfhub.io/blog/como-atender-as-exigencias-do-coaf-para-pld-ft-usando-validacao-de-cpf)

---

## Conclusão

O consentimento granular para consultas de CPF não é apenas uma exigência legal, mas uma demonstração de respeito à autonomia do titular. Ao permitir que cada pessoa escolha especificamente para quais finalidades seu CPF pode ser utilizado, sua empresa constrói confiança e demonstra maturidade na proteção de dados.

Cadastre-se em [cpfhub.io](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito — e implemente uma integração com API de CPF que respeita o consentimento granular exigido pela LGPD hoje mesmo.

