Dedução de ST na Ordem de Venda
O cálculo dos valores das linhas da Ordem de Venda foi totalmente reescrito nos tickets #19867 e #19929, corrigindo inconsistências e eliminando débitos técnicos.
A nova implementação garante coerência entre os campos Quantidade, Qtde Barras, Preço Base ST, Preço por Barra e Preço de Negociação.
Conceitos Envolvidos
- Preço Base ST (Z_PrecoBaseST): valor do produto com substituição tributária inclusa (valor antes da dedução de ST).
- Preço de Negociação (COF_PrecoNegociacao): corresponde ao valor líquido sem ST (após a dedução de ST) da linha da Ordem de Venda.
- Preço por Barra (Z_PrecoBarra): valor calculado a partir do fator de conversão barra/quilo, sem considerar dedução de ST.
- Deduz ST (Z_DeduzST): flag que indica se o preço líquido deve considerar a dedução de ST.
Cálculo da Dedução de ST
O cálculo da Dedução de ST na Ordem de Venda é realizado (através do método calcST) para deduzir o valor de ST do preço base, ou seja, obter o preço líquido da linha da Ordem de Venda sem ST. Este cálculo é realizado a partir do Preço Base ST (Z_PrecoBaseST) e considerando as alíquotas de IPI, ICMS, ICMS-ST e MVA configuradas no Imposto Brasileiro (LBR_Tax) da Linha da Ordem de Venda (C_OrderLine).
O cálculo é dividido em dois cenários principais:
Quando o Cliente é Consumidor Final
Quando o tipo de transação (LBR_TransactionType) indica que o cliente é consumidor final, o cálculo considera apenas a dedução do IPI, já que não há substituição tributária entre operações dentro da cadeia de revenda.
Preço Líquido = Preço Base ST / (1 + IPI)
Quando o Cliente NÃO é Consumidor Final (Revenda)
Neste caso, o sistema aplica as regras de substituição tributária com MVA (Margem de Valor Agregado), ICMS-ST e ICMS próprio, utilizando a fórmula fiscal para deduzir o preço líquido.
Caso o produto não tenha ICMS-ST configurado, o sistema utiliza o ICMS próprio.
O resultado retornado é o preço líquido (sem ST), utilizado para definir o Preço de Negociação (COF_PrecoNegociacao) quando a flag Deduz ST está ativa.
Regras por Campo
A tabela abaixo resume as dependências entre campos:
| Campo Alterado | Campos Recalculados | Observações |
|---|---|---|
| Qtde Barras (Z_QtdeBarras) | Quantidade (QtyEntered), Preço de Negociação (COF_PrecoNegociacao), Preço por Barra (Z_PrecoBarra), Comprimento da Barra (Z_CompBarra) | Calcula Quantidade em Kg e ajusta preços. |
| Comprimento da Barra (Z_CompBarra) | Quantidade (QtyEntered), Preço por Barra (Z_PrecoBarra) | Quantidade em Kg é recalculada com base na quantidade de barras, comprimento e fator de conversão; preço por barra é ajustado proporcionalmente. |
| Preço de Negociação (COF_PrecoNegociacao) | Preço por Barra (Z_PrecoBarra) | Ajusta o valor por barra através do fator de conversão do produto e o preço sem incluir a dedução de ST. |
| Preço por Barra (Z_PrecoBarra) | Preço de Negociação (COF_PrecoNegociacao), Preço Base ST (Z_PrecoBaseST) | Recalcula Preço de Negociação aplicando dedução de ST se a flag estiver marcada, porém o preço por barra não considera a dedução de ST. |
| Preço Base ST (Z_PrecoBaseST) | Preço de Negociação (COF_PrecoNegociacao), Preço por Barra (Z_PrecoBarra) | Ajusta o Preço de Negociação deduzindo o ST e recalcula o preço por barra sem incluir a dedução de ST. |
| Deduz ST Preço Negociação (Z_DeduzST) | Preço de Negociação (COF_PrecoNegociacao), Preço Base ST (Z_PrecoBaseST) | Flag que ao ser marcada, indica se aplica dedução de ST normalmente; se desmarcada, zera o campo Preço Base ST e remove a dedução. |
Abaixo poderá conferir os cálculo detalhados que são realizados conforme campos alterados:
Ao alterar Qtde Barras
Quantidade (QtyEntered)
É recalculada multiplicando a Quantidade de Barras pelo Comprimento da Barra (caso o Produto possua Peso Personalizado) e Fator de Conversão barra/quilo do Produto:
QtyEntered = Z_QtdeBarras * Z_CompBarra * Z_FatorConversao
Preço de Negociação (COF_PrecoNegociacao)
Recebe o valor do campo Preço Base ST com a dedução do ST:
COF_PrecoNegociacao = Z_PrecoBaseST - <Valor em ST calculado>
Preço por Barra (Z_PrecoBarra)
Se a quantidade de barras for maior que zero:
- Caso a flag Deduz ST Preço Negociação estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço Base ST
Z_PrecoBarra=Z_FatorConversao*Z_PrecoBaseST - Se a flag Deduz ST Preço Negociação NÃO estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço de Negociação
Z_PrecoBarra=Z_FatorConversao*COF_PrecoNegociacao
Ao alterar Comprimento da Barra
Quantidade (QtyEntered)
É recalculada multiplicando a Quantidade de Barras pelo Comprimento da Barra (caso o Produto possua Peso Personalizado) e Fator de Conversão barra/quilo do Produto:
QtyEntered = Z_QtdeBarras * Z_CompBarra * Z_FatorConversao
Preço por Barra (Z_PrecoBarra)
Se a quantidade de barras for maior que zero:
- Caso a flag Deduz ST Preço Negociação estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço Base ST
Z_PrecoBarra=Z_FatorConversao*Z_PrecoBaseST - Se a flag Deduz ST Preço Negociação NÃO estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço de Negociação
Z_PrecoBarra=Z_FatorConversao*COF_PrecoNegociacao
Ao alterar Preço de Negociação
Preço por Barra (Z_PrecoBarra)
Se a quantidade de barras for maior que zero:
- Caso a flag Deduz ST Preço Negociação estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço Base ST
Z_PrecoBarra=Z_FatorConversao*Z_PrecoBaseST - Se a flag Deduz ST Preço Negociação NÃO estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço de Negociação
Z_PrecoBarra=Z_FatorConversao*COF_PrecoNegociacao
Ao alterar Preço por Barra
Preço de Negociação (COF_PrecoNegociacao)
Caso os campos Quantidade e Qtde de Barras sejam maiores que zero, o Preço de Negociação é recalculado:
COF_PrecoNegociacao = Z_PrecoBarra / Z_FatorConversao
Dedução de ST
Se a flag Deduz ST Preço Negociação estiver marcada
- O Preço Base ST é atualizado com o valor sem dedução de ST:
Z_PrecoBaseST=COF_PrecoNegociacao - Na sequência o Preço de Negociação é ajustado com a dedução de ST:
COF_PrecoNegociacao=Z_PrecoBaseST-<Valor em ST calculado>
Ao alterar Preço Base ST
Dedução de ST
Deduz o valor de ST normalmente, atualizando o Preço de Negociação:
COF_PrecoNegociacao = Z_PrecoBaseST - <Valor em ST calculado>
Preço por Barra (Z_PrecoBarra)
Se a quantidade de barras for maior que zero e a flag Deduz ST Preço Negociação estiver marcada, o preço por barra é recalculado através do Fator de Conversão do Produto e Preço Base ST
Z_PrecoBarra = Z_FatorConversao * Z_PrecoBaseST
Ao alterar Deduz ST Preço Negociação
Se a flag for marcada:
A dedução do ST passa a ser aplicada normalmente, atualizando o preço líquido conforme regras fiscais.
Se a flag for desmarcada:
O campo Z_PrecoBaseST é zerado e a dedução deixa de ser aplicada.