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
|
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
|
- [ ] Reajuste de preço no meio de um período aberto (2 vigências
|
||||||
sobrepostas de `PriceBookItem`/`RateDeckEntry`) nunca exercitado
|
sobrepostas de `PriceBookItem`/`RateDeckEntry`) nunca exercitado
|
||||||
- [ ] Sem UI de platform admin pra criar tenant/price book/rate deck
|
- [x] UI de platform admin pra price book/rate deck — PHASE 23. Ainda sem
|
||||||
ainda (fase Frontend) — testado só via API direto
|
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,
|
## PHASE 23 — Frontend: app shell, login, dashboard, Billing > Tarifas
|
||||||
Tests)
|
(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