Frontend completo (Etapas 11-18) e extensões de backend (Etapas 13 e 18)

Adiciona o frontend Next.js em frontend/ (setup, design system,
autenticação/tema, layout/navegação, área master, área tenant completa:
clientes, produtos, vendas, recebimentos, whatsapp, e-mail, alertas,
equipe e perfil). Estende o backend de forma aditiva e autorizada:
cookie httpOnly para refresh token (Etapa 13) e CRUD de equipe +
edição de perfil do tenant (Etapa 18, módulo src/modules/equipe/ novo
e PUT /tenant/perfil). Detalhes completos em Etapas/V2/*.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 09:41:13 -03:00
co-authored by Claude Sonnet 5
parent f9738e54da
commit 323912748f
179 changed files with 29312 additions and 22 deletions
+98
View File
@@ -0,0 +1,98 @@
# Etapa 19 — Polimento, Acessibilidade e Testes E2E
## Contexto do projeto
Etapa final do frontend do **SeConectai Vendas**. Todas as telas de
negócio das áreas master e tenant já estão implementadas (Etapas 11–18).
Esta etapa é uma auditoria completa e o fechamento com testes
automatizados, antes de considerar o frontend pronto para produção.
## Objetivo desta etapa
Revisão sistemática de responsividade e acessibilidade em todas as
telas, ajustes de performance, e uma suíte de testes E2E cobrindo os
fluxos críticos do sistema.
## Tarefas
1. **Auditoria de responsividade**
- Percorrer **todas** as rotas do mapa de rotas (master e tenant) nos
três breakpoints de referência (375px, 768px, 1280px) e registrar/
corrigir qualquer:
- overflow horizontal
- texto cortado ou sobreposto
- touch target menor que 44x44px em mobile
- tabela que não virou card corretamente
- modal que não se adaptou (tela cheia/bottom sheet) no mobile
- Prestar atenção especial às telas mais densas: `/app/vendas/nova`,
`/master/tenants/:id`, dashboards com gráficos.
2. **Auditoria de acessibilidade**
- Rodar um checador automatizado (ex: axe-core) em todas as rotas
principais e corrigir violações críticas e sérias.
- Verificar manualmente: navegação completa por teclado (Tab/Shift+Tab)
em pelo menos um fluxo completo por área (ex: criar um cliente
inteiro só com teclado), foco visível em 100% dos elementos
interativos, contraste de texto mínimo AA em todos os textos
(incluindo sobre a cor primária dinâmica do tenant).
- Confirmar que `prefers-reduced-motion` é respeitado em todas as
transições/animações implementadas ao longo do projeto.
- Textos alternativos em imagens relevantes (logo do tenant, ícones
que carregam significado além do decorativo).
3. **Estados de loading, erro e vazio**
- Conferir que **toda** listagem e todo formulário do sistema trata
corretamente: carregando (skeleton), erro de rede/API (mensagem
clara com ação de tentar novamente quando fizer sentido), e vazio
(EmptyState com ação sugerida). Nenhuma tela pode ficar em branco
silenciosamente em caso de erro.
4. **Performance**
- Rodar Lighthouse (ou equivalente) nas rotas principais, mobile e
desktop, e corrigir problemas de maior impacto (ex: imagens sem
otimização, JS não utilizado sendo carregado antecipadamente,
ausência de `next/image` onde aplicável).
- Garantir `loading="lazy"` em imagens fora da dobra inicial (ex:
logos em listagens longas, se aplicável).
5. **Testes E2E (Playwright ou Cypress — escolher um e justificar)**
- Fluxo 1: login master → criar tenant → confirmar que o
`tenant_admin` criado consegue logar.
- Fluxo 2: login tenant → cadastrar cliente → cadastrar produto →
criar venda com parcelas → marcar uma parcela como paga → conferir
que o dashboard financeiro reflete o pagamento.
- Fluxo 3: alteração de logo/cor no perfil do tenant e confirmação
visual de que o tema mudou na sidebar.
- Fluxo 4: tentativa de acesso não autenticado a rota protegida
(`/app/dashboard` sem login) redireciona corretamente para
`/login`.
- Rodar a suíte pelo menos no viewport mobile e no desktop (Playwright
permite configurar múltiplos projetos/viewports).
6. **Revisão final de conteúdo/copy**
- Passar por todos os textos de botão, mensagem de erro, empty state
e confirmação verificando: voz ativa, consistência de nome de ação
(o botão "Salvar" deve gerar uma confirmação que também fala em
"salvo", não "criado" ou outra variação), e nenhuma mensagem de
erro genérica onde a API já fornece detalhe suficiente para ser
específica.
## Critérios de aceite
- [ ] Nenhuma rota do mapa de rotas tem overflow horizontal em 375px,
768px ou 1280px
- [ ] Checador de acessibilidade automatizado sem violações críticas ou
sérias nas rotas principais
- [ ] Um fluxo completo (ex: cadastro de cliente) realizado do início ao
fim apenas com teclado, com foco sempre visível
- [ ] Contraste de texto validado sobre a cor primária dinâmica em pelo
menos 3 tenants de teste com cores diferentes (incluindo uma cor
clara, para forçar o ajuste automático de contraste)
- [ ] Todas as listagens e formulários tratam loading/erro/vazio
corretamente — testado forçando erro de rede manualmente
- [ ] Lighthouse mobile e desktop nas rotas principais sem alertas de
performance de alto impacto
- [ ] Suíte de testes E2E dos 4 fluxos descritos passa em mobile e
desktop
- [ ] Revisão de copy concluída, sem mensagens de erro genéricas onde a
API fornece detalhe específico