Pular para o conteúdo principal

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óduloPapel na RotinaFonte
MEQ008Transferência de Local — permite informar qualquer data (passada ou futura)source/MEQ008/
MEQ016Transferência de Produtos — data fixada em CURRENT_DATEsource/MEQ016/
MEQ035Transferência entre Locais (variante por lote/grade)source/MEQ035/
MEQ001Parâmetros de Estoque — habilita transferência entre empresassource/MEQ001/
CEQ001Consulta de Estoque — permite validar saldo antes/depois de transferirsource/CEQ001/
CEQ010Relatório de movimentações de estoque por período/usuário (rastreio de quem fez o quê)source/CEQ010/

Comparativo MEQ008 × MEQ016​

AspectoMEQ008MEQ016
Nome da telaTransferência de LocalTransferência de Produtos
Permite data passada✅ Sim❌ Não
Permite data futura✅ Sim (sem trava identificada)❌ Não
Data gravada em MOVESTOQUE.DT_LANCAMENTOQualquer (informada pelo operador)CURRENT_DATE
Controle de lote✅ SimParcial
Controle de grade (tamanho/cor)✅ Sim✅ Sim
Transferência entre empresas✅ Se PARMESTOQUE.ST_TRANSFEMPRESAS = 'S'Nativo via ITEMREQUISICAO
Grava emMOVESTOQUE, LOTESEMENTEMOVESTOQUE, ITEMREQUISICAO, LOTESEMENTE
Perfil de usuário recomendadoResponsável por ajustes (Junior, supervisor contábil)Operador de estoque, almoxarife, produção
Risco se liberada indiscriminadamenteAlto — permite "mascarar" movimentos retroativosBaixo — 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:

CampoDescrição
NR_LANCAMENTOPK sequencial do movimento
CD_ITEMProduto transferido
CD_TIPOLOCAL + CD_LOCALPar origem ou destino (duas linhas por transferência)
CD_OPERACAOTipo de operação (FK → OPERACAO — ex: "TRANSFERENCIA")
CD_HISTORICOHistórico contábil
TP_DOCUMENTO'TR' = Transferência
NR_DOCUMENTONúmero da transferência (mesmo em ambas as linhas)
QT_ESTOQUEQuantidade (positiva na entrada, negativa na saída)
DT_LANCAMENTOData informada na tela — é aqui que MEQ008 vs MEQ016 diverge
CD_USUARIOUsuário que executou (FK → USUARIO)
CD_EMPRORIGEMEmpresa 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

CampoDescrição
NR_REQUISICAOPK sequencial
CD_EMPRESAEmpresa
CD_ITEMProduto
QT_REQUISITADAQuantidade pedida
QT_ATENDIDAQuantidade atendida
DT_REQUISICAOData da requisição
CD_USUARIORequisitante

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

CampoDescrição
CD_EMPRESAEmpresa
CD_ITEMProduto
NR_LOTENúmero do lote
QT_SALDOSaldo do lote
DT_VENCIMENTOValidade
CD_FORNECEDORFornecedor 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:

CampoEfeito na Transferência
QT_ESTOQUEReduzido na origem, aumentado no destino
VL_PRECOMEDIORecalculado no destino conforme política de custo
DT_MOVIMENTOAtualizado para a data da transferência

Tabelas de Contexto​

TabelaDDLPapel
LOCALESTOQUEdocs/schema/tables/LOCALESTOQUE.sqlCadastro de locais físicos de estoque
TIPOLOCALdocs/schema/tables/TIPOLOCAL.sqlClassificação (ex: 1 = principal, 2 = produção, 3 = trânsito)
OPERACAOdocs/schema/tables/OPERACAO.sqlTipo de operação (Transferência, Ajuste, etc.)
HISTORICOdocs/schema/tables/HISTORICO.sqlHistórico contábil usado no movimento
USUARIOdocs/schema/tables/USUARIO.sqlQuem operou
LOCALUSUARIOdocs/schema/tables/LOCALUSUARIO.sqlQuais 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:

  1. Insere linha em MOVESTOQUE
  2. Atualiza ESTOQUE (saldo consolidado)
  3. Atualiza ESTOQUEDIA (saldo por dia)
  4. Se item tem grade: atualiza ESTOQUEGRADE
  5. 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âmetroEfeito
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_HISTORICOTRANSFHistórico contábil padrão para transferência
CD_OPERACAOTRANSFOperação padrão para transferência

PARMFATUR​

ParâmetroEfeito
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):

  1. Cadastrar todos os usuários em USUARIO
  2. Remover MEQ008 das permissões de usuários comuns
  3. Manter MEQ016 aberto para quem move estoque no dia
  4. Revisar LOCALUSUARIO para 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 (sempre CURRENT_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:

  1. Pode estar desatualizado em ITEM.CD_CODBARRA (entregue pelo fornecedor)
  2. Pode ser de outro produto semelhante (ex: duas medidas do mesmo fabricante)
  3. 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 MOVESTOQUE e ajusta ESTOQUE dos dois locais
  • Saldo diário em ESTOQUEDIA atualizado
  • Relatórios em CEQ (consultas) mostram o histórico

→ Contabilidade (MCB003)​

  • Se integração automática: MOVESTOQUE de transferência gera MOVTOCONTABIL no 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 MOVESTOQUE de 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_REGISTRO dá a trilha para investigar movimentos suspeitos
  • Combinado com logs de acesso ao sistema, permite reconstruir quem, quando, de onde

Pontos de Atenção​

  1. 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.

  2. 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).

  3. 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.

  4. 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.

  5. 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.

  6. 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 USUARIO e 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:
    • MEQ008 — Transferência de Local
    • MEQ016 — Transferência de Produtos
    • MEQ001 — Parâmetros de Estoque
  • Rotina relacionada: Estoque e Movimentação