Relatório de Auditoria • 16 Fev 2026 • Atualizado 17 Fev 2026

Auditoria Tradeive

QA completo do sistema de e-Procurement — segurança, UX e design auditados por 4 agentes de IA
zoio.moskorz.com.br • OpenClaw • Claude Opus 4.6 + Gemini 2.5 Flash
Visão Geral

Resumo Executivo

83 issues encontradas, 20 verificadas via teste E2E direto, cobertura de 100% dos perfis.
Stack: Supabase (PostgreSQL + PostgREST) + Frontend HTML/JS estático no HostGator

83
Total Issues
1
Critical
35
High
29
Medium
20
Verificados
2.0
/ 10

Health Score do Sistema

Segurança
1/10
Funcionalidade
2/10
UX/Design
4/10
Dados
1.5/10

🔴 Bloqueadores Principais

  • ❌ Multi-tenancy quebrada — fornecedores veem dados de concorrentes
  • ❌ Botão "Enviar p/ Aprovação" não funciona — bloqueia fluxo
  • ❌ API Supabase retorna 400 — root cause de 5+ bugs
  • ❌ 2 perfis sem acesso às próprias páginas
  • ❌ 7 de 11 perfis com empresa mapeada errada

✅ O que funciona

  • ✅ Login e autenticação básica
  • ✅ Dashboard Admin TechCorp
  • ✅ Aprovação CC (etapa 2 do fluxo)
  • ✅ Layout visual e responsividade
  • ✅ comercial@moveispremium.demo — único fornecedor correto
Arquitetura

Stack Técnica

Contexto técnico do projeto para correção no Antigravity 2.0

🗄️

Backend — Supabase

PostgreSQL + PostgREST API + Row Level Security
supabase.co
🌐

Frontend — HTML/JS Estático

Páginas .html com JS vanilla, hospedadas em HostGator
hostgator • apache
🔐

Auth — Supabase Auth

Login por email/senha, perfis em tabela users
JWT + localStorage
📁

Deploy — HostGator cPanel

FTP para /public_html, sem SSR, sem Node.js
estático • sem build

📐 Estrutura de Páginas

  • /auth/login.html — Login
  • /admin/dashboard.html — Admin
  • /requester/dashboard.html — Solicitante
  • /approver/dashboard.html — Aprovador
  • /buyer/dashboard.html — Comprador
  • /supplier/dashboard.html — Fornecedor
  • /supplier/respond-quotation.html — Responder cotação

🔑 Implicações para Correção

  • ⚠️ Lógica de autorização é no frontend JS — sem middleware backend
  • ⚠️ Queries Supabase são feitas direto do browser via supabase-js
  • ⚠️ Multi-tenancy depende de RLS policies no Supabase — se não existirem, qualquer query retorna tudo
  • ⚠️ Mapeamento user→company vem da tabela profiles/users — dados seed errados
  • ⚠️ Sem build step — editar JS/HTML e subir via FTP
  • ✅ Supabase permite editar RLS policies pelo dashboard ou SQL
Equipe

Agentes de Auditoria

4 agentes IA especializados, cada um com foco diferente

👁️

Zoio

Coordenador • E2E Testing Direto • 29 tasks
Claude Opus 4.6
🛡️

Sentinel

QA & Security • RBAC • Fluxos • 29 tasks
Claude Sonnet 4.5
👾

Pixel

UX/UI Auditor • Dashboards • 35 tasks
Gemini 2.5 Flash
💎

Prism

Designer • Design System • 19 tasks
Gemini 2.5 Flash
Fluxo

Estado do Fluxo de Requisição

7 etapas do fluxo principal — apenas 2 funcionando corretamente

1
Rascunho → Enviar
2
Aprovação CC
3
Aguard. Compra
4
Cotação
5
Aprov. Final
6
Entregue
7
Concluído
Funciona Quebrado Bloqueado (depende de fix)

❌ Etapas Quebradas

  • Etapa 1: Botão "Enviar p/ Aprovação" — erros JS, nada acontece
  • Etapa 4: API card_items retorna 400 — cotação não carrega itens
  • Etapa 5: approver_final perfil sem acesso à dashboard

⏳ Etapas Não Testáveis

  • Etapa 6: Entrega — depende de cotação funcionar
  • Etapa 7: Conclusão — depende de todas as anteriores
  • Etapas 2-3: Aprovação CC e Aguardando Compra OK
Issues

Bugs Verificados

20 issues confirmadas via teste E2E direto pelo coordenador

🔥

Multi-tenancy quebrada entre fornecedores

admin@officestore e vendas@officestore veem dados de Tech Supplies. admin@moveispremium aparece como "TRADEIVE". Fornecedores acessam dados comerciais de concorrentes. Isolamento inexistente.

CRITICAL✅ VERIFICADOSentinel
Confirmado
⚠️

Vazamento de usuários entre empresas (/admin/users.html)

Admin da TechCorp vê usuários da AcmeCorp e admin da plataforma. Query sem filtro por company_id.

HIGH✅ VERIFICADOSentinel
Confirmado
🚫

Botão "Enviar para Aprovação" não funciona

Requisição preenchida, botão clicado, nada acontece. Permanece em RASCUNHO. Console mostra erros JS. Bloqueia todo o fluxo de requisição.

HIGH✅ VERIFICADOSentinel
Confirmado
🔒

Aprovador Final recebe "Acesso Negado"

aprovador.final@techcorp.demo → /approver/dashboard.html → "Acesso Negado". Perfil approver_final não reconhecido. Tela vaza admin@acmecorp (empresa errada).

HIGH✅ VERIFICADOSentinel
Confirmado
📦

Criar Cotação: 0 itens, R$ 0,00 — API card_items 400

Modal abre com 0 itens. Supabase retorna HTTP 400 para card_items. Botão fica desabilitado. Bloqueia fluxo de cotação.

HIGH✅ VERIFICADOSentinel
Confirmado
🗄️

API Supabase: card_history e card_items retornam 400

Root cause de múltiplos bugs. Queries mal formatadas no PostgREST. Afeta: contador aprovações, carregamento de itens, criação de cotações.

HIGH✅ VERIFICADOSentinel
Confirmado
🔒

quotation_resp não pode responder cotações

cotacoes@infotech.demo (perfil quotation_resp) recebe "Acesso Negado" em /supplier/respond-quotation.html. Função primária bloqueada.

HIGH✅ VERIFICADOSentinel
Confirmado
📋

Respond Cotação: catálogo vazio, endereço em branco

admin@infotech acessa respond-quotation mas itens não carregam. Endereço: "- /", CEP em branco.

HIGH✅ VERIFICADOSentinel
Confirmado
🏢

3 fornecedores mapeados como empresa errada

admin@officestore.demo → "Tech Supplies" | vendas@officestore.demo → "Tech Supplies" | admin@moveispremium.demo → "TRADEIVE" (plataforma)

HIGH✅ VERIFICADOSentinel
Confirmado

"undefined" propostas + URLs com id=undefined

Dashboard comprador mostra "undefined propostas recebidas". Links de cotação geram /cotacao/undefined.

HIGH✅ VERIFICADOPixel
Confirmado
💰

Todos os pedidos com R$ 0,00

Dashboard fornecedor mostra R$ 0,00 em todos os pedidos. Campo de valor não lido do response API.

HIGH✅ VERIFICADOPixel
Confirmado
🔢

Contador "Aprovadas Hoje" não atualiza

Permanece em 0 após aprovar requisição. Causado pelo card_history 400.

MEDIUM✅ VERIFICADO
Confirmado
🏷️

Status não traduzidos: in_preparation, completed, in_transit

Códigos técnicos exibidos em vez de PT-BR. Afeta todos os fornecedores.

MEDIUM✅ VERIFICADO
Confirmado
📊

Pedidos: dashboard mostra 2, listagem mostra 0

Queries diferentes retornando resultados inconsistentes.

MEDIUM✅ VERIFICADO
Confirmado

Performance: 4.5/5.0 com 0 avaliações (hardcoded)

Dados de performance são placeholder/hardcoded. Nunca substituídos por dados reais.

LOW✅ VERIFICADO
Confirmado
Cobertura

Perfis Testados

11 perfis, cobertura 100% — todos testados via login direto

PerfilLoginEmpresa ExibidaStatus
Admin TechCorp ✅ ⚠️ Vê usuários de outras empresas
Solicitante TechCorp ✅ ❌ Botão Enviar p/ Aprovação broken
Aprovador CC TechCorp ✅ ✅ Aprovação funciona
Aprovador Final AcmeCorp ❌ ❌ Acesso Negado
Comprador TechCorp ✅ ❌ Criar Cotação broken (0 itens)
Admin InfoTech Tech Supplies ❌ ⚠️ Empresa errada, catálogo vazio
Cotações InfoTech Tech Supplies ❌ ❌ Acesso Negado respond-quotation
Admin OfficeStore Tech Supplies ❌ ❌ Empresa errada, vê dados de outro
Vendas OfficeStore Tech Supplies ❌ ❌ Empresa errada
Admin Móveis Premium TRADEIVE ❌ ❌ Mapeado como plataforma (!)
Comercial Móveis Móveis Premium ✅ ⚠️ R$ 0,00, status não traduzidos
O que funciona bem

Pontos Positivos — UX

12 observações positivas do Pixel — manter e expandir

Dashboard Admin — boa hierarquia visual e informações relevantes

Cards organizados, métricas claras, layout profissional.

POSITIVOPixel

Solicitante — CTA "Nova Requisição" bem posicionado + Card Urgentes com destaque efetivo

Call-to-action principal em posição destaque. Cards urgentes com visual que chama atenção.

POSITIVOPixel

Comprador — Pipeline bem estruturado + Estados vazios com mensagens positivas

Fluxo visual claro do pipeline de compras. Mensagens amigáveis quando não há dados.

POSITIVOPixel

Fornecedor — Cards de métricas claros, gamificação em Vitórias, CTA Responder destacado

Métricas objetivas, widget de vitórias gamificado, emojis humanizam estados vazios.

POSITIVOPixel

Mobile — Layout adapta bem em 390px + Consistência visual entre perfis mantida

Responsividade funcional. Visual consistente independente do perfil logado.

POSITIVOPixel
Design System

Propostas de Melhoria — Prism

19 tasks de design system para evolução futura (após correção de bugs)

🔴 Alta Prioridade (7)

  • 📐 Análise geral de design system e consistência
  • 📖 Estabelecer design system formal e documentado
  • 🔤 Padronizar hierarquia tipográfica
  • 🎨 Revisar paleta de cores e contraste (WCAG)
  • 📝 Otimizar componentes de formulário e inputs
  • 📱 Auditoria de responsividade mobile
  • 🧩 Criar biblioteca de componentes reutilizáveis

🟡 Média Prioridade (11)

  • 📏 Unificar sistema de espaçamento e grid
  • 🔘 Padronizar componentes de botão
  • 🃏 Padronizar componentes de card e containers
  • 📊 Melhorar componentes de tabela e lista
  • 🎯 Padronizar sistema de ícones
  • 🏷️ Implementar sistema de badges e tags
  • 📑 Melhorar sidebar e navegação lateral
  • 📈 Revisar dashboard e hierarquia de informação
  • 🔑 Otimizar página de login
  • 🔝 Melhorar topbar e header global
  • 🔄 Propostas de melhoria para fluxos principais

🔵 Baixa Prioridade (1)

  • ✨ Implementar micro-interações e transições
UX Backlog

Issues UX Pendentes — Pixel

13 issues de UX identificadas, aguardando correção

⚠️

Menu Requisições exibe link "Em Andamento" que Comprador não pode acessar

Link visível mas perfil comprador não tem permissão. UX confusa.

HIGHPixel
⚠️

Nomes de fornecedores genéricos no Top 10 ("Fornecedor 1, 2...")

Dashboard admin usa nomes placeholder. Deveria buscar nomes reais da tabela companies.

HIGHPixel
🔸

Login sem feedback visual + Menu lateral só com ícones + Estados vazios sem CTA

Falta spinner no login, labels no menu, e call-to-action nos estados vazios.

MEDIUMPixel
🔸

Solicitante: menu flyout aberto por padrão, badges "HOJE" sem contexto, ícones sem tooltip

Menu deveria iniciar fechado em mobile. Badges e ícones precisam de explicação.

MEDIUMPixel
🔸

Pedido PED-ACM-0104 sem título/nome do produto

Card do pedido aparece sem nome do produto. Campo não preenchido ou não propagado.

MEDIUMPixel
Correção

Prompts para Antigravity 2.0

7 prompts revisados — descrevem sintomas observados, não afirmam causas.
⚠️ v2: Corrigidos após validação do Antigravity que contestou causas assumidas na v1.

1
HIGH

Botão "Enviar para Aprovação" Não Funciona

Resolve: task-50664dd8 • BLOQUEADOR do fluxo
CONTEXTO: Sistema Tradeive — e-procurement com Supabase backend e frontend HTML/JS estático no HostGator. Sem framework — JS vanilla embutido nos arquivos .html, queries via supabase-js.

SINTOMA OBSERVADO (testado manualmente):
- Login como solicitante@techcorp.demo (senha Demo@2026!)
- Criar nova requisição, preencher todos os campos obrigatórios
- Clicar em "Enviar para Aprovação"
- NADA acontece. A requisição permanece em status RASCUNHO
- O console do browser mostra erros JavaScript

FLUXO ESPERADO: Botão deveria mudar o status da requisição para "Aguardando Aprovação CC" via update no Supabase.

INVESTIGAR:
1. Abrir /requester/ e encontrar o arquivo com o formulário de requisição
2. Localizar o event handler do botão "Enviar para Aprovação"
3. Verificar quais erros JS aparecem no console (podem ser de sintaxe, variável undefined, ou chamada API falhando)
4. Se é uma chamada Supabase: testar a query no SQL Editor do Supabase Dashboard
5. Corrigir o que estiver impedindo a execução
2
CRITICAL

Multi-Tenancy Quebrada (Segurança Crítica)

Resolve: task-a048cd92, task-0e28314a + 5 tasks mapeamento • VULNERABILIDADE
CONTEXTO: Supabase + frontend estático. Multi-tenancy: cada empresa deveria ver apenas seus dados.

SINTOMAS OBSERVADOS (todos testados manualmente com login direto):

1. ADMIN VÊ USUÁRIOS DE OUTRA EMPRESA:
   - Login: admin@techcorp.demo → /admin/users.html
   - A lista mostra usuários da AcmeCorp e da plataforma (platform@tradeive.demo)
   - Deveria mostrar apenas usuários da TechCorp

2. FORNECEDORES MAPEADOS PARA EMPRESA ERRADA:
   - admin@officestore.demo → header mostra "Tech Supplies" (deveria ser Office Store)
   - vendas@officestore.demo → header mostra "Tech Supplies" (deveria ser Office Store)
   - admin@moveispremium.demo → header mostra "TRADEIVE" (deveria ser Móveis Premium)
   - admin@infotech.demo → "Tech Supplies" (deveria ser InfoTech Soluções)
   - ÚNICO CORRETO: comercial@moveispremium.demo → "Móveis Premium Ltda" ✅

3. TELA DE ACESSO NEGADO VAZA ADMIN ERRADO:
   - Login: aprovador.final@techcorp.demo → tela mostra "Contate admin@acmecorp.com.br"

INVESTIGAR:
1. Verificar tabela profiles/users no Supabase — qual é o company_id de cada usuário demo?
2. Corrigir os company_id errados via SQL UPDATE
3. Verificar se existem RLS policies — se não, criar
4. Na listagem de /admin/users.html: a query filtra por company_id?
5. Na tela de Acesso Negado: de onde vem o email do admin mostrado?
3
HIGH

Perfis Sem Acesso às Próprias Páginas

Resolve: task-0e28314a, task-b5e11c99 • 2 perfis inoperantes
CONTEXTO: Tradeive usa perfis para controlar acesso. Cada página .html verifica o perfil do usuário logado via JS e redireciona se não autorizado. Auth é Supabase Auth com JWT.

SINTOMAS OBSERVADOS:

1. APROVADOR FINAL — SEM DASHBOARD:
   - Login: aprovador.final@techcorp.demo (senha Demo@2026!)
   - Redireciona para /approver/dashboard.html → "Acesso Negado — perfil approver_final"
   - O aprovador final deveria poder aprovar requisições

2. QUOTATION_RESP — NÃO PODE RESPONDER COTAÇÕES:
   - Login: cotacoes@infotech.demo (senha Demo@2026!)
   - /supplier/respond-quotation.html → "Acesso Negado"
   - Este perfil existe ESPECIFICAMENTE para responder cotações

INVESTIGAR:
1. No JS de /approver/dashboard.html: qual é a lista de perfis permitidos? Adicionar 'approver_final'
2. No JS de /supplier/respond-quotation.html: adicionar 'quotation_resp'
3. Buscar padrão: if (!allowedProfiles.includes(userProfile)) redirectToAccessDenied()
4. Verificar se há OUTROS perfis bloqueados de suas páginas
4
HIGH

Criar Cotação Abre com 0 Itens

Resolve: task-a0aee632, task-28852257 • BLOQUEADOR etapa 4
CONTEXTO: Supabase + frontend estático. Fluxo: Comprador vê requisição aprovada → clica "Criar Cotação" → modal abre com itens → seleciona fornecedores → cria cotação.

SINTOMAS OBSERVADOS:
- Login: comprador@techcorp.demo (senha Demo@2026!)
- Dashboard mostra SOL-2026-00042 em "Prontas para Cotação"
- Clico em "Criar Cotação" → modal abre com "0 itens" e "R$ 0,00"
- Os itens (Papel Sulfite A4 x20, Pasta Plástica A4 x1) NÃO aparecem
- Botão criar fica desabilitado

OBSERVAÇÃO ADICIONAL:
- Contador "Aprovadas Hoje" no dashboard aprovador CC mostra 0 após aprovar

⚠️ NOTA: A query usa select('*') — sintaxe correta. O problema NÃO é sintaxe.

INVESTIGAR:
1. Como o card_id é obtido? Vem da URL? Está correto?
2. Testar no SQL Editor: SELECT * FROM card_items WHERE card_id = '(id real)'
3. Pode ser que a requisição não tenha card_items no banco (seed data)
4. Contador: verificar se há registros em card_history para o dia atual
5. Possível problema de timezone (UTC vs local) no filtro de data
5
HIGH

Dados Undefined, R$ 0,00 e Status Não Traduzidos

Resolve: 10 tasks • Bugs visuais em múltiplos dashboards
CONTEXTO: Frontend JS vanilla renderiza dados do Supabase com template literals. Dados vêm da API em JSON.

SINTOMAS OBSERVADOS (todos vistos diretamente na tela):

1. "UNDEFINED" PROPOSTAS:
   - Login: comprador@techcorp.demo → dashboard mostra "undefined propostas recebidas"
   - Links de cotação geram URLs /cotacao/undefined

2. PEDIDOS COM R$ 0,00:
   - Login: qualquer fornecedor → Pedidos Recentes todos R$ 0,00
   - Exemplos: PED-TRACE-001, PED-2026-00210, PED-ACM-0104

3. STATUS NÃO TRADUZIDOS:
   - Pedidos mostram: "in_preparation", "completed", "in_transit"

4. PEDIDO SEM TÍTULO:
   - PED-ACM-0104 aparece sem nome do produto

INVESTIGAR:
1. Buscar no JS onde "propostas" é renderizado — a variável é populada do response?
2. Verificar qual campo do response tem o valor do pedido (total_value? amount? total?)
3. Criar mapa de tradução no JS para status
4. Verificar campo title no banco para PED-ACM-0104
6
MEDIUM

Fornecedor: Catálogo Vazio e Dados Inconsistentes

Resolve: 5 tasks • Bugs de dados do fornecedor
CONTEXTO: Supabase backend com tabelas de fornecedores, pedidos, cotações, performance.

SINTOMAS OBSERVADOS:

1. CATÁLOGO VAZIO:
   - Login: admin@infotech.demo → /supplier/respond-quotation.html
   - Mostra "Catálogo vazio" — itens da cotação não carregam
   - Endereço de entrega: "- /" com CEP em branco

2. CONTAGEM INCONSISTENTE:
   - Dashboard mostra "2 Pedidos Ativos"
   - Página /supplier/orders.html mostra 0 pedidos

3. PERFORMANCE SUSPEITA:
   - Dashboard mostra 4.5/5.0 com "0 avaliações"
   - Pode ser hardcoded no JS ou score real com count errado

INVESTIGAR:
1. De onde vêm os itens em respond-quotation? O quotation_id na URL existe?
2. O campo delivery_address é propagado na criação da cotação?
3. Comparar query do dashboard vs query da listagem de pedidos
4. O 4.5 vem do banco ou está hardcoded no HTML/JS?
7
LOW

UX Polish (Após Correção de Bugs)

Resolve: 7 tasks • Melhorias visuais e usabilidade
CONTEXTO: Frontend HTML/JS estático. Melhorias visuais e de usabilidade — menor prioridade, executar DEPOIS dos prompts 1-6.

SINTOMAS OBSERVADOS:
1. LOGIN SEM FEEDBACK: clicar em "Entrar" não mostra loading/spinner — usuário não sabe se clicou
2. MENU LATERAL: apenas ícones sem labels de texto — difícil de entender pra novos usuários
3. ESTADOS VAZIOS: cards vazios sem call-to-action (ex: "Nenhuma requisição → Criar nova")
4. NOMES GENÉRICOS: Dashboard admin mostra "Fornecedor 1, Fornecedor 2" no Top 10
5. MENU FLYOUT: dashboard solicitante abre com menu expandido — deveria iniciar fechado em mobile
6. BADGES: "HOJE" repetidos sem contexto explicativo
7. TOOLTIPS: ícones de status sem tooltip no hover
8. LINK INACESSÍVEL: Menu "Requisições → Em Andamento" visível pro comprador mas sem permissão de acesso

AÇÃO: Ajustes de CSS e JS simples nos respectivos arquivos HTML. Sem mudança de lógica de negócio.
Nova Auditoria • 17 Fev 2026

Auditoria Perfil Solicitante

27 issues encontradas via teste direto como solicitante@techcorp.demo — navegação completa, RBAC, fluxos, UX

3
Críticos
7
Médios
8
UX/UI
4
Fluxo
5
Melhorias
🔓

Solicitante acessa Dashboard do Comprador (RBAC Quebrado)

Navegar para /buyer/dashboard.html carrega o dashboard COMPLETO do comprador com 22 requisições, pipeline de compras, botões "Criar Cotação" e links "Consolidar". Solicitante pode operar como Comprador.

CRITICAL✅ VERIFICADOZoio
NOVO
🔥

Tela "Acesso Negado" vaza admins de outras empresas

Ao acessar URLs restritas (/admin/users.html, /approver/, /supplier/), a tela mostra admin@acmecorp.com.br e superadmin@demo.com como administradores — emails de empresas concorrentes vazam.

CRITICAL✅ VERIFICADOZoio
NOVO
💀

Cotações 100% quebradas — TODOS os links com id=undefined

No dashboard comprador (acessado indevidamente), todas as 16 cotações em andamento têm request-detail.html?id=undefined e mostram "undefined propostas recebidas". Funcionalidade core inacessível.

CRITICAL✅ VERIFICADOZoio
NOVO
💰

Pedidos e histórico com R$ 0,00 e 0 itens

"Meus Pedidos" mostra PED-2026-00208 e PED-2026-00207 com R$ 0,00. Histórico mostra requisições concluídas com R$ 0,00 e 0 itens. Valores financeiros completamente incorretos.

HIGH✅ VERIFICADOZoio
NOVO
👤

Nome do fornecedor aparece como UUID truncado

PED-ACM-0104 mostra "Fornecedor d9cceb37" em vez do nome real. Join com tabela de fornecedores faltando.

HIGH✅ VERIFICADOZoio
NOVO
🚫

"Enviar para Aprovação" sem feedback com campos vazios

Clicar "Enviar para Aprovação" com formulário vazio não mostra nenhum erro, nenhum highlight, nenhum toast. Usuário não sabe o que preencher.

HIGH✅ VERIFICADOZoio
NOVO
🗃️

Centro de custo "RR - dsdsg" — dado de teste no dropdown

Opção "RR - dsdsg" aparece nos dropdowns de Centro de Custo do dashboard e do formulário. Dado de teste/lixo visível para o usuário final.

HIGH✅ VERIFICADOZoio
NOVO
📋

Contagem de contratos inconsistente + contrato sem fornecedor

Card mostra "1 Ativo" mas lista 4 contratos. CTR-2026-61990 de R$ 15.000 aparece como "Sem fornecedor".

MEDIUM✅ VERIFICADOZoio
NOVO
🔄

Requisição em "Rascunho" com 9+ mensagens de chat do aprovador

SOL-2026-00039 mostra status "Rascunho" mas tem chat ativo com mensagens do aprovador ("não sei se vou aprovar isso"). Status deveria ser "Devolvida para Revisão".

MEDIUM✅ VERIFICADOZoio
NOVO
📄

Requisições concluídas com 0 itens passaram por todo o fluxo

SOL-2026-00102, 00103, 00104, 00105, 00106 — todas com status "Compra" ou "Concluído" e "0 itens". Como uma requisição sem itens chegou até o final?

MEDIUM✅ VERIFICADOZoio
NOVO
🔗

Central de Ajuda mostra links admin para solicitante

"Links Rápidos" incluem Config. Workflow, Gerenciar Usuários e Fornecedores — todos redirecionam para "Acesso Negado". Deveria renderizar condicionalmente.

MEDIUM✅ VERIFICADOZoio
NOVO

🔐 Mapa RBAC — Perfil Solicitante

URL TestadaResultadoCorreto?
/admin/dashboard.htmlRedirect → requester
/admin/users.htmlAcesso Negado (vaza emails)⚠️
/approver/dashboard.htmlAcesso Negado (vaza emails)⚠️
/buyer/dashboard.htmlACESSO TOTAL ❌
/supplier/dashboard.htmlAcesso Negado (vaza emails)⚠️
/requester/*OK
/shared/*OK