Análise
Projeto
| Análise | |
| Projeto 1022 | |
| Data da Análise: 04/03/2013 |
Esse projeto visa melhorar o processo de produção de mercadorias e baixa de estoque de seus respectivos insumos.
O processo de produção consiste, por exemplo, em permitir que se produza um sanduíche dando baixa no estoque de queijo, presunto e pão automaticamente.
Atualmente o sistema já possui um processo de produção bem simplificado. Consiste em uma guia chamada de índices técnicos de produção, no cadastro de produtos, onde se pode definir quais são os insumos do produto. E uma tela no Backoffice para se comandar o processo de produção, fazendo com que o sistema controle os estoque dos insumos automaticamente.
Será criado um novo cadastro para as receitas dos produtos, até porque a partir de agora uma receita poderá definir quantidades e até variedades de produto.
Exemplo 1
Para se fazer 10 bolos:
| 10 | UN | Bolo |
São necessários os seguintes insumos:
| 3 | KG | Farinha |
| 10 | UN | Ovo |
| 2 | LT | Leite |
| 200 | GR | Açúcar |
Exemplo 2
Para se fazer alguns pedaços de carne:
| 200 | KG | Contra filé |
| 200 | KG | Coxão mole |
ÿ necessário um boi de insumo:
| 1 | UN | Boi |
Produção Automática
Alguns produtos terão seus insumos baixados automaticamente no estoque ao vender, isso se chamará produção automática.
No processo de produção automática o usuário obrigatoriamente deve definir uma receita padrão que constitua determinado produto.
A partir dessa configuração cadastral, o sistema vai dar baixa dos insumos e entrada da produção antes de executar o processo normal de venda.
Em seguida, se dará o processo normal que é a baixa na mercadoria.
Nota: O processo de baixa de estoque será feito pelo banco de dados.

Diagrama livre para processo de produção automática
Pré-Pesagem
Mercadorias que não sejam de produção automática passarão pelo novo processo de produção, também chamado de pré-pesagem.
Esse processo servirá para que se dê baixa em insumos realmente utilizados na produção de mercadorias, modificando se necessário os produtos e quantidades da receita.
E servirá também para passar à cozinha os produtos que deverão ser produzidos.
O processo de pré-pesagem requer que se cadastre receitas para os produtos no Backoffice.
Mas a produção em si se dará através de um link do Commerce Web.
Nesse link haverá uma tela para usuário visualizar as produções em andamento.
Ele poderá incluir uma nova produção, modificar sua receita, confirmar/cancelar a produção, e imprimir produção para cozinha.
Nota: O processo de baixa de estoque será feito pelo banco de dados.

Diagrama livre para processo de pré-pesagem
Matriz de Compatibilidade
As alterações propostas nesse projeto levam em consideração a seguinte matriz de compatibilidade.
| Commerce | DLL PAFECF (Checkout) | Funciona com? |
|---|---|---|
| Versão do Projeto | DLL sem a implementação | Se usuário tirar o relatório com Checkout desatualizado sistema vai pegar os dados da tabela antiga. |
| 5.0H em diante | Versão do Projeto | Sim, a DLL vai identificar que a versão da base é antiga e pegar as informações da tabela antiga. |
| Versão do Projeto | Versão do Projeto | Sim |
Especificação Técnica
Configurações Necessárias
Produtos Similares
Relacionar os produtos similares. O item utilizada como insumo deverá ter produtos similares para que se possa modificar a receita na pré-pesagem.

Cadastro de Produtos Similares
Tipos de Lançamentos
Os tipos de lançamentos para produção própria e insumos serão obrigatórios. Eles serão utilizados no processo de baixa de estoque.

Tipos de lançamento de insumos e produção no Config
Backoffice
Receitas para Produção
Será criada uma nova tela chamada de Receitas para Produção.
Nessa tela será do tipo lançamento (ex.: form de compromisso), ou seja, haverá campos para identificar a receita no topo esquerdo da tela, e botões no topo direito. Esses botões servirão para pesquisar, excluir, desfazer e gravar alterações.
Na parte superior haverão os campos relacionados a receita [TT_RPD]. Na parte inferior haverão dois grids, um para informar os insumos [TT_IRP] e outro para se informar os itens produzidos [TT_INS]. Em cada um dos grids haverá botões para incluir e excluir.
Será permitido incluir e excluir tanto na inclusão, quanto na alteração da receita. Mesmo que já tenha sido feita venda.
Ao incluir o primeiro item produzido, sistema perguntará se usuário deseja utilizar a expressão "REC. " + TV_IPR.NOMPRO como descrição da receita.

Chave da tela por CODFIL e CODRPD.
Nota: Tratar CODRPD para no caso de inclusão obter próximo código através da função ProximoCodigo da TTUFNGER.
Definição dos campos:
- Produção Automática? [checkbox]
- Descrição da Receita [edit]
Grid de insumos:
- Referência do Produto
- Quantidade
- Descrição
- Especificação
- Divisão
- Subdivisão
Validações:
- Não será permitido que se tenha mais de uma receita compondo o mesmo produto (garantido por Unique Constraint).
- Não será permitido informar mais de um produto produzido no grid se for produção automática.
- Quantidade produzida pela receita de produção automática será sempre 1.
- Só serão permitidos produtos que não sejam serviços [TT_PRO.TIPPRO > 0], tanto no insumo, quanto no produzido.
- Só permitir entrar na tela se usuário tiver permissão 341 - Cadastrar índice técnico de produção.
Cancelamento de Vendas
Ao cancelar uma venda no Backoffice ou não Checkout, caso ela tenha uma produção automática vinculada, sistema deve efetuar lançamentos de estoque inversos de maneira a anular os originais.
Commerce Web
Pré-Pesagem
A solução de pré-pesagem consiste em uma tela de consulta de produções e outra para inclusão de uma nova produção.
A sugestão é utilizar o padrão workwith do Genexus.
Será bloqueado o uso de receitas de produção automática [TT_RPD.PROAUT = "T"] no processo de pré-pesagem.
Consulta de Produções
A tela inicial da pré-pesagem deve ser uma lista que vem com as produções atuais ordenadas de maneira decrescente por data de inclusão [TT_RPP.DATINC].
Deve-se filtrar por padrão apenas as produções "a produzir" [TT_RPP.FLGEST = "A"].

Esboço feito a partir da lista de pré-faturamento
O usuário poderá usar outros filtros relacionados a produção [TT_RPP], a receita [TT_RPD], aos insumos [TT_INB] e itens produzidos [TT_IPD].
Acima do grid deve haver um botão para a inclusão de novas produções.
Em cada linha do grid deverá haver um botão de impressão, um botão para confirmar aquela produção e um botão para excluí-la.
Só deve ser permitido excluir produções ainda não confirmadas.
O botão de impressão deve gerar um relatório simples que mostra a receita produzida.
Só deve ser permitido imprimir receitas já produzidas. Relatório deverá ter nome do produto.
O botão produzir deve mudar a situação da produção para produzida [TT_RPP.FLGEST = "P"].
Somente deixar produzir usuário que tiver permissão "342 - Lançamento de Produção Própria"
Cadastro de Produções
Ao cadastrar uma nova produção, usuário deve escolher uma receita. Para isso, é necessário uma tela de busca de receitas, que tenha como filtros os campos relacionados a receita [TT_RPD], os insumos [TT_INS] e o que se produz com a receita [TT_IRP].
Nota: Quando tratamos de apresentar os dados do item de grade [TT_GRA], normalmente utilizamos os campos Referência [TT_GRA.REFPRO], Descrição [TT_PRO.DESMAT], Especificação [TT_PRO.ESPMAT], Divisão [TT_DIV.NOMEXT] e Subdivisão [TT_SUB.NOMEXT].
Opcionalmente, deve ser permitido dar entrada na receita pelo seu código [TT_RPD.CODFIL e CODRPD].

Esboço feito a partir do cadastro de clientes agrupados do pré-faturamento
Depois de escolhida a receita, sistema deve apresentar em grid seus respectivos insumos e itens produzidos.
Será permitido trocar os insumos por produtos similares, e isso poderá ser feito através de uma tela de pesquisa; ou digitando uma referência de produto nova.
A quantidade utilizada tanto nos insumos quanto nos itens produzidos poderá ser alterada.
Nota: Na fabricação de um produto comercializado pelo seu peso, por exemplo, é difícil especificar na receita a quantidade a ser produzida. Por isso será permitido modificar a quantidade.
Entretanto, não será permitido modificar o produto porque isso descaracterizaria a receita.
Sistema deve mostrar o custo de cada insumo [TT_GRA.CUSREP] e também o saldo em estoque daquela filial [TT_SAL.QTDEST].
Deve haver um configuração local [no TotaliCommerceWebConfig.xml] para definir qual subestoque será utilizado para o processo. Essa configuração deve ser obrigatória para o uso da tela de produções. Ela deverá mostrar um combo com todos os subestoques [TD_MUL] para usuário escolher. Utilizar essa informação para filtrar o saldo de estoque [TT_SAL.CODMUL].
Nota: a tela Configurações >>> SelfColor já implementa esse processo de configuração local. Deve-se preservar as funcionalidades desse arquivo.
Ex.: Ele é assinado, e se alterado por fora do sistema é apresentada uma mensagem.
Em um botão salvar, sistema deve materializar a receita a produzir [TT_RPP.FLGEST = "A"] gravando os dados nas tabelas TT_RPP, TT_IPD e TT_INB.
Gravar Produção Automática como falso [TT_RPP.PROAUT = "F"].
A numeração da coluna CODRPP será controlada pela tabela TT_COD, para que o sistema possa atualizar nas tabelas filhas o código da tabela pai, seguindo o padrão vigente do Commerce.
Estrutura de Dados dos Produtos
Para facilitar o entendimento da estrutura de dados do produto foi feito um diagrama de estrutura de dados.
Para fins de cálculo do estoque a filial [TD_FIL] é a logada, e o estoque [TD_MUL] é o configurado. Para encontrar um produto similar é necessário trazer várias grades relacionadas a grade original através da tabela N-para-N [TT_SIM].

Modelo da Estrutura de Dados do Produto
TT_COD
A TT_COD é uma tabela que possui a última chave gerada para cada tabela que tenha sequenciador.
Deve-se criar um registro com CODTAB = "RPP" caso não houver. O tratamento deve ser feito de acordo com a filial logada, que será utilizada na coluna TT_RPP.CODFIL. E deve-se guardar na coluna ULTCOD o último código gerado.
Estrutura da TT_COD
| Coluna | Descrição | Tipo | Restrições |
| CODTAB | Apelido da Tabela | CHAR(3) | |
| FILCOD | Filial | CHAR(3) | |
| ULTCOD | ÿltimo Código | NUMBER(10) | |
| SEQUEN | Sequenciador | CHAR(10) | PK |
| CODSER | Série | CHAR(2) |
A coluna SEQUEN é populada pela trigger, então um INSERT seria assim:
INSERT INTO TT_COD (CODTAB, FILCOD, ULTCOD) VALUES ('RPP','001',1) -- Gerou código 1.
UPDATE TT_COD SET ULTCOD = 2 WHERE CODTAB = 'RPP' AND FILCOD = '001' -- Gerou código 2.
Para obter o próximo código, utilizar um SELECT MAX(ULTCOD)+1. Deve-se tratar para logo commitar após pegar o código.
DLL PAFECF
Tratar relatório de índice técnico de produção para contemplar a nova estrutura.
Conforme descrito na tarefa original que criou esse relatório [79258], deve- se trazer os itens produzidos e suas respectivas receitas.
TAB. ÍNDICE TÿCNICO DE PRODUÿÿO Produto Próprio Insumo Qtde. Un. 221133 Pizza 342 Calabresa 0,1 KG 345 Queijo 0,1 KG 113355 Bolo 112 Fermento 1 CX 124 Ovos 2 UN
Entretanto, de acordo com a nova estrutura, um insumo pode gerar mais de um item.
Então, se calabresa e queijo são receita para 1 pizza e uma mini pizza, o relatório ficaria assim:
TAB. ÍNDICE TÿCNICO DE PRODUÿÿO Produto Próprio Insumo Qtde. Un. 221133 Pizza 1515 Mini Pizza 342 Calabresa 0,1 KG 345 Queijo 0,1 KG
Assunto referente ao requisito VII, item 20 do PAF-ECF.
(PAF):
http://www.fazenda.gov.br/confaz/confaz/atos/atos_cotepe/2012/ac005_12.htm
(Rot. Testes):
http://www.inf.furb.br/lqs/site/files/r-paf-0112.pdf
Config
As colunas de tipo de lançamento para insumo e produção própria serão obrigatórias.
[TT_CFG.TIPLAN_INS e TIPLAN_PPR].
Mudança na Estrutura dos Dados
Serão criadas novas tabelas para armazenar a receita e a produção.
A tabela índice técnico de produção [TT_ITP] não será mais utilizada.
A receita/produção podem estar vinculadas a vários itens a produzir, ou a somente um produto quando for produção automática.
Entretanto, um produto [TT_GRA] só poderá ser produzido por 1 receita.

Estrutura de Banco da Produção
Tabela de Receitas para Produção [TT_RPD]
Será criada uma nova tabela para receitas para produção.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| CODRPD | Código da Receita | CHAR(10) | Não | PK |
| DESRPD | Descrição da Receita | VARCHAR(200) | Não | |
| PROAUT | Produção Automática? | VARCHAR(1) | Não | CK ("T" ou "F") |
Nota: Chave alimentada pela TT_COD.
Tabela de Itens a Produzir [TT_IRP]
Será criada uma nova tabela para guardar que produtos que aquela receita produzirá.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| SEQUEN | Sequenciador | CHAR(10) | Não | PK |
| FILRPD | Filial Receita | CHAR(3) | Não | FK (com PK da TT_RPD) |
| CODRPD | Código Receita | CHAR(10) | Não | |
| FILMAT | Filial Produto Resultante | CHAR(3) | Não | FK (com PK da TT_GRA) |
| UQ (FILMAT, CODMAT, CODCOR, CODTAM) | ||||
| CODMAT | Código Produto Resultante | CHAR(5) | Não | |
| CODCOR | Divisão Produto Resultante | NUMBER(5) | Não | |
| CODTAM | Subdivisão Produto Resultante | NUMBER(5) | Não | |
| QTDMOV | Quantidade Resultante | NUMBER(12,4) | Não | CK (QTDMOV > 0) |
Nota: Unique constraint servirá para garantia que não exista mais de uma receita produtora de determinada mercadoria.
Tabela de Insumos da Produção [TT_INS]
Será criada uma nova tabela para guardar os insumos necessários para a receita na produção.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| SEQUEN | Sequenciador | CHAR(10) | Não | PK |
| FILRPD | Filial Receita | CHAR(3) | Não | FK (com PK da TT_RPD) |
| CODRPD | Código Receita | CHAR(10) | Não | |
| FILMAT | Filial Produto Insumo | CHAR(3) | Não | FK (com PK da TT_GRA) |
| CODMAT | Código Produto Insumo | CHAR(5) | Não | |
| CODCOR | Divisão Produto Insumo | NUMBER(5) | Não | |
| CODTAM | Subdivisão Produto Insumo | NUMBER(5) | Não | |
| QTDMOV | Quantidade Insumo | NUMBER(12,4) | Não | CK (QTDMOV > 0) |
Tabela de Receitas Produzidas [TT_RPP]
Será utilizada a tabela atual de produção para armazenar as receitas produzidas.
Será criada uma nova tabela para receitas para produção.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| CODRPP | Código | CHAR(10) | Não | PK |
| DESRPP | Descrição da Receita | VARCHAR(200) | Não | |
| PROAUT | Produção Automática? | VARCHAR(1) | Não | CK ("T" ou "F") |
| FLGEST | Situação | CHAR(1) | Não | CK ("A" ou "P") |
| DATINC | Data Inclusão | DATE | Não | |
| ATU_EM | Data Alteração | DATE | Não | |
| FILUSU | Filial Usuário Registrou | CHAR(3) | Não | FK (com PK da TT_USU) |
| CODUSU | Código Usuário Registrou | CHAR(3) | Não | |
| FILPED | Filial Pré-Venda | CHAR(3) | Sim | FK (com PK da TT_IOR) |
| TIPPED | Tipo Pré-Venda | CHAR(1) | Sim | |
| NUMPED | Número Pré-Venda | CHAR(8) | Sim | |
| ITEPED | Item Pré-Venda | NUMBER(5) | Sim | |
| FILIVE | Filial Venda | CHAR(3) | Sim | FK (com PK da TT_IVE) |
| SEQIVE | Seq. Venda | CHAR(10) | Sim | |
| NUMIVE | Item Venda | NUMBER(5) | Sim |
Nota: Chave alimentada pela TT_COD.
Nota: FLGEST servirá para controlar a situação "A produzir" e "Produzido".
Nota: não será reaproveitada a TT_PPR porque ela possui vínculo desnecessário com produto e teria que ter tratamento especial para FLGEST do passado.
Nota: a princípio não materializaremos o processo de produção automática. Utilizaremos o vínculo direto entre a TT_IVE e a TT_LAN. Esse processo já gerar lançamento inverso ao cancelar a venda. Tarefa: 36925.
Tabela de Itens Produzidos [TT_IPD]
Será criada uma nova tabela para guardar os itens produzidos.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| SEQUEN | Sequenciador | CHAR(10) | Não | PK |
| FILRPP | Filial Receita Produzida | CHAR(3) | Não | FK (com PK da TT_RPP) |
| CODRPP | Código Receita Produzida | CHAR(10) | Não | |
| FILMAT | Filial Produto Resultante | CHAR(3) | Não | FK (com PK da TT_GRA) |
| CODMAT | Código Produto Resultante | CHAR(5) | Não | |
| CODCOR | Divisão Produto Resultante | NUMBER(5) | Não | |
| CODTAM | Subdivisão Produto Resultante | NUMBER(5) | Não | |
| QTDMOV | Quantidade Resultante | NUMBER(12,4) | Não | CK (QTDMOV > 0) |
Tabela de Insumos Baixados [TT_INB]
Será criada uma nova tabela para guardar os insumos baixados na produção.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODFIL | Filial | CHAR(3) | Não | PK |
| SEQUEN | Sequenciador | CHAR(10) | Não | PK |
| FILRPP | Filial Receita Produzida | CHAR(3) | Não | FK (com PK da TT_RPP) |
| CODRPP | Código Receita Produzida | CHAR(10) | Não | |
| FILMAT | Filial Produto Insumo | CHAR(3) | Não | FK (com PK da TT_GRA) |
| CODMAT | Código Produto Insumo | CHAR(5) | Não | |
| CODCOR | Divisão Produto Insumo | NUMBER(5) | Não | |
| CODTAM | Subdivisão Produto Insumo | NUMBER(5) | Não | |
| QTDMOV | Quantidade Insumo | NUMBER(12,4) | Não | CK (QTDMOV > 0) |
Log de Produção [TL_RPP]
Será criada uma nova tabela para logs da produção.
| Coluna | Descrição | Tipo | Aceita Nulo? | Restrições |
| CODTAB | Chave | NUMBER(10) | Não | PK |
| FILRPP | Filial Produção | CHAR(3) | Não | FK (com PK da TT_RPP) |
| CODRPP | Código Produção | CHAR(10) | Não | |
| DATOPE | Data Inclusão | DATE | Não | |
| FILUSU | Filial Usuário Registrou | CHAR(3) | Não | FK (com PK da TT_USU) |
| CODUSU | Código Usuário que Produziu | CHAR(3) | Não | |
| MSGLOG | Modificação | VARCHAR(4000) | Sim | |
| CODMAT | Código Produto Produção Automática | CHAR(5) | Sim | |
| CODUID | Identificação do Acesso | NUMBER | Sim | FK (com PK da TT_UID) |
Alterações em Log
As alterações nas tabelas TT_RPS, TT_IRP e TT_INS serão registradas na TL_PRO.
As alterações nas tabelas TT_RPP, TT_IPD e TT_INB serão registradas na TL_RPP.
Tipo de Lançamento Padrão
Serão criados na migração tipos especiais da TD_LAN para serem utilizados como tipo de lançamento insumo e produção próprio nos clientes que não tiverem esses campos preenchidos.
Alteração do Estoque
Sistema deve gerar lançamentos avulsos no estoque para dar baixa dos insumos e entrada na mercadoria produzida.
Processo deve ser semelhante ao atual form de produção própria, ou seja, deve gerar os registros da TT_LAN com os mesmos dados, inclusive utilizando as configurações de tipo de lançamento [TT_CFG.TIPLAN_INS e TIPLAN_PPR].
A principal diferença é que o processo deve ser feito pelo banco de dados.
Alteração do Estoque na Produção Automática
1. TGIVE2
1.1. Verificar se tem receita para aquele produto.
1.1.1. Caso tenha, verificar se é produção automática.
1.1.1.1. Se for, proceder INSERT na TT_LAN dos insumos e da produção.
Fazer esse processo somente na inclusão, e logo no começo.
Depois das validações e antes das funções TGR_IVE_Atualiza_Saldo e TGR_IVE_Atualiza_Movimento.
Gravar o vínculo entre TT_LAN e TT_IVE (TT_LAN. FILIVE, SEQIVE e NUMIVE).
Cronologicamente, o processo deve ficar assim:
Dá baixa nos insumos
(-) Queijo [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
(-) Presunto [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
(-) Pão [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
Dá entrada na produção
(+) Sanduíche [TT_LAN com TIPLAN_PPR, valor e quantidade positiva]
Dá baixa no produto vendido
(-) Sanduíche [TT_IVE normal]
Ao cancelar a venda, a TGIVE2 deve proceder lançamentos inversos.
O processo já existe atualmente, apenas é necessário garantir que ele funcionará nesse caso também.
Alteração do Estoque na Pré-Pesagem
1. TGRPP2
1.1. Ao modificar o FLGEST de "A" para "P".
1.1.1. Proceder INSERT na TT_LAN dos insumos e da produção.
Fazer esse processo no final da trigger.
Cronologicamente, o processo deve ficar assim:
Dá baixa nos insumos
(-) Queijo [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
(-) Presunto [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
(-) Pão [TT_LAN com TIPLAN_INS, valor e quantidade negativa]
Dá entrada na produção
(+) Sanduíche [TT_LAN com TIPLAN_PPR, valor e quantidade positiva]
Produzir ao Vender
Ao ser efetuada uma venda, ou uma pré-venda, sistema gerará um registro de produção automaticamente.
Tratar na trigger do item de orçamento, quando for pré-venda e o produto tiver receita, mas não de produção automática, gerar automaticamente a produção. Tratar na trigger do item de venda, quando este não estiver vinculado a um item de pré-venda e o produto tiver receita, mas não de produção automática, gerar automaticamente a produção.
Gravar o vínculo da produção com o item que o originou:
TT_RPP.FILPED, TIPPED, NUMPED e ITEPED
ou
TT_RPP.FILIVE, SEQIVE e NUMIVE
Resumo por Módulo
Banco de dados
- Criação de novas tabelas (TT_RPD, TT_IRP, TT_INS, TT_RPP, TT_IPD, TT_INB, TL_RPP).
- Desativação das tabelas atuais (TT_PPR, TT_ITP).
- Atualização do estoque ao gravar venda.
- Atualização do estoque ao produzir.
- Criação de tipos de lançamentos padrão para insumo e produção.
Config
- Obrigatoriedade do tipo de lançamento de insumo e produção.
Backoffice
- Tela de receitas.
DLL PAFECF
- Tratamento no relatório de índices técnicos.
Commerce Web
- Tela de produção, pesquisa de produções, receitas e insumos.