Arquitetura de Software — Riscos e Dívida Técnica¶
Versão: 1.0
Riscos e Dívida Técnica¶
Consolidado a partir dos obstáculos do modelo KAOS (OBS-001 a OBS-004), dos trade-offs assumidos nos ADRs, e das restrições de escopo (RNF-001, RNF-003).
Riscos¶
| ID | Descrição | Origem | Mitigação / Status |
|---|---|---|---|
| RISCO-001 | Perda de acesso à conta é irrecuperável nesta versão — não há fluxo de "esqueci minha senha". | OBS-004 / RNF-003 / ASR-008 | Aceito para o MVP; candidato a meta futura (V2). Comunicar a limitação claramente na UI de login/configurações. |
| RISCO-002 | Ausência de 2FA e de verificação de e-mail reduz a superfície de segurança adicional da conta. | OBS-004 / RNF-003 | Aceito deliberadamente; reavaliar prioridade em V2 conforme uso real. |
| RISCO-003 | Account lockout por IP (@nestjs/throttler) roda em memória — não é compartilhado entre instâncias. |
ADR-009 (trade-off) | Aceito para instância única do MVP; migrar para store compartilhado (Redis) caso haja escala horizontal. |
| RISCO-004 | Cálculo de recorrência sob demanda (rrule) tem custo de leitura toda vez que o Calendário é consultado, em vez de uma leitura direta de instâncias materializadas. |
ADR-013 (trade-off) | Aceito para o volume esperado do MVP; monitorar tempo de resposta do endpoint de calendário em produção. |
| RISCO-005 | Busca textual via ILIKE sem índice adequado tende a degradar com o crescimento da base (Full Table Scan). |
ASR-015 / ADR-016 (trade-off) | Mitigação já mapeada: criação de índice GIN pg_trgm via raw migration Prisma (ver DIVIDA-001). |
| RISCO-006 | Coexistência de dois mecanismos de autenticação (Passport para Access Token; serviço custom para Refresh Token) aumenta a superfície de manutenção do módulo de sessão. | ADR-006 (trade-off) | Aceito por ser mais simples de controlar revogação individual/massa do que forçar tudo em uma única strategy. |
Dívida Técnica¶
| ID | Descrição | Origem | Mitigação / Status |
|---|---|---|---|
| DIVIDA-001 | Ausência inicial de índice GIN trigram (pg_trgm) para a busca por título. |
ADR-016 / ASR-015 | Caminho de evolução já definido: criar índice via migration assim que a volumetria justificar. |
| DIVIDA-002 | Throttler de account lockout em memória, sem persistência compartilhada entre instâncias. | ADR-009 | Migrar para Redis (ou equivalente) caso o sistema escale para múltiplas instâncias. |
| DIVIDA-003 | Duplicação parcial de regras de validação entre frontend (Zod/React Hook Form) e backend (domain) — ex.: política mínima de senha, obrigatoriedade de datas de SCHEDULE. | ADR-018 | Mitigado parcialmente por schema compartilhado no monorepo (packages/shared) quando o formato permitir; backend permanece autoridade final. |
| DIVIDA-004 | Boilerplate de mappers manuais entre modelo Prisma e entidades de domínio (Clean Architecture). | ADR-001, ADR-003 | Aceito como custo estrutural da separação domain/infrastructure; não há mitigação planejada — é trade-off permanente da decisão. |
| DIVIDA-005 | Sem tabela de instâncias de recorrência — qualquer evolução futura para suportar exceções/overrides (fora do escopo do MVP) exigirá refatoração do modelo atual. | RNF-001 / OBS-001 / ADR-013 | Candidata a meta futura (V2); refatoração de modelagem necessária caso a restrição de escopo seja revista. |
| DIVIDA-006 | Guard de autenticação global exige que todo endpoint público seja marcado explicitamente (@Public()) — risco de esquecimento inverso (marcar como público algo que não deveria). |
ADR-008 | Mitigado por ser "secure by default" (o erro mais provável é o oposto: esquecer de marcar como público, não o inverso); reforçar em revisão de código/CI. |