Rotina: Transferência de Estoque com Rastreabilidade
Como separar transferência retroativa (com alteração de data) de transferência corrente (data fixa do dia) usando duas telas distintas — MEQ008 e MEQ016 — para proteger a integridade do movimento fiscal.
Rotina multi-tela de controle de acesso e auditoria em transferências de estoque. Este documento descreve por que o sistema oferece duas telas semelhantes (mas com regras diferentes) para a mesma operação, como decidir quem usa qual, e como rastrear um movimento retroativo suspeito.
Contexto de Negócio
Transferir estoque de um local para outro é uma operação cotidiana: tirar uma banda do almoxarifado central e levar para a produção, passar mercadoria da empresa A para a filial B, mover um lote para análise de qualidade. O problema não é mover — é quando registrar o movimento.
Caso real do treinamento (~01:10:30):
No dia 26/03 às 04h30 apareceu uma transferência estranha — só que a data lançada era 23/03. O usuário aparecia como Fabiano, mas o código era
ESP-15. Havia saída do estoque 1 e entrada no estoque 2 com saldo líquido de 314.
O que aconteceu: alguém usou a MEQ008 (que permite alterar a data) para registrar uma transferência retroativa. Isso pode ser legítimo (ajuste de histórico) ou problema (movimento mascarado). A questão é: quem deveria ter acesso a essa capacidade?
A solução desenhada no treinamento:
- MEQ008 — permite alterar a data da transferência. Acesso restrito a uma ou duas pessoas com responsabilidade sobre ajustes retroativos (ex: Junior).
- MEQ016 — mesma função de transferência, mas data sempre = data atual. Liberada para todos os operadores que precisam transferir no dia-a-dia.
Isso separa o fluxo normal (que deixa rastro com data real) do fluxo excepcional (ajuste retroativo, com um único usuário responsável).
Telas Delphi Envolvidas
| Módulo | Papel na Rotina | Fonte |
|---|---|---|
| MEQ008 | Transferência de Local — permite informar qualquer data (passada ou futura) | source/MEQ008/ |
| MEQ016 | Transferência de Produtos — data fixada em CURRENT_DATE | source/MEQ016/ |
| MEQ035 | Transferência entre Locais (variante por lote/grade) | source/MEQ035/ |
| MEQ001 | Parâmetros de Estoque — habilita transferência entre empresas | source/MEQ001/ |
| CEQ001 | Consulta de Estoque — permite validar saldo antes/depois de transferir | source/CEQ001/ |
| CEQ010 | Relatório de movimentações de estoque por período/usuário (rastreio de quem fez o quê) | source/CEQ010/ |
Comparativo MEQ008 × MEQ016
| Aspecto | MEQ008 | MEQ016 |
|---|---|---|
| Nome da tela | Transferência de Local | Transferência de Produtos |
| Permite data passada | ✅ Sim | ❌ Não |
| Permite data futura | ✅ Sim (sem trava identificada) | ❌ Não |
Data gravada em MOVESTOQUE.DT_LANCAMENTO | Qualquer (informada pelo operador) | CURRENT_DATE |
| Controle de lote | ✅ Sim | Parcial |
| Controle de grade (tamanho/cor) | ✅ Sim | ✅ Sim |
| Transferência entre empresas | ✅ Se PARMESTOQUE.ST_TRANSFEMPRESAS = 'S' | Nativo via ITEMREQUISICAO |
| Grava em | MOVESTOQUE, LOTESEMENTE | MOVESTOQUE, ITEMREQUISICAO, LOTESEMENTE |
| Perfil de usuário recomendado | Responsável por ajustes (Junior, supervisor contábil) | Operador de estoque, almoxarife, produção |
| Risco se liberada indiscriminadamente | Alto — permite "mascarar" movimentos retroativos | Baixo — só registra o agora |
Tabelas do Banco de Dados
MOVESTOQUE — Trilha de Movimentação (central)
DDL: docs/schema/tables/MOVESTOQUE.sql
Escrita por: MEQ008, MEQ016, MEQ035 (e todas as demais telas que movimentam estoque)
Campos-chave para rastrear transferência:
| Campo | Descrição |
|---|---|
| NR_LANCAMENTO | PK sequencial do movimento |
| CD_ITEM | Produto transferido |
| CD_TIPOLOCAL + CD_LOCAL | Par origem ou destino (duas linhas por transferência) |
| CD_OPERACAO | Tipo de operação (FK → OPERACAO — ex: "TRANSFERENCIA") |
| CD_HISTORICO | Histórico contábil |
| TP_DOCUMENTO | 'TR' = Transferência |
| NR_DOCUMENTO | Número da transferência (mesmo em ambas as linhas) |
| QT_ESTOQUE | Quantidade (positiva na entrada, negativa na saída) |
| DT_LANCAMENTO | Data informada na tela — é aqui que MEQ008 vs MEQ016 diverge |
| CD_USUARIO | Usuário que executou (FK → USUARIO) |
| CD_EMPRORIGEM | Empresa de origem (se transferência inter-empresa) |
Auditoria: a consulta SELECT * FROM MOVESTOQUE WHERE DT_LANCAMENTO <> DT_REGISTRO identifica transferências retroativas (data do movimento diferente da data de gravação).
ITEMREQUISICAO — Requisição/Transferência Formal
DDL: docs/schema/tables/ITEMREQUISICAO.sql
Escrita por: MEQ016 principalmente
| Campo | Descrição |
|---|---|
| NR_REQUISICAO | PK sequencial |
| CD_EMPRESA | Empresa |
| CD_ITEM | Produto |
| QT_REQUISITADA | Quantidade pedida |
| QT_ATENDIDA | Quantidade atendida |
| DT_REQUISICAO | Data da requisição |
| CD_USUARIO | Requisitante |
Permite formalizar a requisição (quem pediu, quando) antes da movimentação física efetiva.
LOTESEMENTE — Controle de Lote em Transferência
DDL: docs/schema/tables/LOTESEMENTE.sql
Escrita por: MEQ008, MEQ016 quando item tem controle de lote
| Campo | Descrição |
|---|---|
| CD_EMPRESA | Empresa |
| CD_ITEM | Produto |
| NR_LOTE | Número do lote |
| QT_SALDO | Saldo do lote |
| DT_VENCIMENTO | Validade |
| CD_FORNECEDOR | Fornecedor de origem |
Em transferências entre empresas, MEQ008 permite replicar o número de lote na empresa de destino — mantendo rastreabilidade ponta a ponta.
ESTOQUE — Saldo Consolidado
DDL: docs/schema/tables/ESTOQUE.sql
Atualizado automaticamente pela procedure GERA_ESTOQUE:
| Campo | Efeito na Transferência |
|---|---|
| QT_ESTOQUE | Reduzido na origem, aumentado no destino |
| VL_PRECOMEDIO | Recalculado no destino conforme política de custo |
| DT_MOVIMENTO | Atualizado para a data da transferência |
Tabelas de Contexto
| Tabela | DDL | Papel |
|---|---|---|
| LOCALESTOQUE | docs/schema/tables/LOCALESTOQUE.sql | Cadastro de locais físicos de estoque |
| TIPOLOCAL | docs/schema/tables/TIPOLOCAL.sql | Classificação (ex: 1 = principal, 2 = produção, 3 = trânsito) |
| OPERACAO | docs/schema/tables/OPERACAO.sql | Tipo de operação (Transferência, Ajuste, etc.) |
| HISTORICO | docs/schema/tables/HISTORICO.sql | Histórico contábil usado no movimento |
| USUARIO | docs/schema/tables/USUARIO.sql | Quem operou |
| LOCALUSUARIO | docs/schema/tables/LOCALUSUARIO.sql | Quais locais cada usuário enxerga |
Stored Procedures
GERA_ESTOQUE
Scripts/GERA_ESTOQUE.sql
Entrada (resumida):
I_CD_EMPRESA — empresa
I_CD_ITEM — produto
I_CD_TIPOLOCAL — tipo de local
I_CD_LOCAL — local
I_QT_ESTOQUE — quantidade (+ entrada / - saída)
I_CD_OPERACAO — operação
I_CD_HISTORICO — histórico contábil
I_TP_DOCUMENTO — 'TR' para transferência
I_NR_DOCUMENTO — número do movimento
I_DT_LANCAMENTO — data informada (aqui entra MEQ008 vs MEQ016)
...
O que faz:
- Insere linha em
MOVESTOQUE - Atualiza
ESTOQUE(saldo consolidado) - Atualiza
ESTOQUEDIA(saldo por dia) - Se item tem grade: atualiza
ESTOQUEGRADE - Se habilitado: grava
MOVTOCONTABIL(lançamento contábil automático)
Em transferência, a procedure é chamada duas vezes: uma para saída no local origem, outra para entrada no local destino.
VALIDA_CODIGOBARRA
Scripts/VALIDA_CODIGOBARRA.sql
Usada por MEQ016 quando o operador usa leitor óptico. Resolve o código de barras para o CD_ITEM correto (considerando grades, lotes, balança).
RETORNA_LOCAISARMAZENAGEM
Scripts/RETORNA_LOCAISARMAZENAGEM.sql
Retorna os locais visíveis ao usuário logado (LOCALUSUARIO). Controla quais locais aparecem na origem/destino da transferência.
Parâmetros Relevantes
PARMESTOQUE
| Parâmetro | Efeito |
|---|---|
ST_TRANSFEMPRESAS | 'S'=permite MEQ008/MEQ016 transferir entre empresas; 'N'=só dentro da mesma empresa |
ST_ESTOQUENEGATIVO | 'S'=permite transferir sem saldo; 'N'=bloqueia |
ST_VALIDALOCALUSER | 'S'=usuário só transfere de locais onde tem acesso em LOCALUSUARIO |
CD_HISTORICOTRANSF | Histórico contábil padrão para transferência |
CD_OPERACAOTRANSF | Operação padrão para transferência |
PARMFATUR
| Parâmetro | Efeito |
|---|---|
ST_PERMITEDATARETROATIVA (se existir na empresa) | Pode bloquear data retroativa até em MEQ008 |
Controle de Acesso (Cenário Recomendado)
┌─────────────────────────────────────────────────────────────┐
│ RECOMENDAÇÃO DE ACESSO (do treinamento SM Pneus) │
│ │
│ MEQ008 (Transferência com data alterável) │
│ → Acesso: APENAS 1–2 usuários especializados │
│ → Ex: Junior (responsável por ajustes retroativos) │
│ → Uso: correção de movimentos históricos, │
│ fechamento contábil, ajustes de inventário │
│ │
│ MEQ016 (Transferência com data do dia) │
│ → Acesso: TODOS os operadores de estoque/produção │
│ → Ex: almoxarife, estações 15, 22, etc. │
│ → Uso: rotina diária de movimentação │
└─────────────────────────────────────────────────────────────┘
Como implementar (via cadastro de permissões):
- Cadastrar todos os usuários em
USUARIO - Remover MEQ008 das permissões de usuários comuns
- Manter MEQ016 aberto para quem move estoque no dia
- Revisar
LOCALUSUARIOpara amarrar usuário × local (um almoxarife não precisa ver local "trânsito")
Fluxo Completo
┌─────────────────────────────────────────────────────────────┐
│ CENÁRIO A — TRANSFERÊNCIA CORRENTE (DIA DE HOJE) │
│ │
│ Operador abre MEQ016 │
│ Sistema preenche DT_TRANSFERENCIA = CURRENT_DATE (trava) │
│ Operador: │
│ Escolhe item (por código ou leitor de barras) │
│ Seleciona local de origem (de LOCALUSUARIO permitidos) │
│ Seleciona local de destino │
│ Informa quantidade │
│ Confirma │
│ Sistema chama GERA_ESTOQUE(saída origem) │
│ GERA_ESTOQUE(entrada destino) │
│ MOVESTOQUE.DT_LANCAMENTO = CURRENT_DATE │
│ ESTOQUE atualizado │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ CENÁRIO B — AJUSTE RETROATIVO (CORRIGIR HISTÓRICO) │
│ │
│ Usuário autorizado (ex: Junior) abre MEQ008 │
│ Sistema permite editar DT_TRANSFERENCIA │
│ Operador: │
│ Informa data desejada (ex: 23/03 para corrigir lançamento)│
│ Preenche resto da transferência normalmente │
│ Confirma │
│ Sistema chama GERA_ESTOQUE com DT_LANCAMENTO = 23/03 │
│ MOVESTOQUE.DT_LANCAMENTO = 23/03 (retroativa) │
│ DT_REGISTRO = data/hora atual (marcado na gravação) │
│ │
│ ⚠ ATENÇÃO: se já houve integração contábil (MCB003) │
│ do período 23/03, o movimento retroativo NÃO entra │
│ automaticamente no livro contábil — precisa reprocessar. │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ CENÁRIO C — TRANSFERÊNCIA ENTRE EMPRESAS │
│ │
│ PARMESTOQUE.ST_TRANSFEMPRESAS = 'S' │
│ MEQ008 ou MEQ016 exibe combo de Empresa │
│ Operador informa empresa origem e empresa destino │
│ Se item tem lote: opção "replicar lote na empresa destino" │
│ Sistema gera: │
│ MOVESTOQUE saída na empresa origem │
│ MOVESTOQUE entrada na empresa destino │
│ CD_EMPRORIGEM preenchido na linha de entrada │
│ LOTESEMENTE replicado se solicitado │
└─────────────────────────────────────────────────────────────┘
Rastreando Uma Transferência Suspeita
Perguntas típicas de auditoria que este modelo permite responder:
"Quem fez essa transferência de 314 unidades do estoque 1 para o estoque 2 no dia 23/03?"
SELECT M.CD_USUARIO, M.DT_LANCAMENTO, M.DT_REGISTRO, M.NR_DOCUMENTO,
M.CD_ITEM, M.QT_ESTOQUE, M.CD_TIPOLOCAL, M.CD_LOCAL
FROM MOVESTOQUE M
WHERE M.TP_DOCUMENTO = 'TR'
AND M.DT_LANCAMENTO = '2026-03-23'
AND M.CD_ITEM = :item
Se DT_REGISTRO > DT_LANCAMENTO, é uma retroativa — foi feita em MEQ008.
"Quem tem acesso à MEQ008 e poderia ter feito isso?"
Consultar as permissões de tela por usuário. Na implantação SM Pneus o treinador rodou relatório similar — identificou que vários usuários tinham MEQ008 e recomendou reduzir para 1 responsável.
Regras de Negócio Importantes
1. Data de Lançamento vs Data de Registro
DT_LANCAMENTO= a data que o operador informou (pode ser passada em MEQ008)DT_REGISTRO= timestamp do momento real da gravação (sempreCURRENT_TIMESTAMP)
Divergência entre as duas = retroativa. Auditoria periódica deveria cruzar esses dois campos.
2. Estoque Negativo
Se PARMESTOQUE.ST_ESTOQUENEGATIVO = 'N' e transferência deixaria a origem negativa, sistema bloqueia. Em MEQ008 com data retroativa, a validação considera o saldo naquela data retroativa — pode haver divergências com o saldo atual.
3. Lote e Grade
Item com controle de lote (ITEM.ST_CONTROLELOTE = 'S') exige informar qual lote transferir. Se origem tem 3 lotes, pode ratear. MEQ008 faz rateio automático; MEQ016 pede ao operador.
4. Código de Barras Único por Item
Cada item tem seu código de barras exclusivo. Validação em VALIDA_CODIGOBARRA. Se leitura não encontra:
- Pode estar desatualizado em
ITEM.CD_CODBARRA(entregue pelo fornecedor) - Pode ser de outro produto semelhante (ex: duas medidas do mesmo fabricante)
- Solução: revisar cadastro em TPO001, campo código de barras
5. Histórico Contábil
Cada transferência precisa de um CD_HISTORICO para integração contábil. Em MEQ008/MEQ016 o default vem de PARMESTOQUE.CD_HISTORICOTRANSF. Operador pode trocar por outro (ex: "ajuste de inventário") — isso aparece no relatório como discriminador.
6. Local "Trânsito" para Transferências em Andamento
Boa prática: criar um TIPOLOCAL de "trânsito" para transferências físicas que demoram (ex: empresa A → filial B). Saída sai de A para trânsito no dia X, entrada sai de trânsito para B no dia Y quando chega. Reconcilia saldos.
Influências em Outros Módulos
→ Estoque (saldo e movimentação)
- Toda transferência gera duas linhas em
MOVESTOQUEe ajustaESTOQUEdos dois locais - Saldo diário em
ESTOQUEDIAatualizado - Relatórios em CEQ (consultas) mostram o histórico
→ Contabilidade (MCB003)
- Se integração automática:
MOVESTOQUEde transferência geraMOVTOCONTABILno momento - Se manual (caso SM Pneus): transferências ficam aguardando reprocessamento em MCB003
- Transferência com data retroativa em período já integrado exige reintegrar o período (MCB003 Reprocessamento)
→ Produção (MRC008 e etapas)
- Consumo de matéria-prima em etapas de produção gera
MOVESTOQUEde saída - Após recusa de pneu, se operador precisa "devolver" matéria ao estoque, usa MEQ008/MEQ016 com histórico de ajuste
→ Captação de Leite
- MCA003 (transferência entre contratos) usa modelo paralelo, específico da captação
→ Notas Fiscais
- Transferência entre empresas pode exigir nota fiscal formal (CFOP 5.151 / 6.151). Parametrizar em
PARMFATUR.ST_NOTATRANSFEMPRESA
→ Auditoria / Compliance
MOVESTOQUE.CD_USUARIO+DT_REGISTROdá a trilha para investigar movimentos suspeitos- Combinado com logs de acesso ao sistema, permite reconstruir quem, quando, de onde
Pontos de Atenção
-
MEQ008 exposta a muitos usuários é risco operacional — qualquer um pode lançar movimento retroativo e isso "conserta" saldos sem deixar pista clara. A separação MEQ008/MEQ016 só é efetiva se o acesso for realmente restrito.
-
Data futura em MEQ008 — o treinamento levantou que não há parâmetro claro bloqueando datas futuras em MEQ008. Vale testar na empresa se isso é permitido e, se for, restringir por workflow (não pelo sistema).
-
Retroativa em período integrado contábil — movimento de MEQ008 em data já "fechada" contabilmente no MCB003 fica fora do livro até reintegração. Sem reprocessar MCB003, o estoque e o livro divergem.
-
Transferência entre empresas exige cuidado fiscal — dependendo da UF e do CFOP, pode requerer NF. Não tratar como transferência física pura.
-
Lote replicado em empresa destino não é automático — opção na tela MEQ008. Se não marcar, a empresa destino recebe a quantidade mas perde rastreabilidade do lote original.
-
Usuário aparece diferente do operador real — no caso relatado (usuário ESP-15 com nome Fabiano), a causa é normalmente sessão compartilhada (estação usada por mais de uma pessoa com mesmo login). Fugir disso exige cadastro individual em
USUARIOe disciplina de logout.
Fonte
- Treinamento SM Pneus – Produção (transcrição em
docs/transcricoes/SM-Pneus-Produ-o-8cc89ff3-7e72.json) - Trecho relevante: 01:09:30 a 01:30:00 (caso ESP-15, separação MEQ008/MEQ016, controle de acesso)
- Caso-exemplo citado: transferência de 314 unidades entre estoque 1 e estoque 2 em 23/03/2026, lançada em 26/03 pelo usuário ESP-15
- Telas referenciadas:
- Rotina relacionada: Estoque e Movimentação