Mudanças entre as edições de "Reserva de estoque"
(28 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. | ||
− | =Configurações Ativadoras= | + | === Premissas === |
− | 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 | + | |
+ | # 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. Nesse momento a reserva é salva em banco com a data, | + | 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 == | == Cálculo de estoque == | ||
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 | + | 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 == | + | == 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
- 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
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
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
- Vendedor: João
- Item: A
- Estoque de A: 20
Operação
- Na lupa de produto é escolhido o item A e escolhida a quantidade 10
Assertivas
- O item A deve ser adicionado no pedido
- 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
- Vendedor: João
- Item: A
- Estoque de A: 6
Operação
- Na lupa de produto é escolhido o item A e escolhida a quantidade 10
Assertivas
- 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
- 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
- Vendedores: João, José
- Item: A
- Estoque de A: 25
- Pedido X de João
- Pedido Y de José
Operação
- Na lupa de produto de João é escolhido o item A e escolhida a quantidade 10
- Na lupa de produto de José é escolhido o item A e escolhida a quantidade 15
Assertivas
- O item A é adicionado ao pedido X
- O estoque de A deve ficar com o valor de 15
- O item A é adicionado ao pedido Y
- 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
- Vendedores: João, José
- Item: A
- Estoque de A: 25
- Pedido X de João
- Pedido Y de José
Operação
- Na lupa de produto de João é escolhido o item A e escolhida a quantidade 20
- Na lupa de produto de José é escolhido o item A e escolhida a quantidade 15
Assertivas
- O item A é adicionado ao pedido X
- O estoque de A deve ficar com o valor de 5
- O item A não pode ser adicionado ao pedido Y e uma exceção de falta de estoque deve ser lançada