> ## 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 (Funcional)

> Visão Geral e Passo a Passo da funcionalidade de Estoque Unificado

***

## 📌 Visão Geral

* **Nome da funcionalidade:** Estoque Unificado
* **Objetivo principal:** Permitir a gestão centralizada do inventário de produtos em múltiplos depósitos, com suporte a lançamentos de estoque (entradas e ajustes manuais) e transferências entre depósitos.
* **Perfil de usuário:** Usuário com perfil de Vendedor/Gestor de Estoque (ex: VENDOR), com acesso ao backoffice da plataforma OmniDom.
* **Pré-requisitos de acesso:**
  * Usuário autenticado no sistema OmniDom Backoffice
  * Permissão de acesso ao módulo "Estoque Unificado" na barra lateral
  * Ao menos um produto e um depósito cadastrado no sistema

***

## 🔢 Passo a Passo

### Fluxo 1: Consulta do Painel de Estoque Unificado

**Passo 1: Acessar o módulo Estoque Unificado**

* **O que o usuário vê:** A barra lateral à esquerda com o menu de navegação do sistema: Produtos, Anúncios, Estoque Unificado, Gestão de Depósitos, Canais de Vendas, Importações, Fornecedores e Empresas.
* **O que o usuário deve fazer:** Clicar em **"Estoque Unificado"** na barra lateral esquerda.
* **Resultado esperado:** O sistema exibe o painel principal do Estoque Unificado.

***

**Passo 2: Visualizar o painel de métricas**

* **O que o usuário vê:** Um painel com quatro cards de resumo exibidos no topo da tela:
  * 🧩 **PRODUTOS:** Total de produtos cadastrados (ex: `38`)
  * 🛒 **DISPONÍVEL:** Total de unidades disponíveis para venda (ex: `790` ou `840` após ajuste)
  * ⚠️ **ESTOQUE BAIXO:** Quantidade de SKUs abaixo do limite mínimo (ex: `0`)
  * 🚫 **SEM ESTOQUE:** Quantidade de SKUs zerados (ex: `0`)
* **O que o usuário deve fazer:** Observar os indicadores para ter uma visão geral do inventário.
* **Resultado esperado:** O painel atualiza automaticamente conforme operações são realizadas.

***

**Passo 3: Navegar e filtrar a listagem de inventário**

* **O que o usuário vê:** Abaixo dos cards, há uma barra de pesquisa ("Buscar por nome ou SKU...") e filtros de abas por **Depósito** (Todos, Depósito Principal, Galpão A, Mercado Livre, Trainmec) e por **Status** (Todos, Normal, Baixo, Esgotado).
* **O que o usuário deve fazer:** Usar a barra de pesquisa ou clicar nas abas para filtrar por depósito ou status desejado.
* **Resultado esperado:** A tabela de inventário é filtrada exibindo apenas os produtos correspondentes ao filtro selecionado.

***

**Passo 4: Visualizar a tabela de inventário**

* **O que o usuário vê:** Uma tabela com as seguintes colunas:

  * **PRODUTO / SKU:** Nome do produto e seu código SKU
  * **FÍSICO:** Quantidade física total em estoque
  * **DISPONÍVEL:** Quantidade disponível para venda (físico − reservado)
  * **RESERVADO:** Quantidade reservada por pedidos em andamento
  * **DEPÓSITOS:** Indicador do número de depósitos onde o produto está alocado (ex: "1 DEPÓSITO", "2 DEPÓSITOS"), com barra de progresso colorida
  * **STATUS:** Badge indicando a situação (ex: "Em estoque")
  * **AÇÕES:** Botões de ação rápida: **Transferir** e **Ajustar Saldo**

  Exemplos de produtos visíveis na tabela:

  | Produto                                  | SKU    | Físico | Disponível | Reservado |
  | ---------------------------------------- | ------ | ------ | ---------- | --------- |
  | AGUA DESTILADA 4X5L                      | 18856  | 5 → 55 | 5 → 55     | 0         |
  | AMACIAN.CONC.COALA SOL BRASIL *859*12X1L | 011245 | 50     | 50         | 0         |
  | AMACIAN.CONC.COALA THE QUEEN *860*12X1L  | 011247 | 50     | 50         | 0         |
  | GELALCOOL 70. INPM 12X470G BACTERICIDA   | 33247  | 1      | 1          | 0         |
  | LAVA LOUÇAS AZULIM CITRUS 24X500ML       | 14576  | 4      | 4          | 0         |
  | LAVA LOUÇAS AZULIM CLEAR 24X500ML        | 14177  | 4      | 4          | 0         |
  | LAVA LOUÇAS AZULIM NEUTRO 24X500ML       | —      | 0      | 0          | 0         |

* **O que o usuário deve fazer:** Rolar a lista para visualizar todos os produtos ou usar os filtros.

* **Resultado esperado:** A tabela lista todos os SKUs com suas quantidades e status de estoque.

***

### Fluxo 2: Lançamento de Estoque (Ajuste)

**Passo 5: Abrir o modal de Lançamento de Estoque**

* **O que o usuário vê:** No canto superior direito da tela, há dois botões: **Transferir** (ícone de setas) e **+ Novo Ajuste** (botão azul). Abaixo, na coluna "AÇÕES" de cada produto, existem os botões **Transferir** e **Ajustar Saldo**.
* **O que o usuário deve fazer:** Clicar em **"+ Novo Ajuste"** no topo da tela ou clicar em **"Ajustar Saldo"** na linha do produto desejado.
* **Resultado esperado:** O modal **"Lançamento de Estoque"** é aberto com 4 etapas numericass: **(1) Tipo de Operação, (2) Produto e Depósito, (3) Valores, (4) Motivo**.

***

**Passo 6: Selecionar o Tipo de Operação**

* **O que o usuário vê:** Três opções de operação no Passo 1 do modal:
  * 🟢 **Entrada de Compra** — Soma ao saldo e ajusta custo (R\$) *(selecionado no exemplo)*
  * 🔵 **Acréscimo Manual (+)** — Soma ao saldo sem ajustar custo
  * 🔴 **Baixa Manual (-)** — Subtrai, visando erros, sinistros ou correções
* **O que o usuário deve fazer:** Clicar na opção desejada. No exemplo demonstrado, "Entrada de Compra" foi selecionado (aparece destacado/selecionado).
* **Resultado esperado:** O tipo de operação fica marcado e o formulário avança para o próximo campo.

***

**Passo 7: Selecionar Produto e Depósito**

* **O que o usuário vê:** O Passo 2 do modal exibe:
  * Campo **Produto** com um buscador (buscar produto por nome ou SKU...)
  * Indicador "Em estoque: X un." ao lado do campo
  * Campo **Depósito** com um seletor (dropdown) — valor padrão: "Selecione o depósito..."
* **O que o usuário deve fazer:**
  1. Clicar no campo **Produto** e digitar o nome ou SKU. No exemplo: `18856 – AGUA DESTILADA 4X5L`
  2. Clicar no campo **Depósito** e selecionar o depósito desejado. No exemplo: `Mercado Livre`
* **Resultado esperado:** O produto e depósito ficam selecionados; o sistema exibe a quantidade atual em estoque para o produto/depósito selecionado.

***

**Passo 8: Informar Valores**

* **O que o usuário vê:** O Passo 3 do modal exibe:
  * Campo **Quantidade** com controles de + e − e campo numérico (valor padrão: `0`)
  * Campo \*\*Custo Unitário (R$)** com prefixo "R$" e campo numérico (valor padrão: `0,00`)
* **O que o usuário deve fazer:**
  1. Clicar no campo **Quantidade** e digitar a quantidade a ser lançada. No exemplo: `50`
  2. Clicar no campo **Custo Unitário** e informar o custo. No exemplo: `12,12`
* **Resultado esperado:** Os valores são preenchidos corretamente e o sistema está pronto para o próximo passo.

***

**Passo 9: Selecionar o Motivo e Salvar**

* **O que o usuário vê:** O Passo 4 do modal apresenta o campo **Motivo** (dropdown). No exemplo, o valor selecionado é **"Ajuste Manual"**. Ao final do modal há o botão **"Salvar"** (verde).
* **O que o usuário deve fazer:** Selecionar o motivo adequado e clicar em **"Salvar"**.
* **Resultado esperado:** O modal fecha e o sistema exibe uma notificação de sucesso: **"Lançamento realizado com sucesso!"**.

***

**Passo 10: Verificar atualização no painel**

* **O que o usuário vê:** A tabela é atualizada automaticamente; o produto que teve lançamento reflete a nova quantidade. No exemplo, "AGUA DESTILADA 4X5L" passou de **5 → 55 unidades** (físico e disponível). O card **DISPONÍVEL** no topo também atualiza (ex: `790 → 840`).
* **O que o usuário deve fazer:** Nenhuma ação adicional necessária.
* **Resultado esperado:** O inventário reflete o lançamento realizado em tempo real.

***

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

**Passo 11: Iniciar a Transferência**

* **O que o usuário vê:** Na coluna "AÇÕES" da tabela, há o botão **"Transferir"** para cada produto. No topo da tela, também existe um botão global **"Transferir"**.
* **O que o usuário deve fazer:** Clicar em **"Transferir"** na linha do produto desejado (ex: "AGUA DESTILADA 4X5L").
* **Resultado esperado:** O modal **"Transferência de Estoque"** é aberto.

***

**Passo 12: Preencher os dados da Transferência**

* **O que o usuário vê:** O modal de Transferência de Estoque exibe:
  * Campo **Produto** (pré-preenchido com o produto selecionado, ex: "AGUA DESTILADA 4X5L" — SKU 18856)
  * Campo **Depósito de Origem** (dropdown — ex: "Mercado Livre")
  * Campo **Depósito de Destino** (dropdown — ex: "Trainmec" ou "Galpão A")
  * Campo **Quantidade** (numérico — ex: `8` ou `10`)
  * Campo **Observação/Nota** — texto livre opcional (ex: "Transferencia")
  * Botão **"Confirmar Transferência"** (azul/primário)
* **O que o usuário deve fazer:**
  1. Confirmar ou alterar o **Produto** (se acessado pelo botão global)
  2. Selecionar o **Depósito de Origem**
  3. Selecionar o **Depósito de Destino**
  4. Informar a **Quantidade** a transferir
  5. (Opcional) Adicionar uma **Observação**
  6. Clicar em **"Confirmar Transferência"**
* **Resultado esperado:** O modal fecha e o sistema exibe uma notificação: **"Transferência realizada com sucesso!"**.

***

**Passo 13: Verificar atualização pós-transferência**

* **O que o usuário vê:** Na tabela, o produto que teve transferência agora exibe mais de um depósito na coluna "DEPÓSITOS" (ex: muda de "1 DEPÓSITO" para **"2 DEPÓSITOS"**), com a barra de indicação refletindo a distribuição atualizada. O card **DISPONÍVEL** também pode ser atualizado se a transferência afetar disponibilidade.
* **O que o usuário deve fazer:** Nenhuma ação adicional necessária.
* **Resultado esperado:** A tabela reflete a nova distribuição de estoque entre os depósitos em tempo real.

***

### Fluxo 4: Filtrar por Depósito

**Passo 14: Aplicar filtro de depósito**

* **O que o usuário vê:** Abas de depósito disponíveis: **Todos, Depósito Principal, Galpão A, Mercado Livre, Trainmec**.
* **O que o usuário deve fazer:** Clicar na aba do depósito desejado (ex: "Depósito Principal").
* **Resultado esperado:** O sistema exibe: "Carregando inventário..." momentaneamente e, então, a tabela é filtrada mostrando apenas os produtos alocados naquele depósito. O card DISPONÍVEL atualiza para refletir o total do depósito selecionado (ex: `840 → 730` ao filtrar por "Depósito Principal").

***

### Fluxo 5: Exportar Inventário (CSV)

**Passo 15: Exportar listagem**

* **O que o usuário vê:** No topo da tela, ao lado do botão "Atualizar", há o botão **"CSV"** (com ícone de download).
* **O que o usuário deve fazer:** Clicar no botão **"CSV"**.
* **Resultado esperado:** ⚠️ *Fluxo de exportação não demonstrado completamente no vídeo — inferido pela presença do botão. Comportamento: download de um arquivo .csv com a listagem atual do inventário. **A validar.***

***

## 📋 Regras de Negócio

**RN01: Diferença entre Estoque Físico e Disponível**

* **Descrição:** O estoque físico representa o total armazenado no depósito. O disponível é calculado subtraindo o estoque reservado (pedidos em andamento) do físico.
* **Condição:** Sempre que houver pedidos com produtos reservados.
* **Comportamento:** A coluna "DISPONÍVEL" pode ser menor que "FÍSICO" quando há reservas ativas.
* **Exemplo:** Produto com 55 unidades físicas e 0 reservadas → 55 disponíveis.

**RN02: Tipos de Operação de Lançamento**

* **Descrição:** O sistema oferece três tipos distintos de lançamento com comportamentos diferentes no custo.
* **Condição:** Ao criar um novo ajuste de estoque.
* **Comportamento:**
  * **Entrada de Compra:** Soma ao saldo E atualiza o custo médio unitário (R\$)
  * **Acréscimo Manual:** Soma ao saldo sem alterar o custo médio
  * **Baixa Manual:** Subtrai do saldo (para sinistros, erros, correções)
* **Exemplo:** Ao receber NF de compra, usar "Entrada de Compra" para atualizar custo. Para contar inventário e corrigir diferença, usar "Acréscimo Manual".

**RN03: Seleção obrigatória de Produto e Depósito no Lançamento**

* **Descrição:** Não é possível salvar um lançamento sem selecionar o produto e o depósito de destino.
* **Condição:** No modal de Lançamento de Estoque, Passo 2.
* **Comportamento:** Campos "Produto" e "Depósito" são obrigatórios. O campo Produto exibe um buscador com pesquisa por nome ou SKU.
* **Exemplo:** Ao tentar salvar sem depósito, o sistema deve bloquear e indicar o campo obrigatório. *(A validar — não observado diretamente no vídeo.)*

**RN04: Lançamento por Depósito**

* **Descrição:** Todo lançamento é vinculado a um depósito específico, não ao produto globalmente.
* **Condição:** Sempre ao realizar um lançamento de estoque.
* **Comportamento:** O usuário deve selecionar o depósito no qual o lançamento será contabilizado. O saldo do produto no depósito selecionado é atualizado.
* **Exemplo:** Lançamento de 50 unidades no "Mercado Livre" afeta apenas o saldo desse depósito.

**RN05: Transferência não altera estoque total**

* **Descrição:** A transferência move unidades de um depósito para outro sem alterar o total físico ou disponível geral.
* **Condição:** Ao realizar uma transferência entre depósitos.
* **Comportamento:** O saldo do depósito de origem diminui e o do destino aumenta na mesma quantidade. O total físico do produto permanece igual.
* **Exemplo:** Transferir 10 unidades do "Mercado Livre" para "Galpão A": Mercado Livre perde 10, Galpão A ganha 10; total = igual.

**RN06: Produto pode existir em múltiplos depósitos**

* **Descrição:** Após uma transferência ou lançamento em depósitos diferentes, o produto passa a ter estoque distribuído em mais de um depósito.
* **Condição:** Quando um lançamento ou transferência adiciona saldo a um segundo depósito para o mesmo produto.
* **Comportamento:** A coluna "DEPÓSITOS" na tabela atualiza o contador (ex: "1 DEPÓSITO" → "2 DEPÓSITOS").
* **Exemplo:** AGUA DESTILADA 4X5L, após transferência para Trainmec, passa a aparecer com "2 DEPÓSITOS".

**RN07: Sincronização em tempo real**

* **Descrição:** O sistema opera em modo online e sincronizado, exibindo o status "Online & Sync" no rodapé da barra lateral.
* **Condição:** Sempre que o usuário está conectado e ativo.
* **Comportamento:** Todas as alterações de estoque são refletidas imediatamente na interface, sem necessidade de recarregar a página.
* **Exemplo:** Após clicar em "Salvar" no lançamento, a tabela atualiza o saldo em segundos.

**RN08: Feedback visual para operações concluídas**

* **Descrição:** Após cada operação de sucesso, o sistema exibe uma notificação (toast) na parte superior da tela.
* **Condição:** Sempre que um lançamento ou transferência é concluído com sucesso.
* **Comportamento:** Toast com mensagem de sucesso aparece automaticamente e desaparece após alguns segundos.
* **Exemplo:**
  * "Lançamento realizado com sucesso!" — ao salvar um ajuste de estoque
  * "Transferência realizada com sucesso!" — ao confirmar uma transferência

***

## ✅ Critérios de Aceitação

**CA01: Visualização do painel de métricas**

* **Dado que:** o usuário está autenticado e acessa o módulo Estoque Unificado
* **Quando:** a tela é carregada
* **Então:** o sistema deve exibir os 4 cards de resumo (Produtos, Disponível, Estoque Baixo, Sem Estoque) com os valores atualizados
* **Status:** Visível nas telas

**CA02: Lançamento de estoque — Entrada de Compra**

* **Dado que:** o usuário clica em "Novo Ajuste" e seleciona "Entrada de Compra"
* **Quando:** preenche produto, depósito, quantidade (ex: 50) e custo unitário (ex: R\$ 12,12), seleciona um motivo e clica em "Salvar"
* **Então:** o sistema deve atualizar o estoque físico e disponível do produto no depósito selecionado e exibir "Lançamento realizado com sucesso!"
* **Status:** Visível nas telas

**CA03: Atualização da tabela após lançamento**

* **Dado que:** um lançamento foi realizado com sucesso
* **Quando:** o modal é fechado
* **Então:** a tabela de inventário deve refletir o novo saldo no produto correspondente, sem necessidade de recarregar a página
* **Status:** Visível nas telas

**CA04: Transferência entre depósitos**

* **Dado que:** o usuário clica em "Transferir" no produto desejado
* **Quando:** seleciona depósito de origem, depósito de destino, define quantidade e clica em "Confirmar Transferência"
* **Então:** o sistema deve registrar a movimentação, atualizar os saldos de ambos os depósitos e exibir "Transferência realizada com sucesso!"
* **Status:** Visível nas telas

**CA05: Produto com múltiplos depósitos**

* **Dado que:** um produto tem estoque em mais de um depósito
* **Quando:** a tabela é carregada ou atualizada
* **Então:** a coluna "DEPÓSITOS" deve indicar o número correto de depósitos onde o produto possui saldo (ex: "2 DEPÓSITOS")
* **Status:** Visível nas telas

**CA06: Filtro por depósito**

* **Dado que:** o usuário clica em um filtro de depósito específico (ex: "Depósito Principal")
* **Quando:** o filtro é aplicado
* **Então:** a tabela deve exibir apenas os produtos com saldo naquele depósito, e os cards de métricas devem atualizar para refletir os totais do depósito selecionado
* **Status:** Visível nas telas

**CA07: Feedback de sincronização**

* **Dado que:** o usuário está conectado ao sistema
* **Quando:** qualquer tela do Estoque Unificado está aberta
* **Então:** o rodapé deve exibir o indicador "Online & Sync" confirmando a conexão ativa
* **Status:** Visível nas telas

**CA08: Bloqueio de lançamento sem produto/depósito**

* **Dado que:** o usuário abre o modal de Lançamento de Estoque
* **Quando:** tenta salvar sem selecionar produto ou depósito
* **Então:** o sistema deve bloquear o envio e indicar visualmente os campos obrigatórios
* **Status:** A validar *(comportamento não observado diretamente no vídeo)*

**CA09: Motivo obrigatório no lançamento**

* **Dado que:** o usuário está preenchendo o modal de lançamento
* **Quando:** tenta salvar sem selecionar um motivo
* **Então:** o sistema deve bloquear e indicar o campo de motivo como obrigatório
* **Status:** A validar *(campo visível no modal, mas validação não demonstrada no vídeo)*

***

## ⚠️ Pontos de Atenção

* **Campos obrigatórios identificados no Lançamento de Estoque:**
  * Tipo de Operação (Step 1)
  * Produto (Step 2)
  * Depósito (Step 2)
  * Quantidade — valor mínimo: 1 (Step 3)
  * Motivo (Step 4)

* **Custo Unitário:** Presente apenas na operação "Entrada de Compra", pois afeta o custo médio do produto. Deve ser preenchido com valor positivo em reais (R\$).

* **Depósito de Origem na Transferência:** Ao clicar em "Transferir" pela linha da tabela, o depósito de origem pode ser pré-selecionado. Verificar se o sistema exige que haja saldo suficiente no depósito de origem antes de confirmar a transferência. *(A validar)*

* **Carregamento ao filtrar depósito:** Ao clicar em uma aba de depósito, o sistema exibe "Carregando inventário..." com spinner antes de apresentar os resultados. Para listas grandes, isso pode levar alguns segundos.

* **Exportação CSV:** O botão CSV está disponível na interface, mas o comportamento completo não foi demonstrado no vídeo. Recomendável validar quais colunas são exportadas e se respeita os filtros ativos.

* **Estoque Reservado:** A coluna "RESERVADO" exibe `0` em todos os produtos visíveis. O comportamento do sistema quando há pedidos em andamento (reserva > 0) não foi demonstrado e deve ser validado separadamente.

***

## 💡 Dicas para o Usuário

* **Use "Entrada de Compra"** ao registrar recebimento de mercadorias com nota fiscal, pois esta opção atualiza também o custo médio unitário do produto — dado importante para precificação e gestão financeira.

* **Use "Acréscimo Manual"** para corrigir diferenças de inventário descobertas em contagem física, quando não há NF associada e você não deseja alterar o custo médio.

* **Ao transferir estoque**, verifique sempre se o depósito de origem possui saldo suficiente para a quantidade que deseja mover, para evitar erros na operação.

* **Utilize os filtros por depósito** para ter uma visão detalhada do estoque em cada local separadamente. O card "DISPONÍVEL" se ajusta automaticamente ao depósito filtrado.

* **Acompanhe o indicador "Online & Sync"** no rodapé da barra lateral. Se o sistema estiver offline, as operações podem não ser salvas imediatamente.

* **O campo "Observação" na Transferência** é opcional, mas recomenda-se preencher o motivo da movimentação (ex: "Redistribuição para canal ML") para fins de histórico e auditoria.
