Estoque e CMV

Estoque de consumíveis

Cadastre os produtos que você gasta nos atendimentos (cera, shampoo, anestésico, lâmina…) e o sistema dá baixa automaticamente quando o serviço vinculado é concluído. Entradas de compra com custo unitário alimentam o custo médio ponderado do produto — base do CMV (custo da mercadoria vendida).

Cadastrar produto

Em Estoque, no formulário lateral, informe nome, unidade (un, ml, g, kg…) e opcionalmente o estoque mínimo e o custo de referência. O estoque inicial começa em zero — você dá entrada da primeira leva pelo botão Entrada na linha do produto.

Vincular produto a serviço

Na ficha do serviço (Serviços > Editar), a seção Consumíveis liga produtos com a quantidade consumida em cada execução. Quando o agendamento que usa esse serviço vai pra Concluído, o sistema cria um movimento de estoque negativo e decrementa o saldo do produto.

Se o atendimento volta de Concluído pra outro estado (ex.: cancelamento tardio), o consumo é revertido automaticamente.

Entrada com custo (compra)

O botão Entrada na linha do produto abre um modal pra registrar uma compra: quantidade, custo unitário em reais e nota livre (fornecedor, NF, lote). O movimento fica como Entrada (compra) no histórico, com o custo unitário gravado em snapshot — nunca mais muda mesmo que o produto seja editado depois.

Custo médio ponderado

A cada entrada com custo, o sistema recalcula o custo médio ponderado do produto:

novoMédio = (estoque atual × médio atual + qtd entrada × custo unitário) / (estoque atual + qtd entrada)

O cálculo roda dentro de uma transação pra evitar conflito entre entradas concorrentes. Se o estoque está em zero (ou negativo) na hora da entrada, o custo médio passa a ser o próprio custo unitário da nova entrada — sem distorção por saldo histórico.

O custo médio aparece na lista (Estoque) e na ficha do produto (Editar). Quem prefere não usar custo deixa em branco — comportamento atual segue intacto.

Ajuste manual

O botão Ajustar serve pra correções sem custo (perda, validade, inventário). Cria um movimento Ajuste manual com motivo livre. Não recalcula custo médio.

Margem por serviço

No card Serviços mais rentáveis de Relatórios → Insights, os serviços com receita ganham uma coluna margem % calculada como:

margem = (receita do serviço − Σ(quantidade × custo médio do produto)) / receita

A margem aparece verde (≥50%), neutra (≥20%) ou vermelha(<20%). Pra funcionar, você precisa ter:

  • A receita do serviço cadastrada (Estoque → Editar serviço → Consumíveis).
  • O custo médio do produto preenchido — entrando compras com custo unitário ou colocando o custo de referência direto na ficha do produto.

Sem nenhum dos dois, a coluna fica em branco — a dica abaixo do card avisa o que falta configurar.

Lote e validade (opcional — FEFO)

Em Configurações → Estoque, ligue Usar controle de lote e validade. Quando ativo:

  • O modal Entrada ganha campos opcionais Código do lote e Validade. Re-entrada do mesmo código acumula saldo no lote existente.
  • O auto-consumo passa a usar FEFO (first-expired-first-out) — quando o agendamento é concluído, o sistema consome do lote que vence primeiro. Lotes sem data vão por último.
  • Card Lotes em estoque aparece na ficha do produto, ordenado por validade. Linhas em vermelho (vencidos) ou amarelo (vence em ≤7 dias).
  • O cron de alerta envia WhatsApp pro dono uma vez por lote vencendo (controlado pelo campo "Alertar quantos dias antes do vencimento?" nas configurações; 0 desliga).

Quem ignora: quem não trabalha com perecível (barbearia, salão de cabelo) deixa o toggle desligado e o estoque funciona exatamente como antes — só Product.stock conta.

Estoque baixo

Quando o saldo cruza o estoque mínimo durante a baixa automática, o produto ganha o badge baixo na lista. Você também pode ligar um alerta no WhatsApp em Configurações > Alertas WhatsApp pro dono pra ser avisado sem precisar abrir o painel.