📦

Módulo: Produtos e Estoque – BarberBot

Cadastro de produtos + movimentação de estoque (entradas/saídas) • base real em sistema/painel/paginas/produtos/ • atualizado em 16/01/2026

Este módulo gerencia o cadastro de produtos e o controle de estoque no painel administrativo. Ele segue o padrão do BarberBot: página do módulo (produtos.php) + listagem via AJAX (produtos/listar.php) + endpoints de ação (salvar, excluir, entrada, saida).

Estrutura (onde mexer)

sistema/painel/paginas/
  ├─ produtos.php
  ├─ cat_produtos.php
  └─ produtos/
      ├─ listar.php
      ├─ salvar.php
      ├─ excluir.php
      ├─ entrada.php
      └─ saida.php

Tabelas envolvidas (MySQL)

Abaixo está o que existe no dump atual do banco (arquivo barberbotcom_barberbot.sql). Se sua base tiver tabelas extras, documente junto para manter o histórico.

produtos colunas

id, nome, descricao, categoria, valor_compra, valor_venda, estoque, foto, nivel_estoque, comissao_tipo, comissao_valor

cat_produtos colunas

id, nome

entradas e saidas (log de estoque)

entradas: id, produto, quantidade, motivo, usuario, data
saidas:   id, produto, quantidade, motivo, usuario, data
Ponto crítico: entradas/saídas são “log” de movimento. Se faltar transação, você pode gravar o log e falhar na atualização do estoque (ou o inverso). Em manutenção, prefira BEGIN / COMMIT / ROLLBACK para garantir atomicidade.

Fluxos do módulo (padrão BarberBot)

1) Listagem (AJAX)

Nome | Categoria | Valor Compra | Valor Venda | Estoque | Ações

2) Cadastrar / Editar produto

POST: categoria, comissao_tipo, comissao_valor, descricao, id, nivel_estoque, nome, valor, valor_compra, valor_venda
FILES: foto

3) Entrada de estoque

POST: estoque, id, motivo_entrada, quantidade_entrada

4) Saída de estoque

POST: estoque, funcionario_saida, id, motivo_saida, quantidade_saida

5) Excluir produto

POST: id

Upload de foto do produto

O endpoint produtos/salvar.php aceita envio de arquivo via multipart/form-data. Em manutenção, procure pelo bloco de “upload” e revise:

Recomendação prática: salve a foto com nome randômico (hash) e guarde apenas o nome no banco. Isso evita conflito de arquivos e simplifica cache/CDN.

Pontos críticos e recomendações (para o próximo dev)