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:
- Append-only. Revogar não apaga a linha: grava uma nova linha do mesmo
kindcomgranted_atnovo e um marcador de revogação (version= versão revogada, campo de revogação no schema — combinar com o agente depackages/db). O histórico é a prova. - O servidor decide. O front envia "aceitei o
kindX"; a API resolve qual é a versão vigente do documento e grava. O cliente não manda a versão — se mandasse, bastaria forjar. - Re-aceite ao mudar de versão. Se a versão vigente de
termsouprivacyfor maior que a última aceita pelo usuário, a API sinaliza emGET /me(pendingConsents: ['terms']) e a UI apresenta o re-aceite antes de qualquer ação sensível. - 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/exportde terceiros. Ficam só na tabela. 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
consentscomo registro único de aceites, mesmo quando a base legal não é "consentimento" em sentido técnico (caso determseprivacy). 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.
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.
-
marketingnunca bloqueia cadastro, compra ou qualquer funcionalidade. -
versioné resolvida no servidor a partir do frontmatter do documento vigente; o cliente nunca envia versão. -
granted_atvem do relógio do servidor. -
POST /me/consentsé idempotente por (user_id,kind,version). -
GET /meexpõependingConsentsquando há versão nova. - Revogação de
marketingtem efeito imediato e é auditável. -
ip/user_agentde 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/privacydevem 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.