Estoque negativo no Protheus: onde procurar o problema?
Entendendo o conceito de estoque negativo no contexto do Protheus
Estoque negativo é um sintoma — não a causa — que indica divergência entre saldo contabilizado pelo sistema e o estoque lógico/operacional esperado. No Protheus essa divergência pode decorrer de diferenças entre saldos calculados a partir de movimentos (entradas, saídas, ajustes, baixas) e registros físicos, de parametrizações que permitem operação em negativo, ou de inconsistências geradas por integrações, jobs em lote e customizações (ADVPL/rotinas). Para diagnosticar corretamente é necessário separar os conceitos de saldo teórico (soma dos movimentos lançados) e saldo disponível (aplicado para bloqueios e vendas), e entender como cada rotina do Protheus impacta ambos.
Fontes comuns que geram estoque negativo
As causas típicas costumam se agrupar em categorias técnicas e operacionais. Conhecer cada uma ajuda a direcionar a investigação.
- Parametrização do sistema: parâmetros que permitem vendas mesmo com saldo insuficiente, regras de bloqueio não ativadas ou parâmetros de controle de estoque desativados.
- Movimentos não contabilizados ou pendentes: notas fiscais de entrada/saida lançadas mas não confirmadas/baixadas, recontagens e ajustes pendentes, entradas cuja baixa foi abortada por erro.
- Concorrência e transações: processamento simultâneo de pedidos, commits não realizados, deadlocks ou rollback em processos que deixam movimentos incompletos.
- Integrações e jobs externos: WMS, transportadoras, B2B, e-commerce e processos ETL que inserem ou atualizam movimentos fora do fluxo padrão do Protheus.
- Customizações e rotinas ADVPL: rotinas desenvolvidas que não atualizam saldo corretamente, triggers que não tratam quebra de regra ou registros duplicados.
- Gestão por lote/serie/armazenagem: consumo errado de lote, redestribuição de saldo por depósito, ou regras de apuramento de custo que alteram o saldo por lote, mas não o saldo global.
- Erro humano e operações manuais: ajustes de estoque feitos diretamente na base de dados, lançamentos duplicados ou com sinal invertido.
Onde começar: identificação rápida dos pontos com maior probabilidade
Implemente uma triagem inicial para classificar o incidente em urgente (impacto em venda/produção) ou investigável. Passos iniciais recomendados:
- Identificar produtos/depositos com saldo negativo via consulta agregada.
- Verificar se o parâmetro que permite estoque negativo está ativo.
- Listar movimentos do período recente por ordem cronológica e identificar operações pendentes (NF-e sem baixa, ordens de produção não apontadas).
- Checar jobs/rotinas agendadas (scheduler/serviços Windows/Linux, integrações) executadas nas últimas 24–48 horas.
Exemplo de consulta genérica para identificar saldos negativos (adaptar para o esquema de dados do cliente):
SELECT produto_id, deposito_id, SUM(qtd_mov) AS saldo FROM tabela_movimentos GROUP BY produto_id, deposito_id HAVING SUM(qtd_mov) < 0;
Análise de movimentos detalhada: como rastrear a origem do débito
Depois da triagem inicial, execute uma análise detalhada por produto/depósito. O objetivo é responder: quando o saldo passou a ficar negativo e quais transações contribuíram diretamente?
- Recorte temporal por evento: extraia todos os movimentos (entradas, saídas, ajustes, estornos) do produto do dia anterior ao primeiro sinal de negativo até o momento atual. Ordene por data/hora e sequencial do lançamento.
- Auditoria de documentos: identifique documentos fiscais (NF-e, CT-e), pedidos, notas de devolução e ordens de transferência com status não finalizado. Muitas vezes uma NF de entrada com erro de conferência fica em "digitada" e não gera a entrada física.
- Verificação de movimentos fantasma: procure por lançamentos com usuário system, processos batch, ou rotinas que geram movimentações sem referência ao documento original — isso indica integração automatizada.
- Separação por natureza do movimento: verificar se o negativo vem de SAÍDAS (vendas) sem correspondentes ENTRADAS, ou de ajustes manuais. Classificar por tipo facilita fixar rotina causadora: faturamento, expedição, PCP, inventário.
Queries auxiliares úteis (pseudo-SQL para adaptar):
- Movimentos por usuário/processo: SELECT usuario, processo, COUNT(*) FROM movimentos WHERE produto='XXX' AND data >='YYYY-MM-DD' GROUP BY usuario, processo;
- Últimos movimentos ordenados: SELECT * FROM movimentos WHERE produto='XXX' AND deposito='YYY' ORDER BY data_hora DESC;
Verificação das parametrizações e regras de negócio do Protheus
Parâmetros do sistema determinam comportamento crítico: bloqueio de venda por saldo, exigência de baixa de NF-e para liberar estoque, regras de cálculo de saldo por depósito e por lote. Em ambientes Protheus é comum encontrar parâmetros que diferem entre homologação e produção — validar ambos é essencial.
- Regras de bloqueio e disponibilidade: confirme se o fluxo comercial respeita o bloqueio automático quando saldo é insuficiente ou se existe parametrização que libera pedidos mesmo com saldo negativo.
- Regras de custo: custo por média, custo por lote, FIFO/LIFO afetam apuração e às vezes o saldo disponível. Configurações de custo que alteram o saldo por lançamento de revalorização podem gerar efeitos colaterais.
- Configuração de depósitos: se o cliente usa depósitos virtuais, cross-docking ou depósito negativo configurado, verifique regras que movem saldo entre depósitos automaticamente.
- Validações de estoque para nota fiscal: confirme se o lançamento de NF-e exige conferência física antes de atualizar o estoque ou se a rotina de baixa automática está ativa.
Obs.: anote as configurações ativas antes de qualquer alteração e documente o entendimento para auditoria.
Impacto de integrações, jobs em lote e replicações de banco
Integrações externas (WMS, e-commerce, TMS, manufatura) são causas recorrentes. Além disso, jobs agendados que consolidam movimentos, atualizam saldos ou fazem reconciliações podem deixar o sistema em estado inconsistente se falharem parcialmente.
- Mensageria e filas: verifique filas de integração (MQ, filas ADF) para mensagens não processadas ou processadas fora de ordem.
- ETL e atualizações massivas: processos que atualizam registros em lote via SQL/Stored Procedures podem ter sido interrompidos, deixando saldos temporariamente negativos.
- Replicação/HA: em clusters e replicações (mirroring, log shipping) atrasos de sincronização podem projetar saldos distintos entre nós; garanta que está consultando a base primária e não uma réplica com latência.
- Jobs de recalculo: rotinas agendadas de apuração de saldo, se rodadas simultaneamente por instâncias diferentes, podem causar condições de corrida.
Customizações ADVPL, triggers e procedimentos armazenados: pontos sensíveis
Customizações frequentemente intervêm diretamente em tabelas de estoque ou criam movimentos auxiliares. Erros comuns incluem commits em pontos errados, tratamentos deficientes de exceção e operações que não disparam as rotinas de atualização de saldo oficiais do Protheus.
- Revisão de código: audite funções/rotinas customizadas que inserem registros na tabela de movimentos, alteram estoque ou chamam API internas do Protheus. Procure por uso invulgar de SQL direto, falta de tratamento de rollback e logs insuficientes.
- Triggers e jobs DB: triggers de banco que fazem updates ou inserts podem causar duplicidade ou inversão de sinais nas quantidades se não estiverem alinhadas com as regras do Protheus.
- Testes unitários e cobertura: exija teste automatizado nas rotinas que afetam estoque; cenários de concorrência (multi-user) são essenciais.
Procedimento de auditoria e reconciliação passo a passo
Para corrigir e mitigar risco, execute uma auditoria controlada seguindo estes passos:
- Isolamento: identifique produtos/depositos com saldo negativo e isole-os do fluxo comercial (bloqueie venda/produção até resolver).
- Dump de dados: extraia todas as linhas de movimentos para os SKUs afetados com filtros por data, usuário e tipo de movimento.
- Reconciliação direta: some entradas e saídas para cada SKU e compare com o saldo registrado. A discrepância indicará qual faixa de datas ou rotina provocou o problema.
- Verificação física: realizar inventário físico ou conferência pontual nos SKUs críticos para corroborar o saldo real.
- Ação corretiva controlada: gerar documentos de ajuste (nota de ajuste/entrada ou baixa) pelo fluxo correto do sistema para restaurar o saldo, preferencialmente com justificativa e responsável apontado.
- Pós-correção: reexecutar rotinas de fechamento e relatórios para confirmar que o problema não reaparece.
Importante: evitar UPDATE direto nas tabelas de saldo sem utilizar rotinas do Protheus; ajustes manuais reduzem a rastreabilidade e podem quebrar controles fiscais.
Correção: estratégias e comandos seguros
Ao planejar correções, prefira sempre criar documentos que passam pela lógica do sistema (notas de ajuste, ordens de expedição inversa, entradas manuais). Procedimentos típicos:
- Estornar movimentos inválidos: se houver movimento de saída que não deveria ter sido processado, estorne pelo módulo (faturamento/expedição) para que as rotinas de baixa sigam o fluxo normal.
- Gerar nota de ajuste: quando o estoque físico for maior que o sistema, registrar nota de entrada/ajuste com histórico técnico; se for menor, gerar baixa/consumo com justificativa.
- Reprocessar filas e jobs: identificar mensagens falhas nas filas de integração e reprocessá-las na ordem correta; observar dependências por timestamps.
- Rollback controlado: quando houver erro em lote recente que afetou saldos, e for possível, restaurar backup transacional e reprocessar com controle de concorrência.
Se for inevitável executar updates diretos, seguir estas premissas: (1) executar primeramente em ambiente de homologação, (2) gerar backup completo da(s) tabela(s), (3) criar scripts idempotentes e reversíveis, (4) documentar e obter autorização da governança de TI/negócio.
Prevenção e melhores práticas para evitar recorrência
Implementar controles preventivos reduz muito a probabilidade de novos episódios de estoque negativo.
- Monitoramento e alertas: criar jobs que verificam saldos negativos e disparam alertas por e-mail/SMS com lista de produtos e responsáveis.
- Locking e serialização: para processos críticos, aplicar mecanismos de lock a nível de negócio (por exemplo, bloquear SKU durante baixa/expedição) para evitar condições de corrida.
- Fluxo de integração padronizado: garantir que integrações escrevam por APIs/rotinas oficiais do Protheus sempre que possível; evitar gravação direta em tabelas.
- Auditoria e logging: ampliar log de transações que alteram estoque com informações de processo e racional; ter um histórico consultável com data/hora, usuário/processo e hash de transação.
- Segregação de ambientes: garantir que homologação e produção usem bases distintas e que deploys de rotina/patch sejam testados em homologação com volume representativo.
- Capacitação operacional: treinar usuários nas diferenças entre movimentações que afetam saldo e registros auxiliares; processos operacionais inadequados são causas frequentes.
Checklist técnico para investigação rápida
Use este checklist para padronizar investigação:
- Identificar SKUs e depósitos com saldo negativo (consulta agregada).
- Confirmar parâmetro de permissão de estoque negativo e regras de bloqueio.
- Extrair movimentos completos por SKU/depósito em ordem cronológica.
- Checar filas de integração e logs de jobs nas últimas 48 horas.
- Revisar customizações/ADVPL que alteram movimentos ou saldos.
- Verificar replicação/latência se consultar base secundária.
- Conferir inventário físico ou amostragem operacional.
- Definir ação corretiva via fluxo do sistema e registrar justificativas.
Ferramentas e queries úteis (exemplos genéricos)
Algumas queries e verificações que auxiliam a investigação. Adaptar nomes de tabelas/colunas conforme a versão/estrutura do cliente.
- Consulta de saldo por SKU/depósito (pseudo-SQL): SELECT produto, deposito, SUM(qtd) AS saldo FROM movimentos GROUP BY produto, deposito HAVING SUM(qtd) < 0;
- Listagem de movimentos por período: SELECT * FROM movimentos WHERE produto='XXX' AND deposito='YYY' AND data >= '2026-01-01' ORDER BY data_hora;
- Movimentos por usuário/processo: SELECT usuario, COUNT(*) FROM movimentos WHERE data >= '2026-01-01' GROUP BY usuario ORDER BY 2 DESC;
- Jobs/cron falhos: revisar logs do scheduler do Protheus e do sistema operacional (/var/log, Event Viewer) nos timestamps correlacionados.
- Verificar mensagens de integração: consultar filas e tabelas de mensageria para mensagens com status 'error' ou 'pending'.
Guardar resultados em CSV para análise e comparação com inventários físicos.
Casos especiais: gestão por lote, série e produção
Ambientes que controlam lote e série introduzem complexidade adicional. Problemas típicos:
- Consumo por lote inexistente: ordens de produção ou faturamento consumem lotes que não têm saldo, gerando negativo por lote mesmo com saldo global positivo.
- Movimentação de lote incorreta: transferências que alteram o lote sem ajustar o saldo do lote original.
- Apontamento de produção: consumo parcial sem fechamento da ordem deixa componentes com saldo negativo até finalização.
Para esses casos, rastrear por combinação produto+lote+depósito, e sempre produzir ajustes pelo fluxo de lote do Protheus, garantindo rastreabilidade e conformidade fiscal.
Governança, documentação e lições aprendidas
Além da correção técnica, estabeler governança é essencial para evitar recorrência:
- Documentar incidente, causa raiz e ações tomadas.
- Atualizar checklist operacional e playbooks de recuperação.
- Programar auditorias periódicas (mensal/quinzenal) de saldos e reconciliation automatizada.
- Implementar indicadores de qualidade de dados de estoque (ex.: divergência % por SKU, tempo médio de resolução de inconsistência).
Registro contínuo e melhoria de processos reduz o custo operacional e risco fiscal.
Resumo operacional: passos práticos para as primeiras 24 horas
Plano curto para quando o estoque negativo for detectado com impacto:
- Isolar SKUs críticos do front-end (bloquear vendas/produção temporariamente).
- Executar consultas agregadas para mapear magnitude e escopo.
- Identificar se problema é sistêmico (vários SKUs/depósitos) ou pontual.
- Revogar parâmetros temporariamente que permitam vendas em negativo (se for o caso).
- Iniciar reconciliação com movimentos e preparar documentos de ajuste.
- Comunicar equipe de operação, controle interno e fiscais sobre impacto e timeline de correção.
Estoque negativo no Protheus exige investigação multidisciplinar: entender integração entre módulos, rotinas customizadas, configurações e operações reais. A resposta mais robusta combina diagnóstico técnico (logs, queries, revisão de código), reconciliação operacional (inventário físico) e melhores práticas de governança para prevenir reincidência.



