Escopo para desenvolvimento

Sistema de Estoque Multi-Estoque

Controle de mercadoria em múltiplos estoques físicos, com entrada, baixa, transferência entre estoques, entrada por Nota Fiscal e composição de produtos em pacotes e kits.

ClienteMerion
DocumentoEscopo funcional
Versão1.1
DestinoEquipe de desenvolvimento
01

Objetivo

Construir um sistema de controle de estoque que opere com múltiplos estoques físicos dentro de uma mesma empresa. O sistema permite entrada, baixa e transferência de mercadoria entre estoques, entrada de mercadoria a partir de Nota Fiscal eletrônica e o controle de produtos compostos, em que uma unidade de venda agrupa várias unidades de um produto base.

Todo saldo é mantido por produto e por estoque. Toda alteração de saldo gera um registro rastreável de movimentação, o kardex.

02

Glossário

TermoDefinição
Estoque físicoLocal que armazena mercadoria: matriz, filial ou centro de distribuição.
Produto / SKUItem controlado, identificado por código único.
Produto simplesItem vendido e estocado em sua unidade básica. Exemplo: 1 bombom.
Bundle / KitProduto composto por uma ou mais unidades de outros produtos. Exemplo: 1 pacote com 12 bombons.
ComponenteProduto que entra na composição de um bundle.
SaldoQuantidade de um produto em um estoque específico.
Entrada / BaixaMovimentação que aumenta ou reduz o saldo de um estoque.
TransferênciaMovimentação que reduz o saldo na origem e aumenta no destino.
Montagem / DesmontagemConversão de saldo entre um bundle e seus componentes.
KardexHistórico cronológico das movimentações.
Estoque mínimoQuantidade abaixo da qual o produto entra em alerta.
03

Atores

Papéis e permissões finais a alinhar. O escopo prevê controle de acesso por papel.

04

Entidades de dados

4.1Estoque físico warehouse

CampoTipoObrigatórioObservação
ididentificadorsimchave primária
nometextosim"Matriz São Paulo"
codigotextosimcódigo curto único, "SP-01"
tipoenumsimMatriz, Filial, Centro de Distribuição
cidade / uftextonão
capacidadeinteironãoindicador de ocupação
ativobooleanosimestoque inativo não recebe movimentação

4.2Produto product

CampoTipoObrigatórioObservação
ididentificadorsim
skutextosimúnico
nometextosim
tipoenumsimsimples ou bundle
categoriatextonão
unidadetextosimUN, PCT, CX, KIT
custodecimalnãocusto médio para valoração
estoque_minimointeironãobase do alerta
controla_estoque_propriobooleanocondicionalsó para bundle. Ver seção 5.7
ativobooleanosim

4.3Composição do bundle bundle_component

Define de quais produtos e em que quantidade um bundle é formado. Um bundle tem uma ou mais linhas de composição.

CampoTipoObrigatórioObservação
bundle_ididentificadorsimproduto pai, tipo bundle
componente_ididentificadorsimproduto componente
quantidadeinteirosimunidades do componente por unidade do bundle

Exemplo: o pacote de bombom é um produto bundle com uma linha de composição: componente "Bombom", quantidade 12.

4.4Saldo stock_balance

CampoTipoObrigatórioObservação
product_ididentificadorsim
warehouse_ididentificadorsim
quantidadeinteirosimchave composta produto + estoque

O saldo é resultado calculável das movimentações. Manter o saldo materializado para leitura rápida e reconstruível a partir do kardex para auditoria.

4.5Movimentação stock_movement

CampoTipoObrigatórioObservação
ididentificadorsim
tipoenumsimentrada, baixa, transferencia, nota_fiscal, montagem, desmontagem
product_ididentificadorsim
quantidadeinteirosimsempre positiva; o tipo define o efeito
warehouse_origemidentificadorcondicionalbaixa e transferência
warehouse_destinoidentificadorcondicionalentrada, transferência e NF
documentotextonãopedido, OS, número da NF
motivotextonãoclassificação do movimento
ref_movimentacaoidentificadornãoagrupa lançamentos de uma mesma operação (montagem, transferência, estorno)
usuario_id / data_horasimgerados pelo sistema

Movimentações são imutáveis. Correção de erro acontece por movimentação de estorno, nunca por edição ou exclusão.

4.6Nota Fiscal invoice e item invoice_item

CampoEntidadeObservação
numero, chave_acesso, fornecedorinvoicedados do cabeçalho da NF-e
warehouse_destinoinvoiceestoque que recebe os itens
statusinvoicerascunho, conferida, lançada
sku_nf, descricao_nfinvoice_itemcProd e xProd do XML
quantidade, custo_unitarioinvoice_itemqCom e vUnCom do XML
product_idinvoice_itemvínculo ao produto; nulo quando SKU novo
05

Funcionalidades

5.1Cadastro de estoques físicos

Criar, editar e inativar estoques. Listagem com unidades e ocupação por estoque.

5.2Cadastro de produtos

Criar, editar e inativar produtos simples e bundles. Visão de saldo do produto em cada estoque.

5.3Entrada de estoque

O operador escolhe o estoque de destino, o produto, a quantidade, o documento e o motivo. O sistema soma a quantidade ao saldo e grava uma movimentação Entrada.

5.4Baixa de estoque

O operador escolhe o estoque de origem, o produto, a quantidade, o documento e o motivo. O sistema subtrai do saldo e grava uma movimentação Baixa.

5.5Transferência entre estoques

O operador escolhe origem, destino, produto e quantidade. O sistema executa as duas pontas de forma atômica e grava uma movimentação Transferência que registra origem e destino.

5.6Entrada por Nota Fiscal

O operador informa o estoque de destino e os dados da nota, importa o XML da NF-e e confere os itens extraídos. Ao confirmar, o sistema dá entrada de cada item no estoque de destino, gerando uma movimentação Nota fiscal por item, vinculada à nota.

5.7Bundles e composição de produtos

O sistema entende que 1 bombom e 1 pacote de bombom são unidades diferentes do mesmo material. O pacote é um produto bundle cuja composição aponta para o bombom com um fator de conversão.

Exemplo Pacote de bombom
Bundle
Pacote de bombom
unidade PCT
contém 12×
Componente
Bombom
unidade UN

Cada bundle pode operar em um de dois modos, definidos pelo campo controla_estoque_proprio:

A montagem gera uma movimentação Montagem que agrupa, sob o mesmo ref_movimentacao, a baixa do componente e a entrada do bundle. A desmontagem é o inverso.

5.8Consulta de saldo e posição consolidada

Painel com totais: SKUs ativos, unidades em estoque, valor em estoque a custo e quantidade de produtos abaixo do mínimo. Visão por estoque físico e por produto. Para bundles virtuais, exibir o saldo equivalente em pacotes calculado a partir do componente.

5.9Kardex e alertas

Histórico cronológico com filtro por tipo, produto, estoque e período. Produto cujo saldo total fica menor ou igual ao estoque mínimo entra em alerta.

06

Regras de negócio

  1. Quantidade de movimentação é sempre maior que zero.
  2. Baixa e transferência exigem saldo suficiente na origem. Comportamento com saldo insuficiente definido na seção 8.
  3. Em transferência, origem e destino devem ser diferentes.
  4. Transferência é atômica. Se uma ponta falhar, nenhuma ponta é aplicada.
  5. Montagem exige saldo de componente suficiente no estoque. Quantidade de componente consumida é a quantidade do bundle multiplicada pela composição.
  6. Montagem e desmontagem ocorrem dentro de um único estoque. Não movem saldo entre estoques.
  7. Bundle virtual nunca tem saldo próprio. Seu disponível é sempre derivado do componente.
  8. Movimentação não é editada nem excluída. Erro é corrigido por estorno que referencia a original.
  9. Saldo nunca é alterado fora de uma movimentação registrada.
  10. Estoque inativo e produto inativo não recebem novas movimentações.
  11. Toda movimentação registra usuário e data e hora.
  12. Valor em estoque usa o custo do produto vigente no momento da consulta. O custo de um bundle físico pode ser derivado da soma dos componentes.
07

Fluxos principais

7.1Transferência entre estoques

1. Operador seleciona origem, destino, produto e quantidade 2. Sistema valida: origem ≠ destino, quantidade > 0, saldo suficiente 3. Transação única: saldo[origem] −= qtd · saldo[destino] += qtd 4. Grava movimentação tipo transferencia (origem, destino, qtd) 5. Confirmação ao operador

7.2Entrada por NF-e

1. Operador informa estoque de destino e dados da nota 2. Importa o XML; sistema extrai itens (cProd, xProd, qCom, vUnCom) 3. Sistema vincula itens a produtos por SKU ou descrição 4. Operador confere itens e vínculos 5. Para cada item: saldo[destino] += qtd + movimentação nota_fiscal 6. Nota muda para status "lançada"

7.3Montagem de bundle (pacote de bombom)

1. Operador escolhe o bundle, o estoque e a quantidade de pacotes 2. Sistema calcula: componente_necessário = qtd_pacote × composição 3. Valida saldo do componente no estoque 4. Transação única, mesmo ref_movimentacao: saldo[bombom] −= componente_necessário (baixa) saldo[pacote] += qtd_pacote (entrada) 5. Grava movimentação tipo montagem Desmontagem executa o inverso
08

Pontos a decidir antes do desenvolvimento

01
Saldo negativoA baixa e a transferência bloqueiam quando não há saldo, ou permitem saldo negativo com aviso?
02
Modo padrão do bundleO pacote de bombom nasce como bundle virtual (explode na baixa) ou físico (montado e estocado)? O sistema permite os dois por produto?
03
SKU novo na NFItem sem vínculo cadastra produto automaticamente, ou vai para uma fila de conciliação até aprovação?
04
Regra de vínculo na NFO casamento usa apenas SKU, ou também descrição e GTIN/EAN?
05
CustoO custo é atualizado pela NF a cada entrada (custo médio) ou permanece manual? O custo do bundle é manual ou somado dos componentes?
06
Composição aninhadaUm bundle pode conter outro bundle, ou a composição tem apenas um nível?
07
PermissõesQuais papéis podem dar baixa, transferir, montar e lançar NF, e quais apenas consultam?
08
Unidade de medidaHá conversão entre unidade de compra na NF e unidade de estoque, ou são sempre iguais?
09

Fora do escopo desta fase

Itens podem entrar em fases seguintes mediante novo escopo.

Merion · Escopo funcional · v1.1