Mudanças entre as edições de "Funcionalidade/Limite de crédito"

De GeoSales
Ir para navegação Ir para pesquisar
 
Linha 111: Linha 111:
 
# há o movimento, porém o valor final é maior que zero (<code>S - P >= 0</code>); essa possibilidade é indicada pelo estado <code>F</code>
 
# há o movimento, porém o valor final é maior que zero (<code>S - P >= 0</code>); essa possibilidade é indicada pelo estado <code>F</code>
 
# há o movimento, o valor fica entre 0 e o limite mínimo aceitável (<code>0 > S - P >= M</code>); essa possibilidade é indicada pelo estado <code>G</code>
 
# há o movimento, o valor fica entre 0 e o limite mínimo aceitável (<code>0 > S - P >= M</code>); essa possibilidade é indicada pelo estado <code>G</code>
# há o movimento, o valor fica entre abaixo do limite mínimo aceitável (<code>M > S - P</code>); essa possibilidade é indicada pelo estado <code>H</code>
+
# há o movimento, o valor fica abaixo do limite mínimo aceitável (<code>M > S - P</code>); essa possibilidade é indicada pelo estado <code>H</code>
  
 
====Comportamento esperado do item====
 
====Comportamento esperado do item====

Edição atual tal como às 15h59min de 6 de dezembro de 2016

Necessidade

Dependendo do tipo de venda, é necessário colocar um limite do quanto o cliente pode ficar com títulos em aberto.

Tipos de crédito

Alguns clientes possuem créditos distintos dependendo do Meio de Pagamento. Por exemplo, o cliente Martins possui 3000 reais de limite de crédito quando usa Cartão de crédito e 200 reais de Cheque Especial.

Também conhecido como limite de crédito por meio de pagamento.

Excedente

As vezes, é possível assumir alguns riscos. Esses riscos são assumidos quando o cliente ultrapassa o valor do limite de crédito, indo até um valor excedente máximo. Existem duas fontes da informação do quanto o cliente pode exceder o seu limite de crédito:

  1. diretamente na tabela cliente
  2. valor excedente global, na configuração de limite excedente

Caso o cliente possua um valor de excedente explícito, esse valor será usado (incluindo 0). Caso ele não possua esse valor, usa-se o global.

Por questões de nomenclatura de cálculo, o excedente modifica o valor mínimo aceitável do saldo do cliente. Caso não se use o excedente, o valor mínimo aceitável é 0.

A vista NALS

Apesar do nome, o a vista NALS é bem intuitivo: caso o pagamento seja a vista, Não Altera Limite Saldo.

Isso indica que, caso o cliente pague no momento da compra, essa compra não alterará o saldo do limite de crédito do cliente.

Delegação de risco

Existe uma configuração para tratar o risco de maneira manual. Diferente do valor excedente, que permite uma aceitação de risco automática, o pedido fica pendente para aprovação de um supervisor.

Essa configuração entre em jogo caso o pedido faça com que o limite de crédito fique abaixo do valor mínimo aceitável.

Solução declarativa

Durante a tirada do pedido, interessa-se pelo limite de crédito caso essa venda faça com que o saldo fique abaixo do valor mínimo aceitável. Para saber se isso vai acontecer, precisa-se levar em consideração o limite do cliente L, o quanto desse limite o cliente já consumiu (desconsiderando o pedido atual) C, o valor do pedido atual P e calcular o valor mínimo aceitável M.

Dessa forma, o pedido estará válido para o limite de crédito se e somente se:

(L - C) - P >= M

Onde L - C é o saldo disponível para consumo S.

Cálculo do saldo disponível

Conforme explicitado na solução, o saldo S depende de dois valores:

  • O limite de crédito global
  • O quanto já foi consumido

O limite de crédito global é definido pelo cliente e pelo meio de pagamento usado no pedido (ver limite de crédito por meio de pagamento). A parte consumida depende dos pedidos que ainda não foram exportados e dos títulos em aberto. Assim, para a soma dos pedidos não exportados SPne e para a soma dos títulos em aberto STa, temos que:

C = SPne + STa

Assim como o limite de crédito é definido pelo meio de pagamento, os pedidos e títulos também são filtrados por essa condição (caso exista). Dependente da configuração, mesmo que os pedidos a vista sejam válidos para esse filtro de meio de pagamento, eles não são levados em consideração para o somatório.

Pedidos, títulos e exportação

Todo pedido de venda se torna títulos. Essa conversão é feita no ERP. Portanto, ao ser exportado um pedido, o GeoSales recebe de volta uma coleção de títulos em aberto. Portanto, na fórmula do quanto foi consumido, levar em consideração um pedido exportado como fator de consumo de saldo C fica redundante com a parte de títulos em aberto STa.

Em compensação, até o pedido ser exportado, ele não virou título, portanto esse pedido não faz parte de STa mesmo tendo consumido do saldo. Por isso, os valores dos pedidos não exportados SPne devem ser parte da composição de C.

Valor mínimo aceitável

O valor mínimo aceitável M é dado na forma de um percentual excedente E. Esse E é aplicado sobre o limite de crédito L:

abs(M) = abs(L*E)

Como foi informado na solução, debitar do saldo S o valor do pedido P não pode ultrapassar M:

S - P >= M

Portando, o valor de M é negativo ou zero; como L é estritamente positivo e E é um porcentual, temos:

M = - L*E

Como é sabido que M é 0 exceto se especificado um excedente e M é um valor derivado, o valor padrão para E, nesses casos, é 0.

Implementação

Place holder

Cenários de fluxo

Possíveis fluxos que o limite de crédito pode tomar

Partes

Os cenários foram concebidos de modo a abarcar todas os possíveis desdobramentos, de modo a atender todos os fluxos das necessidades. Para isso, foram identificadas as seguintes variações de formas:

  1. Valor mínimo aceitável
    • Origem da informação
  2. O valor da movimentação relativa que o pedido gera
  3. Dados e resposta do sistema esperados após as ações do usuário
    1. Comportamento de exceção nos itens
    2. Comortamento de exceção no pedido

Os valores mínimos aceitáveis constituem sempre de dados. Na descrição de cada cenário, além desses dados, também é necessário informar se o tipo de pedido movimenta limite de crédito (estados F, G, H) ou não (estado E) durante a operação, e também é necessário informar se a configuração de pendência está ativa (estado K vindo de H) ou não (estado J vindo de H).

A movimentação relativa de saldo via pedido indica a operação a ser realizada, de onde podemos aferir o comportamento esperado do item posteriormente.

Também há a operação de salvar o pedido que é sempre realizada no final, de onde é possível aferir o comportamento esperado ao salvar pedido.

A variação que permite ter tipos de crédito dependendo do meio de pagamento afetam exclusivamente o resgate de informações, não afetando o resto do comportamento do sistema, podendo ser testado apenas essa informação através de um teste de resgate.

Valores mínimos aceitáveis

Existem dois campos que determinam seu possível valor:

  • Diretamente na tabela de cliente
  • Na configuração global

Caso não tenha esses valores, se pega um valor padrão, 0.

Então, temos 4 possibilidade:

  • Campo existe, configuração existe; essa possibilidade é indicada pelo estado A
  • Campo não existe, configuração existe; essa possibilidade é indicada pelo estado B
  • Campo existe, configuração não existe; essa possibilidade é indicada pelo estado C
  • Nem campo nem configuração existem; essa possibilidade é indicada pelo estado D

As possibilidades A e C são para trazer o mesmo resultado, já que o campo do cliente tem prioridade sobre a configuração, porém é importante elencar essa possibilidade para se ter certeza de que a precedência ocorrerá.

Movimentação relativa de saldo via pedido

Ao se movimentar o saldo do limite de crédito, há algumas possibilidades:

  1. o tipo de pedido não movimenta; essa possibilidade é indicada pelo estado E
  2. há o movimento, porém o valor final é maior que zero (S - P >= 0); essa possibilidade é indicada pelo estado F
  3. há o movimento, o valor fica entre 0 e o limite mínimo aceitável (0 > S - P >= M); essa possibilidade é indicada pelo estado G
  4. há o movimento, o valor fica abaixo do limite mínimo aceitável (M > S - P); essa possibilidade é indicada pelo estado H

Comportamento esperado do item

Caso a modificação em um item no pedido não implique na ofensa do valor mínimo aceitável, isso deverá acontecer de modo transparente ao usuário. Esse comportamento é indicado pelo estado I.

O sistema não bloqueia a inserção ou edição de itens, mesmo que isso signifique que o estado do pedido ofenda o valor mínimo aceitável. No entanto, o sistema avisa que o pedido não poderá ser salvo devido à essa ofensa. Esse comportamento é indicado pelo estado J.

No caso de pendência, o sistema deverá avisar que o pedido ficará pendente por exceder o limite de crédito disponível. Esse comportamento é indicado pelo estado K.

Comportamento esperado ao salvar pedido

Caso não haja nenhuma ofensa a limite de crédito, o pedido deverá ser salvo normalmente. Esse comportamento é indicado pelo estado L.

Caso ocorra uma ofensa inaceitável ao limite, o sistema impedirá o sistema de ser salvo e exibe o motivo. Esse comportamento é indicado pelo estado M.

Caso ocorra uma ofensa inaceitável ao limite, mas esteja configurado para correr esse risco, o sistema deve permitir salvar o pedido, alertando dessa pendência. Esse comportamento é indicado pelo estado N.

Codificação dos cenários

Resumo dos possíveis estados pertencentes aos cenários:

  • Valores mínimos aceitáveis
    • A, B, C, D
  • Movimentação relativa de saldo via pedido
    • E, F, G e H
      • Como o caso D prevê que M = 0, não é possível chegar em G
  • Comportamento esperado do item
    • I, J e K
      • Em todos os casos que S - P >= M, o comportamento é ficar transparente ao usuário, portanto I
      • No caso de ofensa ao valor mínimo aceitávelH, a configuração vai determinar se irá para o J ou K
  • Comportamento esperado ao salvar pedido
    • L, M e N
      • As mesmas condições que geram esses estados também afetam os itens, portanto elas são praticamente equivalentes
      • I <=> L
      • J <=> M
      • K <=> N

Os meta estados G1 e G2 existem para deixar a leitura mais fácil; eles são apenas agrupadores.

  • G1
    • todas os cenários de valor mínimo aceitável que tem M != 0 podem ir para qualquer cenário de estouro
  • G2
    • os cenários em que a movimentação não ofende o valor mínimo aceitável S - P >= M são todos transparentes par ao usuário, vão todos para I

Todos os cenários possíveis (codificados em RegEx):

[ABCD][EF]IL
[ABC]GIL
[ABCD]H(JM|KN)

Conjuntos de dados

Dados gerais:

  • O cliente Martins tem limite de crédito de 100 reais
  • Martins não tem pedidos não exportados
  • Martins tem um título em aberto de 90 reais
  • O tipo de pedido Venda altera o limite de crédito
  • O tipo de pedido Bonificação não altera o limite de crédito
  • O vendedor é Isabelle
  • O produto Pincel tem preço sugerido de 10 reais
  • Só existe a Organização de Venda OV e a Tabela de Preço Padrão
  • Exceto se especificado o contrário, a configuração ID_PENDENCIA_CLIENTE_SEM_LIMITE não está preenchida

Simulação com estado A

  • O cliente Martins tem na coluna PC_SALDO_LIMITE_EXCEDENTE 10%
  • A configuração PC_SALDO_LIMITE_EXCEDENTE é de 20%

Simulação com estado B

  • O cliente Martins tem na coluna PC_SALDO_LIMITE_EXCEDENTE o valor nulo
  • A configuração PC_SALDO_LIMITE_EXCEDENTE é de 10%

Simulação com estado C

  • O cliente Martins tem na coluna PC_SALDO_LIMITE_EXCEDENTE 10%
  • A configuração PC_SALDO_LIMITE_EXCEDENTE não tem valor no sistema

Simulação com estado D

  • O cliente Martins tem na coluna PC_SALDO_LIMITE_EXCEDENTE o valor nulo
  • A configuração PC_SALDO_LIMITE_EXCEDENTE não tem valor no sistema

Simulação com estado esperado K

  • A configuração ID_PENDENCIA_CLIENTE_SEM_LIMITE tem valor S

Fluxo AEIL

Dado

Operação

  • Isabelle começa um pedido de Bonificação para Martins E
  • Isabelle coloca 2 unidades de Pincel
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo AFIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 1 unidade de Pincel F
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 0 real

Fluxo AGIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 2 unidades de Pincel G
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é -10 reais

Fluxo AHJM

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que não será possível salvar o pedido J
  • O sistema não permitiu salvar o pedido M
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo AHKN

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que será possível salvar o pedido, mas ele ficará pendente K
  • O sistema permitiu salvar o pedido, ficando com a pendência de cliente sem limite de crédito N
  • O saldo do limite de crédito para Martins é -20 reais

Fluxo BEIL

Dado

Operação

  • Isabelle começa um pedido de Bonificação para Martins E
  • Isabelle coloca 2 unidades de Pincel
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo BFIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 1 unidade de Pincel F
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 0 real

Fluxo BGIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 2 unidades de Pincel G
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é -10 reais

Fluxo BHJM

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que não será possível salvar o pedido J
  • O sistema não permitiu salvar o pedido M
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo BHKN

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que será possível salvar o pedido, mas ele ficará pendente K
  • O sistema permitiu salvar o pedido, ficando com a pendência de cliente sem limite de crédito N
  • O saldo do limite de crédito para Martins é -20 reais

Fluxo CEIL

Dado

Operação

  • Isabelle começa um pedido de Bonificação para Martins E
  • Isabelle coloca 2 unidades de Pincel
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo CFIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 1 unidade de Pincel F
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 0 real

Fluxo CGIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 2 unidades de Pincel G
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é -10 reais

Fluxo CHJM

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que não será possível salvar o pedido J
  • O sistema não permitiu salvar o pedido M
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo CHKN

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 3 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que será possível salvar o pedido, mas ele ficará pendente K
  • O sistema permitiu salvar o pedido, ficando com a pendência de cliente sem limite de crédito N
  • O saldo do limite de crédito para Martins é -20 reais

Fluxo DEIL

Dado

Operação

  • Isabelle começa um pedido de Bonificação para Martins E
  • Isabelle coloca 2 unidades de Pincel
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo DFIL

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 1 unidade de Pincel F
  • Isabelle tenta salvar o pedido

Assertivas

  • Inserir o item foi transparente ao usuário I
  • Não houve encrenca ao salvar o pedido L
  • O saldo do limite de crédito para Martins é 0 real

Fluxo DHJM

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 2 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que não será possível salvar o pedido J
  • O sistema não permitiu salvar o pedido M
  • O saldo do limite de crédito para Martins é 10 reais

Fluxo DHKN

Dado

Operação

  • Isabelle começa um pedido de Venda para Martins [FGH]
  • Isabelle coloca 2 unidades de Pincel H
  • Isabelle tenta tenta salvar o pedido

Assertivas

  • O sistema informou que será possível salvar o pedido, mas ele ficará pendente K
  • O sistema permitiu salvar o pedido, ficando com a pendência de cliente sem limite de crédito N
  • O saldo do limite de crédito para Martins é -10 reais