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

De GeoSales
Ir para navegação Ir para pesquisar
 
(32 revisões intermediárias por 6 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 +
== Histórico de Revisões ==
 +
{| border="1" cellpadding="1"
 +
! 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 ==
 
== 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.
 
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 ===
 +
 +
# 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;
 +
# Todo pedido de venda ficará com o status “Não Efetivado” para que o vendedor, manualmente, efetive o pedido.
 +
# O pedido “não efetivado” abate estoque;
 +
# O pedido “não efetivado” abate limite de crédito;
 +
# 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 ==
 
== 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.
+
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á:
 +
 
 +
# Repor no estoque do produto a quantidade reservada;
 +
# Atualizar o Limite de Crédito do Cliente com o valor que havia sido abatido;
 +
# 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 ==
 +
{| 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
 +
 
 +
== 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