Jefacil Jefacil

A v1.4 unificou o que antes era duas telas separadas (Catálogo + Estoque). Agora a tela Produtos cria o cadastro mestre e já vincula à(s) loja(s) com preço e estoque numa só operação. /erp/catalogo redireciona pra /erp/produtos (compatibilidade com bookmarks antigos).

Por que mudou: muito lojista cadastrava só o Catálogo e o produto não aparecia no PDV — o segundo passo (vincular à loja) era pegadinha. Pra quem trabalha sem controle de estoque (configurável por loja em Configurações → Lojas), o efeito era ainda pior.

Cadastrar um produto

Selecione a loja no topo. Produtos → Novo produto:

A aba Produto cobre o caso comum:

  • Nome (obrigatório).
  • SKU (opcional, único por empresa).
  • Preço de venda (obrigatório).
  • Estoque inicial e alerta de estoque mínimo — só aparecem se a loja tem controle de estoque ativo.
  • Descrição (até 2000 caracteres).
  • Foto (PNG/JPG/WEBP/SVG, até 512 KB) — usada no feed do Google Shopping e no catálogo do WhatsApp.

A aba Outras lojas (só aparece em tenants multi-loja) deixa marcar onde mais o produto deve estar disponível e definir preço/estoque de cada uma. Tudo em uma transação — se qualquer loja falhar, nenhuma é criada.

A aba Avançado concentra o que é raro mas importante:

  • Comissão do vendedor (%) — override que sobrescreve o padrão do vendedor.
  • Dados fiscais (NCM 8 dígitos, CEST 7 dígitos, Origem 0–8, CFOP 4 dígitos) — necessários pra emitir NFC-e.
  • Catálogo online: marca, GTIN/EAN (8/12/13/14 dígitos), MPN, categoria livre e categoria Google Product — saem nos feeds do Google Shopping e Meta Advantage+ quando preenchidos.

Editar um produto

Produtos → ícone de lápis. O dialog tem 2 abas:

  • Produto — preço e estoque desta loja, mais nome/SKU/descrição/foto e (se atacado habilitado) faixas de preço.
  • Avançado — campos fiscais e de catálogo online; mudanças aqui valem pra todas as lojas (são do produto mestre).

Cada mudança de preço gera um registro no histórico de preços (auditável em Relatórios → Histórico de preços).

Pra movimentar estoque sem editar preço (ex.: chegou uma caixa de fornecedor), use Movimentações → Entrada — gera StockMovement rastreável com fornecedor associado.

Loja sem controle de estoque

Em Configurações → Lojas → editar, o toggle “Controle de estoque” desliga o estoque pra aquela loja. Efeito:

  • Tela Produtos esconde colunas e KPIs de estoque.
  • PDV deixa vender mesmo com saldo zerado, não decrementa.
  • Form de cadastro/edição esconde os campos de estoque.

Útil pra serviço, food, qualquer modelo onde “saldo” não faz sentido.

Faixas de preço de atacado

Se a loja tem atacado habilitado (toggle em Configurações → Lojas), o dialog de edição mostra a seção Faixas de preço:

  • 10+ → R$ 8,00
  • 50+ → R$ 6,00
  • 100+ → R$ 5,00

O PDV aplica automaticamente a maior faixa que couber na quantidade. Veja também Tabelas de preço e atacado B2B.

Soft delete

Produtos no catálogo não são apagados — são marcados como is_active: false. Vendas antigas continuam intactas, relatórios não quebram. Pra reativar, basta editar.

Importação em massa

Produtos → Importar CSV. Baixa o template, preenche e faz upload. Colunas:

ColunaObrigatórioNotas
nomesimaté 200 caracteres
skurecomendadoúnico por empresa; usado pra evitar duplicata em re-import
descricao, ncm, cest, origem, cfop_vendanãodados fiscais opcionais
preconãoaceita 19,90, 19.90, 1.299,50. Quando preenchido, vincula o produto à loja ativa com esse preço
estoquenãointeiro >= 0; ignorado se a loja não controla estoque

Se a loja ativa estiver selecionada (header X-Store-Id enviado pela UI), as linhas que trouxerem preco viram StoreProduct automaticamente. Sem preco, só o catálogo é populado — o vínculo à loja você faz depois pela tela.

A resposta volta com imported, updated, store_products_created, store_products_updated e os erros por linha (validação Zod). Tudo em uma transação — se houver erro, nada entra.

Mesmo esquema vale pra Clientes e Fornecedores.