Pular para o conteúdo

Versão 2026-09-07 · atualizado em 22/08/2026

Rascunho em revisão jurídica. Este texto ainda não foi revisado por advogado e pode mudar antes do lançamento. Os campos marcados como a definir serão preenchidos com os dados da empresa.

Consentimentos e aceites

1. O que a tabela consents guarda

consents(user_id, kind, version, granted_at, ip, user_agent)
Coluna Regra
kind terms · privacy · guardian · marketing
version data da versão aceita, no formato AAAA-MM-DD (ex.: 2026-09-07) — igual ao campo version do frontmatter do documento correspondente
granted_at timestamp UTC do aceite, gravado pelo servidor (nunca vindo do cliente)
ip IP de origem da requisição — prova do aceite; sujeito à retenção do §4
user_agent user agent do request

Regras invioláveis:

  1. Append-only. Revogar não apaga a linha: grava uma nova linha do mesmo kind com granted_at novo e um marcador de revogação (version = versão revogada, campo de revogação no schema — combinar com o agente de packages/db). O histórico é a prova.
  2. O servidor decide. O front envia "aceitei o kind X"; a API resolve qual é a versão vigente do documento e grava. O cliente não manda a versão — se mandasse, bastaria forjar.
  3. Re-aceite ao mudar de versão. Se a versão vigente de terms ou privacy for maior que a última aceita pelo usuário, a API sinaliza em GET /me (pendingConsents: ['terms']) e a UI apresenta o re-aceite antes de qualquer ação sensível.
  4. IP e user agent são dado pessoal. Não vão para log de aplicação, não vão para analytics, não saem em GET /me/export de terceiros. Ficam só na tabela.
  5. marketing é opt-in puro. Nunca pré-marcado, nunca embutido em outro checkbox, sempre revogável em um clique.

2. Tabela dos kind

kind Base legal Quando coletar Obrigatório? Documento vinculado
terms Execução de contrato (LGPD art. 7º, V) — o "aceite" é adesão contratual, não consentimento em sentido técnico Cadastro, e a cada nova versão dos Termos Sim — sem isso não há conta /legal/termos-de-uso
privacy Ciência da política (transparência, art. 9º) Cadastro, junto com terms, e a cada nova versão Sim /legal/privacidade
guardian Melhor interesse do menor (art. 14) + assistência civil 1) Cadastro de quem tem 12–17 anos; 2) Checkout de quem tem menos de 18 (registro separado, com o texto de assistência) Sim, nos dois momentos /legal/menores-fluxo
marketing Consentimento (art. 7º, I) Onboarding (opcional) ou Configurações → Notificações Não — nunca bloqueia nada

Nota jurídica para o advogado: usamos consents como registro único de aceites, mesmo quando a base legal não é "consentimento" em sentido técnico (caso de terms e privacy). Isso simplifica a prova e não prejudica o titular. Confirmar se a nomenclatura precisa ser ajustada.

3. Textos exatos dos checkboxes

3.1 terms + privacy — cadastro

Um único checkbox cobre os dois documentos (aceite de adesão), gerando duas linhas em consents.

Checkbox (obrigatório, nunca pré-marcado):

Li e aceito os Termos de Uso e a Política de Privacidade.

Erro se não marcado:

Aceite os Termos e a Política de Privacidade para criar sua conta.

Variação para quem tem 12–17 anos (mesmo checkbox, texto de apoio adicional abaixo):

Tem menos de 18? Leia a versão curta da política, feita para você.

3.2 terms / privacy — re-aceite por nova versão

Tela modal, bloqueante para ações sensíveis (enviar redação, comprar), nunca para continuar respondendo questões.

Título

Atualizamos nossos termos

Corpo

Mudamos {resumo em uma frase do que mudou}. A versão nova vale a partir de {data}. Leia e confirme para continuar.

Ver o que mudou · Política de Privacidade

Checkbox (obrigatório)

Li e aceito a nova versão dos Termos de Uso e da Política de Privacidade.

Ações: Aceitar e continuar · Agora não

"Agora não" fecha o modal e mantém o acesso ao que é gratuito; ações sensíveis continuam pedindo o aceite.

3.3 guardian — cadastro de 12 a 17 anos

Checkbox (obrigatório):

Meu responsável sabe que eu uso o Gabarita e concorda com os Termos de Uso e a Política de Privacidade.

Erro se não marcado:

Marque a confirmação para continuar.

Grava: kind='guardian', version = versão vigente dos Termos.

3.4 guardian — checkout de menor de 18 anos

Checkbox (obrigatório):

Declaro que meu responsável legal está ciente desta compra e a autoriza, e que os dados informados acima são dele.

Erro se não marcado:

Marque a confirmação para continuar.

Grava uma segunda linha kind='guardian' (não sobrescreve a do cadastro), com version = versão vigente dos Termos e referência ao checkout no payload de auditoria.

3.5 marketing — opt-in

Aparece no fim do onboarding e em Configurações → Notificações. Nunca pré-marcado. Nunca obrigatório.

Checkbox:

Quero receber por e-mail dicas de estudo, novidades e avisos sobre o ENEM.

Texto de apoio:

No máximo um e-mail por semana. Você pode cancelar em um clique, no rodapé de qualquer e-mail.

Revogação (Configurações ou link no e-mail):

Você não vai mais receber nossos e-mails de novidades. Avisos sobre sua conta, sua redação corrigida e suas compras continuam chegando — esses fazem parte do serviço.

Grava linha de revogação em consents e desativa o envio imediatamente (sem "pode levar até 48 horas").

4. Retenção e exportação

Item Regra
Linhas de consents mantidas enquanto a conta existir + 5 anos após a exclusão, como prova do aceite (exercício regular de direitos, art. 7º, VI)
ip e user_agent nas linhas de consentimento mantidos junto com a linha; não são reutilizados para nenhuma outra finalidade
GET /me/export inclui kind, version e granted_at das linhas do próprio usuário; não inclui ip nem user_agent (dado de segurança, não de perfil)
Exclusão de conta as linhas de consents sobrevivem à exclusão, desvinculadas do perfil (mantendo apenas o user_id como identificador opaco) — documentar isso na Política de Privacidade, §6

5. Checklist de aceite (API + web)

  • Nenhum checkbox de consentimento nasce marcado.
  • marketing nunca bloqueia cadastro, compra ou qualquer funcionalidade.
  • version é resolvida no servidor a partir do frontmatter do documento vigente; o cliente nunca envia versão.
  • granted_at vem do relógio do servidor.
  • POST /me/consents é idempotente por (user_id, kind, version).
  • GET /me expõe pendingConsents quando há versão nova.
  • Revogação de marketing tem efeito imediato e é auditável.
  • ip / user_agent de consentimento não aparecem em log de aplicação nem em evento de analytics.
  • O texto de cada checkbox no código é idêntico ao deste documento (se divergir, este documento é a fonte).

Pendências para o advogado

  • Validar os quatro textos de checkbox (§3).
  • Confirmar se terms/privacy devem mesmo ser registrados como "consentimento" ou renomeados para "aceite" no schema.
  • Confirmar o prazo de 5 anos de retenção das provas de aceite.
  • Definir o texto do "resumo em uma frase do que mudou" (§3.2) como obrigação de processo a cada nova versão.