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ódulo | Código | Descrição |
|---|
| Pedido de Venda | MPD002 | Pedidos de venda (controla juro de parcela, prazo médio e zeragem de VL_JURO) |
| Nota Fiscal Saída | MNF002 | NF de saída (zera VL_JUROVENDA dos itens quando for 'S') |
| NF Dev. Fornecedor | MNF008 | Lê ST_JUROVENDA do ParmFatur |
| NF Devolução Cliente | MNF017 | Usa em CalculaJuros de parcelas |
| Bonificação / Ajuste | MCO006 | Lê ST_JUROVENDA do ParmFatur |
| Ordem de Serviço | MOF001 | Usa ST_JUROVENDAOFI (PARMOFICINA) como equivalente |
| Parâmetros Oficina | OFI001 | Configura ST_JUROVENDAOFI (mesma lógica de ST_JUROVENDA) |
| Cadastro Tabela Preço | TFA006 | Mostra/oculta campo ST_CALCULAJUROS quando ST_JUROVENDA = 'T' |
| Cadastro Subgrupo | TPO007 | Mostra campo CD_JURO somente quando ST_JUROVENDA = 'M' |
| Parcelamento de Nota | jParcelamento (UParcelaNota) | Lê ST_JUROVENDA para decidir estratégia de cálculo |
| Parcelamento de Pedido | jParcelamento (UParcelaPedido) | Lê ST_JUROVENDA / ST_JUROVENDAOFI para cálculo |
| Parâmetros Financeiro | TFC002 | Tela relacionada (grid PARMFATUR) |
| Cadastro de Juro | RCA006 | Juro utilizado quando ST_JUROVENDA = 'M' |
| Cadastro Condição Pagto. | CPD009 | PC_TAXAJUROS consumida quando ST_JUROVENDA = 'T' ou 'S' |
Procedures impactadas
| Procedure / Arquivo | Descriçã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
| Campo | Tabela | Descrição |
|---|
ST_JUROVENDA | PARMFATUR | O próprio parâmetro (char 1): S/T/N/M |
ST_JUROVENDAOFI | PARMOFICINA | Versão equivalente para módulos de oficina (MOF001) |
ST_CALCULAJUROPROM | PARMFATUR | Se calcula juro em item em promoção — só fica visível no MFA001 quando ST_JUROVENDA = 'T' |
ST_CALCULAJUROS | TABPRECO | Flag por tabela de preço — só é exibida na TFA006 quando ST_JUROVENDA = 'T' |
CD_JURO | SUBGRUPO | Juro por subgrupo — exibido na TPO007 apenas quando ST_JUROVENDA = 'M' |
VL_JURO | ITEMPEDIDO | Valor do juro rateado no item do pedido (zerado pelo MPD002 quando ST_JUROVENDA = 'S') |
VL_JUROVENDA | ITEMNOTA | Valor do juro rateado no item da nota (zerado pelo MNF002 quando ST_JUROVENDA = 'S') |
VL_JUROPARCELA | PARCELAPEDIDO / PARCELANOTA | Juro embutido na parcela (alimentado por CALCULA_JUROVENDA) |
PC_TAXAJUROS | CONDPAGTO | Taxa 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 faz | Detalhe |
|---|
| Aplica juro automático? | Não. Vende pelo preço de tabela "limpo" e parcela sem juro embutido |
VL_JURO / VL_JUROVENDA | Nenhuma lógica especial — ficam zerados por padrão |
Fluxo em RETORNA_PRECOITEM | Ignora ramos de juro; devolve VL_PRECO da tabela |
Fluxo em PARCELA_FINANCIAMENTO | V_PC_JURO = NULL; V_TP_JURO = NULL; → parcelas sem juro |
| Parâmetros auxiliares visíveis no MFA001 | Nenhum (esconde cmbST_CALCULAJUROPROM) |
Simulação passo a passo
- MFA001 → Parâmetros → Ambos → Opção 1 → ST_JUROVENDA = "Não Calcula"
- Salve (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione um produto com uma tabela de preço que tem
ST_CALCULAJUROS = 'S' e uma condpagto com PC_TAXAJUROS > 0
- Selecione uma condição de pagamento parcelada
- Observe o preço unitário → vem da tabela, sem acréscimo de juros
- 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 faz | Detalhe |
|---|
| Onde o juro é aplicado | Na parcela (VL_JUROPARCELA) — o preço unitário do item permanece o da tabela |
| Origem do juro | CONDPAGTO.PC_TAXAJUROS (procedures PARCELA_FINANCIAMENTO / PARCELA_FINANC_MNF017), filtrando ST_CONDPAGTO IN ('V','D') e ST_TAXADESTINO <> 'D' |
Fluxo em RETORNA_PRECOITEM | Ramo 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 MFA001 | cmbST_CALCULAJUROPROM oculto |
Simulação passo a passo
- MFA001 → ST_JUROVENDA = "Parcelamento"
- Salve (F6)
- Vá em CPD009 e configure uma condpagto parcelada com
PC_TAXAJUROS = 2,0
- Abra um Pedido de Venda → Item com
VL_TOTAL = 1.000,00
- Selecione a condpagto acima (3x)
- Ao gerar as parcelas →
CALCULA_JUROVENDA aplica a taxa da condpagto → VL_JUROPARCELA > 0 em cada parcela
- Ao salvar o pedido →
VL_JURO na ITEMPEDIDO é setado para NULL (juro só existe na parcela)
- 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 faz | Detalhe |
|---|
| Onde o juro é aplicado | No preço unitário do item (via RETORNA_PRECOITEM). A parcela já sai sem juro adicional |
| Origem do juro | CONDPAGTO.PC_TAXAJUROS aplicada sobre VL_PRECO dentro de RETORNA_PRECOITEM quando ST_CALCULAJUROS = 'S' na tabela de preço |
| Interação com promoção | Se 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 MFA001 | cmbST_CALCULAJUROPROM visível — define se juro incide também em itens em promoção (UMFA001.pas:2540-2549) |
| Campo auxiliar na TFA006 | ST_CALCULAJUROS (flag por tabela) fica visível (UTFA006.pas:445-446) |
| Parcelas | Sem juro adicional — VL_JUROPARCELA = 0 pois juro já está no VL_UNITARIO |
Simulação passo a passo
- MFA001 → ST_JUROVENDA = "Tabela de Preço"
- Observe → o campo "Calcula Juro em Promoção" (
ST_CALCULAJUROPROM) aparece do lado
- Salve (F6)
- Em TFA006 abra uma tabela de preço → campo
ST_CALCULAJUROS passa a aparecer → marque como "S"
- Cadastre um produto com
VL_PRECO = 100,00 nessa tabela
- Em CPD009 configure uma condpagto com
PC_TAXAJUROS = 5,0
- Abra um Pedido, selecione essa condpagto e adicione o produto
- Observe o
VL_UNITARIO → já vem acrescido do juro (ex.: 105,00) calculado por RETORNA_PRECOITEM
- 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 faz | Detalhe |
|---|
| Onde o juro é aplicado | No preço unitário do item, mas usando juro composto (TP_JURO = 'C') por dias/30 |
| Origem do juro | JURO vinculado ao SUBGRUPO do item (SUBGRUPO.CD_JURO) |
Fluxo em CALCULA_JUROVENDA | IF ((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 usada | V_NR_DIAS = DATEDIFF(DAY FROM I_DT_LANCAMENTO TO I_DT_VENCIMENTO) — prazo médio calculado por data de vencimento |
| Campo auxiliar no MPD002 | frmMPD002.btnParcelaPrazoMedio só fica visível quando ST_JUROVENDA = 'M' (UMPD002.pas:552-553); permite gerar parcelamento prazo-médio |
| Campo auxiliar na TPO007 | CD_JURO / DS_JURO só aparecem quando o parâmetro = 'M' (UTPO007.pas:122-127) |
| Interação com data do pedido | Mudar DT_PEDIDO recalcula vencimento por prazo médio e reescreve todos os itens (UdmMPD002.pas:5508-5525) |
Simulação passo a passo
- MFA001 → ST_JUROVENDA = "Tabela de Preço por Prazo Médio"
- Salve (F6)
- Em TPO007 abra um subgrupo → campos "Juro" aparecem → vincule um
CD_JURO com TP_JURO = 'C' e PC_JURO = 3,0 (% ao mês)
- Em RCA006 confirme o cadastro do juro composto
- Abra um Pedido de Venda — botão "Parcela Prazo Médio" fica visível
- Adicione um item do subgrupo configurado com
VL_TOTAL = 1.000,00
- Escolha condpagto com parcelas (ex.: 30/60/90 dias)
- Clique em "Parcela Prazo Médio" e informe entrada (opcional)
- Observe:
CALCULA_JUROVENDA aplica (0,03/30) por dia de prazo → o preço dos itens é reajustado pelo juro composto do prazo médio
- 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_JUROVENDAOFI | Comportamento |
|---|
S | Parcelamento (mesma lógica de ST_JUROVENDA = 'S' — zera VL_JURO do item) |
T | Tabela de Preço |
N | Não calcula |
M | Prazo Médio |
D | Exclusivo 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.
| Parâmetro | Efeito |
|---|
ST_CALCULAJUROPROM | Só 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_TAXAJUROS | Aplicada quando S (sobre parcela) ou T (sobre preço, filtrando condpagto IN ('V','D')). |
Tabela Comparativa Resumida
| Opção | Onde aplica o juro | Origem do juro | Campos auxiliares | Parâmetros relacionados |
|---|
| N | Não aplica | — | — | (nenhum) |
| S | Parcela (VL_JUROPARCELA) | CONDPAGTO.PC_TAXAJUROS | Zera VL_JURO / VL_JUROVENDA | — |
| T | Preço unitário | CONDPAGTO.PC_TAXAJUROS + TABPRECO.ST_CALCULAJUROS | ST_CALCULAJUROPROM, ST_CALCULAJUROS | Promoção |
| M | Preço unitário (juro composto) | SUBGRUPO.CD_JURO → JURO | btnParcelaPrazoMedio (MPD002); CD_JURO (TPO007) | Prazo Médio |
Referências no Código Fonte
Delphi — Tela de configuração (MFA001)
| Arquivo | Linha | Descrição |
|---|
source/MFA001/UMFA001.dfm | 2435-2449 | Label lblST_JUROVENDA com caption "Calcula Juro na Venda" |
source/MFA001/UMFA001.dfm | 3142-3171 | cmbST_JUROVENDA: TwwDBComboBox com opções S/T/N/M |
source/MFA001/UMFA001.pas | 212 / 240 / 832 | Declarações do label, combo e handler |
source/MFA001/UMFA001.pas | 2538-2550 | cmbST_JUROVENDAChange — mostra/oculta cmbST_CALCULAJUROPROM quando valor = 'T' |
source/MFA001/UdmMFA001.pas | 129 | Declaração do TField tabPARMFATURST_JUROVENDA |
source/MFA001/UdmMFA001.pas | 482 | AfterInsert: valor padrão N ao criar novo registro |
source/MFA001/UdmMFA001.dfm | — | Field mapping do dataset PARMFATUR |
Delphi — Módulos consumidores
| Arquivo | Linha | Uso |
|---|
source/MPD002/UdmMPD002.pas | 2129 / 2296 / 3860 / 5508 / 5755 / 5831 | Lógica de prazo médio, zeragem VL_JURO, SELECT de PARMFATUR |
source/MPD002/UMPD002.pas | 552 / 4355 | Esconde btnParcelaPrazoMedio; gera string de parcelas quando 'M' |
source/MNF002/UdmMNF002.pas | 10507 / 10569 | SELECT de PARMFATUR; zera VL_JUROVENDA dos ITEMNOTA quando 'S' |
source/MNF008/UdmMNF008.pas | 772 | SELECT de PARMFATUR incluindo ST_JUROVENDA |
source/MNF017/UdmMNF017.pas | 3263 | TipoCalculoJuros := ParmFatur.Values['ST_JUROVENDA'] |
source/MCO006/UdmMCO006.pas | 2116 | SELECT de PARMFATUR |
source/MOF001/UdmMOF001.pas | 446 / 690 / 710 / 7747 | Usa ST_JUROVENDAOFI (PARMOFICINA) |
source/MOF001/UMOF001.pas | 4558 / 4682 | Tratamento do valor 'D' exclusivo da oficina |
source/OFI001/UdmOFI001.pas / .dfm, UOFI001.pas / .dfm | — | Configuração do ST_JUROVENDAOFI |
source/TFA006/UTFA006.pas | 445-446 | Visibilidade de ST_CALCULAJUROS depende de ST_JUROVENDA = 'T' |
source/TPO007/UTPO007.pas | 118-127 | Oculta campos CD_JURO quando ST_JUROVENDA <> 'M' |
source/TFC002/UdmTFC002.pas, UTFC002.pas | — | Grid de parâmetros relacionado |
source/jParcelamento/UParcelaNota.pas | 340-352 | Cálculo de parcela de nota — decide TipoCalculoJuros |
source/jParcelamento/UParcelaPedido.pas | 227-258 / 589-602 | Cá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
| Arquivo | Linha | Descrição |
|---|
Scripts/CALCULA_JUROVENDA.sql | 26 / 34-37 / 39-45 / 61-66 / 83-99 / 106-107 | Procedure central — decide a fórmula conforme valor M/T/S/N |
Scripts/RETORNA_PRECOITEM.sql | 25 / 64-79 / 83-84 / 158-159 / 213-214 / 217-224 / 231-243 / 249-275 | Aplica juro embutido no preço de item |
Scripts/PARCELA_FINANCIAMENTO.sql | 29 / 74-97 / 132-140 | Gera parcelas de financiamento; trata módulos de oficina |
Scripts/PARCELA_FINANC_MNF017.sql | 26 / 56-79 | Variante específica da MNF017 |
Scripts/GERA_CREDITOVENDEDOR.sql | 29 / 45-48 / 84 / 100 | Crédito do vendedor sobre preço diferente — consulta ST_JUROVENDA |