Pular para o conteúdo principal

Linhas de produção

Homologação da rota /linhas-producao: cadastro via diálogo Nova Linha, listagem em tabela, resumo por status e alteração de status por linha. Marque cada item ao validar.


Diálogo de cadastro (“Cadastrar Nova Linha”)

  • Abrir o diálogo — O botão “Nova Linha” / “Linha” (mobile) abre o modal com título “Cadastrar Nova Linha” e o formulário visível.
  • Fechar sem gravar — “Cancelar” fecha o diálogo; fechar pelo overlay ou ESC (comportamento do Dialog) não perde dados de forma inesperada ao reabrir (estado reposto ou mantido conforme implementação).
  • Nome da linha — obrigatório — Campo vazio impede submissão (validação HTML required); preenchimento válido permite enviar.
  • Código — obrigatório — Mesma regra que o nome; código único ou regras de negócio da API (duplicado, formato) retornam erro tratado na UI.
  • Descrição opcional — Pode ficar vazio; envio com description omitida ou vazia conforme contrato (undefined/null aceite pela API).
  • Status inicial — O select lista todos os estados: Disponível, Ativo, Ocupada, Manutenção, Inativo, Parada; o valor escolhido é enviado em statusId no POST.
  • Valor padrão do status — Ao abrir novo cadastro, o status inicial padrão é Disponível (5), salvo alteração pelo utilizador.
  • Estado do botão Cadastrar — Durante o pedido (isPending), o botão mostra “Cadastrando…” e fica desabilitado, evitando duplo envio.
  • Sucesso no cadastro — Toast de sucesso com título e menção à linha; diálogo fecha; campos do formulário limpam para novo cadastro; status volta ao padrão Disponível.
  • Erro no cadastro — Toast destrutivo “Erro ao cadastrar”; diálogo permanece aberto para correção (quando aplicável).
  • Invalidação de cache — Após sucesso, a lista de linhas e o resumo por status atualizam sem recarregar a página inteira.

Listagem e tabela (“Linhas Cadastradas”)

  • Carregamento — Skeletons enquanto a lista é obtida; depois tabela com colunas Código, Nome, Descrição, Status, Ações.
  • Descrição vazia — Célula mostra “—” quando não há descrição.
  • Badge de status — Rótulo coerente com PRODUCTION_LINE_STATUS_LABELS para o statusId retornado.
  • Lista vazia — Mensagem “Nenhuma linha cadastrada.” quando não há itens.
  • Erro ao carregar lista — Faixa ou alerta “Erro ao carregar linhas. Tente novamente.” visível quando a query falha.

Alteração de status (mesma página)

  • Select por linha — Cada linha tem um select com os mesmos estados do cadastro; alteração dispara PATCH .../status com o novo statusId.
  • Sucesso — Toast confirma alteração com o nome do status; tabela e resumo atualizam.
  • Erro — Toast destrutivo “Erro ao alterar status”.
  • Durante o PATCH — Select desabilitado (isPending) para evitar cliques concorrentes (comportamento global da mutação — validar se afeta todas as linhas ou só a em curso).
  • Repetir o mesmo status — Comportamento aceitável (no-op ou PATCH idempotente) sem erro de UI.

Resumo de status (cartões superiores)

  • Seis indicadores — Disponível, Ativo, Ocupada, Manutenção, Inativo, Parada com contagens alinhadas à API /status-summary.
  • Carregamento — Placeholder/skeleton nos cartões enquanto o resumo carrega.
  • Consistência — Após criar linha ou mudar status, os números batem com o conjunto real de linhas (ou com a regra do backend se o resumo for agregado diferente da página).

Permissões e segurança

  • Acesso à rota — Utilizador com ProductionView acede; sem permissão, guard ou negação de acesso.
  • API com token inválido — Mensagens de erro ou redirecionamento de sessão coerentes com o resto da app.

Regressão e dados

  • Nome e código com caracteres especiais — Acentos e espaços gravam e exibem corretamente na tabela.
  • Paginação implícita — Se a API paginar (ex.: 50 itens), a página lista o primeiro bloco; documentar se “ver mais” existe ou se todas vêm numa página.

Atualize quando existir edição de linha (nome/código) fora do diálogo de criação ou novos filtros na listagem.