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:
- 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.
- 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,SecureeSameSite, 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 + senhavá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
Ativae 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:
- Inbox — estado inicial, antes da classificação em um caderno.
- Ativo — estado normal de um item classificado e aguardando execução.
- Concluído — estado após a marcação de conclusão pelo usuário.
- 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).
- 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¶
- Itens do tipo SCHEDULE são sempre exibidos no calendário.
- Itens do tipo TODO são exibidos no calendário somente quando possuem horário definido ou data limite (due date).
- 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).