Skip to content

TODO List — Por ID

Listagem completa de todas as ações do projeto, ordenadas por prefixo e número de ID. Para prioridades e detalhes ver TODO_PRIORITIES.md.

Última atualização: 2026-05-27 (BACK-05d poi.py Literal types; TEST-02 pytest 12/12; INFRA-02 GitHub Actions)

Legenda: ✅ concluído · 🔄 em progresso · ❌ pendente


AUTH — Autenticação e Sessões

IDEstadoDescriçãoBranch
AUTH-01Log de acessos — tabela access_log, /admin/log, /admin/usersfeat/access-log
AUTH-02Registo com verificação de e-mail (Resend SDK, thread daemon)feat/access-log
AUTH-03Frontend de registo — SignUpPage, banners LoginPagefeat/access-log
AUTH-04Recuperação de palavra-passe — ForgotPasswordPage, ResetPasswordPagefeat/access-log
AUTH-05Modal "sessão expirada" — SESSION_EXPIRED_EVENT, AppLayoutfeat/access-log
AUTH-06Verificar hardening cookies: HTTPONLY, SECURE, SAMESITE + renomear cookie (anti-fingerprinting)feat/security
AUTH-07Rate limiting com slowapi + Upstash Redis nos endpoints /auth/* + fail-fast Redis no arranque (A-02)feat/security + audit-fix
AUTH-08Regenerar sessão após login (mitigação session fixation)feat/security
AUTH-09Editar perfil: backend routes (username, e-mail c/ re-verificação, password, apagar conta)3.1-dev
AUTH-09aProfilePage redesign — card layout c/ header gradient, menu accordion, ícones MDI3.1-dev
AUTH-09bAvatar de utilizador — coluna avatar DB, rota POST /auth/profile/avatar, upload frontend c/ canvas resize3.1-dev
AUTH-09cProfilePage redesign card compacto — 4 rows expansíveis inline (username, e-mail, password, apagar conta); sem modal separado3.1-dev
AUTH-10Sistema de roles/permissões: coluna role, require_admin, admin UI — viewer/demo diferidosauth/roles → 3.1-dev
AUTH-13Hardening sessão: max_age configurável, Secure flag obrigatória em prod, CSRF protection3.1-dev
AUTH-11Validar modal sessão expirada em produção (apagar cookie)feat/access-log
AUTH-12Merge feat/access-log3.1-dev3.1-dev

DB — Base de Dados e Persistência

IDEstadoDescriçãoBranch
DB-01Neon PostgreSQL em produção — env vars, deploy, TEST-01 aprovadofeat/access-log
DB-02Migração Neon → Supabase — elimina cold start 45s; per-request connections (PgBouncer)3.1-dev
DB-03Estratégia de backups — tools/backup_db.py, GitHub Actions workflow, tools/restore_db.py, subplan (A-04: descoberta dinâmica + restore + DEPLOY_PRODUCTION.md)3.1-dev + audit-fix
DB-04Migrations Alembic — versioning de schema, rollback, remover DDL do arranque da appaudit-fix
DB-05Least privilege DB — utilizador chichorro_runtime criado; DATABASE_URL_MIGRATIONS para Alembic; ações manuais Supabase/Render/GitHub pendentesaudit-fix
DB-06Migrar camada de dados para SQLAlchemy ORM — autogenerate Alembic, connection pooling, remover psycopg2 custom wrapper

SEC — Segurança e Hardening

IDEstadoDescriçãoBranch
SEC-01CORS estrito em produção — sem *, validação positiva https:// (urlparse), FRONTEND_URL incluída nas origins (A-01; reforçado audit-fix-2 #2)audit-fix, audit-fix-2
SEC-02HTTPS obrigatório em produção — fail-fast FRONTEND_URL/BACKEND_URL validação positiva urlparse (C-01; reforçado audit-fix-2 #2)feat/security, audit-fix-2
SEC-03X-Content-Type-Options, X-Frame-Options, Referrer-Policy via @app.after_request; CSRF coberto por camadas existentesfeat/security
SEC-04Argon2id password hashing (argon2-cffi, RFC 9106 level 1) + upgrade-on-login a partir de werkzeug scrypt/pbkdf2sec/hardening
SEC-05Hash SHA-256 dos tokens de reset/verificação/email-change na BD; CSRF exemption para endpoints públicossec/token-hashing
SEC-06Política de logs — garantir que tokens e PII não são impressos em produção (A-05)audit-fix
SEC-07Bloquear SVG e validar magic bytes no endpoint /auth/profile/avatar (JPEG/PNG/WebP/GIF)sec/hardening
SEC-08Remover legacyLogin.ts e limpar variáveis VITE_LOGIN_* do .env local (M-05)audit-fix
SEC-09CSP + Permissions-Policy no backend (add_security_headers) e Cloudflare Pages (_headers) (M-01)audit-fix
SEC-10Fail-fast secrets em produção — CHICHORRO_SECRET_KEY e outros secrets obrigatórios; sem arranque silencioso com defaults inseguros (C-04)audit-fix

UI — Interface e Experiência

IDEstadoDescriçãoBranch
UI-02Página de Documentação integrada na app
UI-03Página de Ajuda integrada na app
UI-04FAQs — Perguntas Frequentes
UI-05Bug Report — formulário de reporte (destino: e-mail/GitHub/ClickUp)
UI-06Preferências / Definições do utilizador — dark mode (sistema/claro/escuro), avisar antes de sair, casas decimais3.1-dev
UI-07Dark Mode — todas as páginas cobertas (RiPage, CtiPage, InterventionsPage, auth pages, sidebar, cards) — concluído 2026-05-183.1-dev

FEAT — Funcionalidades Novas

IDEstadoDescriçãoBranch
FEAT-01Gráfico impacto intervenções (tornado chart, Recharts)
FEAT-02Guardar edifício — nome, morada, código postal, distrito/concelho/freguesia (cascata), GPS + mapa; resultados associados ao utilizador e em tabela geral
FEAT-03Chatbot AI assistente CHICHORRO (Claude API ou similar)

UX — Micro-melhorias de Experiência (CHICHORRO 3.1)

Todos concluídos durante a implementação do CHICHORRO 3.1.

IDEstadoDescrição
UX-01Campos em falta com ring vermelho; resultados antigos em cinza translúcido; card "Valor desatualizado"
UX-02Aviso vermelho na RiPage quando inputs mudam após cálculo (SESSION_DATA_UPDATED_EVENT)
UX-03Colapsar/expandir subfatores (POI, DPI, ESCI) com botão chevron animado
UX-04Persistência do estado colapsado em sessionStorage por subfator
UX-05Aviso de sucesso com fade (3 s) na RiPage; gate de erros pós-primeiro cálculo
UX-06Persistência de error/warning/missingFieldKey/isResultStale entre navegações
UX-07Warning âmbar ao limpar subfator; banner ERRO na RiPage quando módulo fica undefined
UX-08Auto-atualização de resultados na RiPage; botão "Atualizar resultados" removido

BACK — Arquitetura Backend

IDEstadoDescriçãoBranch
BACK-01Migração Flask → FastAPI: calc/, routers/, schemas/, services/, uvicornfeat/flask-to-fastapi
BACK-02Melhorar logging: failed logins, user-agent, request IDs, erros backend; fix 405 no catch-all SPA3.1-dev
BACK-03ASCII enum values — remover ç/ã dos values DPI e aliases CTIfeat/flask-to-fastapi
BACK-04Merge feat/flask-to-fastapi → produção; deploy FastAPI no Render (Supabase, 1.5s login)3.1-dev
BACK-05Pydantic Literal types nos schemas dpi, esci, cti, poi (BACK-05d) — payloads inválidos retornam 422back/validation
BACK-06Error handler JSON normalizado — JSONResponse({"error":"INTERNAL_ERROR"}, 500) em vez de re-raiseback/validation
BACK-07Estabilizar naming de rotas API — decisão documentada: manter paths actuais; aliases legacy removidos (/login, /logout, /me, /RI_interv); nginx VPS config documentada (B-02)audit-fix

INFRA — Infraestrutura e DevOps

IDEstadoDescriçãoBranch
INFRA-01Monitorização: Sentry (frontend + backend) + UptimeRobot /health; M-04 (audit-fix): X-Request-ID middleware, backup failure email Resend, UptimeRobot /health/db (manual)3.1-dev + audit-fix
INFRA-02Pipeline CI/CD: GitHub Actions test.yml (pytest) + build.yml (npm build), path filtersinfra/ci-cd
INFRA-03Dockerfile + Compose local/prod — containerização para deploy reproduzível
INFRA-04Endpoint /health/db — health check com query à BD para deteção de falha de ligação (A-06)audit-fix
INFRA-05Cache-Control headers: no-store no backend + _headers Cloudflare Pages; /assets/* com immutable (M-02)audit-fix
INFRA-06VPS hardening operacional (diferido) — apenas relevante se arquitetura mudar de Render para VPS/Proxmox

TEST — Testes e Validação

IDEstadoDescrição
TEST-01Teste e2e em produção: registo → e-mail → verificação → login → reset password (aprovado 2026-05-08)
TEST-02Testes automatizados: pytest 12/12 (health, Literal 422, calc 200, auth básico) — branch test/automated-tests

MODEL — Modelo CHICHORRO (backlog pós-3.1)

Propostas de Rui Sobral (dissertação, secção 7.2) — fora do âmbito do modelo 3.1.

IDEstadoDescrição
MODEL-01Método simplificado baseado no CHICHORRO 2.0 (Ricardo Ferreira + Bruno Silva)
MODEL-02Alterar ordem do Cenário 4 (CI → VVE → VHE alternativo)
MODEL-03Afinação de custos €/m² via PRONIC
MODEL-04Intervenções adicionais: Gerador, Grupo de bombagem, Cablagem, Evacuação alternativa
MODEL-05Georreferenciação e base de dados de edifícios
MODEL-06Tratamento de edifícios devolutos
MODEL-07Integração com Firecheck 2.0

DOCS — Documentação

IDEstadoDescriçãoBranch
DOCS-01Migrar documentação de Docsify para VitePress — build estático, SEO, deploy em docs.chichorrofireriskapp.joaopmteixeira.net. Linear: FIR-31.3.1-dev

CHICHORRO 3.1 — Implementação (Blocos A/B/C)

Todos os itens concluídos. Detalhe completo em NEXT_STEPS.md.

IDEstadoDescrição
A1Análise CTI 3.1 — diferenças identificadas
A1bAtualizar Chichorro_CTI.py (assinatura 3.1, sympy fix, paridade 11/11)
A3Batch: substituir POI / ESCI / DPI + completar RI
A4Backend legado + Chichorro_RI_inter.py — endpoints 3.1 + /RI/interv
B1poiDefinitions.ts — adicionar POI_CC_Idade
B2esciDefinitions.ts — ESCI_GP_Auto, ESCI_EXT_Formacao, ESCI_RIA_CS
B3dpiDefinitions.ts — DPI_OGS de 7→4 campos
B4RiPage.tsx — escala 12 classes, remover seletor período
B5InterventionsPage.tsx — 34 intervenções, conjuntos predefinidos
B6UX validação e invalidação de resultados (→ UX-01)
B7Correções POI_EF e POI_IA
B8Fix sync bidirecional CTI ↔ POI_ATIV (TipoEdif)
B9Aviso RI desatualizado na RiPage (→ UX-02)
B10Expor VHE_Dispositivos / VVE_Dispositivos em CtiPage.tsx
B11Colapsar/expandir subfatores POI, DPI, ESCI (→ UX-03, UX-04)
C1Paridade backend 3.1 — parity_runner.py: 11/11 checks ✅