name: antigravity-mapa-paginas description: Convenção técnica do inventário de páginas frontend do Gravity — define como cada página React é catalogada na aba "6. mapa-paginas" da planilha DDD (URL, título, arquivo, componente, tipo de view, autenticação, patente mínima, rotas API consumidas, modais abertos). Use ao registrar página nova, auditar conformidade DDD ou propor renomeação. Não toca em código — só lê código para cruzar e só escreve na planilha após aprovação.
Convenção Técnica — Mapa de Páginas
⚠️ REGRAS ABSOLUTAS: os nomes (URL, arquivo, componente, título) seguem
lei/ddd-nomenclatura. O padrão de criação de tela mora emux/criacao-telas. As rotas API consumidas fazem cruzamento commapa-rotas. Esta skill operacionaliza o inventário de páginas — não redefine naming nem padrão visual.
Princípio fundamental
A aba 6. mapa-paginas é o inventário de toda página React do monorepo — uma linha por componente de tela montado em rota (<Route element={...}>). Cada linha cruza implementação real (arquivo, componente, URL atual) com a forma DDD (URL canônica, arquivo renomeado, título correto), classificação de view, controle de acesso (autenticação + patente mínima) e dependências (rotas API consumidas, modais abertos). É a fonte da verdade do que existe na UI versus o que deveria existir. Antes de criar, renomear ou auditar qualquer página, consulte esta aba.
Estrutura obrigatória
Cada linha tem 23 colunas. A relação chave é:
Local + Produto Gravity → Arquivo (path .tsx) → Componente (PascalCase)
↓ (Router do produto)
URL rota - Atual
↓ (ddd-nomenclatura + ux/criacao-telas)
URL DDD + Arquivo DDD + Componente DDD + Titulo DDD
| # | Coluna | Conteúdo | Fonte |
|---|---|---|---|
| 1 | Local |
Organizacao | Produto | Configurador | Marketplace |
código |
| 2 | URL rota - Atual |
path como aparece no <Route path="..."> (ex: cotacoes/:id) |
código |
| 3 | URL rota - DDD |
path canônico DDD (ex: cotacoes/:id_cotacao) |
esta skill |
| 4 | Explicação |
1 frase do que a tela faz para o usuário final | esta skill |
| 5 | Titulo exibido - Atual |
string mostrada no <h1> ou no breadcrumb (ex: Cambios) |
código |
| 6 | Titulo exibido - DDD |
título canônico (= nome da view; ver REGRA 4) | esta skill |
| 7 | Nome do arquivo |
nome do .tsx (ex: DetalheCorretora.tsx) |
código |
| 8 | Nome do arquivo - DDD |
nome canônico (PascalCase, sem typo, alinhado ao componente) | esta skill |
| 9 | Nome do componente |
identificador exportado (ex: DetalheCorretora) |
código |
| 10 | Nome do componente - DDD |
canônico (= arquivo sem .tsx) |
esta skill |
| 11 | Produto Gravity |
slug do produto (ex: pedido, bid-cambio, Configurador) |
código |
| 12 | Area |
Organizacao | Configurador | Admin | Marketing |
esta skill |
| 13 | Tipo de view |
enum fechado — ver REGRA 3 | esta skill |
| 14 | Breadcrumb |
trilha textual (ex: Pedidos › Detalhe) |
esta skill |
| 15 | Autenticacao |
Logado | Publica |
código |
| 16 | Patente minima |
tipo_usuario mínima (EN UPPER_SNAKE — REGRA 7) |
esta skill + RBAC |
| 17 | Rotas de API consumidas |
rotas chamadas, separadas por | |
código (grep) |
| 18 | Models lidos (heuristico) |
models Prisma derivados das rotas consumidas | cruzamento aba 3 |
| 19 | Modais/Drawers abertos |
nomes dos componentes modais/drawers abertos pela tela | código (grep) |
| 20 | E mobile-ready? |
Sim | Parcial | Nao |
esta skill |
| 21 | Arquivo |
path completo do .tsx (ex: produto/pedido/client/src/pages/...) |
código |
| 22 | Status DDD |
OK | RENOMEAR | DEPRECAR | NOVA |
esta skill |
| 23 | Observacoes |
qualquer divergência ou nota técnica | esta skill |
Regras
Uma linha por componente de tela montado em rota. Layouts (
<Outlet/>) ocupam linha própria comTipo de view = Layout. Componentes reutilizáveis que não são telas vão para a aba9. Componentes Locais, não aqui.URL rota - Atualé literal. Copia exatamente como aparece no<Route path="...">, com ou sem barra inicial, com:paramcomo o código declara.- ❌ "normalizar"
cotacoes/:idpara/cotacoes/:idna coluna Atual - ✅ Atual:
cotacoes/:id| DDD:cotacoes/:id_cotacao
- ❌ "normalizar"
Tipo de viewé um enum fechado de 9 valores (extraídos da realidade da planilha):Layout— wrapper com<Outlet/>(sem conteúdo próprio)Lista— tabela/grid principal de uma entidadeDetalhe— tela de uma instância (/:id_<entidade>)Dashboard— agregações, gráficos, KPIsKanban— board com colunas arrastáveisFormulario— formulário standalone (criar/editar fora de modal)Configuração— tela de settings de uma featureModal— componente que monta<Dialog>/<Drawer>como tela inteira (raro; modais reais vão para aba7. Modais)Autenticação— login, signup, recuperação- ❌ inventar (
Wizard,Stepper,Editor,Workflow) — se precisar de um novo tipo, trava e pergunta.
Titulo exibido - DDD= nome da view, não nome do produto (memóriafeedback_page_title_convention):- ✅
Lista(na tela de pedidos kanban:Kanban; dashboard:Dashboard) - ❌
Pedidos(nome do produto na barra de título — proibido) - Exceção: telas públicas (Marketplace) e telas de Configurador master usam título descritivo (
Checkout,Faturas).
- ✅
Nome do arquivo - DDD=Nome do componente - DDD+.tsx. Sempre PascalCase, sem typo, alinhado ao componente exportado.- Padrões observados na planilha (manter):
- Sufixo
Adminpara telas do painel master Configurador (DeployAdmin,FinanceiroAdmin) - Sufixo
Detalhepara telas de instância (DetalheCorretora→ cuidado: convenção atual mistura prefixo e sufixo) - Prefixo
Modalapenas para componentes modais (não use em página de tela inteira)
- Sufixo
- ❌
TenantDetail.tsx→ ✅OrganizacaoDetalhe.tsx(DDD: substituirTenantporOrganizacao, EN por PT, ordem entidade-primeiro inversa do api-design — telas usam<Entidade><Tipo>) - ❌
MetricasGeminiAdmin.tsx→ ✅MetricasLLMAdmin.tsx(Gemini é fornecedor; LLM é o domínio)
- Padrões observados na planilha (manter):
Local,AreaeProduto Gravitysão vocabulários fechados:Local Area Quando OrganizacaoOrganizacaotela em servicos-global/servicos-plataforma/<servico>/client/Produto(vazio) ou nome do agrupamento tela em produto/<produto>/client/ConfiguradorConfiguradorouAdmintela em servicos-global/configurador/src/pages/{configurador,admin}/MarketplaceMarketingtela pública em servicos-global/marketplace/Produto Gravityé o slug da pasta (kebab-case:pedido,bid-cambio,nf-importacao,simula-custo) ouConfiguradorquandoLocal = Configurador.Autenticacaoé binária:Logado(JWT Clerk obrigatório) ouPublica(sem auth — só Marketplace e portais públicos comoportal/public/responder/:token). Nunca combinar.Patente minimaem EN UPPER_SNAKE (REGRA 7 doddd-nomenclatura). Mesmo vocabulário fechado demapa-rotas:SUPER_ADMIN,ADMIN,MANAGER,STANDARD,VIEWER,PUBLIC. Telas deArea = AdminexigemSUPER_ADMIN(gravity_admin = true).Rotas de API consumidascruza com aba5. mapa-rotas. Lista as rotas chamadas pela tela (viafetch/SDK), separadas por|. Cada rota listada deve existir na aba 5. Se não existir, é achado 🔴 (rota fantasma ou tela quebrada). Use a coluna Atual da rota, não a DDD — esta coluna espelha o código atual.Modais/Drawers abertoscruza com aba7. Modais. Lista os componentes modais que esta tela abre. Mesma disciplina de cruzamento da regra 9.E mobile-ready?é tridicotômico:Sim(responsivo testado),Parcial(funciona mas com perdas),Nao(desktop-only). Default conservador éNaoquando não auditado — não deixar vazio.Status DDDé o mesmo enum fechado de outras skills:OK,RENOMEAR,DEPRECAR,NOVA. Quando 1 tela atual deve virar N DDD (split de página) ou N viram 1 (merge), reportar com 1 linha por destino + linha origem comoDEPRECAR.Páginas órfãs (
.tsxempages/sem linha) e páginas fantasmas (linha sem.tsx) são achados críticos 🔴.
Conversão: Página real → linha completa da planilha
| Passo | Regra | Exemplo |
|---|---|---|
| 1 | Localizar .tsx em */client/src/pages/** |
produto/bid-cambio/client/src/pages/DetalheCorretora.tsx |
| 2 | Ler export default function <Componente> |
Nome do componente = DetalheCorretora |
| 3 | Localizar <Route path="..." element={<DetalheCorretora/>}/> no router do produto |
URL rota - Atual = corretoras/:id |
| 4 | Aplicar ddd-nomenclatura ao param |
URL DDD = corretoras/:id_corretora |
| 5 | Classificar em Tipo de view (enum REGRA 3) |
path :id + componente "Detalhe…" → Detalhe |
| 6 | Definir Titulo DDD = nome da view (REGRA 4) |
Titulo DDD = Detalhe |
| 7 | Detectar Autenticacao (presença de <RequireAuth>/Clerk) e Patente minima (cruzamento RBAC) |
Logado + STANDARD |
| 8 | Listar rotas API consumidas (grep fetch( / api.) e cruzar com aba 5 |
/api/v1/bid-cambio/corretoras/:id |
| 9 | Listar modais/drawers abertos (grep <*Modal/<*Drawer) |
ModalEditarCorretora |
| 10 | Comparar Atual vs DDD: igual → OK; diferente → RENOMEAR |
Status DDD = RENOMEAR |
Exemplo completo
Página em produto/bid-cambio/client/src/pages/DetalheCorretora.tsx montada com <Route path="corretoras/:id" element={<DetalheCorretora/>}/> dentro do shell autenticado do produto, consumindo GET /api/v1/bid-cambio/corretoras/:id e abrindo ModalEditarCorretora:
| Coluna | Valor |
|---|---|
| Local | Produto |
| URL rota - Atual | corretoras/:id |
| URL rota - DDD | corretoras/:id_corretora |
| Explicação | Mostra o cadastro completo de uma corretora (dados, contatos, ranking) e permite editar. |
| Titulo exibido - Atual | (vazio) |
| Titulo exibido - DDD | Detalhe |
| Nome do arquivo | DetalheCorretora.tsx |
| Nome do arquivo - DDD | DetalheCorretora.tsx |
| Nome do componente | DetalheCorretora |
| Nome do componente - DDD | DetalheCorretora |
| Produto Gravity | bid-cambio |
| Area | (vazio — Local=Produto não exige Area) |
| Tipo de view | Detalhe |
| Breadcrumb | Corretoras › Detalhe |
| Autenticacao | Logado |
| Patente minima | STANDARD |
| Rotas de API consumidas | /api/v1/bid-cambio/corretoras/:id |
| Models lidos (heuristico) | Corretora |
| Modais/Drawers abertos | ModalEditarCorretora |
| E mobile-ready? | Parcial |
| Arquivo | produto/bid-cambio/client/src/pages/DetalheCorretora.tsx |
| Status DDD | RENOMEAR |
| Observacoes | URL Atual usa :id genérico — DDD exige :id_corretora. |
Achados a reportar:
- 🟡
RENOMEAR: param:id→:id_corretora(REGRAddd-nomenclatura) - 🟡
Titulo exibido - Atualvazio — front não renderiza<h1>; padronizar paraDetalhe(REGRA 4) - 🟢 rota
/api/v1/bid-cambio/corretoras/:idconsumida ainda usa o slugbid-cambio/no path — cruzar com aba 5 e marcar a rota comoRENOMEARlá também
Checklist de validação (aplicar a cada linha da aba 6. mapa-paginas)
-
Local∈ {Organizacao,Produto,Configurador,Marketplace}? -
URL rota - Atualliteral ao código (sem reescrita)? -
URL rota - DDDsegueddd-nomenclatura(param:id_<entidade>)? -
Tipo de view∈ {Layout,Lista,Detalhe,Dashboard,Kanban,Formulario,Configuração,Modal,Autenticação}? -
Titulo exibido - DDDé o nome da view, não o nome do produto? -
Nome do arquivo - DDD=Nome do componente - DDD+.tsx? -
Produto Gravitycorresponde a uma pasta real do monorepo? -
Autenticacao∈ {Logado,Publica} (nunca combinar)? -
Patente minimaem EN UPPER_SNAKE (REGRA 7)? Telas Admin =SUPER_ADMIN? - Cada rota em
Rotas de API consumidasexiste na aba5. mapa-rotas? - Cada modal em
Modais/Drawers abertosexiste na aba7. Modais? -
E mobile-ready?∈ {Sim,Parcial,Nao} (não deixar vazio)? -
Status DDD∈ {OK,RENOMEAR,DEPRECAR,NOVA}? - Não há página órfã (
.tsxsem linha) ou fantasma (linha sem.tsx)?
Limites duros
- ❌ Editar código (
.tsx,.ts, router) - ❌ Renomear arquivo no repositório (refactor é fora do escopo)
- ❌ Decidir patente mínima sem cruzar com RBAC do Configurador
- ❌ Inventar valor fora dos enums fechados (
Tipo de view,Local,Area,Status DDD) - ❌ Sobrescrever o
.xlsxoriginal - ✅ Auditar a aba
6. mapa-paginas - ✅ Propor preenchimento/correção de células após aprovação
Skills vizinhas (referência apenas)
lei/ddd-nomenclatura— nomes de URL, arquivo, componente, paramux/criacao-telas— padrão inviolável de criação/replicação de telaconvencao-tecnica/mapa-rotas— cruzamento da colunaRotas de API consumidasseguranca/permissoes— patentes (tipo_usuario)- Aba
7. Modais— cruzamento da colunaModais/Drawers abertos - Aba
9. Componentes Locais— destino de componentes que não são telas