Estoque
Homologação da rota /estoque: resumo global, abas Lotes de Estoque e Saldos por Produto, busca e filtros. Inclui cenários desejados mesmo que ainda não estejam implementados — para guiar pendências.
Cabeçalho e permissões
- Título e subtítulo — “Estoque” e texto de controlo de saldos/lotes.
- Permissão — Acesso apenas com
StockView(ou política equivalente na rota). - Exportar — Gera e transfere ficheiro (CSV/Excel/PDF) com lotes e/ou saldos conforme aba e filtros ativos.
Hoje: botão sem ação ligada. (pendência de implementação)
Resumo (quatro cartões)
- Total Produtos — Valor de
/api/stock/summary(productsTotal) coerente com o negócio. - Quantidade Total —
totalQuantityformatada em pt-BR; “—” se nulo. - Total Lotes —
lotsTotaldo resumo. - Baixo Estoque — Contagem de produtos abaixo do mínimo em âmbito global (ou regra documentada).
Hoje: conta apenas linhas da página atual de saldos (balancesData.items). Homologar se aceitável ou corrigir para total real. (pendência / revisão) - Loading — Skeletons nos cartões enquanto
summaryLoading.
Abas Lotes / Saldos
- Alternância — “Lotes de Estoque” e “Saldos por Produto” mostram conteúdo correto sem perder filtros de texto partilhados.
- Busca partilhada — Campo “Buscar por produto ou lote…” repõe página de lotes e de saldos a 1 e envia
SearchTermàs duas APIs. - Filtro por status — Opções: todos, disponível, reservado, vencendo, quarentena, adequado, baixo — aplicam-se ao conjunto exibido conforme regra (ver nota abaixo).
- Filtro por produto — Lista derivada dos nomes de produto nos lotes da página atual; filtra a tabela de lotes por
productName.
Limitação: produtos só aparecem se estiverem na página corrente de lotes. (pendência / melhoria — catálogo completo) - Filtros no servidor vs cliente — Idealmente filtros de status/produto refletem dados paginados do servidor;
hoje os filtros de status (e produto nos lotes) aplicam-se só aos itens já carregados na página — pode haver lotes noutras páginas que cumprem o filtro mas não aparecem. (pendência de implementação — filtros na API ou agregação)
Aba Lotes de Estoque
- Carregamento / erro — Spinner; mensagem “Erro ao carregar lotes.” em falha.
- Colunas — Produto, Lote, Quantidade (pt-BR), datas produção/validade, status (badge com cores por
expirationStatus), localização, ações. - Localização — Mostra armazém/local real do lote.
Hoje: sempre “—”. (pendência de implementação) - Ver detalhe (ícone olho) — Navega para detalhe do lote, produto ou movimento associado.
Hoje: botão semLink/onClick. (pendência de implementação) - Vazio — “Nenhum lote encontrado.” quando aplicável.
- Paginação — Controlo alinhado a
lotesTotalePAGE_SIZE(10).
Aba Saldos por Produto
- Carregamento / erro — Spinner; “Erro ao carregar saldos.”
- Colunas — Produto, quantidade total, mínimo, status (adequado/baixo via
deriveBalanceStatus), ações. - Ver detalhe — Liga a ficha de produto, lista de lotes desse produto ou drill-down de stock.
Hoje: botão sem ação. (pendência de implementação) - Filtro “baixo/adequado” — Para saldos, status deriva de
balancevsminStock; combina com filtro global de status. - Vazio — “Nenhum saldo encontrado.”
- Paginação — Alinhada a
saldosTotalePAGE_SIZE(10).
APIs e consistência
-
/api/stock/summary— Campos preenchidos e alinhados aos cartões. -
/api/stock/lots— Paginação e pesquisa corretas. -
/api/stock/product-balances— Paginação e pesquisa corretas. - Sincronização — Após movimentações externas, atualizar dados (refetch, invalidação ou polling se existir).
Regressão
- Valores grandes —
toLocaleStringsem quebrar layout. - Datas — Fuso e formato pt-BR.
- Dark mode — Classes de cor dos badges de status legíveis em tema claro/escuro.
Registe aqui decisões quando “Baixo estoque” ou filtros forem corrigidos para âmbito global.