Versão 2026-09-07 · atualizado em 27/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 o marcador de revogação (revoked_at, já presente no schema 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 13–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) | Cadastro (opcional, passo de perfil) ou Perfil → Privacidade; versão própria MARKETING_CONSENT_VERSION (§3.5) |
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 13–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 13 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 cadastro (passo de perfil, junto do celular) e em Perfil → Privacidade ("Novidades e dicas por e-mail e WhatsApp"). Nunca pré-marcado. Nunca obrigatório.
⚠️ Texto novo em 10/09/2026, revisar com advogado. Passou a citar WhatsApp para não exigir novo aceite quando o canal existir (PRD L-N1); nada é enviado por WhatsApp até lá. A versão gravada em
consentspara estekindé a constanteMARKETING_CONSENT_VERSION = '2026-09-10'do contrato, separada deCONSENT_VERSIONS(que os apps compilam). Exceção à regra 2 do §1: paramarketingo cliente envia a versão e a API aceita qualquer valor, como já fazia.
Checkbox:
Quero receber dicas de estudo, novidades e avisos sobre o ENEM por e-mail e WhatsApp.
Texto de apoio:
No máximo um e-mail por semana. Você pode cancelar quando quiser, no rodapé de qualquer e-mail ou no seu perfil.
O que este consentimento libera (PRD L-N1): a variante de oferta dos avisos (que cita o Passe, sem preço) e o aviso de cota de redação usada, por push ou e-mail. Só para maiores de 18; menor nunca recebe oferta, mesmo que marque.
O que não depende dele: avisos de serviço sobre a conta (energia recarregada, cobrança pendente que o próprio aluno iniciou), que têm toggle próprio em Perfil → Preferências ("Avisos sobre a sua conta por e-mail", user_settings.lifecycle_emails) e o mesmo link de descadastro em 1 clique, com escopo lifecycle.
Revogação (Perfil → Privacidade ou link no e-mail, escopo marketing):
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), incluindo o texto novo de
marketing(§3.5, 10/09/2026) que cita WhatsApp. - Bump das versões legais (10/09/2026): a Política de Privacidade ganhou a linha do celular e duas bases legais novas (avisos sobre a conta e cobrança pendente) sem mudar o
versiondo frontmatter nemCONSENT_VERSIONS, porque os apps compilam a versão. Decidir com o advogado se o bump + aviso de 15 dias entra quando as builds iOS/Android com o campo de celular shiparem, ou antes. - Divergência com o produto (revisão 27/08): o §4 promete que as linhas de
consentssobrevivem à exclusão da conta por +5 anos, mas o schema atual (consents.user_id → profilescomon delete cascade) as apaga junto com a conta noaccount.purge. Decidir: arquivar as provas de aceite antes do purge (mudança de schema/worker) ou assumir a exclusão total — a Política de Privacidade publicada já descreve a exclusão total, e este documento só fecha depois dessa decisão. - 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.