Origem do Custo para Cálculo de Markup
Tela de configuração: MFA001 - Parâmetros de Faturamento
Localização: Parâmetros → Faturamento → Opção 2 → Origem do Custo
Tabela: PARMFATUR.TP_ANALISE
Valor padrão: E (Custo Médio Estoque)
Define qual valor de custo é usado como base para o cálculo do Markup (índice que compõe o preço sugerido de venda) na Análise de Markup do item, tanto em Pedidos de Venda e Notas Fiscais de Saída quanto em Orçamentos. O valor escolhido aqui é lido em tempo de venda, comparado com o preço praticado e, em conjunto com o CD_INDICEMARKUP, dispara alertas de margem mínima/custo.
Atenção - homônimo: existem outros campos TP_ANALISE em tabelas diferentes (ex.: ANALISE.TP_ANALISE em laboratório/captação de leite — TLA001/LAB001/LAB003 com valores E/M; campos locais EMPRESA.TP_ANALISE em relatórios como CFA003/CNF005-009/RPD012/RNF006/RNF010 — que são parâmetros de relatório, não leem PARMFATUR). Este documento trata exclusivamente do campo PARMFATUR.TP_ANALISE configurado na MFA001.
Telas impactadas
| Módulo | Código | Descrição | Referência no código |
|---|
| Parâmetros de Faturamento | MFA001 | Tela de configuração do parâmetro (ComboBox cmbTP_ANALISE) | source/MFA001/UMFA001.dfm:4214-4243; source/MFA001/UdmMFA001.pas:208, 532; source/MFA001/UMFA001.pas:260, 1137, 1441 |
| Pedido de Venda | MPD002 | Cálculo de markup/custo na análise do item do pedido | source/MPD002/UdmMPD002.pas:5185-5201, 5752 |
| Nota Fiscal de Saída | MNF002 | Cálculo de markup/custo na análise do item da NF | source/MNF002/UdmMNF002.pas:9343-9359, 10503 |
| Orçamento | MPD018 | Cálculo de markup/custo na análise do item do orçamento | source/MPD018/UdmMPD018.pas:1661-1677 |
| NF/Troca Saída | MNF008 | Carrega TP_ANALISE do PARMFATUR via SELECT (passa adiante na estrutura de parâmetros) | source/MNF008/UdmMNF008.pas:768 |
| Conferência Carregamento | MCO006 | Carrega TP_ANALISE do PARMFATUR via SELECT | source/MCO006/UdmMCO006.pas:2112 |
| Nota Fiscal Entrada | MNF001 | Consulta PARMFATUR.TP_ANALISE para cálculo do índice markup | source/MNF001/UdmMNF001.pas:8646 |
Procedures impactadas
| Objeto | Arquivo | Tipo | Descrição |
|---|
RETORNA_IMPOSTOMARKUP | Scripts/RETORNA_IMPOSTOMARKUP.sql | Procedure | Recebe I_TP_ANALISE (derivado do PARMFATUR.TP_ANALISE) e decide qual coluna de custo usar: para C retorna R.VL_ULTIMOCUSTOIMP, para M retorna R.VL_MEDIANOTAIMP, para E/U/T utiliza o I_VL_ANALISE informado |
Observação: quando a tela é MFA001 (PARMFATUR.TP_ANALISE), o Delphi lê o valor via ParmFatur.Values['TP_ANALISE'] e seleciona a coluna de custo localmente (VL_CUSTOMEDIO / VL_ULTIMOCUSTO / VL_TABCOMPRA / VL_CUSTONOTA / VL_MEDIANOTA). A procedure RETORNA_IMPOSTOMARKUP apenas replica a lógica quando chamada por telas de relatório (CFA003, CNF008, RNF006 etc.) que usam o mesmo conjunto de códigos E/U/T/C/M.
Campos envolvidos
| Tabela | Campo | Observação |
|---|
PARMFATUR | TP_ANALISE | Parâmetro (1 char) por empresa: E, U, T, C ou M |
PARMFATUR | CD_INDICEMARKUP | Perfil de markup usado em conjunto com TP_ANALISE |
| Análise (dataset interno) | VL_CUSTOMEDIO | Opção E - custo médio calculado do estoque |
| Análise (dataset interno) | VL_ULTIMOCUSTO | Opção U - último custo pago na última entrada de estoque |
| Análise (dataset interno) | VL_TABCOMPRA | Opção T - valor da tabela de compra do item |
| Análise (dataset interno) | VL_CUSTONOTA | Opção C - custo da última nota de compra do item |
| Análise (dataset interno) | VL_ULTIMOCUSTOIMP | Opção C - índice de imposto da última nota de compra |
| Análise (dataset interno) | VL_MEDIANOTA | Opção M - média dos custos das notas de compra |
| Análise (dataset interno) | VL_MEDIANOTAIMP | Opção M - índice de imposto pela média das notas |
| Análise (dataset interno) | VL_CUSTOBRUTO | Campo destino, recebe o custo conforme opção |
Opções disponíveis
E - Custo Médio Estoque (padrão)
| O que faz | Detalhe |
|---|
| Base do custo | VL_CUSTOBRUTO := VL_CUSTOMEDIO |
| Fonte | Custo médio calculado a partir do movimento de estoque (MOVESTOQUE) |
| Característica | Reflete o custo médio ponderado atual, diluindo oscilações de preço entre entradas |
Simulação passo a passo
- No MFA001 → Faturamento → Opção 2 → Origem do Custo =
Custo Médio Estoque.
- Salve os parâmetros (F6).
- Em MPD002 abra um pedido de venda e inclua um item qualquer.
- O Delphi executa
tabANALISE com todas as colunas de custo (médio, último, tabela, nota, média notas).
- Como
ParmFatur.Values['TP_ANALISE'] = 'E', o código source/MPD002/UdmMPD002.pas:5185 atribui tabANALISEVL_CUSTOBRUTO := tabANALISEVL_CUSTOMEDIO.
- A análise de markup (visível no balão/aba Análise do item) usa esse valor como referência para comparar com o preço praticado.
Resultado esperado: o sistema exibe o markup/margem calculados sobre o custo médio do estoque. Alertas de custo mínimo (ST_AVISACUSTO, ST_HABILITACUSTOMINIMO) também são disparados com base nesse valor.
U - Último Custo Estoque
| O que faz | Detalhe |
|---|
| Base do custo | VL_CUSTOBRUTO := VL_ULTIMOCUSTO |
| Fonte | Último custo registrado no estoque (última entrada) |
| Característica | Sensível a oscilações: uma única compra com preço alto eleva imediatamente a base |
Simulação passo a passo
- No MFA001 → Opção 2 → Origem do Custo =
Último Custo Estoque.
- Entre uma NF de compra do produto X com
VL_CUSTO = 100,00 (último registro de estoque).
- Em MNF002 inclua o mesmo produto numa NF de saída.
ParmFatur.Values['TP_ANALISE'] = 'U' → source/MNF002/UdmMNF002.pas:9346 atribui VL_CUSTOBRUTO := VL_ULTIMOCUSTO = 100,00.
- Se o preço de venda foi 110,00, o markup exibido é calculado sobre 100,00.
Resultado esperado: o custo usado no markup é o último custo registrado em VL_ULTIMOCUSTO, independente das entradas anteriores.
T - Tabela de Compra
| O que faz | Detalhe |
|---|
| Base do custo | VL_CUSTOBRUTO := VL_TABCOMPRA |
| Fonte | Preço cadastrado na Tabela de Compra do item (ITEMTABCOMPRA) |
| Característica | Custo teórico/negociado, independente do que está em estoque |
Simulação passo a passo
- No MFA001 → Opção 2 → Origem do Custo =
Tabela de Compra.
- No cadastro de item, mantenha a Tabela de Compra atualizada (
VL_TABCOMPRA = 80,00).
- Em MPD018 abra um orçamento e inclua o item.
ParmFatur.Values['TP_ANALISE'] = 'T' → source/MPD018/UdmMPD018.pas:1667 atribui VL_CUSTOBRUTO := VL_TABCOMPRA = 80,00.
- Markup é calculado sobre 80,00, mesmo que o estoque tenha custo médio diferente.
Resultado esperado: o custo considerado é o negociado/cadastrado na Tabela de Compra, útil para análises baseadas em custo de reposição contratual.
C - Última Nota de Compra
| O que faz | Detalhe |
|---|
| Base do custo | VL_CUSTOBRUTO := VL_CUSTONOTA |
| Índice imposto auxiliar | vlIndiceImposto := VL_ULTIMOCUSTOIMP |
| Fonte | Valor da última NF de compra efetivamente emitida para o item |
| Característica | Considera impostos efetivamente recuperados/pagos na última entrada |
Simulação passo a passo
- No MFA001 → Opção 2 → Origem do Custo =
Última Nota de Compra.
- Emita uma NF de compra para o produto X com
VL_CUSTONOTA = 95,00 e índice de imposto recuperado.
- Em MPD002 inclua o produto.
ParmFatur.Values['TP_ANALISE'] = 'C' → source/MPD002/UdmMPD002.pas:5194-5199 atribui VL_CUSTOBRUTO := VL_CUSTONOTA = 95,00 e captura vlIndiceImposto := VL_ULTIMOCUSTOIMP.
- A procedure
RETORNA_IMPOSTOMARKUP (em relatórios auxiliares) recebe I_TP_ANALISE = 'C' e retorna R.VL_ULTIMOCUSTOIMP para compor o índice de imposto.
Resultado esperado: markup calculado sobre o valor real da última nota de compra, já considerando o índice de imposto daquela operação específica.
M - Média das Notas de Compra
| O que faz | Detalhe |
|---|
| Base do custo | VL_CUSTOBRUTO := VL_MEDIANOTA |
| Índice imposto auxiliar | vlIndiceImposto := VL_MEDIANOTAIMP |
| Fonte | Média aritmética dos custos das últimas NFs de compra do item |
| Característica | Suaviza picos de custo, combinando histórico de várias compras |
Simulação passo a passo
- No MFA001 → Opção 2 → Origem do Custo =
Média Notas de Compra.
- Tenha 3 NFs de compra recentes do produto X com valores 90,00, 95,00 e 100,00.
VL_MEDIANOTA = 95,00.
- Em MNF002 inclua o item.
ParmFatur.Values['TP_ANALISE'] = 'M' → source/MNF002/UdmMNF002.pas:9359 atribui VL_CUSTOBRUTO := VL_MEDIANOTA = 95,00 e capta vlIndiceImposto := VL_MEDIANOTAIMP.
- A procedure
RETORNA_IMPOSTOMARKUP recebe I_TP_ANALISE = 'M' e retorna R.VL_MEDIANOTAIMP como índice de imposto.
Resultado esperado: markup calculado sobre a média dos custos das últimas notas, evitando que uma única compra anormal distorça a referência.
Tabela Comparativa Resumida
| Opção | Coluna de custo usada | Coluna de índice imposto | Fonte dos dados | Quando usar |
|---|
| E (padrão) | VL_CUSTOMEDIO | (não aplica direto) | Custo médio ponderado do estoque (MOVESTOQUE) | Padrão. Suaviza oscilações e reflete o estoque atual |
| U | VL_ULTIMOCUSTO | (não aplica direto) | Último custo registrado no estoque | Foco no custo de reposição mais recente |
| T | VL_TABCOMPRA | (não aplica direto) | Tabela de Compra cadastrada | Custo teórico/negociado, independente do estoque |
| C | VL_CUSTONOTA | VL_ULTIMOCUSTOIMP | Última NF de compra | Refletir o custo real (com impostos) da última compra efetiva |
| M | VL_MEDIANOTA | VL_MEDIANOTAIMP | Média das NFs de compra | Custo histórico médio para suavizar variações |
Referências no Código Fonte
Delphi
| Arquivo | Linhas | Função |
|---|
source/MFA001/UMFA001.dfm | 3713-3727, 4214-4243, 215, 1541-1545, 3095 | Label lblTP_ANALISE (Caption Origem do Custo), ComboBox cmbTP_ANALISE com Items.Strings = ('Custo Médio Estoque'#9'E', 'Último Custo Estoque'#9'U', 'Tabela de Compra'#9'T', 'Última Nota de Compra'#9'C', 'Média Notas de Compra'#9'M'); SELECT incluindo PARMFATUR.TP_ANALISE; campo tabPARMFATURTP_ANALISE (Size=1, FixedChar) |
source/MFA001/UdmMFA001.pas | 208, 532 | Declaração tabPARMFATURTP_ANALISE: TStringField; AfterInsert atribui valor padrão 'E' |
source/MFA001/UMFA001.pas | 255, 260, 1137, 1441 | Declaração do componente cmbTP_ANALISE no form, foco via SetFocus ao navegar para pagFatOp2; label lblTP_ANALISE |
source/MPD002/UdmMPD002.pas | 5185-5201, 5752 | Lê ParmFatur.Values['TP_ANALISE']; para cada valor (E/U/T/C/M) atribui a coluna de custo correspondente em tabANALISEVL_CUSTOBRUTO; inclui campo P.TP_ANALISE na query de carregamento de parâmetros |
source/MNF002/UdmMNF002.pas | 9343-9359, 10503 | Mesma lógica da MPD002 para Nota Fiscal de Saída; inclui P.TP_ANALISE na query |
source/MPD018/UdmMPD018.pas | 1661-1677 | Mesma lógica para Orçamento |
source/MNF001/UdmMNF001.pas | 8646-8648 | Consulta SELECT PF.TP_ANALISE, PF.CD_INDICEMARKUP FROM PARMFATUR PF WHERE PF.CD_EMPRESA = ... para cálculo do índice markup em NF de entrada |
source/MNF008/UdmMNF008.pas | 768 | Carrega P.TP_ANALISE na query de parâmetros de faturamento |
source/MCO006/UdmMCO006.pas | 2112 | Carrega P.TP_ANALISE na query de parâmetros de faturamento |
SQL (Scripts)
| Arquivo | Linhas | Função |
|---|
Scripts/RETORNA_IMPOSTOMARKUP.sql | 7, 54-91 | Parâmetro I_TP_ANALISE char(1). Branches: C → retorna VL_ULTIMOCUSTOIMP; M → retorna VL_MEDIANOTAIMP; E/U/T → usa I_VL_ANALISE informado |