Pular para o conteúdo principal

Parâmetro de Cálculo de Juro na Venda

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela: PARMFATUR.ST_JUROVENDA Valor padrão: N (Não Calcula)

Define como o juro de venda a prazo é aplicado nas vendas da empresa: embutido nas parcelas (sobre a condição de pagamento), embutido no preço unitário da tabela (via taxa da condpagto ou PC_TAXAJUROS), ou calculado por prazo médio (juro composto por subgrupo).

Telas impactadas​

MóduloCódigoDescrição
Pedido de VendaMPD002Pedidos de venda (controla juro de parcela, prazo médio e zeragem de VL_JURO)
Nota Fiscal SaídaMNF002NF de saída (zera VL_JUROVENDA dos itens quando for 'S')
NF Dev. FornecedorMNF008Lê ST_JUROVENDA do ParmFatur
NF Devolução ClienteMNF017Usa em CalculaJuros de parcelas
Bonificação / AjusteMCO006Lê ST_JUROVENDA do ParmFatur
Ordem de ServiçoMOF001Usa ST_JUROVENDAOFI (PARMOFICINA) como equivalente
Parâmetros OficinaOFI001Configura ST_JUROVENDAOFI (mesma lógica de ST_JUROVENDA)
Cadastro Tabela PreçoTFA006Mostra/oculta campo ST_CALCULAJUROS quando ST_JUROVENDA = 'T'
Cadastro SubgrupoTPO007Mostra campo CD_JURO somente quando ST_JUROVENDA = 'M'
Parcelamento de NotajParcelamento (UParcelaNota)Lê ST_JUROVENDA para decidir estratégia de cálculo
Parcelamento de PedidojParcelamento (UParcelaPedido)Lê ST_JUROVENDA / ST_JUROVENDAOFI para cálculo
Parâmetros FinanceiroTFC002Tela relacionada (grid PARMFATUR)
Cadastro de JuroRCA006Juro utilizado quando ST_JUROVENDA = 'M'
Cadastro Condição Pagto.CPD009PC_TAXAJUROS consumida quando ST_JUROVENDA = 'T' ou 'S'

Procedures impactadas​

Procedure / ArquivoDescrição
CALCULA_JUROVENDA (Scripts/CALCULA_JUROVENDA.sql)Procedure central. Lê PARMFATUR.ST_JUROVENDA e decide a fórmula: quando M + I_ST_PRAZOMEDIO='S' aplica juro composto por dias/30; nos demais casos cai em CALCULA_JURO padrão.
RETORNA_PRECOITEM (Scripts/RETORNA_PRECOITEM.sql)Calcula o preço final do item. Consulta PARMFATUR.ST_JUROVENDA (ou PARMOFICINA.ST_JUROVENDAOFI em módulos de oficina) e aplica juro na tabela de preço quando T ou M, ou na condição de pagamento quando S.
PARCELA_FINANCIAMENTO (Scripts/PARCELA_FINANCIAMENTO.sql)Geração de parcelas de financiamento. Se ST_JUROVENDA = 'S' aplica PC_TAXAJUROS da CONDPAGTO; caso contrário zera V_PC_JURO e V_TP_JURO.
PARCELA_FINANC_MNF017 (Scripts/PARCELA_FINANC_MNF017.sql)Versão da MNF017. Mesma lógica: se ST_JUROVENDA <> 'S' zera o juro.
GERA_CREDITOVENDEDOR (Scripts/GERA_CREDITOVENDEDOR.sql)Crédito do vendedor sobre preço diferente da tabela — lê ST_JUROVENDA para compor a base.

Campos envolvidos​

CampoTabelaDescrição
ST_JUROVENDAPARMFATURO próprio parâmetro (char 1): S/T/N/M
ST_JUROVENDAOFIPARMOFICINAVersão equivalente para módulos de oficina (MOF001)
ST_CALCULAJUROPROMPARMFATURSe calcula juro em item em promoção — só fica visível no MFA001 quando ST_JUROVENDA = 'T'
ST_CALCULAJUROSTABPRECOFlag por tabela de preço — só é exibida na TFA006 quando ST_JUROVENDA = 'T'
CD_JUROSUBGRUPOJuro por subgrupo — exibido na TPO007 apenas quando ST_JUROVENDA = 'M'
VL_JUROITEMPEDIDOValor do juro rateado no item do pedido (zerado pelo MPD002 quando ST_JUROVENDA = 'S')
VL_JUROVENDAITEMNOTAValor do juro rateado no item da nota (zerado pelo MNF002 quando ST_JUROVENDA = 'S')
VL_JUROPARCELAPARCELAPEDIDO / PARCELANOTAJuro embutido na parcela (alimentado por CALCULA_JUROVENDA)
PC_TAXAJUROSCONDPAGTOTaxa da condição de pagamento aplicada quando S (sobre parcela) ou T (embutida no preço)

Opções disponíveis​

N - Não Calcula​

O que fazDetalhe
Aplica juro automático?Não. Vende pelo preço de tabela "limpo" e parcela sem juro embutido
VL_JURO / VL_JUROVENDANenhuma lógica especial — ficam zerados por padrão
Fluxo em RETORNA_PRECOITEMIgnora ramos de juro; devolve VL_PRECO da tabela
Fluxo em PARCELA_FINANCIAMENTOV_PC_JURO = NULL; V_TP_JURO = NULL; → parcelas sem juro
Parâmetros auxiliares visíveis no MFA001Nenhum (esconde cmbST_CALCULAJUROPROM)

Simulação passo a passo​

  1. MFA001 → Parâmetros → Ambos → Opção 1 → ST_JUROVENDA = "Não Calcula"
  2. Salve (F6)
  3. Abra um Pedido de Venda (MPD002)
  4. Adicione um produto com uma tabela de preço que tem ST_CALCULAJUROS = 'S' e uma condpagto com PC_TAXAJUROS > 0
  5. Selecione uma condição de pagamento parcelada
  6. Observe o preço unitário → vem da tabela, sem acréscimo de juros
  7. Gere as parcelas → VL_JUROPARCELA = 0 e VL_PARCELA = VL_TOTAL / NR_PARCELAS

Resultado esperado: Nenhum juro é aplicado, nem no preço, nem nas parcelas. É a configuração "neutra".

Este é o valor padrão ao criar um novo registro no MFA001 (UdmMFA001.pas:482).


S - Parcelamento (Juro na Parcela)​

O que fazDetalhe
Onde o juro é aplicadoNa parcela (VL_JUROPARCELA) — o preço unitário do item permanece o da tabela
Origem do juroCONDPAGTO.PC_TAXAJUROS (procedures PARCELA_FINANCIAMENTO / PARCELA_FINANC_MNF017), filtrando ST_CONDPAGTO IN ('V','D') e ST_TAXADESTINO <> 'D'
Fluxo em RETORNA_PRECOITEMRamo V_ST_JUROVENDA = 'S' aplica PC_TAXAJUROS somente para condpagto à vista/direta
Ação ao salvar (MPD002/MNF002)Executa UPDATE ITEMPEDIDO SET VL_JURO = NULL / UPDATE ITEMNOTA SET VL_JUROVENDA = NULL (zera juro rateado no item, já que ele agora vai para a parcela)
Campo auxiliar no MFA001cmbST_CALCULAJUROPROM oculto

Simulação passo a passo​

  1. MFA001 → ST_JUROVENDA = "Parcelamento"
  2. Salve (F6)
  3. Vá em CPD009 e configure uma condpagto parcelada com PC_TAXAJUROS = 2,0
  4. Abra um Pedido de Venda → Item com VL_TOTAL = 1.000,00
  5. Selecione a condpagto acima (3x)
  6. Ao gerar as parcelas → CALCULA_JUROVENDA aplica a taxa da condpagto → VL_JUROPARCELA > 0 em cada parcela
  7. Ao salvar o pedido → VL_JURO na ITEMPEDIDO é setado para NULL (juro só existe na parcela)
  8. Se mudar a condpagto para à vista → parcela única sem juro

Resultado esperado: O item continua com o preço da tabela. O juro aparece nas parcelas geradas pela condição de pagamento. Em notas fiscais, VL_JUROVENDA do item é zerado, porque o juro vai para PARCELANOTA.VL_JUROPARCELA.


T - Tabela de Preço (Juro no Preço Unitário)​

O que fazDetalhe
Onde o juro é aplicadoNo preço unitário do item (via RETORNA_PRECOITEM). A parcela já sai sem juro adicional
Origem do juroCONDPAGTO.PC_TAXAJUROS aplicada sobre VL_PRECO dentro de RETORNA_PRECOITEM quando ST_CALCULAJUROS = 'S' na tabela de preço
Interação com promoçãoSe item está em promoção (O_ST_PROMOCAO = '1') e ST_CALCULAJUROPROM = 'N', não aplica juro (chama V_ST_CALCULAJURO = 'N')
Campo auxiliar no MFA001cmbST_CALCULAJUROPROM visível — define se juro incide também em itens em promoção (UMFA001.pas:2540-2549)
Campo auxiliar na TFA006ST_CALCULAJUROS (flag por tabela) fica visível (UTFA006.pas:445-446)
ParcelasSem juro adicional — VL_JUROPARCELA = 0 pois juro já está no VL_UNITARIO

Simulação passo a passo​

  1. MFA001 → ST_JUROVENDA = "Tabela de Preço"
  2. Observe → o campo "Calcula Juro em Promoção" (ST_CALCULAJUROPROM) aparece do lado
  3. Salve (F6)
  4. Em TFA006 abra uma tabela de preço → campo ST_CALCULAJUROS passa a aparecer → marque como "S"
  5. Cadastre um produto com VL_PRECO = 100,00 nessa tabela
  6. Em CPD009 configure uma condpagto com PC_TAXAJUROS = 5,0
  7. Abra um Pedido, selecione essa condpagto e adicione o produto
  8. Observe o VL_UNITARIO → já vem acrescido do juro (ex.: 105,00) calculado por RETORNA_PRECOITEM
  9. Gere as parcelas → VL_JUROPARCELA = 0; o valor total da parcela já embute o juro

Resultado esperado: O juro fica embutido no preço unitário do item. O cliente enxerga o preço já "à prazo" no documento.


M - Tabela de Preço por Prazo Médio (Juro Composto)​

O que fazDetalhe
Onde o juro é aplicadoNo preço unitário do item, mas usando juro composto (TP_JURO = 'C') por dias/30
Origem do juroJURO vinculado ao SUBGRUPO do item (SUBGRUPO.CD_JURO)
Fluxo em CALCULA_JUROVENDAIF ((V_ST_JUROVENDA = 'M') AND (I_ST_PRAZOMEDIO = 'S')) — calcula pela fórmula de juro composto adaptada: (V_PC_JURO/100)/(1 - POWER(1+(V_PC_JURO/100), -V_NR_DIAS)) * V_NR_DIAS * V_VL_TOTAL
Data usadaV_NR_DIAS = DATEDIFF(DAY FROM I_DT_LANCAMENTO TO I_DT_VENCIMENTO) — prazo médio calculado por data de vencimento
Campo auxiliar no MPD002frmMPD002.btnParcelaPrazoMedio só fica visível quando ST_JUROVENDA = 'M' (UMPD002.pas:552-553); permite gerar parcelamento prazo-médio
Campo auxiliar na TPO007CD_JURO / DS_JURO só aparecem quando o parâmetro = 'M' (UTPO007.pas:122-127)
Interação com data do pedidoMudar DT_PEDIDO recalcula vencimento por prazo médio e reescreve todos os itens (UdmMPD002.pas:5508-5525)

Simulação passo a passo​

  1. MFA001 → ST_JUROVENDA = "Tabela de Preço por Prazo Médio"
  2. Salve (F6)
  3. Em TPO007 abra um subgrupo → campos "Juro" aparecem → vincule um CD_JURO com TP_JURO = 'C' e PC_JURO = 3,0 (% ao mês)
  4. Em RCA006 confirme o cadastro do juro composto
  5. Abra um Pedido de Venda — botão "Parcela Prazo Médio" fica visível
  6. Adicione um item do subgrupo configurado com VL_TOTAL = 1.000,00
  7. Escolha condpagto com parcelas (ex.: 30/60/90 dias)
  8. Clique em "Parcela Prazo Médio" e informe entrada (opcional)
  9. Observe: CALCULA_JUROVENDA aplica (0,03/30) por dia de prazo → o preço dos itens é reajustado pelo juro composto do prazo médio
  10. Ao trocar a data do pedido (DT_PEDIDO) → o sistema reedita todos os itens recalculando pelo novo prazo

Resultado esperado: O juro é específico por subgrupo/família de produto e usa matemática de juro composto proporcional ao prazo médio das parcelas. Útil para quem precifica "linhas" de produto com juros diferentes.


Observação Importante: Módulos de Oficina (PARMOFICINA.ST_JUROVENDAOFI)​

Para módulos de oficina (MOF001, MOF005 etc.) existe uma versão paralela desse parâmetro em PARMOFICINA.ST_JUROVENDAOFI (configurada na OFI001). A lógica é análoga mas com um valor extra:

ST_JUROVENDAOFIComportamento
SParcelamento (mesma lógica de ST_JUROVENDA = 'S' — zera VL_JURO do item)
TTabela de Preço
NNão calcula
MPrazo Médio
DExclusivo da oficina — parcelamento com despesa; VL_JURO do item é zerado e o juro vai para despesa adicional da OS (UMOF001.pas:4558, 4682-4687)

Ambas as procedures PARCELA_FINANCIAMENTO e PARCELA_FINANC_MNF017 detectam se o módulo atual é oficina (CD_MODULO IN ('MOF001','MOF005')) e, nesse caso, leem PARMOFICINA.ST_JUROVENDAOFI ao invés de PARMFATUR.ST_JUROVENDA.


Interação com Outros Parâmetros​

ParâmetroEfeito
ST_CALCULAJUROPROMSó tem efeito quando ST_JUROVENDA = 'T'. Define se juro incide em itens em promoção.
TABPRECO.ST_CALCULAJUROS (TFA006)Só é consultado quando ST_JUROVENDA = 'T'. Permite desligar o juro em tabelas específicas. Se a tabela tem N e o parâmetro global é T, o sistema força N para aquele item (RETORNA_PRECOITEM.sql:158-159).
SUBGRUPO.CD_JURO (TPO007)Só é consultado quando ST_JUROVENDA = 'M'. Define qual juro aplicar por família.
CONDPAGTO.PC_TAXAJUROSAplicada quando S (sobre parcela) ou T (sobre preço, filtrando condpagto IN ('V','D')).

Tabela Comparativa Resumida​

OpçãoOnde aplica o juroOrigem do juroCampos auxiliaresParâmetros relacionados
NNão aplica——(nenhum)
SParcela (VL_JUROPARCELA)CONDPAGTO.PC_TAXAJUROSZera VL_JURO / VL_JUROVENDA—
TPreço unitárioCONDPAGTO.PC_TAXAJUROS + TABPRECO.ST_CALCULAJUROSST_CALCULAJUROPROM, ST_CALCULAJUROSPromoção
MPreço unitário (juro composto)SUBGRUPO.CD_JURO → JURObtnParcelaPrazoMedio (MPD002); CD_JURO (TPO007)Prazo Médio

Referências no Código Fonte​

Delphi — Tela de configuração (MFA001)​

ArquivoLinhaDescrição
source/MFA001/UMFA001.dfm2435-2449Label lblST_JUROVENDA com caption "Calcula Juro na Venda"
source/MFA001/UMFA001.dfm3142-3171cmbST_JUROVENDA: TwwDBComboBox com opções S/T/N/M
source/MFA001/UMFA001.pas212 / 240 / 832Declarações do label, combo e handler
source/MFA001/UMFA001.pas2538-2550cmbST_JUROVENDAChange — mostra/oculta cmbST_CALCULAJUROPROM quando valor = 'T'
source/MFA001/UdmMFA001.pas129Declaração do TField tabPARMFATURST_JUROVENDA
source/MFA001/UdmMFA001.pas482AfterInsert: valor padrão N ao criar novo registro
source/MFA001/UdmMFA001.dfm—Field mapping do dataset PARMFATUR

Delphi — Módulos consumidores​

ArquivoLinhaUso
source/MPD002/UdmMPD002.pas2129 / 2296 / 3860 / 5508 / 5755 / 5831Lógica de prazo médio, zeragem VL_JURO, SELECT de PARMFATUR
source/MPD002/UMPD002.pas552 / 4355Esconde btnParcelaPrazoMedio; gera string de parcelas quando 'M'
source/MNF002/UdmMNF002.pas10507 / 10569SELECT de PARMFATUR; zera VL_JUROVENDA dos ITEMNOTA quando 'S'
source/MNF008/UdmMNF008.pas772SELECT de PARMFATUR incluindo ST_JUROVENDA
source/MNF017/UdmMNF017.pas3263TipoCalculoJuros := ParmFatur.Values['ST_JUROVENDA']
source/MCO006/UdmMCO006.pas2116SELECT de PARMFATUR
source/MOF001/UdmMOF001.pas446 / 690 / 710 / 7747Usa ST_JUROVENDAOFI (PARMOFICINA)
source/MOF001/UMOF001.pas4558 / 4682Tratamento do valor 'D' exclusivo da oficina
source/OFI001/UdmOFI001.pas / .dfm, UOFI001.pas / .dfm—Configuração do ST_JUROVENDAOFI
source/TFA006/UTFA006.pas445-446Visibilidade de ST_CALCULAJUROS depende de ST_JUROVENDA = 'T'
source/TPO007/UTPO007.pas118-127Oculta campos CD_JURO quando ST_JUROVENDA <> 'M'
source/TFC002/UdmTFC002.pas, UTFC002.pas—Grid de parâmetros relacionado
source/jParcelamento/UParcelaNota.pas340-352Cálculo de parcela de nota — decide TipoCalculoJuros
source/jParcelamento/UParcelaPedido.pas227-258 / 589-602Cálculo de parcela de pedido; trata ST_JUROVENDAOFI em MOF001
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/JunsoftBuilder.java—Seleção via API Java (repository do ERP)
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmOficinaSQL.java—Consulta ST_JUROVENDAOFI na PARMOFICINA

SQL — Stored Procedures​

ArquivoLinhaDescrição
Scripts/CALCULA_JUROVENDA.sql26 / 34-37 / 39-45 / 61-66 / 83-99 / 106-107Procedure central — decide a fórmula conforme valor M/T/S/N
Scripts/RETORNA_PRECOITEM.sql25 / 64-79 / 83-84 / 158-159 / 213-214 / 217-224 / 231-243 / 249-275Aplica juro embutido no preço de item
Scripts/PARCELA_FINANCIAMENTO.sql29 / 74-97 / 132-140Gera parcelas de financiamento; trata módulos de oficina
Scripts/PARCELA_FINANC_MNF017.sql26 / 56-79Variante específica da MNF017
Scripts/GERA_CREDITOVENDEDOR.sql29 / 45-48 / 84 / 100Crédito do vendedor sobre preço diferente — consulta ST_JUROVENDA