Mudanças entre as edições de "Reserva de estoque"

De GeoSales
Ir para navegação Ir para pesquisar
 
(16 revisões intermediárias por 6 usuários não estão sendo mostradas)
Linha 28: Linha 28:
 
# O pedido “não efetivado” abate estoque;
 
# O pedido “não efetivado” abate estoque;
 
# O pedido “não efetivado” abate limite de crédito;
 
# O pedido “não efetivado” abate limite de crédito;
# O pedido “não efetivado” reduz saldo da conta corrente;
+
# O pedido “não efetivado” reduz/aumenta o saldo da conta corrente;
  
 
== Configurações Ativadoras ==
 
== Configurações Ativadoras ==
Precisa ter a configuração '''ID_UTILIZA_RESERVA_ESTOQUE''' com '''S'''. Além disso é preciso da configuração '''QT_HRS_LIMITE_RESERVA_ESTOQUE''' com o valor referente a quantidade de horas de reserva desejada.
+
Precisa ter a configuração '''ID_UTILIZA_RESERVA_ESTOQUE''' com '''S'''. Além disso é preciso da configuração '''QT_HRS_LIMITE_RESERVA_ESTOQUE''' com o valor referente a duração que aquela reserva estará valida em horas.
  
 
== Pré Detalhes da Solução Imperativa ==
 
== Pré Detalhes da Solução Imperativa ==
Linha 49: Linha 49:
 
A quantidade de estoque de um produto em uma organização de venda é calculada da seguinte maneira:
 
A quantidade de estoque de um produto em uma organização de venda é calculada da seguinte maneira:
  
Quantidade Estoque = Quantidade Disponível do Produto na Organização de Venda - Soma(QT_ITEM dos pedidos não exportados deste produto e desta organizaação de venda) - Soma(QT_RESERVA com status pendente e dentro do limite de horas da reserva para o produto e a organização de venda)
+
Quantidade Estoque = Quantidade Disponível do Produto na Organização de Venda - Soma(QT_ITEM dos pedidos não autorizados deste produto e desta organização de venda) - Soma(QT_RESERVA com status pendente e dentro do limite de horas da reserva para o produto e a organização de venda)
  
 
== Atualização do Limite de Crédito do Cliente ==
 
== Atualização do Limite de Crédito do Cliente ==
Linha 76: Linha 76:
 
Nesse relatório deve ser possível se selecionar um registro de reserva e cancelar o mesmo. Essa ação apenas poderá ser efetuada por um usuário do Portal com nível de Supervisor ou superior na hierarquia, ou com privilégio de administração.
 
Nesse relatório deve ser possível se selecionar um registro de reserva e cancelar o mesmo. Essa ação apenas poderá ser efetuada por um usuário do Portal com nível de Supervisor ou superior na hierarquia, ou com privilégio de administração.
  
== Tabela ==
+
== Confirmação de uma Reserva ==
 +
Uma reserva é confirmada quando o pedido de venda é SALVO (sem ser efetivado).
 +
 
 +
Ao SALVAR o pedido de venda, a reserva deve ser confirmada, sendo adicionado ao seu registro na tabela de movimentos de estoque o numero do pedido salvo.
 +
 
 +
Isso vai implicar que esse registro de reserva, que tenha o numero do pedido de venda, não poderá ser cancelado por ter excedido o tempo definido no parâmetro QT_HRS_LIMITE_RESERVA_ESTOQUE, mas o tipo do movimento continuará a ser de reserva (Tipo = R).
 +
 
 +
== Tabela ESTOQUE_MOVIMENTO ==
 +
{| border="1" cellpadding="1"
 +
! ID
 +
! Campo
 +
! Descrição
 +
! Tipo
 +
|-
 +
|  1  || CD_MOVIMENTO  || Código do Movimento    ||
 +
|-
 +
|  2  ||  DT_MOVIMENTO || Data e hora do Movimento    ||
 +
|-
 +
|  3  ||  TP_MOVIMENTO  || Tipo do Movimento    ||
 +
|-
 +
|  4  ||  QT_MOVIMENTO  || Quantidade do Movimento    ||
 +
|-
 +
|  5  ||  CD_PEDIDO_PALM  ||  Código do Pedido    ||
 +
|-
 +
|  6  ||  NR_ITEM_PEDIDO  || Número do Item do Pedido    ||
 +
|-
 +
|  7  ||  CD_PRODUTO  || Código do Produto    ||
 +
|-
 +
|  8  ||  CD_ORG_VENDA  || Código da Organização de Venda    ||
 +
|-
 +
|  9  ||  DT_ESTORNO  || Data de Estorno do Movimento    ||
 +
|-
 +
|}
 +
 
 
Deve ser adicionado o status 'R' de reserva nas movimentações da tabela estoque_movimento
 
Deve ser adicionado o status 'R' de reserva nas movimentações da tabela estoque_movimento
 +
 +
== Tabela CONTA_MOVIMENTO_DIRT ==
 +
 +
{| border="1" cellpadding="1"
 +
! ID
 +
! Campo
 +
! Descrição
 +
! Tipo
 +
|-
 +
|  1  || CD_USUARIO || || int
 +
|-
 +
|  2  || NR_MOVIMENTO || || bigint NOT NULL,
 +
|-
 +
|  3  || CD_USUARIO_MOVIMENTO || || int NULL,
 +
|-
 +
|  4  || DT_MOVIMENTO || || datetime NOT NULL,
 +
|-
 +
|  5  || TP_MOVIMENTO || || int NOT NULL,
 +
|-
 +
|  6  || TP_TRANSACAO || || char(2) NULL,
 +
|-
 +
|  7  || VR_MOVIMENTO || || decimal (10, 2) NOT NULL,
 +
|-
 +
|  8  || DT_ESTORNO || || datetime  NULL,
 +
|-
 +
|  9  || CD_USUARIO_ESTORNO || || int  NULL,
 +
|-
 +
|  10  || NR_MOVIMENTO_PAI || || bigint  NULL,
 +
|-
 +
|  11  || DS_OBS || || varchar (255) NULL,
 +
|-
 +
|  12  || CD_PEDIDO_PALM || || bigint  NULL,
 +
|-
 +
|  13  || NR_ITEM_PEDIDO || || bigint  NULL,
 +
|-
 +
|  14  || CD_PRODUTO || || int  NULL,
 +
|-
 +
|  15  || ID_ORIGEM_ESTORNO || || varchar (1) NULL,
 +
|-
 +
|}
 +
 +
 +
 +
== Tabela MOVIMENTO_CREDITO_MPGTO_DIRT ==
 +
{| border="1" cellpadding="1"
 +
! ID
 +
! Campo
 +
! Descrição
 +
! Tipo
 +
|-
 +
|  1  || CD_MOVIMENTO || || bigint  NOT NULL
 +
|-
 +
|  2  || DT_MOVIMENTO || || datetime  NOT NULL
 +
|-
 +
|  3  || TP_MOVIMENTO || || int  NOT NULL
 +
|-
 +
|  4  || VR_MOVIMENTO || || decimal (18, 6) NOT NULL
 +
|-
 +
|  5  || CD_PEDIDO_PALM || || bigint  NULL
 +
|-
 +
|  6  || NR_ITEM_PEDIDO || || bigint NULL
 +
|-
 +
|  7  || CD_MPGTO || || int NOT NULL
 +
|-
 +
|  8  || CD_ORG_VENDA || || varchar(20) NOT NULL
 +
|-
 +
|  9  || DT_ESTORNO || || datetime NULL
 +
|-
 +
|}
  
 
== Cenários ==
 
== Cenários ==

Edição atual tal como às 01h24min de 27 de março de 2017

Histórico de Revisões

Data Quem Comentários
05/01/2017 Rodrigo Bastos Criação do Documento
12/01/2017 Fábio Sobral Análise e Aprovação da Arquitetura
13/01/2017 Guido Ciarlini Inclusão do Histórico de Revisões
17/02/2017 Rodrigo Bastos Ajustes na movimentação da Reserva
21/02/2017 Guido Ciarlini Inclusão das PREMISSAS para o Pedido
21/02/2017 Guido Ciarlini Ajustes para atualização de Saldo Limite Credito Cliente e Conta Corrente Vendedor

Necessidade

Para o usuário ao editar/criar um pedido as quantidades deverão ser abatidas do saldo de estoque a medida que o vendedor insere os itens e que essas alterações tornem-se visíveis para todos os outros vendedores.

Premissas

  1. O pedido de venda possui dois status (Não Efetivado, Efetivado), que definem se o pedido pode avançar no processo de aprovação, faturamento pelo ERP, etc;
  2. Todo pedido de venda ficará com o status “Não Efetivado” para que o vendedor, manualmente, efetive o pedido.
  3. O pedido “não efetivado” abate estoque;
  4. O pedido “não efetivado” abate limite de crédito;
  5. O pedido “não efetivado” reduz/aumenta o saldo da conta corrente;

Configurações Ativadoras

Precisa ter a configuração ID_UTILIZA_RESERVA_ESTOQUE com S. Além disso é preciso da configuração QT_HRS_LIMITE_RESERVA_ESTOQUE com o valor referente a duração que aquela reserva estará valida em horas.

Pré Detalhes da Solução Imperativa

O usuário cria um pedido, preenche todos os campos do cabeçalho do pedido e faz a busca por um produto. Nesse momento a grid exibe as quantidades atuais de cada produto que satisfaça a busca.

Ao inserir o produto como um item do pedido ele dispara uma chamada que irá verificar se o saldo de estoque é suficiente medindo todas as quantidades do estoque e em caso positivo ele irá criar uma movimentação para essa transação mesmo antes de salvar o pedido. Essa transação deverá ser armazenada para que outro vendedor tenha controle da posição atual de estoque. Nesse momento a reserva é salva em banco com a data, hora, identificação do vendedor, identificação do Cliente, status da reserva, produto, organização de venda, a quantidade reservada, o preço sugerido do produto, o preço de venda do produto e o desconto/acréscimo aplicado, se houver.

Ao registrar uma reserva, deverão ser atualizados também as seguintes informações: o saldo do limite de crédito do Cliente e o saldo da conta corrente do Vendedor, se algum desconto/acréscimo foi aplicado.

Essas reservas, enquanto o pedido não for SALVO (Sem ser efetivado), serão temporárias, e obedecerão ao tempo limite de existencia definido no parâmetro QT_HRS_LIMITE_RESERVA_ESTOQUE. Toda reserva que não seja salva e exceda esse tempo limite, será cancelada, tendo a sua quantidade devolvida ao estoque, o saldo do limite de crédito do cliente adicionado do valor da reserva e a conta corrente do vendedor atualizada correspondentemente.

Deve ser disponibilizado também um relatório, para identificar as reservas existentes e ser uma forma de cancelar uma reserva feita para um produto de uma sessão que teve algum problema e ainda está pendente.

Para segurar as reservas de uma forma permanente, o pedido deverá ser salvo, mantendo as movimentações do pedido como reserva de estoque. Apenas no momento que aquele pedido for efetivado as movimentações de estoque de reserva passam a ser movimentações de saída.

Cálculo de estoque

A quantidade de estoque de um produto em uma organização de venda é calculada da seguinte maneira:

Quantidade Estoque = Quantidade Disponível do Produto na Organização de Venda - Soma(QT_ITEM dos pedidos não autorizados deste produto e desta organização de venda) - Soma(QT_RESERVA com status pendente e dentro do limite de horas da reserva para o produto e a organização de venda)

Atualização do Limite de Crédito do Cliente

O limite de crédito do Cliente deve ser atualizado quando houver uma reserva de estoque em um pedido, da seguinte maneira:

Saldo Limite Credito = Saldo Limite Credito - (Qtde Reservada x Preço de venda produto)

O saldo atualizado deverá ser atualizado e exibido no campo correspondente na nova Tela de Pedido de Venda.

Atualização do Saldo da Conta Corrente do Vendedor

A Conta Corrente do Vendedor deverá ser movimentada, de acordo com o desconto/acréscimo praticado no preço de venda, em relação ao preço sugerido do produto, da seguinte forma:

Se o preço de venda é superior ao preço sugerido, ou foi aplicado um acréscimo ao mesmo, deverá ser criada uma movimentação da conta corrente com o diferencial entre o preço de venda e o preço sugerido, multiplicado pela quantidade vendida. Essa movimentação será a crédito na conta corrente.

Se o preço de venda é inferior ao preço sugerido, ou foi aplicado um desconto ao mesmo, deverá ser criada uma movimentação da conta corrente com o diferencial entre o preço sugerido e o preço de venda, multiplicado pela quantidade vendida. Essa movimentação será a débito na conta corrente.

Cancelamento de uma Reserva

Uma reserva ao ser cancelada deverá:

  1. Repor no estoque do produto a quantidade reservada;
  2. Atualizar o Limite de Crédito do Cliente com o valor que havia sido abatido;
  3. Atualizar a conta corrente do vendedor com o movimento de estorno do movimento criado anteriormente.

Para o CANCELAMENTO de uma reserva deverá existir um relatório onde, a partir da seleção do vendedor e/ou cliente e/ou organização de venda e/ou produto, mostre todas as reservas existentes no banco de dados.

Nesse relatório deve ser possível se selecionar um registro de reserva e cancelar o mesmo. Essa ação apenas poderá ser efetuada por um usuário do Portal com nível de Supervisor ou superior na hierarquia, ou com privilégio de administração.

Confirmação de uma Reserva

Uma reserva é confirmada quando o pedido de venda é SALVO (sem ser efetivado).

Ao SALVAR o pedido de venda, a reserva deve ser confirmada, sendo adicionado ao seu registro na tabela de movimentos de estoque o numero do pedido salvo.

Isso vai implicar que esse registro de reserva, que tenha o numero do pedido de venda, não poderá ser cancelado por ter excedido o tempo definido no parâmetro QT_HRS_LIMITE_RESERVA_ESTOQUE, mas o tipo do movimento continuará a ser de reserva (Tipo = R).

Tabela ESTOQUE_MOVIMENTO

ID Campo Descrição Tipo
1 CD_MOVIMENTO Código do Movimento
2 DT_MOVIMENTO Data e hora do Movimento
3 TP_MOVIMENTO Tipo do Movimento
4 QT_MOVIMENTO Quantidade do Movimento
5 CD_PEDIDO_PALM Código do Pedido
6 NR_ITEM_PEDIDO Número do Item do Pedido
7 CD_PRODUTO Código do Produto
8 CD_ORG_VENDA Código da Organização de Venda
9 DT_ESTORNO Data de Estorno do Movimento

Deve ser adicionado o status 'R' de reserva nas movimentações da tabela estoque_movimento

Tabela CONTA_MOVIMENTO_DIRT

ID Campo Descrição Tipo
1 CD_USUARIO int
2 NR_MOVIMENTO bigint NOT NULL,
3 CD_USUARIO_MOVIMENTO int NULL,
4 DT_MOVIMENTO datetime NOT NULL,
5 TP_MOVIMENTO int NOT NULL,
6 TP_TRANSACAO char(2) NULL,
7 VR_MOVIMENTO decimal (10, 2) NOT NULL,
8 DT_ESTORNO datetime NULL,
9 CD_USUARIO_ESTORNO int NULL,
10 NR_MOVIMENTO_PAI bigint NULL,
11 DS_OBS varchar (255) NULL,
12 CD_PEDIDO_PALM bigint NULL,
13 NR_ITEM_PEDIDO bigint NULL,
14 CD_PRODUTO int NULL,
15 ID_ORIGEM_ESTORNO varchar (1) NULL,


Tabela MOVIMENTO_CREDITO_MPGTO_DIRT

ID Campo Descrição Tipo
1 CD_MOVIMENTO bigint NOT NULL
2 DT_MOVIMENTO datetime NOT NULL
3 TP_MOVIMENTO int NOT NULL
4 VR_MOVIMENTO decimal (18, 6) NOT NULL
5 CD_PEDIDO_PALM bigint NULL
6 NR_ITEM_PEDIDO bigint NULL
7 CD_MPGTO int NOT NULL
8 CD_ORG_VENDA varchar(20) NOT NULL
9 DT_ESTORNO datetime NULL

Cenários

Cenário feliz

João insere um item que tem estoque no pedido

Dado

  1. Vendedor: João
  2. Item: A
  3. Estoque de A: 20

Operação

  1. Na lupa de produto é escolhido o item A e escolhida a quantidade 10

Assertivas

  1. O item A deve ser adicionado no pedido
  2. O estoque de A deve ficar com o valor de 10

Cenário em que o produto não tem estoque

João insere um item que não tem estoque no pedido

Dado

  1. Vendedor: João
  2. Item: A
  3. Estoque de A: 6

Operação

  1. Na lupa de produto é escolhido o item A e escolhida a quantidade 10

Assertivas

  1. O item A não deve ser adicionado no pedido e uma exceção de falta de estoque para o produto deve ser lançada
  2. O estoque de A deve permanecer com o valor de 6


Cenário de concorrência de estoque

João insere um item A, que tem estoque, no pedido e José insere em outro pedido o item A, que tem estoque

Dado

  1. Vendedores: João, José
  2. Item: A
  3. Estoque de A: 25
  4. Pedido X de João
  5. Pedido Y de José

Operação

  1. Na lupa de produto de João é escolhido o item A e escolhida a quantidade 10
  2. Na lupa de produto de José é escolhido o item A e escolhida a quantidade 15

Assertivas

  1. O item A é adicionado ao pedido X
  2. O estoque de A deve ficar com o valor de 15
  3. O item A é adicionado ao pedido Y
  4. O estoque de A deve ficar com o valor de 0


Cenário de concorrência de estoque onde falta estoque

João insere um item A, que tem estoque, no pedido e José insere em outro pedido o item A, que não tem estoque

Dado

  1. Vendedores: João, José
  2. Item: A
  3. Estoque de A: 25
  4. Pedido X de João
  5. Pedido Y de José

Operação

  1. Na lupa de produto de João é escolhido o item A e escolhida a quantidade 20
  2. Na lupa de produto de José é escolhido o item A e escolhida a quantidade 15

Assertivas

  1. O item A é adicionado ao pedido X
  2. O estoque de A deve ficar com o valor de 5
  3. O item A não pode ser adicionado ao pedido Y e uma exceção de falta de estoque deve ser lançada