> ## Documentation Index
> Fetch the complete documentation index at: https://docs.domsoftware.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Estoque Unificado (QA)

> Suíte de Testes e Casos de Teste para o Estoque Unificado

***

## 📌 Suíte de Testes

* **Nome da funcionalidade testada:** Estoque Unificado — Painel, Lançamentos e Transferências
* **Módulo/sistema identificado:** OmniDom Backoffice — módulo **Estoque Unificado**
* **Pré-condições gerais:**
  * Usuário autenticado no sistema com perfil VENDOR ou equivalente com permissão ao módulo Estoque Unificado
  * Ao menos 1 produto cadastrado (ex: SKU 18856 — AGUA DESTILADA 4X5L)
  * Ao menos 2 depósitos ativos cadastrados (ex: Mercado Livre, Galpão A, Trainmec)
  * Sistema com status "Online & Sync" confirmado no rodapé da barra lateral
  * Módulo Estoque Unificado acessível pelo menu lateral

***

## 🧪 Casos de Teste

***

### Grupo 1: Painel de Métricas e Listagem

***

**CT01: Exibição correta dos cards de métricas ao carregar o módulo**

* **Tipo:** Positivo
* **Pré-condição:** Usuário autenticado. Módulo Estoque Unificado ainda não acessado nesta sessão.
* **Dados de Entrada:** Nenhum (apenas navegação)
* **Passos:**
  1. Clicar em **"Estoque Unificado"** na barra lateral esquerda
  2. Aguardar o carregamento completo da tela
  3. Observar os 4 cards no topo da tela
* **Resultado Esperado:** Sistema exibe os 4 cards preenchidos: **Produtos** (total de SKUs cadastrados), **Disponível** (total de unidades disponíveis), **Estoque Baixo** (SKUs com saldo abaixo do mínimo) e **Sem Estoque** (SKUs zerados). Todos os valores numéricos devem refletir o inventário real.
* **Critério de Aprovação:** Os 4 cards aparecem com valores numéricos coerentes. O valor de "Disponível" deve ser igual a `Físico total − Reservado total` de todos os produtos.
* **Origem:** Observado nas telas

***

**CT02: Listagem de produtos exibe colunas corretas**

* **Tipo:** Positivo
* **Pré-condição:** Módulo Estoque Unificado carregado. Filtro "Todos" selecionado.
* **Dados de Entrada:** Nenhum
* **Passos:**
  1. Acessar o módulo Estoque Unificado
  2. Observar a tabela de inventário abaixo dos cards
* **Resultado Esperado:** A tabela deve exibir as colunas: **PRODUTO / SKU**, **FÍSICO**, **DISPONÍVEL**, **RESERVADO**, **DEPÓSITOS** (com barra de progresso e contador de depósitos), **STATUS** (badge colorido) e **AÇÕES** (botões "Transferir" e "Ajustar Saldo").
* **Critério de Aprovação:** Todas as 7 colunas estão visíveis e preenchidas para cada produto listado.
* **Origem:** Observado nas telas

***

**CT03: Filtro por depósito específico atualiza tabela e métricas**

* **Tipo:** Positivo
* **Pré-condição:** Módulo Estoque Unificado carregado. Filtro padrão "Todos" ativo.
* **Dados de Entrada:** Depósito a filtrar: **Depósito Principal**
* **Passos:**
  1. Clicar na aba **"Depósito Principal"** na barra de filtros de depósito
  2. Aguardar o indicador "Carregando inventário..." desaparecer
  3. Observar a tabela e os cards de métricas
* **Resultado Esperado:** A tabela exibe apenas os produtos com saldo no Depósito Principal. O card "Disponível" atualiza para refletir o total de unidades nesse depósito (ex: de 840 para 730). O spinner "Carregando inventário..." deve aparecer brevemente durante a transição.
* **Critério de Aprovação:** Produtos de outros depósitos não aparecem na listagem. O valor do card "Disponível" é coerente com os dados filtrados.
* **Origem:** Observado nas telas

***

**CT04: Filtro por status "Esgotado" não retorna produtos com saldo**

* **Tipo:** Negativo
* **Pré-condição:** Módulo Estoque Unificado carregado. Todos os produtos do teste possuem saldo > 0.
* **Dados de Entrada:** Status a filtrar: **Esgotado**
* **Passos:**
  1. Clicar na aba **"Esgotado"** na barra de filtros de status
  2. Aguardar o carregamento
  3. Observar o resultado da tabela
* **Resultado Esperado:** A tabela exibe mensagem de lista vazia ou "Nenhum produto encontrado" (estado vazio), pois não há produtos sem estoque no cenário de teste.
* **Critério de Aprovação:** Nenhum produto com saldo físico > 0 aparece na listagem filtrada por "Esgotado".
* **Origem:** Inferido *(filtro visível nas telas; comportamento de lista vazia não demonstrado no vídeo)*

***

**CT05: Barra de busca filtra produto por SKU**

* **Tipo:** Positivo
* **Pré-condição:** Módulo Estoque Unificado carregado com tabela visível.
* **Dados de Entrada:** Termo de busca: `18856`
* **Passos:**
  1. Clicar no campo **"Buscar por nome ou SKU..."**
  2. Digitar `18856`
  3. Aguardar o filtro ser aplicado
* **Resultado Esperado:** A tabela exibe apenas o produto com SKU 18856 — AGUA DESTILADA 4X5L.
* **Critério de Aprovação:** Apenas 1 produto aparece, correspondendo ao SKU digitado. Os demais SKUs desaparecem da listagem.
* **Origem:** Inferido *(campo de busca visível nas telas; comportamento dinâmico não demonstrado no vídeo)*

***

**CT06: Busca por termo inexistente retorna lista vazia**

* **Tipo:** Negativo
* **Pré-condição:** Módulo Estoque Unificado carregado.
* **Dados de Entrada:** Termo de busca: `XXXXXXPRODUTOINEXISTENTE`
* **Passos:**
  1. Clicar no campo **"Buscar por nome ou SKU..."**
  2. Digitar `XXXXXXPRODUTOINEXISTENTE`
  3. Aguardar o resultado
* **Resultado Esperado:** A tabela exibe estado vazio — nenhum produto encontrado. Não deve exibir erro ou travamento.
* **Critério de Aprovação:** Tabela vazia sem crash. Sistema permanece responsivo.
* **Origem:** Inferido *(A validar)*

***

### Grupo 2: Lançamento de Estoque

***

**CT07: Abertura do modal de Lançamento de Estoque via botão "+ Novo Ajuste"**

* **Tipo:** Positivo
* **Pré-condição:** Módulo Estoque Unificado carregado.
* **Dados de Entrada:** Nenhum
* **Passos:**
  1. Localizar o botão **"+ Novo Ajuste"** no canto superior direito da tela
  2. Clicar no botão
* **Resultado Esperado:** Modal **"Lançamento de Estoque"** é aberto com 4 etapas numeradas: (1) Tipo de Operação, (2) Produto e Depósito, (3) Valores, (4) Motivo. O campo Produto deve estar vazio e o depósito sem seleção.
* **Critério de Aprovação:** Modal aparece completamente visível com as 4 seções. Campos Produto e Depósito começam em branco.
* **Origem:** Observado nas telas

***

**CT08: Lançamento tipo "Entrada de Compra" com dados válidos**

* **Tipo:** Positivo
* **Pré-condição:** Modal de Lançamento de Estoque aberto. Produto AGUA DESTILADA 4X5L (SKU 18856) existente com saldo inicial de 5 unidades no depósito Mercado Livre.
* **Dados de Entrada:**
  * Tipo de Operação: `Entrada de Compra`
  * Produto: `18856 – AGUA DESTILADA 4X5L`
  * Depósito: `Mercado Livre`
  * Quantidade: `50`
  * Custo Unitário: `R$ 12,12`
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Selecionar **"Entrada de Compra"** no Passo 1
  2. No campo Produto, digitar `18856` e selecionar AGUA DESTILADA 4X5L
  3. No campo Depósito, selecionar **"Mercado Livre"**
  4. No campo Quantidade, digitar `50`
  5. No campo Custo Unitário, digitar `12,12`
  6. No campo Motivo, selecionar **"Ajuste Manual"**
  7. Clicar em **"Salvar"**
* **Resultado Esperado:** Modal fecha. Notificação **"Lançamento realizado com sucesso!"** aparece. Na tabela, a coluna Físico e Disponível do produto AGUA DESTILADA 4X5L no depósito Mercado Livre atualiza de `5` para `55`. O card "Disponível" no painel incrementa em `50`.
* **Critério de Aprovação:** Saldo do produto = 55. Card DISPONÍVEL reflete novo total. Toast de sucesso exibido.
* **Origem:** Observado nas telas

***

**CT09: Lançamento tipo "Acréscimo Manual" sem alterar custo**

* **Tipo:** Positivo
* **Pré-condição:** Modal de Lançamento de Estoque aberto. Produto com custo médio já registrado.
* **Dados de Entrada:**
  * Tipo de Operação: `Acréscimo Manual (+)`
  * Produto: `18856 – AGUA DESTILADA 4X5L`
  * Depósito: `Mercado Livre`
  * Quantidade: `10`
  * Custo Unitário: `0,00` *(ou campo desabilitado — a validar)*
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Selecionar **"Acréscimo Manual (+)"** no Passo 1
  2. Preencher produto, depósito, quantidade (10) e motivo
  3. Verificar se o campo Custo Unitário está desabilitado ou é ignorado
  4. Clicar em **"Salvar"**
* **Resultado Esperado:** Saldo do produto aumenta em 10 unidades. O custo médio unitário do produto **não é alterado**.
* **Critério de Aprovação:** Saldo anterior + 10. Custo médio permanece inalterado após o lançamento.
* **Origem:** Inferido *(descrição da opção visível nas telas; comportamento completo a validar)*

***

**CT10: Lançamento tipo "Baixa Manual" reduz saldo**

* **Tipo:** Positivo
* **Pré-condição:** Produto com saldo mínimo de 5 unidades no depósito selecionado.
* **Dados de Entrada:**
  * Tipo de Operação: `Baixa Manual (-)`
  * Produto: `18856 – AGUA DESTILADA 4X5L`
  * Depósito: `Mercado Livre`
  * Quantidade: `3`
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Selecionar **"Baixa Manual (-)"** no Passo 1
  2. Preencher produto, depósito e quantidade (3)
  3. Selecionar motivo
  4. Clicar em **"Salvar"**
* **Resultado Esperado:** Saldo físico do produto reduz em 3 unidades no depósito selecionado. Notificação de sucesso exibida.
* **Critério de Aprovação:** Saldo anterior − 3. Card DISPONÍVEL reflete nova quantidade.
* **Origem:** Inferido *(opção visível nas telas; comportamento a validar)*

***

**CT11: Tentativa de salvar lançamento sem selecionar Produto**

* **Tipo:** Negativo
* **Pré-condição:** Modal de Lançamento de Estoque aberto. Tipo de Operação selecionado. Campo Produto vazio.
* **Dados de Entrada:**
  * Tipo de Operação: `Entrada de Compra`
  * Produto: *(vazio)*
  * Depósito: `Mercado Livre`
  * Quantidade: `10`
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Selecionar "Entrada de Compra"
  2. Deixar o campo **Produto vazio**
  3. Preencher os demais campos
  4. Clicar em **"Salvar"**
* **Resultado Esperado:** O sistema bloqueia o envio e destaca o campo Produto como obrigatório (ex: borda vermelha, mensagem de validação). O modal permanece aberto.
* **Critério de Aprovação:** Nenhum lançamento é criado. Mensagem de campo obrigatório exibida para Produto.
* **Origem:** A validar

***

**CT12: Tentativa de salvar lançamento sem selecionar Depósito**

* **Tipo:** Negativo
* **Pré-condição:** Modal de Lançamento de Estoque aberto. Produto selecionado. Campo Depósito sem seleção.
* **Dados de Entrada:**
  * Produto: `18856 – AGUA DESTILADA 4X5L`
  * Depósito: *(não selecionado)*
  * Quantidade: `10`
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Selecionar "Entrada de Compra"
  2. Selecionar o produto `18856`
  3. **Não selecionar depósito**
  4. Preencher quantidade e motivo
  5. Clicar em **"Salvar"**
* **Resultado Esperado:** Sistema bloqueia o envio e indica o campo Depósito como obrigatório.
* **Critério de Aprovação:** Lançamento não criado. Mensagem de validação no campo Depósito.
* **Origem:** A validar

***

**CT13: Lançamento com quantidade zero ou negativa**

* **Tipo:** Borda
* **Pré-condição:** Modal de Lançamento de Estoque aberto com todos os campos válidos.
* **Dados de Entrada:**
  * Quantidade: `0` (e depois repetir com `-5`)
* **Passos:**
  1. Preencher todos os campos corretamente
  2. Alterar o campo Quantidade para `0`
  3. Clicar em **"Salvar"**
  4. Repetir com quantidade `-5`
* **Resultado Esperado:** O sistema bloqueia o envio para quantidade `0` e rejeita valores negativos no campo. Mensagem de validação deve indicar que a quantidade mínima é 1.
* **Critério de Aprovação:** Lançamento não criado para quantidade ≤ 0. Mensagem de erro exibida.
* **Origem:** A validar *(os controles +/− do campo sugerem valor mínimo de 0 — a confirmar o comportamento ao tentar salvar)*

***

**CT14: Custo unitário com valor zerado em "Entrada de Compra"**

* **Tipo:** Borda
* **Pré-condição:** Modal de Lançamento de Estoque aberto. Tipo "Entrada de Compra" selecionado.
* **Dados de Entrada:**
  * Tipo de Operação: `Entrada de Compra`
  * Produto: `18856 – AGUA DESTILADA 4X5L`
  * Depósito: `Mercado Livre`
  * Quantidade: `10`
  * Custo Unitário: `0,00`
  * Motivo: `Ajuste Manual`
* **Passos:**
  1. Preencher todos os campos com os dados acima
  2. Manter Custo Unitário como `0,00`
  3. Clicar em **"Salvar"**
* **Resultado Esperado:** Verificar se o sistema aceita custo zero (comportamento válido em casos de bonificação) ou exibe alerta de confirmação. O sistema não deve rejeitar silenciosamente a operação.
* **Critério de Aprovação:** Sistema salva com aviso ou bloqueia com mensagem clara. Nenhum comportamento indefinido.
* **Origem:** A validar

***

### Grupo 3: Transferência entre Depósitos

***

**CT15: Transferência de estoque entre dois depósitos com dados válidos**

* **Tipo:** Positivo
* **Pré-condição:** Produto AGUA DESTILADA 4X5L (SKU 18856) com 55 unidades no depósito Mercado Livre. Depósito Trainmec existente e ativo.
* **Dados de Entrada:**
  * Produto: `AGUA DESTILADA 4X5L` (pré-selecionado)
  * Depósito de Origem: `Mercado Livre`
  * Depósito de Destino: `Trainmec`
  * Quantidade: `8`
  * Observação: `Transferencia`
* **Passos:**
  1. Na linha do produto AGUA DESTILADA 4X5L na tabela, clicar em **"Transferir"**
  2. Confirmar que o produto está pré-selecionado no modal
  3. Selecionar **"Mercado Livre"** como depósito de origem
  4. Selecionar **"Trainmec"** como depósito de destino
  5. Informar quantidade `8`
  6. Digitar observação `Transferencia`
  7. Clicar em **"Confirmar Transferência"**
* **Resultado Esperado:** Modal fecha. Notificação **"Transferência realizada com sucesso!"** aparece. Saldo do depósito Mercado Livre reduz de 55 para 47. Saldo do depósito Trainmec aumenta em 8. A coluna "DEPÓSITOS" do produto atualiza de "1 DEPÓSITO" para "2 DEPÓSITOS". Total físico global permanece 55.
* **Critério de Aprovação:** Saldo Mercado Livre = 47. Saldo Trainmec = 8. Total físico = 55. Toast de sucesso exibido. Coluna DEPÓSITOS = "2 DEPÓSITOS".
* **Origem:** Observado nas telas

***

**CT16: Verificar que transferência não altera o total físico global**

* **Tipo:** Positivo
* **Pré-condição:** Produto com saldo total de 55 unidades distribuídas em 2 depósitos após CT15.
* **Dados de Entrada:** Nenhuma nova entrada — verificação de dados
* **Passos:**
  1. Após a transferência de CT15, verificar o card "Disponível" no painel
  2. Filtrar pelo depósito Mercado Livre e anotar o saldo
  3. Filtrar pelo depósito Trainmec e anotar o saldo
  4. Somar os dois saldos
* **Resultado Esperado:** A soma dos saldos nos dois depósitos deve ser igual ao total físico anterior (55). O card "Disponível" não deve ter alterado o valor total.
* **Critério de Aprovação:** Saldo Mercado Livre + Saldo Trainmec = 55. Card DISPONÍVEL global = mesmo valor de antes da transferência.
* **Origem:** Observado nas telas *(princípio da conservação de saldo)*

***

**CT17: Tentativa de transferência com quantidade maior que o saldo disponível**

* **Tipo:** Negativo
* **Pré-condição:** Produto AGUA DESTILADA 4X5L com 55 unidades no depósito Mercado Livre.
* **Dados de Entrada:**
  * Depósito de Origem: `Mercado Livre`
  * Depósito de Destino: `Galpão A`
  * Quantidade: `999`
* **Passos:**
  1. Clicar em **"Transferir"** na linha do produto
  2. Selecionar Mercado Livre como origem e Galpão A como destino
  3. Digitar `999` no campo Quantidade
  4. Clicar em **"Confirmar Transferência"**
* **Resultado Esperado:** Sistema bloqueia a transferência e exibe mensagem de erro indicando saldo insuficiente (ex: "Quantidade indisponível no depósito de origem").
* **Critério de Aprovação:** Nenhuma movimentação criada. Saldo permanece inalterado. Mensagem de erro clara e específica exibida.
* **Origem:** A validar

***

**CT18: Tentativa de transferência com mesmo depósito de origem e destino**

* **Tipo:** Negativo
* **Pré-condição:** Modal de Transferência aberto.
* **Dados de Entrada:**
  * Depósito de Origem: `Mercado Livre`
  * Depósito de Destino: `Mercado Livre`
  * Quantidade: `5`
* **Passos:**
  1. Abrir modal de Transferência
  2. Selecionar **"Mercado Livre"** tanto para origem quanto para destino
  3. Informar quantidade 5
  4. Clicar em **"Confirmar Transferência"**
* **Resultado Esperado:** Sistema bloqueia a operação e exibe mensagem informando que origem e destino não podem ser iguais.
* **Critério de Aprovação:** Transferência não criada. Mensagem de validação exibida.
* **Origem:** A validar

***

**CT19: Transferência com quantidade mínima (1 unidade)**

* **Tipo:** Borda
* **Pré-condição:** Produto com ao menos 1 unidade disponível no depósito de origem.
* **Dados de Entrada:**
  * Depósito de Origem: `Mercado Livre`
  * Depósito de Destino: `Galpão A`
  * Quantidade: `1`
* **Passos:**
  1. Abrir modal de Transferência para o produto
  2. Selecionar origem e destino distintos
  3. Digitar `1` no campo Quantidade
  4. Clicar em **"Confirmar Transferência"**
* **Resultado Esperado:** Transferência realizada com sucesso para 1 unidade. Toast de sucesso exibido. Saldos atualizados corretamente.
* **Critério de Aprovação:** Saldo de origem reduz em 1. Saldo de destino aumenta em 1. Toast de sucesso visível.
* **Origem:** A validar *(valor de borda para o campo quantidade)*

***

**CT20: Transferência com quantidade zero**

* **Tipo:** Borda
* **Pré-condição:** Modal de Transferência aberto.
* **Dados de Entrada:**
  * Quantidade: `0`
* **Passos:**
  1. Abrir modal de Transferência
  2. Preencher origem e destino válidos
  3. Digitar `0` no campo Quantidade
  4. Clicar em **"Confirmar Transferência"**
* **Resultado Esperado:** Sistema bloqueia a operação com mensagem indicando que a quantidade mínima para transferência é 1.
* **Critério de Aprovação:** Nenhuma transferência criada. Mensagem de validação exibida.
* **Origem:** A validar

***

### Grupo 4: Feedback Visual e UX

***

**CT21: Toast de sucesso é exibido e desaparece automaticamente**

* **Tipo:** Positivo
* **Pré-condição:** Qualquer operação de lançamento ou transferência realizada com sucesso.
* **Dados de Entrada:** Nenhum (verificação de comportamento UX)
* **Passos:**
  1. Realizar um lançamento ou transferência válido
  2. Observar o canto superior da tela após fechar o modal
  3. Aguardar 5–10 segundos sem interação
* **Resultado Esperado:** Toast com mensagem de sucesso aparece imediatamente após o modal fechar e some automaticamente após alguns segundos (sem necessidade de o usuário fechar manualmente).
* **Critério de Aprovação:** Toast visível por 3–8 segundos e depois desaparece. Tela principal permanece funcional.
* **Origem:** Observado nas telas *(comportamento de desaparecimento inferido)*

***

**CT22: Indicador "Online & Sync" visível durante operações**

* **Tipo:** Positivo
* **Pré-condição:** Usuário autenticado e conectado à internet.
* **Dados de Entrada:** Nenhum
* **Passos:**
  1. Acessar o módulo Estoque Unificado
  2. Observar o rodapé da barra lateral esquerda
* **Resultado Esperado:** O indicador **"Online & Sync"** está visível com ícone verde indicando conexão ativa e sincronização em tempo real.
* **Critério de Aprovação:** Texto "Online & Sync" visível no rodapé da barra lateral com indicador de status positivo (verde).
* **Origem:** Observado nas telas

***

**CT23: Tabela atualiza em tempo real após operação sem recarregar a página**

* **Tipo:** Positivo
* **Pré-condição:** Módulo Estoque Unificado carregado. Saldo do produto AGUA DESTILADA 4X5L conhecido antes da operação.
* **Dados de Entrada:** Qualquer lançamento ou transferência válida
* **Passos:**
  1. Anotar o saldo atual do produto na tabela
  2. Realizar um lançamento de +10 unidades
  3. Observar a tabela após o modal fechar (sem pressionar F5 ou recarregar)
* **Resultado Esperado:** A tabela atualiza automaticamente o saldo do produto sem recarregar a página. O novo valor reflete a operação realizada.
* **Critério de Aprovação:** Saldo na coluna Físico = saldo anterior + 10. URL permanece a mesma sem reload completo.
* **Origem:** Observado nas telas

***

## 📋 Regras de Negócio Testadas

* **RN01:** Disponível = Físico − Reservado
  * Casos de teste relacionados: **CT01, CT08, CT16**

* **RN02:** "Entrada de Compra" atualiza o custo médio unitário; "Acréscimo Manual" não
  * Casos de teste relacionados: **CT08, CT09, CT14**

* **RN03:** Todo lançamento é vinculado a um depósito específico (não ao produto globalmente)
  * Casos de teste relacionados: **CT08, CT11, CT12**

* **RN04:** Transferência não altera o total físico global do produto
  * Casos de teste relacionados: **CT15, CT16**

* **RN05:** Produto pode ter saldo em múltiplos depósitos; coluna DEPÓSITOS indica o contador
  * Casos de teste relacionados: **CT15, CT16**

* **RN06:** Campos obrigatórios no lançamento: Tipo, Produto, Depósito, Quantidade (≥1), Motivo
  * Casos de teste relacionados: **CT11, CT12, CT13**

* **RN07:** Feedback visual (toast) exibido após toda operação concluída com sucesso
  * Casos de teste relacionados: **CT08, CT15, CT21**

* **RN08:** Sistema sincronizado em tempo real — tabela atualiza sem recarregar a página
  * Casos de teste relacionados: **CT23, CT22**

***

## ⚠️ Cenários de Exceção

| Cenário                                        | Campo/Ação               | Comportamento Esperado                                           | Status    |
| ---------------------------------------------- | ------------------------ | ---------------------------------------------------------------- | --------- |
| Produto não preenchido no lançamento           | Campo Produto            | Bloquear envio + mensagem de campo obrigatório                   | A validar |
| Depósito não selecionado no lançamento         | Campo Depósito           | Bloquear envio + mensagem de campo obrigatório                   | A validar |
| Quantidade = 0 no lançamento                   | Campo Quantidade         | Bloquear envio + mensagem de valor mínimo                        | A validar |
| Quantidade negativa no lançamento              | Campo Quantidade         | Campo deve rejeitar entrada negativa                             | A validar |
| Custo = R\$ 0,00 em Entrada de Compra          | Campo Custo Unitário     | Aceitar com alerta ou bloquear com mensagem                      | A validar |
| Quantidade de transferência > saldo disponível | Campo Quantidade         | Bloquear + "Saldo insuficiente no depósito de origem"            | A validar |
| Origem = Destino na transferência              | Seletor Depósito         | Bloquear + "Origem e destino não podem ser iguais"               | A validar |
| Quantidade = 0 na transferência                | Campo Quantidade         | Bloquear + mensagem de valor mínimo (mín. 1)                     | A validar |
| Usuário sem permissão ao módulo                | Módulo Estoque Unificado | Item de menu oculto ou tela com mensagem de acesso negado        | A validar |
| Sistema offline durante operação               | Qualquer operação        | Exibir mensagem de erro de conectividade; impedir perda de dados | A validar |

***

## 📊 Matriz de Cobertura

| Funcionalidade                 | CT Positivo      | CT Negativo | CT Borda   |
| ------------------------------ | ---------------- | ----------- | ---------- |
| Painel de métricas             | CT01             | —           | —          |
| Listagem de inventário         | CT02, CT03       | CT04        | —          |
| Busca por produto/SKU          | CT05             | CT06        | —          |
| Lançamento — Entrada de Compra | CT07, CT08       | CT11, CT12  | CT13, CT14 |
| Lançamento — Acréscimo Manual  | CT09             | —           | —          |
| Lançamento — Baixa Manual      | CT10             | —           | —          |
| Transferência entre depósitos  | CT15, CT16       | CT17, CT18  | CT19, CT20 |
| Feedback visual / UX           | CT21, CT22, CT23 | —           | —          |

> **Total de casos de teste:** 23 CTs\
> **Positivos:** 14 | **Negativos:** 6 | **Borda:** 6\
> **Observados nas telas:** 10 | **Inferidos:** 5 | **A validar:** 8
