MódulosCompras e Suprimentos

Estoque / Almoxarifado

Almoxarifado por obra, custo médio ponderado automático, requisições internas, transferências, inventário ABC

Quando usar

Cada obra decide se opera com almoxarifado:

  • Sem almoxarifado → entrega direta na frente. Recebimento = consumo.
  • Com almoxarifado → padrão para obras médias/grandes. Material entra como estoque, frente de obra solicita via RI.

Onde acessar

Sidebar Execução → Estoque ou direto /projects/[id]/estoque.

Hub com 5 tabs: Saldos | Movimentos | Requisições | Inventário | Almoxarifados.

Setup inicial (uma vez)

tab Almoxarifados → "Novo almoxarifado":

  • Código (ex: ALM-01)
  • Nome (ex: Almoxarifado Central)
  • Localização
  • Toggle "Permite saldo negativo" (não recomendado — só ativar para casos específicos)

Após criado, edite o PO e associe almoxarifado_destino_id. A entrada no estoque é automática quando o recebimento é aprovado.

Custo médio ponderado (CMP)

Calculado por trigger PostgreSQL com FOR UPDATE lock anti-concorrência:

Entrada

novo_CMP = (qtd_atual × CMP_atual + qtd_entrada × custo_entrada) / (qtd_atual + qtd_entrada)

Saída

CMP não muda. Saldo apenas decrementa. Saídas usam o CMP atual para cálculo do CMV.

Saldo zero reseta CMP para 0 (próxima entrada define novamente).

Tipos de movimento (9)

TipoQuando
entrada_compraRecebimento aprovado de PO
entrada_devolucaoCliente devolve item (raro em construção)
entrada_transferenciaTransferência de outra obra (par com saida_transferencia)
entrada_ajusteAjuste de inventário positivo
saida_consumoRI atendida (consumo na obra)
saida_devolucaoDevolução ao fornecedor
saida_transferenciaSaída para outra obra
saida_ajusteAjuste de inventário negativo
saida_perdaPerda registrada (com motivo obrigatório)

Saldos

tab Saldos: lista por (almoxarifado, insumo). Exibe:

  • Quantidade
  • Custo médio unitário
  • Valor total (computed)
  • Ponto de pedido (gera alerta visual quando saldo cai abaixo)
  • Última movimentação
  • Botões inline: Transferir / Inventariar

Filtros: por almoxarifado, "abaixo do ponto de pedido".

Requisições Internas (RI)

Frente de obra solicita material ao almoxarife.

Criar RI

tab Requisições → "Nova RI":

  • Almoxarifado origem
  • Tarefa do cronograma (rastreabilidade)
  • Prioridade (alta / média / baixa)
  • Justificativa (mínimo 5 chars)
  • Itens (insumo + qtd)

Aprovação

Status inicial: aguardando_aprovacao. Aprovador é o gerente — clica "Aprovar" na lista.

Regra: solicitante ≠ aprovador. Se solicitante for gerente, aprovação escala para o nível acima.

Atender

Almoxarife atende quando o material está separado fisicamente:

  • Botão "Atender" abre dialog com campo de quantidade por item (pré-preenchido com restante)
  • Sistema cria saida_consumo no estoque automaticamente (CMP atual)
  • Atualiza quantidade_atendida do item da RI
  • Status final: atendida (todos completos) ou parcialmente_atendida

Vinculação contábil

Cada saída de consumo marca:

  • tarefa_cronograma_id (da RI)
  • arvore_item_id (do nó orçamentário)

Isso permite saber, ao fim de cada etapa do cronograma, quanto custou efetivamente em material.

Transferências entre almoxarifados/obras

Botão de transferência em qualquer linha de saldo:

  • Selecione destino, quantidade
  • Sistema cria 2 movimentos pareados (saída + entrada) com mesmo movimento_pareado_id
  • Custo médio do origem é preservado no destino

Atomicidade: se a entrada destino falha, sistema gera movimento compensatório entrada_ajuste no origem para reverter automaticamente.

Ajuste de inventário

Quando contagem física diverge do sistema:

  • Botão "Inventariar" num saldo abre dialog
  • Informa quantidade real (do físico)
  • Sistema calcula diferença e gera entrada_ajuste ou saida_ajuste
  • Motivo obrigatório (mínimo 10 chars — perda, quebra, achado, contagem errada anterior)
  • Atualiza ultimo_inventario_at e ultimo_inventario_diferenca no saldo

Inventário rotativo (curva ABC)

tab Inventário: lista todos os saldos do empreendimento classificados por curva ABC pelo consumo financeiro dos últimos 12 meses:

ClasseCritérioFrequência recomendada
ATop 80% do gastoMensal
B80%–95%Trimestral
C95%–100%Semestral

Trigger automático marca itens com inventário vencido. KPIs no topo: total / A / B / C / vencidos.

Filtro "Apenas vencidos" para focar.

Botão "Inventariar" rápido por item.

Integração com recebimento

Quando recebimento é aprovado:

  • Function gerar_entrada_compra_recebimento(p_recebimento_id) é chamada
  • Para cada item aceito com insumo, cria entrada_compra
  • Idempotente — verifica se já há movimentos para o recebimento antes de criar

Se recebimento foi divergente e aprovado depois, a entrada acontece quando o approval recebimento_divergente é resolvido (callback dispara a function).

Inventário no balanço (CMV)

Relatório mensal de movimentações é a base do CMV (custo das mercadorias vendidas) na DRE da incorporadora.

Inventário valorizado por obra — listagem para fechamento contábil.

Permissões

PermissãoEscopoDefault
compras_estoque:readprojectTodos exceto comercial
compras_estoque:writeprojectengenheiro+ (movimentações, RIs, transferências)
compras_estoque:manageprojectgerente+ (configurar almoxarifado, ajustes de inventário)

On this page