Tema
Plano de Testes E2E — Carteira Funcional
Sessão de testes iniciada em 2026-06-30. Ambiente local (backend jar + infra Docker + emulador + backoffice web). Marcar cada caso: ✅ passou · ❌ falhou (abrir AJxx) · ⚠️ passou com ressalva · ⬜ não executado.
Ambiente & credenciais
| Item | Valor |
|---|---|
| Backoffice | http://localhost:8080 · superadmin@aquila.local / DevSuperAdmin!2026 |
| App mobile | emulador Medium_Phone_API_35 · profissional CPF 19119119100 |
| OTP | chega por e-mail no Mailpit http://localhost:8025 |
| Org de teste | Conselho Dev (selecionar no switcher do backoffice) |
| Dados atuais | 8 solicitações: 000001 ISSUED, 000002 IN_ANALYSIS, 000003–000008 PENDING |
Gaps conhecidos (esperados — não tratar como bug novo)
- AJ04 — app não mostra nome/identidade do usuário (home só "Bem-vindo!").
- AJ05 —
person_biographicvazia → carteira emitida sai sem nome. - AJ06 — endpoints self-service ainda filtram por org, não por personId (F35).
Bloco A — Autenticação (mobile)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| A1 | Login OTP feliz | CPF 19119119100 → Continuar → pegar código no Mailpit → Entrar | Cai na home "Bem-vindo!" | ⬜ |
| A2 | OTP inválido (AJ02) | Na tela de código, digitar 6 dígitos errados → Entrar | Mensagem amigável "Código inválido." (não "Unexpected Error") | ⬜ |
| A3 | Reenviar código | Aguardar o contador e tocar "Reenviar código" → usar o novo | Novo e-mail no Mailpit; login com o novo código funciona | ⬜ |
| A4 | Logout | Home → ícone sair (topo dir.) → Sair | Volta à tela de CPF | ⬜ |
Bloco B — Nova solicitação / onboarding (mobile)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| B1 | Iniciar novo cadastro | Home → "Iniciar novo cadastro" → seguir o fluxo (serviço, documentos, foto, termos) | Solicitação criada; protocolo novo 2026-CONSELHO-DEV-0000NN | ⬜ |
| B2 | Upload de documentos | No fluxo, anexar documento(s) | Documento aceito (PDF/JPG/PNG ≤10MB) | ⬜ |
| B3 | Captura de foto | Etapa de foto biométrica | Foto capturada e enviada | ⬜ |
| B4 | Aparece no backoffice | Após submeter, ir ao backoffice → Solicitações | A nova solicitação aparece como PENDING | ⬜ |
Bloco C — Esteira do analista (backoffice)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| C1 | Listar (AJ03) | Backoffice → trocar org p/ Conselho Dev → Solicitações | Lista as solicitações da org (8+) | ⬜ |
| C2 | Filtrar | Usar filtros (status PENDING, busca por protocolo/CPF) | Lista filtra corretamente | ⬜ |
| C3 | Assumir | Numa PENDING → "Assumir" (confirmar) | Status vai p/ IN_ANALYSIS; analista atribuído | ⬜ |
| C4 | Detalhe | Abrir o detalhe da solicitação | Mostra dados, documentos (link assinado) e timeline | ⬜ |
| C5 | Solicitar correção | No detalhe → "Solicitar correção" (motivo) | Status volta p/ PENDING/correção; evento na timeline | ⬜ |
| C6 | Rejeitar | Em outra solicitação → Rejeitar (motivo ≥20 chars + categoria) | Status REJECTED; validação de motivo funciona | ⬜ |
| C7 | Aprovar | Em uma IN_ANALYSIS → Aprovar | Status APPROVED; habilita emissão | ⬜ |
Bloco D — Emissão da carteira (backoffice)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| D1 | Emitir | Numa APPROVED → "Emitir carteira" (UB06) | Carteira gerada; status ISSUED; abre PDF | ⬜ |
| D2 | Conteúdo do PDF | Abrir o PDF da carteira | Logo/cores do Conselho, QR Code, dados. ⚠️ nome vazio (AJ05) | ⬜ |
Bloco E — Carteira & acompanhamento (mobile)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| E1 | Minhas solicitações | Home → "Minhas solicitações" | Lista com status atualizado (reflete C/D) | ⬜ |
| E2 | Detalhe/acompanhamento | Abrir uma solicitação | Mostra status e histórico | ⬜ |
| E3 | Minha carteira | Home → "Minha carteira" | Exibe a carteira emitida (000001) com QR | ⬜ |
Bloco F — Validação pública do QR (sem login)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| F1 | Validar carteira ativa | Ler o qr_token da carteira ISSUED → GET /api/public/v1/cards/validate/{token} | 200 com nome*, registro, categoria, Conselho, situação ATIVA | ⬜ |
| F2 | Token inválido | Validar token inexistente | 404 (sem vazar dados) | ⬜ |
Bloco G — Gestão (backoffice)
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| G1 | Carteiras (UB07) | Menu → Carteiras | Lista carteiras da org; filtros | ⬜ |
| G2 | Cancelar / Reemitir | Numa carteira ACTIVE → Cancelar; depois Reemitir | Cancela (CANCELLED) / reemite (nova ACTIVE) | ⬜ |
| G3 | Export CSV | Carteiras → Exportar | CSV baixa sem CPF/foto (LGPD) | ⬜ |
| G4 | Profissionais (UB08) | Menu → Profissionais | Lista profissionais; perfil com carteiras/solicitações | ⬜ |
| G5 | Relatórios (UB09) | Menu → Relatórios | Totais + exports (gráficos são placeholder/RPT01) | ⬜ |
| G6 | Dashboard (UB02) | Menu → Dashboard | KPIs refletem os dados reais (não mais 0) | ⬜ |
Bloco H — Negativos / segurança / multi-tenant
| ID | Caso | Passos | Esperado | St |
|---|---|---|---|---|
| H1 | Isolamento de org | Backoffice → trocar p/ CREA-PR/CREA-SP → Solicitações | NÃO mostra dados da Conselho Dev (vazio ou só os da org) | ⬜ |
| H2 | Sem org → guarda | Visão da Plataforma (sem org) → tentar rota /carteira/... | Redireciona p/ seleção de org | ⬜ |
| H3 | API sem token | GET /api/v1/... protegido sem Bearer | 401 (F27 ligado) | ⬜ |
| H4 | API token de outra org | (avançado) usar token e tentar dados de outra org | 403/empty — RLS bloqueia | ⬜ |
Ordem sugerida (narrativa E2E)
A1 → B1..B4 → C3/C4 → C7 → D1/D2 → E1/E3 → F1 = um ciclo completo "profissional cadastra → analista aprova → emite → profissional vê a carteira → QR valida". Depois varrer C5/C6 (correção/rejeição), G* (gestão) e H* (negativos).