docs(todo): registra PHASE 23 (frontend: shell, login, dashboard, tarifas)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EWHKmcVJtstQFErbZ1AanY
This commit is contained in:
69
TODO.md
69
TODO.md
@@ -647,11 +647,72 @@ docs/BILLING.md
|
||||
decisão documentada em docs/BILLING.md, não uma média ponderada
|
||||
- [ ] Reajuste de preço no meio de um período aberto (2 vigências
|
||||
sobrepostas de `PriceBookItem`/`RateDeckEntry`) nunca exercitado
|
||||
- [ ] Sem UI de platform admin pra criar tenant/price book/rate deck
|
||||
ainda (fase Frontend) — testado só via API direto
|
||||
- [x] UI de platform admin pra price book/rate deck — PHASE 23. Ainda sem
|
||||
UI pra criar tenant/plano/assinatura (não há nem endpoint de listagem
|
||||
de tenants) — só via API/script direto.
|
||||
|
||||
## PHASE 23+ — ver `agente.md` seções 140 em diante (Frontend, Security,
|
||||
Tests)
|
||||
## PHASE 23 — Frontend: app shell, login, dashboard, Billing > Tarifas
|
||||
(agente.md secao 161-176)
|
||||
- [x] `apps/frontend` (Next.js 15 App Router, React 19, Tailwind,
|
||||
TanStack Query/Table instalados mas não usados ainda, Recharts,
|
||||
Lucide) — primeiro commit do frontend
|
||||
- [x] Design tokens (secao 165) derivados do logo real: navy/azul/teal,
|
||||
light+dark+system (`ThemeToggle`, classe em `<html>` +
|
||||
`localStorage`, lido antes do primeiro paint pra não piscar)
|
||||
- [x] Login (secao 167): split brand/form, sessão em cookie httpOnly
|
||||
(`/api/login`, `/api/logout`) — o access token nunca chega a
|
||||
JS legível no browser (`apiFetch` só roda em Server
|
||||
Component/Server Action, nunca no client)
|
||||
- [x] Shell Platform (secao 166, 168): sidebar fixa colapsável + topbar +
|
||||
conteúdo, IA completa dos 2 menus renderizada (itens sem página
|
||||
viram "em breve", nunca link morto) — implementação de referência
|
||||
do design system (Product Principle #5)
|
||||
- [x] Dashboard "Visão Geral" (secao 163): `InstrumentTile` com leitura
|
||||
tipo painel/instrumento (mono, tabular), `value === null` vira
|
||||
traço fantasma com explicação (`pending`) em vez de fingir "0" —
|
||||
nunca um número inventado (secao 138)
|
||||
- [x] Billing > Tarifas (primeira tela CRUD real, contra a API de billing
|
||||
da PHASE 22): price books + rate decks — listagem com busca/
|
||||
ordenação client-side, criação com itens/entradas dinâmicos via
|
||||
Server Actions (`"use server"`, chamadas como função direto do
|
||||
client component, não `<form action>` — precisa de arrays
|
||||
dinâmicos), detalhe. Testado ponta a ponta contra a API real:
|
||||
criar price book pela UI de verdade → redirect pro detalhe → volta
|
||||
pra lista com o item novo, contagem e badge "Padrão" corretos
|
||||
- [x] **Bug real, achado nesta fase**: a topbar tinha o título fixo
|
||||
"Visão Geral da Plataforma" em toda página (Tarifas mostrava o
|
||||
título errado). Corrigido com `getPageMeta(pathname)` resolvendo
|
||||
título/descrição pelo item de menu ativo (casa pelo href mais
|
||||
longo, então uma subrota tipo `/price-books/:id` ainda resolve pro
|
||||
item de menu certo).
|
||||
- [x] **Bug real, achado nesta fase**: a sidebar fixa de 256px não tinha
|
||||
nenhuma versão mobile — abaixo de `lg` o conteúdo ficava espremido
|
||||
em ~130px (secao 175: o próprio celular do agente precisa
|
||||
funcionar). Corrigido com `MobileNavDrawer` (Radix Dialog, foco
|
||||
preso + Escape + fecha ao navegar) reaproveitando a mesma
|
||||
`NavList` da sidebar desktop — uma correção no shell compartilhado,
|
||||
beneficia toda página existente e futura.
|
||||
- [x] Testado em navegador de verdade (Puppeteer + Chrome headless,
|
||||
instalado nesta sessão pra isso — sem extensão de browser
|
||||
disponível): desktop 1440px + mobile 390px, light + dark, fluxo de
|
||||
criação real ponta a ponta. Screenshots em
|
||||
`apps/frontend/.impeccable/review/`.
|
||||
- [ ] Consumo/Fechamentos/Relatórios (as outras 3 abas de Billing) e
|
||||
Clientes/Infraestrutura/IA/Sistema inteiros ainda ficam "em breve"
|
||||
— dependem de um seletor de tenant real, e não existe endpoint de
|
||||
listagem de tenants ainda (nem tenant CRUD) pra construir um
|
||||
- [ ] Sem paginação de servidor/coluna-visível/bulk-actions/export nas
|
||||
tabelas de Tarifas (secao 173 pede em toda tabela) — decisão
|
||||
deliberada pra um catálogo global de poucas dezenas de linhas,
|
||||
documentada no rodapé da própria tela; reavaliar se isso deixar de
|
||||
ser verdade
|
||||
- [ ] TanStack Query/Table instalados, ainda não usados — Tarifas busca
|
||||
tudo server-side (Server Component) e filtra/ordena no client com
|
||||
`useState`/`useMemo` puro, sem cache de query; suficiente pro
|
||||
tamanho de catálogo atual
|
||||
|
||||
## PHASE 24+ — ver `agente.md` seções 140 em diante (resto do Frontend,
|
||||
Security, Tests)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user