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.

Redação CPFHub.io
Redação CPFHub.io
··8 min de leitura
Como Implementar Controle de Consentimento Granular para Consultas de 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, 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:

RequisitoArtigo LGPDAplicação com CPF
LivreArt. 5o, XIINão pode condicionar serviço ao consentimento total
InformadoArt. 5o, XIITitular sabe exatamente como o CPF será usado
InequívocoArt. 5o, XIIManifestação clara, não silêncio ou pré-seleção
Finalidade determinadaArt. 8o, par. 4oCada uso do CPF tem consentimento separado
RevogávelArt. 8o, par. 5oTitular pode revogar a qualquer momento
DocumentadoArt. 8o, par. 1oÔnus da prova cabe ao controlador
Nulidade de víciosArt. 8o, par. 3oConsentimento genérico é considerado nulo

Arquitetura de consentimento granular

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

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
// 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çãoBase Legal RecomendadaConsentimento Necessário?
Cadastro de clienteExecução de contrato (Art. 7o, V)Não
Análise de créditoProteção ao crédito (Art. 7o, X)Não
KYC regulatórioObrigação legal (Art. 7o, II)Não
Personalização de ofertasLegítimo interesse (Art. 7o, IX)Depende do RIPD
Envio de publicidadeConsentimento (Art. 7o, I)Sim
Compartilhamento com terceirosConsentimento (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çãoFinalidadeRetenção
Hash do CPF do titularIdentificação sem exposiçãoEnquanto houver relação
Finalidade do consentimentoDemonstrar especificidade5 anos após revogação
Data e hora da decisãoComprovar temporalidade5 anos após revogação
IP de origemComprovar autenticidade5 anos após revogação
Versão dos termos aceitosComprovar informação adequada5 anos após revogação
Histórico de alteraçõesDemonstrar direito de revogação5 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.

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.


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 — 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.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

Redação CPFHub.io

Sobre a redação

Redação CPFHub.io

Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.

WhatsAppFale conosco via WhatsApp