Funcionalidade/Limite de crédito
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:
- diretamente na tabela cliente
- 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
Partes
Os cenários foram concebidos de modo a abarcar todas os possíveis desdobramentos, de modo a atender todas as necessidades. Para isso, foram identificadas as seguintes variações de formas:
- Valor mínimo aceitável
- Origem da informação
- O valor da movimentação relativa que o pedido gera
- Dados e resposta do sistema esperados após as ações do usuário
- Comportamento de exceção nos itens
- Comortamento de exceção no pedido
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:
- o tipo de pedido não movimenta; essa possibilidade é indicada pelo estado
E
- há o movimento, porém o valor final é maior que zero (
S - P >= 0
); essa possibilidade é indicada pelo estadoF
- há o movimento, o valor fica entre 0 e o limite mínimo aceitável (
0 > S - P >= M
); essa possibilidade é indicada pelo estadoG
- há o movimento, o valor fica entre abaixo do limite mínimo aceitável (
M > S - P
); essa possibilidade é indicada pelo estadoH
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 N
.
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:
- Place holder da parte
- Place holder do estado com o código
Todos os cenários possíveis (codificados em RegEx):
[ABCD][EF]IL [ABC]GIL [ABCD]H(JM|KN)