Pular para o conteúdo principal

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 AlteradoCampos RecalculadosObservaçõ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.