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_NOTACOMPRACOMPLEMENTARValor padrão:E(Gera Mov. Estoque Próprio)
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| NF Entrada | MNF001 | Emissão/digitação de NF de entrada - dispara verificaNotaComplementar ao importar nota de origem |
| NF Saída | MNF002 | NF de saída - chama verificaNotaComplementar ao vincular NF origem |
| NF de Serviço | MNF008 | NF de serviço - chama verificaNotaComplementar ao vincular NF origem |
O formulário
TESNotaComplementar(unitjFaturamento.NotaOrigem) é reaproveitado pelos três módulos e centraliza toda a lógica condicional baseada emTP_NOTACOMPRACOMPLEMENTAR.
Procedures impactadas
| Procedure | Papel |
|---|---|
RECALCULA_ESTOQUE | Quando 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_ESTOQUEDIA | Mesma lógica do RECALCULA_ESTOQUE, porém para recálculo por período (reprocessa MOVESTOQUE do dia) |
CANCELA_NOTAFISCAL | Quando 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
| Campo | Descrição |
|---|---|
NOTAORIGEM.CD_EMPRORIG / NR_LANCTOORIG / TP_NOTAORIG / CD_SERIEORIG | Vínculo entre a NF complementar e a NF de origem |
MOVIMENTACAO.ST_COMPLEMENTAR | Flag 'S' identifica a movimentação como "complementar"; é a chave que dispara o formulário de vínculo |
MOVESTOQUE.VL_ESTOQUE | Valor do movimento de estoque alterado diretamente pela opção A |
ITEMTABCOMPRA.VL_PRECO | Preço de compra recalculado com base no novo custo (considera PARMFATUR.PC_MARGEMSEGURANCA) |
ITEMNOTA.VL_TOTAL / VL_FRETE / VL_DESPESA / VL_DESCONTO / VL_DIFALIQUOTA | Compõem o montante do complemento a ser somado ao estoque de origem |
IMPOSTONOTA.VL_IMPOSTO + IMPOSTO.ST_ESTOQUE | Impostos com ST_ESTOQUE = 'S' somam ao custo, ST_ESTOQUE = 'D' abatem |
Opções disponíveis
E - Gera Mov. Estoque Próprio
| O que faz | Detalhe |
|---|---|
| Movimento de estoque da NF complementar | Gera registro próprio em MOVESTOQUE vinculado ao lançamento da NF complementar |
| Custo do item de origem | Não é alterado pela NF complementar |
Recálculo em RECALCULA_ESTOQUE | Condição V_TP_NOTACOMPRACOMPLEMENTAR = 'A' é falsa → bloco de soma ao custo não executa |
Formulário TESNotaComplementar.actionOK | Condiçã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
- Em MFA001 → Opção 1 → "Nota de Compra Complementar" =
Gera Mov. Estoque Próprio - Salve os parâmetros (F6)
- Digite uma NF de compra de entrada "normal" (ex.: 100 unidades a R$ 10,00 → custo unitário R$ 10,00)
- 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 - Salve a nota - o formulário
TESNotaComplementaraparece pedindo os dados de origem - Consulte
MOVESTOQUEdo 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 faz | Detalhe |
|---|---|
| Movimento de estoque da NF complementar | Não gera registro próprio - o valor é somado ao MOVESTOQUE.VL_ESTOQUE da NF de origem |
| Custo do item de origem | Alterado: o valor da complementar (total + frete + despesa − desconto + difalíquota + impostos com ST_ESTOQUE='S') é somado ao estoque da origem |
Preço na ITEMTABCOMPRA | Recalculado aplicando PARMFATUR.PC_MARGEMSEGURANCA sobre o novo custo médio |
| Gatilho adicional | Chama RECALCULA_ESTOQUE e RECALCULA_PRECOVENDA para o item após a atualização |
| Cancelamento da complementar | CANCELA_NOTAFISCAL apaga NOTAORIGEM e chama RECALCULA_ESTOQUE para restaurar o custo anterior |
| Restrição em MNF001 | Há 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
- Em MFA001 → Opção 1 → "Nota de Compra Complementar" =
Alterar Mov. Estoque Origem - Preencha
PC_MARGEMSEGURANCA(ex.: 5%) eCD_TABCOMPRA(ex.: tabela 1) - Salve os parâmetros (F6)
- Digite uma NF de compra de entrada "normal" em MNF001 (ex.: 100 unidades a R$ 10,00 → custo R$ 1.000,00)
- Consulte
MOVESTOQUEe confirmeVL_ESTOQUE = 1000,00; consulteITEMTABCOMPRAe confirmeVL_PRECO ≈ 10,50(10 × 1,05) - Crie uma NF complementar vinculada a essa NF de origem, valor adicional R$ 200,00 (frete ou despesa), movimentação com
ST_COMPLEMENTAR = 'S' - Ao salvar, o formulário
TESNotaComplementarpede NF de origem → confirme (botão OK executaactionOKExecute) - Verifique
MOVESTOQUEda NF de origem
Resultado esperado:
MOVESTOQUE.VL_ESTOQUEda 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_PRECOdo item é recalculado:(1.200,00 / 100) × 1,05 = 12,60ITEMTABCOMPRA.DT_REGISTROé atualizado paraNOWRECALCULA_PRECOVENDAé disparado, propagando o novo custo para os preços de venda- Se depois a complementar for cancelada em MNF001,
CANCELA_NOTAFISCALremove o vínculo e chamaRECALCULA_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ção | Descrição | Gera MOVESTOQUE próprio? | Altera custo da NF origem? | Recalcula ITEMTABCOMPRA.VL_PRECO? | Reage ao cancelamento em CANCELA_NOTAFISCAL? |
|---|---|---|---|---|---|
| E | Gera Mov. Estoque Próprio | Sim | Não | Não | Não (só remove o próprio) |
| A | Alterar Mov. Estoque Origem | Não | Sim (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
| Arquivo | Linha | Contexto |
|---|---|---|
source/MFA001/UMFA001.dfm | 7466-7492 | Declaração do combo cmbTP_NOTACOMPRACOMPLEMENTAR (DataField, Items) |
source/MFA001/UdmMFA001.pas | 253 | Campo tabPARMFATURTP_NOTACOMPRACOMPLEMENTAR: TStringField |
source/MFA001/UdmMFA001.pas | 549 | Valor padrão AfterInsert: := 'E' |
source/MFA001/UdmMFA001.dfm | 266, 1800-1802, 2428, 2600, 2847, 3146 | SELECT/INSERT/UPDATE do campo em tabPARMFATUR |
source/jFaturamento/NotaOrigem/jFaturamento.NotaOrigem.pas | 92, 138-143 | Função verificaNotaComplementar lê o parâmetro da PARMFATUR |
source/jFaturamento/NotaOrigem/jFaturamento.NotaOrigem.pas | 323-469 | actionOKExecute: quando = 'A', altera MOVESTOQUE.VL_ESTOQUE, atualiza ITEMTABCOMPRA.VL_PRECO, chama RECALCULA_ESTOQUE e RECALCULA_PRECOVENDA |
source/MNF001/UMNF001.pas | 1917 | Chamada a verificaNotaComplementar no módulo de NF de entrada |
source/MNF002/UMNF002.pas | 3742 | Chamada a verificaNotaComplementar no módulo de NF de saída |
source/MNF008/UMNF008.pas | 1352 | Chamada a verificaNotaComplementar no módulo de NF de serviço |
source/MNF001/UdmMNF001.pas | 4540-4550 | Bloco comentado - antiga validação que impedia ST_ESTOQUE preenchido na movimentação quando = 'A' |
SQL (Firebird)
| Procedure | Linha | Contexto |
|---|---|---|
Scripts/RECALCULA_ESTOQUE.sql | 93, 157-160 | Declara V_TP_NOTACOMPRACOMPLEMENTAR e o carrega de PARMFATUR |
Scripts/RECALCULA_ESTOQUE.sql | 620-659 | Quando = 'A' e há NR_LANCTONOTA de entrada, soma o valor da NF complementar ao custo do item recalculado |
Scripts/RECALCULA_ESTOQUEDIA.sql | 106, 135-138 | Carrega o parâmetro |
Scripts/RECALCULA_ESTOQUEDIA.sql | 790+ | Lógica idêntica para recálculo por dia |
Scripts/CANCELA_NOTAFISCAL.sql | 74, 286-289 | Carrega I_TP_NOTACOMPRACOMPLEMENTAR |
Scripts/CANCELA_NOTAFISCAL.sql | 876-906 | Ao cancelar NF complementar com opção 'A', apaga NOTAORIGEM e chama RECALCULA_ESTOQUE para restaurar custo da origem |