Pular para o conteúdo principal

Comportamento da Nota Fiscal de Compra Complementar

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas → "Nota de Compra Complementar" Tabela: PARMFATUR.TP_NOTACOMPRACOMPLEMENTAR Valor padrão: E (Gera Mov. Estoque Próprio)

Telas impactadas​

MóduloCódigoDescrição
NF EntradaMNF001Emissão/digitação de NF de entrada - dispara verificaNotaComplementar ao importar nota de origem
NF SaídaMNF002NF de saída - chama verificaNotaComplementar ao vincular NF origem
NF de ServiçoMNF008NF de serviço - chama verificaNotaComplementar ao vincular NF origem

O formulário TESNotaComplementar (unit jFaturamento.NotaOrigem) é reaproveitado pelos três módulos e centraliza toda a lógica condicional baseada em TP_NOTACOMPRACOMPLEMENTAR.

Procedures impactadas​

ProcedurePapel
RECALCULA_ESTOQUEQuando V_TP_NOTACOMPRACOMPLEMENTAR = 'A' e a nota é de entrada com origem, soma o valor da NF complementar (VL_TOTAL + FRETE + DESPESA - DESCONTO + DIFALIQUOTA + IMPOSTOS) ao custo do item na reprocessagem de estoque
RECALCULA_ESTOQUEDIAMesma lógica do RECALCULA_ESTOQUE, porém para recálculo por período (reprocessa MOVESTOQUE do dia)
CANCELA_NOTAFISCALQuando I_TP_NOTACOMPRACOMPLEMENTAR = 'A', ao cancelar a NF complementar apaga os registros de NOTAORIGEM e chama RECALCULA_ESTOQUE para restaurar o custo original do item

Campos envolvidos​

CampoDescrição
NOTAORIGEM.CD_EMPRORIG / NR_LANCTOORIG / TP_NOTAORIG / CD_SERIEORIGVínculo entre a NF complementar e a NF de origem
MOVIMENTACAO.ST_COMPLEMENTARFlag 'S' identifica a movimentação como "complementar"; é a chave que dispara o formulário de vínculo
MOVESTOQUE.VL_ESTOQUEValor do movimento de estoque alterado diretamente pela opção A
ITEMTABCOMPRA.VL_PRECOPreço de compra recalculado com base no novo custo (considera PARMFATUR.PC_MARGEMSEGURANCA)
ITEMNOTA.VL_TOTAL / VL_FRETE / VL_DESPESA / VL_DESCONTO / VL_DIFALIQUOTACompõem o montante do complemento a ser somado ao estoque de origem
IMPOSTONOTA.VL_IMPOSTO + IMPOSTO.ST_ESTOQUEImpostos com ST_ESTOQUE = 'S' somam ao custo, ST_ESTOQUE = 'D' abatem

Opções disponíveis​

E - Gera Mov. Estoque Próprio​

O que fazDetalhe
Movimento de estoque da NF complementarGera registro próprio em MOVESTOQUE vinculado ao lançamento da NF complementar
Custo do item de origemNão é alterado pela NF complementar
Recálculo em RECALCULA_ESTOQUECondição V_TP_NOTACOMPRACOMPLEMENTAR = 'A' é falsa → bloco de soma ao custo não executa
Formulário TESNotaComplementar.actionOKCondição iTP_NOTACOMPRACOMPLEMENTAR = 'A' é falsa → apenas salva o vínculo NOTAORIGEM
Cancelamento (CANCELA_NOTAFISCAL)Não recalcula custo da origem - só remove o movimento próprio

Simulação passo a passo​

  1. Em MFA001 → Opção 1 → "Nota de Compra Complementar" = Gera Mov. Estoque Próprio
  2. Salve os parâmetros (F6)
  3. Digite uma NF de compra de entrada "normal" (ex.: 100 unidades a R$ 10,00 → custo unitário R$ 10,00)
  4. Em MNF001, crie uma NF complementar (movimentação com ST_COMPLEMENTAR = 'S') vinculando-a à NF de origem acima, com valor adicional de R$ 200,00
  5. Salve a nota - o formulário TESNotaComplementar aparece pedindo os dados de origem
  6. Consulte MOVESTOQUE do item

Resultado esperado: Existem dois registros de movimento de estoque: um da NF original (R$ 10,00/un) e outro da NF complementar com o valor do complemento. O custo unitário da NF de origem permanece R$ 10,00 - a complementar não "reforça" o custo do item original.


A - Alterar Mov. Estoque Origem​

O que fazDetalhe
Movimento de estoque da NF complementarNão gera registro próprio - o valor é somado ao MOVESTOQUE.VL_ESTOQUE da NF de origem
Custo do item de origemAlterado: o valor da complementar (total + frete + despesa − desconto + difalíquota + impostos com ST_ESTOQUE='S') é somado ao estoque da origem
Preço na ITEMTABCOMPRARecalculado aplicando PARMFATUR.PC_MARGEMSEGURANCA sobre o novo custo médio
Gatilho adicionalChama RECALCULA_ESTOQUE e RECALCULA_PRECOVENDA para o item após a atualização
Cancelamento da complementarCANCELA_NOTAFISCAL apaga NOTAORIGEM e chama RECALCULA_ESTOQUE para restaurar o custo anterior
Restrição em MNF001Há lógica comentada (desabilitada) que impedia movimentação com ST_ESTOQUE preenchido nesta opção - hoje não há mais esse bloqueio

Simulação passo a passo​

  1. Em MFA001 → Opção 1 → "Nota de Compra Complementar" = Alterar Mov. Estoque Origem
  2. Preencha PC_MARGEMSEGURANCA (ex.: 5%) e CD_TABCOMPRA (ex.: tabela 1)
  3. Salve os parâmetros (F6)
  4. Digite uma NF de compra de entrada "normal" em MNF001 (ex.: 100 unidades a R$ 10,00 → custo R$ 1.000,00)
  5. Consulte MOVESTOQUE e confirme VL_ESTOQUE = 1000,00; consulte ITEMTABCOMPRA e confirme VL_PRECO ≈ 10,50 (10 × 1,05)
  6. Crie uma NF complementar vinculada a essa NF de origem, valor adicional R$ 200,00 (frete ou despesa), movimentação com ST_COMPLEMENTAR = 'S'
  7. Ao salvar, o formulário TESNotaComplementar pede NF de origem → confirme (botão OK executa actionOKExecute)
  8. Verifique MOVESTOQUE da NF de origem

Resultado esperado:

  • MOVESTOQUE.VL_ESTOQUE da NF de origem passa de 1.000,00 para 1.200,00
  • A NF complementar não gera registro próprio em MOVESTOQUE
  • ITEMTABCOMPRA.VL_PRECO do item é recalculado: (1.200,00 / 100) × 1,05 = 12,60
  • ITEMTABCOMPRA.DT_REGISTRO é atualizado para NOW
  • RECALCULA_PRECOVENDA é disparado, propagando o novo custo para os preços de venda
  • Se depois a complementar for cancelada em MNF001, CANCELA_NOTAFISCAL remove o vínculo e chama RECALCULA_ESTOQUE → custo volta para 1.000,00

Esta opção implementa o comportamento fiscal brasileiro clássico de "nota complementar de valor" que majora o custo do item da NF original (ex.: frete CIF recebido depois, acerto de preço ao fornecedor), permitindo que o custo refletido no estoque e o preço de venda subsequente absorvam o complemento.


Tabela Comparativa Resumida​

OpçãoDescriçãoGera MOVESTOQUE próprio?Altera custo da NF origem?Recalcula ITEMTABCOMPRA.VL_PRECO?Reage ao cancelamento em CANCELA_NOTAFISCAL?
EGera Mov. Estoque PróprioSimNãoNãoNão (só remove o próprio)
AAlterar Mov. Estoque OrigemNãoSim (soma total+frete+despesa−desc+difaliq+impostos)Sim (usa PC_MARGEMSEGURANCA)Sim (apaga NOTAORIGEM e chama RECALCULA_ESTOQUE)

Referências no Código Fonte​

Delphi​

ArquivoLinhaContexto
source/MFA001/UMFA001.dfm7466-7492Declaração do combo cmbTP_NOTACOMPRACOMPLEMENTAR (DataField, Items)
source/MFA001/UdmMFA001.pas253Campo tabPARMFATURTP_NOTACOMPRACOMPLEMENTAR: TStringField
source/MFA001/UdmMFA001.pas549Valor padrão AfterInsert: := 'E'
source/MFA001/UdmMFA001.dfm266, 1800-1802, 2428, 2600, 2847, 3146SELECT/INSERT/UPDATE do campo em tabPARMFATUR
source/jFaturamento/NotaOrigem/jFaturamento.NotaOrigem.pas92, 138-143Função verificaNotaComplementar lê o parâmetro da PARMFATUR
source/jFaturamento/NotaOrigem/jFaturamento.NotaOrigem.pas323-469actionOKExecute: quando = 'A', altera MOVESTOQUE.VL_ESTOQUE, atualiza ITEMTABCOMPRA.VL_PRECO, chama RECALCULA_ESTOQUE e RECALCULA_PRECOVENDA
source/MNF001/UMNF001.pas1917Chamada a verificaNotaComplementar no módulo de NF de entrada
source/MNF002/UMNF002.pas3742Chamada a verificaNotaComplementar no módulo de NF de saída
source/MNF008/UMNF008.pas1352Chamada a verificaNotaComplementar no módulo de NF de serviço
source/MNF001/UdmMNF001.pas4540-4550Bloco comentado - antiga validação que impedia ST_ESTOQUE preenchido na movimentação quando = 'A'

SQL (Firebird)​

ProcedureLinhaContexto
Scripts/RECALCULA_ESTOQUE.sql93, 157-160Declara V_TP_NOTACOMPRACOMPLEMENTAR e o carrega de PARMFATUR
Scripts/RECALCULA_ESTOQUE.sql620-659Quando = 'A' e há NR_LANCTONOTA de entrada, soma o valor da NF complementar ao custo do item recalculado
Scripts/RECALCULA_ESTOQUEDIA.sql106, 135-138Carrega o parâmetro
Scripts/RECALCULA_ESTOQUEDIA.sql790+Lógica idêntica para recálculo por dia
Scripts/CANCELA_NOTAFISCAL.sql74, 286-289Carrega I_TP_NOTACOMPRACOMPLEMENTAR
Scripts/CANCELA_NOTAFISCAL.sql876-906Ao cancelar NF complementar com opção 'A', apaga NOTAORIGEM e chama RECALCULA_ESTOQUE para restaurar custo da origem