Pular para conteúdo

Especificação do Sistema (MVP - Versão 1)

Visão Geral do Documento

O sistema completo é composto por dois grandes blocos funcionais, descritos nas seções a seguir:

  1. Sistema de Autenticação — camada de acesso e identidade, responsável por proteger e isolar os dados de cada usuário. É a base sobre a qual todo o restante do sistema opera: nenhuma operação do Sistema de Tarefas ocorre sem uma sessão autenticada válida.
  2. Sistema de Tarefas — camada funcional principal, responsável por produtividade (tarefas) e agenda (compromissos), organizadas hierarquicamente dentro de Cadernos pertencentes a um usuário autenticado.

1. Sistema de Autenticação

1.1. Visão Geral

O sistema de autenticação é responsável por identificar e proteger o acesso de cada usuário aos seus próprios dados (cadernos, itens, sub-itens e configurações). Por restrição de projeto, toda a autenticação é implementada internamente, sem dependência de provedores externos (Google, Apple, Facebook, etc.) ou serviços terceirizados de identidade (Auth0, Firebase Auth, etc.). O sistema deve gerenciar, com recursos próprios, o cadastro, o login, a sessão e a alteração de credenciais do usuário.

1.2. Módulos do Sistema

O sistema de autenticação é composto pelos seguintes módulos funcionais na V1:

Módulo Função
Cadastro Permite a criação de uma nova conta a partir de nome, e-mail e senha.
Login Autentica o usuário por e-mail e senha, com proteção contra tentativas repetidas de acesso indevido.
Sessão Mantém o usuário autenticado entre requisições, com suporte a múltiplos dispositivos e revogação individual ou em massa.
Segurança de Conta Gerencia bloqueio temporário, desativação e reativação de conta.
Configurações de Conta Centraliza a visualização e alteração dos dados de cadastro e da senha do usuário.

1.3. Modelo Conceitual — Entidade Usuário

O Usuário é a raiz de todo o modelo de dados: todo Caderno pertence a exatamente um Usuário, e, por consequência, todo Item e Sub-item pertence transitivamente a um único Usuário.

1.4. Cadastro (Sign Up)

  • O cadastro exige, no mínimo: nome, e-mail e senha.
  • O e-mail deve ser validado quanto ao formato e checado quanto à unicidade antes da criação da conta.
  • A senha nunca é armazenada em texto puro — apenas seu hash, gerado com um algoritmo de hashing adequado a senhas (ex.: bcrypt ou Argon2, com salt individual por usuário).
  • Política mínima de senha: mínimo de 8 caracteres, com exigência de pelo menos uma letra e um número.
  • Ao concluir o cadastro com sucesso, a conta é criada diretamente com status de conta como Ativa, e o usuário já pode realizar login em seguida.

1.5. Login

  • O login é feito por par email + senha.
  • O sistema compara o hash da senha informada com o hash da senha armazenada — a senha original nunca é comparada diretamente.
  • Em caso de sucesso, o sistema gera uma sessão (ver seção 1.6).
  • Em caso de falha, o sistema não deve indicar se o erro foi no e-mail ou na senha (mensagem genérica de “credenciais inválidas”), para evitar enumeração de usuários cadastrados.

1.5.1. Proteção contra Força Bruta

  • O sistema deve contar tentativas de login malsucedidas por conta (e/ou por IP).
  • Após 5 tentativas falhas consecutivas, a conta é temporariamente bloqueada por um período (ex.: 15 minutos) antes de novas tentativas serem permitidas.
  • O contador de tentativas é zerado após um login bem-sucedido.

1.6. Gerenciamento de Sessão

  • O sistema utiliza um modelo híbrido de dois tokens:
    • Access Token: JWT assinado, stateless, curta duração (ex.: 15 minutos). Usado na maioria das requisições. Não é persistido em banco.
    • Refresh Token: token opaco, longa duração (ex.: 30 dias), usado exclusivamente para renovar o access token. É persistido no banco (apenas seu hash) em uma tabela de sessões, associada ao usuário e, opcionalmente, ao dispositivo/user agent.
  • Ambos os tokens são transportados via cookie httpOnly, Secure e SameSite, reduzindo exposição a XSS.
  • Logout: revoga a sessão (refresh token) correspondente no banco. O access token em memória se torna inútil após expirar naturalmente (até 15 min).
  • Revogação em massa (troca de senha, desativação de conta): todas as linhas de sessão do usuário são marcadas como revogadas, invalidando todos os refresh tokens ativos.
  • O usuário pode ter múltiplas sessões simultâneas (uma linha por dispositivo/login), cada uma identificável e revogável individualmente — útil, por exemplo, para uma futura tela de “dispositivos conectados” em Configurações.

1.7. Alteração de Senha (via Configurações)

  • Para alterar a senha estando autenticado, o usuário deve informar a senha atual como reautenticação, além da nova senha (sujeita à mesma política de senha da seção 1.4).
  • A troca bem-sucedida invalida as demais sessões ativas, mantendo apenas a sessão corrente.
  • Observação: como não há fluxo de “esqueci minha senha” nesta versão, a alteração de senha só é possível estando autenticado. A perda de acesso à conta (esquecimento de senha) não possui, no MVP, um mecanismo de autoatendimento — fica fora do escopo desta versão.

1.8. Estados da Conta

Estado Descrição
Ativa Conta em uso normal, criada e utilizável imediatamente após o cadastro.
Bloqueada Temporariamente Bloqueio automático por excesso de tentativas de login falhas.
Desativada Conta desativada pelo próprio usuário; dados preservados, acesso normal impedido até reativação (ver seção 1.8.1).
Excluída Remoção da conta solicitada pelo usuário; segue política de exclusão de dados (ver seção 1.9).

1.8.1. Reativação de Conta Desativada

  • Quando o usuário tenta fazer login com email + senha válidos em uma conta cujo status é Desativada, o sistema não trata isso como falha de autenticação (as credenciais estão corretas) — em vez disso, informa que a conta está desativada e pergunta se o usuário deseja reativá-la.
  • Mediante confirmação explícita do usuário, o sistema altera o status da conta para Ativa e prossegue com o login normalmente (gerando sessão, conforme seção 1.6).
  • Se o usuário não confirmar a reativação, o login não é concluído e a conta permanece Desativada.
  • Esse fluxo não depende de e-mail ou qualquer canal externo — a própria senha correta funciona como prova de identidade suficiente para a reativação.

1.8.2. Desativação de Conta

  • A desativação é uma ação disponível no módulo de Configurações, para o usuário autenticado.
  • Ao desativar, todas as sessões ativas da conta são encerradas imediatamente, forçando um novo login (que, por sua vez, disparará o fluxo de reativação da seção 1.8.1) caso o usuário queira voltar a usar o sistema.

1.9. Regras Gerais e Integração com o Restante do Sistema

  • Toda operação de leitura/escrita sobre Cadernos, Itens e Sub-itens exige uma sessão autenticada válida; não há acesso anônimo aos dados do usuário.
  • Ao excluir a conta, todos os Cadernos e Itens do usuário são removidos em cascata, seguindo o mesmo comportamento de deleção descrito na seção 2.8. Esse comportamento difere da deleção isolada de um Caderno (seção 2.8), que preserva os itens movendo-os para a Inbox — na exclusão de conta, não há para onde mover os itens, por isso a cascata é total.
  • Não há suporte, nesta versão, a verificação de e-mail, a recuperação de senha, a múltiplos métodos de login (ex.: login social) nem a autenticação multifator (2FA) — todos podem ser considerados evoluções futuras fora do escopo do MVP.

1.10. Configurações

O módulo de Configurações é responsável por centralizar as preferências básicas do usuário na plataforma.

1.10.1. Alteração de Dados de Cadastro

Nesta versão do sistema, o módulo de configurações tem como foco principal o gerenciamento da conta, oferecendo funcionalidades simples para a alteração de dados de cadastro.

  • O sistema deve permitir que o usuário acesse uma área dedicada para visualizar e atualizar suas informações pessoais vinculadas à conta.
  • As modificações realizadas nos dados de cadastro devem ser salvas de forma persistente e refletidas na identificação do usuário em toda a plataforma.
  • A alteração de senha (seção 1.7) também é acessada a partir deste módulo.

2. Sistema de Tarefas

2.1. Visão Geral

O Sistema de Tarefas é a camada funcional principal da plataforma, operando sobre os dados de um usuário já autenticado (ver Seção 1). Ele unifica produtividade (tarefas) e agenda (compromissos com horário) em um único modelo de dados. Toda informação do usuário é organizada hierarquicamente dentro de Cadernos, que funcionam como a unidade central de organização do sistema. O sistema oferece múltiplas formas de visualizar e manipular esse conteúdo — planner diário, calendário, listas de tarefas e busca — sempre partindo da mesma base de dados unificada.

2.2. Modelo Conceitual

2.2.1. Hierarquia de Organização

O sistema estrutura o conteúdo em três níveis:

  • Caderno: raiz organizacional obrigatória, pertencente a um único Usuário. Todo conteúdo do sistema deve, eventualmente, pertencer a um caderno.
  • Item: unidade central que representa “o que fazer” ou “o que acontece”. Todo item pertence a exatamente um caderno.
  • Sub-item: unidade vinculada a um item, representando uma parte dele.

2.2.2. Entidade Item

O item é a entidade unificada do sistema e pode assumir dois tipos:

  • SCHEDULE: representa algo com horário fixo (por exemplo, uma aula ou uma consulta). Sempre possui data/hora de início e fim, pode ser recorrente e não aparece nas listas de tarefas ou no planner diário — apenas no calendário.
  • TODO: representa algo que precisa ser feito. Pode ou não ter horário definido, pode ter data limite (due date), pode ser recorrente e admite sub-itens.

Um item do tipo TODO pode ser associado a somente um item do tipo SCHEDULE, mas o inverso não ocorre — apenas TODOs podem ter sub-itens.

2.2.3. Inbox

A Inbox é uma área de captura rápida, e não um caderno. Ela permite que o usuário registre pensamentos ou tarefas sem necessidade de classificação imediata. Um item deixa a Inbox automaticamente no momento em que é associado a um caderno.

2.3. Módulos do Sistema

O sistema de tarefas é composto pelos seguintes módulos funcionais na V1:

Módulo Função
Inbox Permite captura rápida de itens sem exigir classificação inicial.
Calendário Exibe o conteúdo do sistema em visões temporais (diária, semanal, mensal, agenda).
Todo List Lista as tarefas do sistema com opções de filtro temporário e ordenação.
Cadernos Gerencia a estrutura e a listagem dos cadernos criados pelo usuário.
Busca Permite busca simples por texto (títulos) sobre os itens do tipo TODO.

As preferências de conta e a alteração de dados de cadastro são tratadas pelo módulo de Configurações, descrito na seção 1.10, dentro do Sistema de Autenticação.

2.4. Comportamento dos Itens

2.4.1. Item do tipo SCHEDULE

  • Possui obrigatoriamente data/hora de início e de término.
  • Pode ser recorrente, com suporte a recorrência básica (diária, semanal ou mensal). Nesta versão do sistema, não há suporte a exceções, cancelamento ou sobrescrita (override) de instâncias individuais da recorrência.
  • A recorrência pode ter uma data de término definida.
  • Não é exibido no planner diário nem nas listas de tarefas — apenas no calendário.

2.4.2. Item do tipo TODO

  • O horário é opcional.
  • Quando possui horário e data limite, o item aparece no calendário como um bloco de tempo.
  • Quando não possui data limite, o item aparece apenas no planner diário e nas listas.
  • Pode ter uma data limite (due date), independente de possuir horário.
  • Pode ser recorrente (regras de recorrência idênticas ao SCHEDULE).
  • Possui um estado de conclusão, funcionando como um checklist simples por padrão.
  • Pode ser associado a no máximo um item do tipo SCHEDULE.

2.4.3. Regras Comuns a Ambos os Tipos

  • Todo item pertence a exatamente um caderno; a Inbox é apenas um estado temporário anterior à classificação.
  • Qualquer item pode ser duplicado, preservando propriedades selecionadas.

2.4.4. Duplicação de Item

Ao duplicar um item, o sistema cria uma cópia focada em manter a agilidade de criação. Serão copiados:

  • O mesmo título (com prefixo opcional “Cópia de”);
  • O mesmo caderno de origem;
  • A mesma prioridade;
  • O estado de ciclo de vida ATIVO (e nenhuma data definida, para que o usuário a defina posteriormente).

Não são copiados na duplicação:

  • O status de conclusão do item original;
  • Os sub-itens vinculados ao TODO original;
  • O vínculo com um SCHEDULE associado.

2.5. Priorização

O sistema utiliza uma escala numérica de prioridade com quatro níveis, além da ausência de prioridade:

Valor Significado
1 Crítica — deve ser feita imediatamente
2 Alta — deve ser feita hoje ou amanhã
3 Média — deve ser feita durante a semana
4 Baixa — deve ser feita quando possível
Nulo Sem prioridade definida

2.6. Adiamento (Snooze)

O sistema permite adiar um item ativo para reaparecer posteriormente:

  • Amanhã: Define o reaparecimento para o dia seguinte, às 08:00.
  • Em 3 dias: Define o reaparecimento para 3 dias à frente.
  • Próxima semana: Define o reaparecimento para a próxima segunda-feira.
  • Data específica: Permite ao usuário escolher uma data manual.

2.7. Ciclo de Vida do Item

O item percorre os seguintes estados ao longo de sua existência:

  1. Inbox — estado inicial, antes da classificação em um caderno.
  2. Ativo — estado normal de um item classificado e aguardando execução.
  3. Concluído — estado após a marcação de conclusão pelo usuário.
  4. Arquivado — estado posterior à conclusão. Nesta versão, o arquivamento é uma ação estritamente manual (o usuário decide mover o item concluído para o arquivo).
  5. Deletado — remoção manual, que pode ocorrer a partir de qualquer estado.

2.8. Comportamento de Deleção

Ações de deleção possuem os seguintes impactos no sistema:

  • Deletar um Caderno: Os itens pertencentes a este caderno não são perdidos, mas retornam para o estado temporário de Inbox.
  • Deletar um Item: O sistema remove totalmente as referências do item. Como a hierarquia do sistema é pai-filho, todos os sub-itens vinculados a um TODO são deletados junto com ele. A exclusão exige confirmação apenas se o item possuir sub-itens.

2.9. Sub-itens

Sub-itens pertencem exclusivamente a itens do tipo TODO e operam sob uma hierarquia estritamente 1:N (Pai-Filho simples).

  • Um sub-item pertence a um único TODO.
  • Ao ser concluído, este checklist é validado apenas dentro do escopo daquele item pai.
  • Se for necessário usar o mesmo passo em outro lugar, o sub-item deverá ser criado independentemente na outra tarefa.

2.10. Ordenação

O sistema oferece os seguintes critérios básicos de ordenação para as listagens de tarefas:

  • Manual: Reordenação visual por arrastar e soltar (drag & drop).
  • Prioridade: Ordena de P1 a P4, com itens sem prioridade ao final.
  • Data limite (due date): Prioriza os itens com vencimento mais próximo.
  • Criação: Ordena pelos itens mais recentes ou mais antigos.
  • Caderno: Agrupa os itens por caderno.

Por padrão estrutural, quando nenhuma ordenação específica é acionada, o sistema usa a combinação: prioridade > data limite > data de criação.

2.11. Busca

O sistema oferece busca simples (baseada em correspondência de texto no título) restrita a itens do tipo TODO. Cadernos e SCHEDULES não são retornados nos resultados.

Os resultados da busca podem ser refinados através de filtros simples em tela:

  • Status: (ativo, concluído, arquivado)
  • Caderno: (pertencente a um caderno específico)
  • Prioridade: (P1 a P4, ou nulo)
  • Período: (intervalo de data)

2.12. Visualizações de Calendário

O sistema oferece quatro modos de visualização para o planejamento temporal:

Visão Descrição
Diária Timeline vertical representando as 24 horas de um dia específico.
Semanal Sete colunas dispostas em timeline vertical abrangendo a semana.
Mensal Grade tradicional de calendário exibindo os dias do mês.
Agenda Lista puramente cronológica exibindo os próximos eventos e tarefas com data.

2.12.1. Regras de Exibição no Calendário

  1. Itens do tipo SCHEDULE são sempre exibidos no calendário.
  2. Itens do tipo TODO são exibidos no calendário somente quando possuem horário definido ou data limite (due date).
  3. Itens do tipo TODO sem qualquer data associada são invisíveis no calendário (exibidos exclusivamente no planner diário e nas listas de tarefas).