Árvore de páginas

01. DADOS GERAIS


Produto:

TOTVS CRM Automação da Força de Vendas

Linha de Produto:

Linha TOTVS CRM SFA

Módulo:Venda
Função:Pedido
Ticket:
Requisito/Story/Issue:

TSFAFSWE-3994 - Obtendo detalhes do item... STATUS

02. ESCOPO FUNCIONAL

Atualmente,

No pedido de venda, ao buscar registros de descontos/acréscimos que estarão vigentes para interagir com os preços de tabela e venda dos itens do pedido,

O sistema somente considera um registro vigente por item, optando pelo menor desconto, quando encontra mais de um registro passível de aplicação para o mesmo item.

Dessa forma, não é possível, ao buscar o preço de tabela de um item, aplicar múltiplos descontos, acumulando-os por multiplicação ou soma, por exemplo.

Em casos em que se deseja aplicar variações a um preço de base variando por alguma entidade selecionada no pedido, o sistema fica limitado em aplicar somente uma variação.

Agora,

Visto que pela documentação de "Classes de desconto/acréscimo" agora será possível cadastrar valores numéricos que representarão a ordem de variação no cálculo de desconto/acréscimo  final que será aplicado ao preço do produto,

No cálculo de preço de tabela, exclusivamente,

O sistema irá realizar a aplicação de múltiplos descontos/acréscimos, respeitando a ordem estabelecida nas ordens de variação das classes de desconto/acréscimo, garantindo que os diferentes critérios de variação possam associar-se se maneira ordenada.

A associação de descontos/acréscimos será feita através de multiplicação, quando os descontos/acréscimos forem informados como percentuais, e subtração, quando os descontos/acréscimos forem informados como valores.

EXEMPLOS

Preço de tabela

ProdutoPreço
A10


Descontos/acréscimos com ordem de variação = 1 

Tipo de clientePercentual desconto
Mercado3

Descontos/acréscimos com ordem de variação = 2

ClienteValor
Alfa-0,5

Descontos/acréscimos com ordem de variação = 3

ProdutoUF OrigemUF destinoPercentual acréscimo
ARSPR-2

Preço de tabela no pedido para o produto 1, selecionando cliente "Alfa", do tipo "Mercado", localizado no Paraná, selecionando filial "1", localizada no Rio Grande do Sul:

Preço de tabela no pedido = [10 * (1 - 3/100) - (-0,5)] * [1 - (-2)/100] = 10,404


03. ESCOPO TÉCNICO

03.01.01 Alteração de cache de descontos / acréscimos sobre preço de tabela

Contexto / Gatilho:

  • No ambiente Web/Mobile, ao consultar o cache de descontos / acréscimo sobre preço de tabela de itens (Vinculado à configuração de Busca produto → DESCONTO)

Lógica:

  • A aplicação atualmente consulta apenas um registro de desconto por item, como também consulta apenas um registro de acréscimo por item.

  • Agora, deverão ser trazidos ao cache N registros de desconto, sendo os descontos / acréscimos agrupados por classedesconto.
    • O critério de agrupamento serão os menores descontos e os maiores acréscimos, baseados nos campos de valor (ou percentual, se valor vazio)


Por exemplo,

Cadastro de desconto:
{
	"iddesconto": 1,
	"idclassedesconto": 1,
	"percentual": 10,
	"idproduto": 1
},
{
	"iddesconto": 2,
	"idclassedesconto": 1,
	"percentual": 3
 	"idproduto": 1 
},
{
	"iddesconto": 3,
	"idclassedesconto": 2,
	"percentual": 5
 	"idproduto": 1 
},
{
	"iddesconto": 4,
	"idclassedesconto": 3,
	"percentual": -10
 	"idproduto": 1 
},
{
	"iddesconto": 5,
	"idclassedesconto": 4,
	"valor": -5
 	"idproduto": 1 
},
{
	"iddesconto": 6,
	"idclassedesconto": 4,
	"percentual": -3
 	"idproduto": 1 
}

Cadastro de classes de desconto:
{
	"idclassedesconto": 1,
	"descricao": "Desconto por canal de cliente"
	"ordem": 1
},
{
	"idclassedesconto": 2,
	"descricao": "Desconto por acordo contratual"
	"ordem": 2
},
{
	"idclassedesconto": 3,
	"descricao": "Acréscimo por frete"
	"ordem": 3
},
{
	"idclassedesconto": 4,
	"descricao": "Acréscimo por taxa de inadimplência"
	"ordem": 4
}

Cadastro de Busca de níveis
1º nível: 
	- PRODUTO_IDPRODUTO

ANTES da alteração deste épico,

	Cache de descontos de preço de tabela:
"item produto 1": {
	"iddesconto": 2,
	"idclassedesconto": 1,
	"percentual": 3,
 	"idproduto": 1 
}
	Cache de acréscimo de preço de tabela:
 "item produto 1": {
	"iddesconto": 5,
	"idclassedesconto": 4,
	"valor": -5, -- valor vale mais que percentual para critério de seleção
 	"idproduto": 1 
}

APÓS a alteração deste épico:
Cache de descontos de preço de tabela:
"item produto 1": [
{
	"iddesconto": 2,
	"idclassedesconto": 1,
	"percentual": 3,
 	"idproduto": 1,
 	"ordem": 1
},
{
	"iddesconto": 3,
	"idclassedesconto": 2,
	"percentual": 5,
 	"idproduto": 1,
	"ordem": 2
}
]

	Cache de acréscimo de preço de tabela:
 "item produto 1": [
{
	"iddesconto": 4,
	"idclassedesconto": 3,
	"percentual": -10
 	"idproduto": 1,
	"ordem": 3
},
{
	"iddesconto": 5,
	"idclassedesconto": 4,
	"valor": -5, -- valor vale mais que percentual para critério de seleção
 	"idproduto": 1,
	"ordem": 4
}
]
	
Diante desse cenário, teremos múltiplos registros para utilizar na influência de preços de tabela, no cálculo do preço original



03.01.02 Implementação do cálculo de múltiplos descontos / acréscimos no cálculo do preço original

Contexto / Gatilho:

  • No ambiente Web/Mobile, na tela de pedido de venda, ao consultar os preços originais dos itens

Lógica:

  • O sistema deverá varrer o cache de descontos e acréscimos sobre preço de tabela, respeitando a ordem estabelecida no cache, aplicando o valor (ou percentual) do desconto ou acréscimo sobre o preço de tabela, da seguinte forma:

    se (desconto.valor is not null) {
    	então preco_influenciado = preco_base - desconto.valor
    } caso contrário se (desconto.percentual is not null) {
    	então preco_influenciado = preco_base * (1-desconto.percentual/100)
    }
    
    preco_base = preco_influenciado



  • A cada iteração dessa varredura, o preço de base deve ser alterado, de forma que a próxima interação aplique o desconto a partir de uma base alterada pela iteração anterior.
  • Sem rótulos