Mudanças entre as edições de "Cálculo de Margem"

De GeoSales
Ir para navegação Ir para pesquisar
(Criou página com '== Histórico de Revisões == {| border="1" cellpadding="1" ! Data ! Quem ! Comentários |- | 11/01/2017 || Victor César || Criação do Documento |- |}')
 
 
(72 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 
== Histórico de Revisões ==
 
== Histórico de Revisões ==
{| border="1" cellpadding="1"
+
{| class="wikitable"
 
! Data
 
! Data
 
! Quem  
 
! Quem  
 
! Comentários  
 
! Comentários  
 
|-
 
|-
|  11/01/2017  ||  Victor César   ||  Criação do Documento
+
|  11/01/2017  ||  Victor César       ||  Criação do Documento
 
|-
 
|-
 +
|  27/01/2017  ||  Jefferson Quesado  ||  Revisão Arquitetura
 +
|-
 +
|  01/02/2017  ||  Inaldo França      ||  Ajustes solicitados pela arquitetura
 +
|}
 +
 +
== Necessidade ==
 +
 +
A AGROSEMA tem a necessidade de detectar por pedido, se determinada venda está atingindo ou não a margem média de lucro por cada vendedor.
 +
 +
== Solução ==
 +
Iremos utilizar como solução a funcionalidade de cálculo de rentabilidade do pedido, e a partir da margem obtida, comparar com a margem que cada vendedor irá possuir, Se a margem obtida for menor que a do vendedor o sistema exibirá um alerta informando que aquele pedido ficará bloqueado no ERP, caso a margem obtida for maior do que a do vendedor o sistema não exibirá o alerta.
 +
 +
Para chegar na margem geral do pedido é preciso construir uma série cálculos, onde no final deverá ter a média de todos os produtos do pedido e identificar se a margem foi ou não atingida pelo vendedor
 +
 +
Iremos criar funções (listeners) para o cálculo do custo, pois será levado em consideração no momento do calculo da Margem do Pedido.
 +
 +
== Implementação ==
 +
 +
Iremos dividir em dois momentos, Primeiramente calcular o '''CUSTO''' de cada item, e depois a '''APLICAÇÃO''', onde iremos aplicar a  Margem e qual validação ela terá.
 +
 +
=== Pré-Requisitos ===
 +
# O Sistema deve possuir o cadastro de parâmetro '''ID_RENTABILIDADE''' com o valor '''S'''
 +
# O Sistema deve possuir o cadastro de parâmetro '''ID_CALCULA_CUSTO''' configurado com '''S'''
 +
# A Margem de cada vendedor deve estar cadastrada no ERP no campo '''A3_ZZMBMIN''' e integrada com o GeoSales na tabela VENDEDOR
 +
# O Custo do Produto deve estar cadastrado no ERP no campo '''DA1_ZZCUST''' e integrado com o GeoSales na tabela PRODUTO_CUSTO
 +
# O Juros do dia de cada Produto deve estar cadastrado no ERP no campo '''A3_ZZTXMES''' e integrado no GeoSales na tabela PRODUTO
 +
# Integrar a tabela FAMILIA_PRODUTO_RENTABILIDADE
 +
 +
=== Cálculo ===
 +
 +
Como exemplo iremos adotar as seguinte informações:
 +
 +
*Custo do produto Lorbson - '''R$400,00''' (Essa informação será cadastrada no ERP)
 +
*Quantidade vendida: 1
 +
*Vencimento: Data de Hoje - (Essa campo é o mesmo que foi criado na funcionalidade de Bloqueio por Prazo)
 +
*Vendedor AGROSEMA - Margem Mínima de '''15%''' (Essa informação será cadastrada no ERP)
 +
*Taxa de Juros de (1,8% a.m) / 30 = Taxa de Juros a.d = '''0,06%'''. (Essa informação será cadastrada no ERP)
 +
*Valor total do pedido = '''R$ 516,75'''
 +
 +
 +
==== Cálculo do Custo ====
 +
* O Custo será calculado através de Listeners, será criado uma tabela na base de dados para listar esses listeners e controlar a ordem de aplicação se houver a necessidade de realizar mais de um cálculo para achar o custo do Produto.
 +
 +
Estrutura da Tabela: '''APLICACAO_CUSTO'''
 +
 +
{| class="wikitable"
 +
! ID
 +
! DS_LISTENER
 +
! ORDEM
 +
! ATIVO
 +
|-
 +
|  CÓDIGO SEQUENCIAL ||  DESCRIÇÃO DO LISTENER || ORDEM DE APLICAÇÃO || SE ESTÁ ATIVO OU NÃO.
 +
|}
 +
 +
* O campo ORDEM deve ser único, para não haver conflitos.
 +
* Todo listener de custo deve preencher o campo VL_CUSTO da tabela ITEM_PEDIDO
 +
* Para o cálculo do custo dos produtos da AGROSEMA será criado o listener TAXA_VENCIMENTO
 +
* Para esse listener será aplicado o seguinte cálculo:
 +
 +
{| class="wikitable"
 +
!colspan="4"| ONDE
 +
|-
 +
|DIAS
 +
|(VENCIMENTO - DATA ATUAL), Resultado deve ser em número de dias
 +
|-
 +
|VR_CUSTO
 +
|Custo do produto da tabela PRODUTO_CUSTO
 +
|-
 +
|PR_JUROS
 +
|Percentual de Juros do dia de Cada produto
 +
|}
 +
 +
Custo do Produto = VR_CUSTO + (VR_CUSTO * (DIAS * PR_JUROS))
 +
                             
 +
  400 + (400*(0*0,06%)) = R'''$400,00'''
 +
 +
* O resultado desse calculo será inserido no campo VR_CUSTO da tabela ITEM_PEDIDO e será utilizado no cálculo da Margem.
 +
 +
 +
==== Aplicação do Cálculo da Margem ====
 +
* Após obter o custo de cada item o sistema irá calcular a Margem de Lucro de Cada item e salvar no campo VR_RENTABILIDADE da tabela ITEM_PEDIDO a margem de cada item do pedido.
 +
* Após obter o custo de cada item e a Margem de Lucro de cada item será aplicado um cálculo para ser obtido a Margem de Lucro Geral do Pedido para ser exibido ou não o alerta.
 +
'''Calcular a Margem do Lucro Geral:'''
 +
 +
  Margem de Lucro = 1 - (Soma dos Custos do Produto (Campo VR_CUSTO da tabela ITEM_PEDIDO) * Quantidade de Cada Item / Valor Total do pedido)
 +
 +
    1 - (400 / 516,75) = '''0,2259''' ou '''22,59%''' se multiplicarmos por 100
 +
 +
* Após obter esse percentual o mesmo será comparado com o campo PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE.
 +
** Se a Margem geral do pedido for menor que o percentual do PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE exibir o seguinte alerta: '''“Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”'''
 +
** Se a margem for maior que o percentual do PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE não exibir nenhum alerta.
 +
 +
----
 +
 +
==== Observação ====
 +
* Na fórmula que foi enviada pelo Reginaldo da AGROSEMA teriam mais dois passos, mas foi identificado que a nível de sistema os dois cálculos são redundantes, uma vez que não iremos exibir o total do lucro do pedido esses cálculos '''NÃO''' são necessários
 +
 +
===== Terceiro Cálculo =====
 +
Calcular o Total do Lucro:
 +
 +
  Total do Lucro = (Valor total do pedido * Margem de Lucro)
 +
 +
      516,75 * 0,2259 = '''R$116,73'''
 +
 +
===== Quarto Cálculo =====
 +
  Margem Geral do pedido
 +
 +
  Margem = (Soma do Lucro de cada item do pedido / Valor total do pedido) * 100
 +
 +
    (116,73 / 516,75) * 100 = '''22,59%'''
 +
 +
----
 +
 +
=== Regras de Negócio ===
 +
 +
'''[RN1]'''– Regra de Alerta do pedido
 +
 +
Para exibir alerta de que o pedido será bloqueado no ERP, o resultado da MARGEM GERAL deve ser maior ou igual a margem mínima definida por vendedor. No caso supracitado a margem do vendedor é de '''15%'''. Como a margem do pedido foi de 22,59%, o pedido vai passar sem bloqueios.
 +
 +
'''[RN2]''' – Se a MARGEM GERAL for menor que a margem definida por vendedor a mensagem que será exibida será: '''“Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”'''
 +
 +
'''[RN3]''' – Criar o campo CD_VENDEDOR na tabela FAMILIA_PRODUTO_RENTABILIDADE para especificar a margem de cada vendedor.
 +
 +
'''[RN4]''' – Criar o campo PR_JUROS na tabela PRODUTO para informar o juros de cada produto
 +
 +
'''[RN5]''' – Criar uma configuração ID_ALERTA_MARGEM para ativar o alerta para do calculo de Margem
 +
 +
=== Integração ===
 +
 +
No momento da integração os campos e tabelas abaixo devem ser preenchidos, conforme descrito:
 +
 +
'''[RN6]''' – O campo PR_IDEAL na tabela FAMILIA_PRODUTO_RENTABILIDADE deve ser preenchida com a informação do ERP que da Tabela '''SA3''' da coluna '''A3_ZZMBMIN''' Esse campo é a margem de cada vendedor.
 +
 +
'''[RN7]''' – O campo VR_CUSTO na tabela PRODUTO_CUSTO deve ser preenchida com a informação do ERP que da Tabela '''DA1''' da coluna '''DA1_ZZCUST'''.
 +
 +
'''[RN8]''' – O campo PR_JUROS na tabela PRODUTO deve ser preenchida com a informação do ERP que da Tabela '''SA3''' da coluna '''A3_ZZTXMES'''.
 +
 +
'''[RN9]''' - Integrar a tabela FAMILIA_PRODUTO_RENTABILIDADE
 +
 +
== Cenários ==
 +
 +
=== Cenário Feliz ===
 +
====Dados====
 +
*Vendedor: João
 +
*Produto: Semente A
 +
*Custo (R$): 400
 +
*Vencimento: 30 dias (1,33%)
 +
*Margem Vendedor Joao: 15%
 +
*Tx Juros: 0,06% (a.d)
 +
*Total Pedido (R$): 516,75
 +
 +
==== Operação ====
 +
*Vendedor João cria o pedido;
 +
*Selecionar o Item: Semente A
 +
*O vendedor salva o Pedido
 +
   
 +
==== Assertivas====
 +
*Pedido enviado para o ERP com sucesso.
 +
 +
=== Cenário de Alerta ===
 +
====Dados====
 +
*Vendedor: João
 +
*Produto: Semente B
 +
*Custo (R$): 200
 +
*Vencimento: 60 dias (2,40%)
 +
*Margem Vendedor João: 15%
 +
*Tx Juros: 0,06% (a.d)
 +
*Total Pedido (R$): 230
 +
 +
====Operação====
 +
*Vendedor João cria o pedido;
 +
*Selecionar o Item: Semente B;
 +
*O vendedor salva o Pedido
 +
 +
====Assertivas====
 +
*A mensagem que será exibida “Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”
 +
*Pedido enviado para o ERP com sucesso.
 +
 +
== Aprovação ==
 +
 +
Considero aprovada a documentação da funcionalidade especificada acima, e autorizo a implementação da mesma no Sistema GeoSales, em nome da Organização a qual estou vinculado.
 +
 +
{| class="wikitable"
 +
! Setor
 +
! Aprovado Por
 +
! style="width:200px" |Data
 +
! style="width:300px" |Assinatura
 +
|-
 +
| '''''Tecnologia da Informação'''''
 +
| ''Reginaldo Possari''
 +
|
 +
|
 +
|-
 +
| '''''Comercial'''''
 +
| ''André Franco''
 +
|
 +
|
 
|}
 
|}

Edição atual tal como às 14h30min de 2 de fevereiro de 2017

Histórico de Revisões

Data Quem Comentários
11/01/2017 Victor César Criação do Documento
27/01/2017 Jefferson Quesado Revisão Arquitetura
01/02/2017 Inaldo França Ajustes solicitados pela arquitetura

Necessidade

A AGROSEMA tem a necessidade de detectar por pedido, se determinada venda está atingindo ou não a margem média de lucro por cada vendedor.

Solução

Iremos utilizar como solução a funcionalidade de cálculo de rentabilidade do pedido, e a partir da margem obtida, comparar com a margem que cada vendedor irá possuir, Se a margem obtida for menor que a do vendedor o sistema exibirá um alerta informando que aquele pedido ficará bloqueado no ERP, caso a margem obtida for maior do que a do vendedor o sistema não exibirá o alerta.

Para chegar na margem geral do pedido é preciso construir uma série cálculos, onde no final deverá ter a média de todos os produtos do pedido e identificar se a margem foi ou não atingida pelo vendedor

Iremos criar funções (listeners) para o cálculo do custo, pois será levado em consideração no momento do calculo da Margem do Pedido.

Implementação

Iremos dividir em dois momentos, Primeiramente calcular o CUSTO de cada item, e depois a APLICAÇÃO, onde iremos aplicar a Margem e qual validação ela terá.

Pré-Requisitos

  1. O Sistema deve possuir o cadastro de parâmetro ID_RENTABILIDADE com o valor S
  2. O Sistema deve possuir o cadastro de parâmetro ID_CALCULA_CUSTO configurado com S
  3. A Margem de cada vendedor deve estar cadastrada no ERP no campo A3_ZZMBMIN e integrada com o GeoSales na tabela VENDEDOR
  4. O Custo do Produto deve estar cadastrado no ERP no campo DA1_ZZCUST e integrado com o GeoSales na tabela PRODUTO_CUSTO
  5. O Juros do dia de cada Produto deve estar cadastrado no ERP no campo A3_ZZTXMES e integrado no GeoSales na tabela PRODUTO
  6. Integrar a tabela FAMILIA_PRODUTO_RENTABILIDADE

Cálculo

Como exemplo iremos adotar as seguinte informações:

  • Custo do produto Lorbson - R$400,00 (Essa informação será cadastrada no ERP)
  • Quantidade vendida: 1
  • Vencimento: Data de Hoje - (Essa campo é o mesmo que foi criado na funcionalidade de Bloqueio por Prazo)
  • Vendedor AGROSEMA - Margem Mínima de 15% (Essa informação será cadastrada no ERP)
  • Taxa de Juros de (1,8% a.m) / 30 = Taxa de Juros a.d = 0,06%. (Essa informação será cadastrada no ERP)
  • Valor total do pedido = R$ 516,75


Cálculo do Custo

  • O Custo será calculado através de Listeners, será criado uma tabela na base de dados para listar esses listeners e controlar a ordem de aplicação se houver a necessidade de realizar mais de um cálculo para achar o custo do Produto.

Estrutura da Tabela: APLICACAO_CUSTO

ID DS_LISTENER ORDEM ATIVO
CÓDIGO SEQUENCIAL DESCRIÇÃO DO LISTENER ORDEM DE APLICAÇÃO SE ESTÁ ATIVO OU NÃO.
  • O campo ORDEM deve ser único, para não haver conflitos.
  • Todo listener de custo deve preencher o campo VL_CUSTO da tabela ITEM_PEDIDO
  • Para o cálculo do custo dos produtos da AGROSEMA será criado o listener TAXA_VENCIMENTO
  • Para esse listener será aplicado o seguinte cálculo:
ONDE
DIAS (VENCIMENTO - DATA ATUAL), Resultado deve ser em número de dias
VR_CUSTO Custo do produto da tabela PRODUTO_CUSTO
PR_JUROS Percentual de Juros do dia de Cada produto
Custo do Produto = VR_CUSTO + (VR_CUSTO * (DIAS * PR_JUROS))
                             
  400 + (400*(0*0,06%)) = R$400,00
  • O resultado desse calculo será inserido no campo VR_CUSTO da tabela ITEM_PEDIDO e será utilizado no cálculo da Margem.


Aplicação do Cálculo da Margem

  • Após obter o custo de cada item o sistema irá calcular a Margem de Lucro de Cada item e salvar no campo VR_RENTABILIDADE da tabela ITEM_PEDIDO a margem de cada item do pedido.
  • Após obter o custo de cada item e a Margem de Lucro de cada item será aplicado um cálculo para ser obtido a Margem de Lucro Geral do Pedido para ser exibido ou não o alerta.
Calcular a Margem do Lucro Geral:

 Margem de Lucro = 1 - (Soma dos Custos do Produto (Campo VR_CUSTO da tabela ITEM_PEDIDO) * Quantidade de Cada Item / Valor Total do pedido)

    1 - (400 / 516,75) = 0,2259 ou 22,59% se multiplicarmos por 100
  • Após obter esse percentual o mesmo será comparado com o campo PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE.
    • Se a Margem geral do pedido for menor que o percentual do PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE exibir o seguinte alerta: “Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”
    • Se a margem for maior que o percentual do PR_MINIMO da tabela FAMILIA_PRODUTO_RENTABILIDADE não exibir nenhum alerta.

Observação

  • Na fórmula que foi enviada pelo Reginaldo da AGROSEMA teriam mais dois passos, mas foi identificado que a nível de sistema os dois cálculos são redundantes, uma vez que não iremos exibir o total do lucro do pedido esses cálculos NÃO são necessários
Terceiro Cálculo
Calcular o Total do Lucro:

  Total do Lucro = (Valor total do pedido * Margem de Lucro)

      516,75 * 0,2259 = R$116,73
Quarto Cálculo
 Margem Geral do pedido

  Margem = (Soma do Lucro de cada item do pedido / Valor total do pedido) * 100

    (116,73 / 516,75) * 100 = 22,59%

Regras de Negócio

[RN1]– Regra de Alerta do pedido

Para exibir alerta de que o pedido será bloqueado no ERP, o resultado da MARGEM GERAL deve ser maior ou igual a margem mínima definida por vendedor. No caso supracitado a margem do vendedor é de 15%. Como a margem do pedido foi de 22,59%, o pedido vai passar sem bloqueios.

[RN2] – Se a MARGEM GERAL for menor que a margem definida por vendedor a mensagem que será exibida será: “Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”

[RN3] – Criar o campo CD_VENDEDOR na tabela FAMILIA_PRODUTO_RENTABILIDADE para especificar a margem de cada vendedor.

[RN4] – Criar o campo PR_JUROS na tabela PRODUTO para informar o juros de cada produto

[RN5] – Criar uma configuração ID_ALERTA_MARGEM para ativar o alerta para do calculo de Margem

Integração

No momento da integração os campos e tabelas abaixo devem ser preenchidos, conforme descrito:

[RN6] – O campo PR_IDEAL na tabela FAMILIA_PRODUTO_RENTABILIDADE deve ser preenchida com a informação do ERP que da Tabela SA3 da coluna A3_ZZMBMIN Esse campo é a margem de cada vendedor.

[RN7] – O campo VR_CUSTO na tabela PRODUTO_CUSTO deve ser preenchida com a informação do ERP que da Tabela DA1 da coluna DA1_ZZCUST.

[RN8] – O campo PR_JUROS na tabela PRODUTO deve ser preenchida com a informação do ERP que da Tabela SA3 da coluna A3_ZZTXMES.

[RN9] - Integrar a tabela FAMILIA_PRODUTO_RENTABILIDADE

Cenários

Cenário Feliz

Dados

  • Vendedor: João
  • Produto: Semente A
  • Custo (R$): 400
  • Vencimento: 30 dias (1,33%)
  • Margem Vendedor Joao: 15%
  • Tx Juros: 0,06% (a.d)
  • Total Pedido (R$): 516,75

Operação

  • Vendedor João cria o pedido;
  • Selecionar o Item: Semente A
  • O vendedor salva o Pedido

Assertivas

  • Pedido enviado para o ERP com sucesso.

Cenário de Alerta

Dados

  • Vendedor: João
  • Produto: Semente B
  • Custo (R$): 200
  • Vencimento: 60 dias (2,40%)
  • Margem Vendedor João: 15%
  • Tx Juros: 0,06% (a.d)
  • Total Pedido (R$): 230

Operação

  • Vendedor João cria o pedido;
  • Selecionar o Item: Semente B;
  • O vendedor salva o Pedido

Assertivas

  • A mensagem que será exibida “Pedido bloqueado. Motivo: Margem do pedido abaixo do permitido.”
  • Pedido enviado para o ERP com sucesso.

Aprovação

Considero aprovada a documentação da funcionalidade especificada acima, e autorizo a implementação da mesma no Sistema GeoSales, em nome da Organização a qual estou vinculado.

Setor Aprovado Por Data Assinatura
Tecnologia da Informação Reginaldo Possari
Comercial André Franco