Pular para o conteúdo principal

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 /produtos para acabado/semi-acabado e a /materias-primas para 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 productId carregam 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 DELETEDELETE /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.