Produtos
Homologação do módulo Produtos: listagem (/produtos), cadastro e edição (/produtos/novo, /produtos/:id/editar), detalhe (/produtos/:id) e fluxos associados (fórmulas, lotes no detalhe, etc.). Marque cada item ao validar.
Listagem (/produtos)
- Carregamento inicial da lista — A página pede a API com paginação e exibe cartões com nome, código, tipo, descrição resumida, status, custo unitário e unidade; estado de carregamento não quebra o layout.
- Lista vazia com filtros — Com filtros que não retornam resultados, aparece a mensagem adequada (“Nenhum produto encontrado…”).
- Erro ao listar — Em falha da API, o utilizador vê mensagem de erro e pode recuperar (retry implícito ao alterar filtros ou recarregar).
- Apenas acabados e semi-acabados — Em “Todas as categorias”, a listagem não inclui matéria-prima nem embalagem; só tipos de produto acabado e semi-acabado.
- Filtro por categoria — Ao escolher “Produto acabado” ou “Semi-acabado”, a lista reflete apenas esse
productTypeId. - Filtro por status — “Todos”, Ativo, Inativo, Em desenvolvimento e Descontinuado aplicam o filtro correto na API e reiniciam a página para 1.
- Cartões de resumo (métricas rápidas) — Total, ativos, em desenvolvimento e “Receita Total” (N/D) exibem valores coerentes com a página atual (nota: contagens por status na página refletem o conjunto carregado, não necessariamente o total global).
Busca
- Busca por texto — O campo “Buscar por nome, código, categoria…” envia o termo à API, reinicia a página e filtra resultados de forma consistente.
- Busca vazia / limpar — Remover o texto restaura a listagem sem termo de busca.
- Combinação busca + filtros — Status, categoria e busca funcionam em conjunto sem comportamento inesperado.
Paginação
- Navegação entre páginas — Anterior, seguinte e ir para página atualizam a lista e o resumo “mostrando X–Y de Z”.
- Tamanho de página — Com muitos registos, o tamanho fixo da página (ex.: 50) é respeitado pela API e pela UI.
Aba Analytics e métricas
- Alternância Lista / Analytics — As duas abas mantêm o estado da lista ao voltar (quando aplicável) e não geram erros.
- Produtos por categoria — Barras e contagens usam os itens da página atual e percentagens somam sentido visual.
- Top produtos por custo — Os cinco maiores custos unitários na página atual aparecem ordenados corretamente.
- Por status — Contagens por status na aba batem com os itens carregados na página atual.
Novo produto — cadastro (/produtos/novo)
- Tipo inicial via query —
?tipo=materia-prima(fluxo vindo de matérias-primas) pré-seleciona tipo matéria-prima; sem query, assume tipo padrão de produto acabado. - Abas do formulário — Básico, Comercial, Técnico, Estoque e (quando aplicável) Qualidade aparecem e validam campos esperados.
- Qualidade condicional — Para tipos que exibem análises (ex.: matéria-prima, embalagem), a aba Qualidade e seleção de tipos de análise funcionam; para outros tipos, a aba não é exibida indevidamente.
- Validação e mensagens — Campos obrigatórios e formatos inválidos bloqueiam submissão e mostram feedback.
- Criação com sucesso — Após POST, o redirecionamento leva a
/produtospara acabado/semi-acabado e a/materias-primaspara matéria-prima (e outros tipos fora desses dois). - Erro da API no create — Resposta de erro exibe toast ou mensagem compreensível sem perder dados já preenchidos quando fizer sentido.
Edição (/produtos/:id/editar)
- Hidratação do formulário — Dados do produto preenchem todas as abas de forma correta.
- Tipo de produto bloqueado — Em modo edição, o tipo não pode ser alterado na UI e o PUT não envia mudança de tipo; a API rejeita alteração explícita de tipo com erro claro.
- Gravação com sucesso — Após PUT, navega para
/produtos/:id(detalhe), não para listagens genéricas inconsistentes. - Erro ao gravar — Falhas de validação ou conflitos são tratadas na UI.
Detalhe do produto (/produtos/:id)
- Cabeçalho e dados gerais — Nome, código, categoria, unidade, preços, dimensões e textos vazios mostram “—” quando aplicável.
- Produto vs matéria-prima — Título e rota “Voltar”: produto acabado/semi →
/produtos; matéria-prima →/materias-primas. - Produto inexistente — ID inválido mostra “não encontrado” e voltar para
/produtos. - Ligação para edição — Botão editar leva a
/produtos/:id/editar.
Aba Fórmulas (detalhe do produto)
- Listagem de fórmulas — Lista versões, código, data, estado ativo/inativo e destaque da fórmula ativa.
- Lista vazia — Mensagem quando não há fórmulas.
- Nova fórmula — Botão leva a
/formulas/novo?produto={id}com contexto do produto. - Editar fórmula — Ligação para
/formulas/:id?produto={id}abre o cadastro correto. - Visualizar / duplicar — Comportamento dos botões (Eye, Copy) conforme implementação: ação ou placeholder documentado.
- Erro ao carregar fórmulas — Mensagem de erro tratada na aba.
Cadastro de fórmula (/formulas/novo, /formulas/:id)
- Criar BOM — Inclusão de itens, quantidades e gravação criam ou atualizam fórmula conforme regras de negócio.
- Edição de fórmula existente — Alterações persistem e refletem na aba Fórmulas do produto.
- Query
produto— Retorno/navegação após salvar mantém coerência com o produto de origem quando usado.
Aba Lotes em Estoque (detalhe do produto)
- Tabela de lotes — Colunas (lote, quantidade, localização, validade, status) e dados da API.
- Estado de validade — Classificação Válido / Próximo ao vencimento / Vencido / Sem validade conforme datas.
- Lista vazia — Comportamento quando não há lotes.
- Ver detalhe do lote — Ação de ver navega ou abre o fluxo esperado.
- Erro ao carregar lotes — Mensagem na aba.
Aba Ordens de Produção
- Listagem filtrada por produto — Ordens relacionadas ao
productIdcarregam e paginam/filtram se existir. - Estados vazios e erro — UI para sem dados e para falha de API.
Aba Métricas (produto)
- Indicadores — Gráficos ou números exibem dados do produto sem erro de consola.
- Períodos ou filtros — Se existirem, atualizam os dados corretamente.
Aba Roteiros
- Placeholder — Mensagem “em desenvolvimento” exibida sem quebrar o detalhe do produto.
Remoção de produto
- API DELETE —
DELETE /api/products/{id}remove ou responde conforme regra (ex.: bloqueio se houver dependências); testar com Postman/Swagger se a UI ainda não expõe o botão. - UI (se existir) — Confirmação, permissão e atualização da lista após exclusão.
Permissões e segurança
- Utilizador sem permissão de stock — Não acede a
/produtos(guard) ou vê negação de acesso. - Sessão expirada — Comportamento ao chamar API de produtos com token inválido.
Regressão e dados
- Produtos com caracteres especiais — Nome/código com acentos e símbolos gravam e listam corretamente.
- Valores monetários e decimais — Formatação pt-BR na lista e no detalhe.
Atualize este documento quando novas ações forem adicionadas à UI.