Análise
Projeto
Link para as especificações do projeto é Sistema para Restaurante (Posto).
Esse artigo trata-se do item "1.02) ROTINA DO MICROTERMINAL".
Requisitos
- Deverá ter as mesmas funções do atual Totali Terminais.
- Deverá integrar com a balança.
- Deve ter base em cada filial permitindo o funcionamento sem internet disponível.
- Quando houver balança terá uma instalação na máquina local.
- Checkout deve resgatar e mesclar as pré-vendas na base da filial.
Especificação Técnica
Levar em consideração os Padrões de Programação em Genexus.
Papéis de Cada Aplicação
Por se tratar de um projeto extenso será explicado o papel de cada aplicação no processo.

Figura 1. Diagrama de Componentes.
Checkout4g é o nosso novo módulo para fazer vendas e orçamentos.
Ele possui uma base própria em PostgreSQL e será implantado na filial onde os terminais de pré-venda irão operar.
Essa aplicação será acessada via navegador pelos diversos PCs e Tablets do restaurante e da lanchonete.
Alguns desses micros terão integração com balança para receber o peso do alimento.
A integração com a balança será feita por uma instância do Checkout4g implantada em um micro junto a balança.
O periférico será acessado via JAR que acesse a DLL ACBrBal mediante requisição do Checkout4g que está gerenciando os terminais.
Em cada terminal de pré-venda o usuário poderá dar entrada nos seguintes dados:
- Vendedor
- Ficha
- Produto
- Quantidade
O resultado será gravado na forma de pré-venda na base local.
Mas para que isso funcione corretamente será necessário que na base local os seguintes dados estejam sempre atualizados:
- Produtos e Grades;
- Preço;
- Configurações;
- Outras tabelas auxiliares.
Essa atualização se dará via Totali Middleware, que é uma aplicação web que ao ser chamada faz selects no banco e retorna via web service o resultado dessas consultas.
O Checkout4g também precisará sincronizar as pré-vendas registradas por ele na base oficial.
Isso se dará através de um webservice disponível no Commerce Web implantado para fazer o papel de concentrador de dados.
O Checkout também terá papel importante nessa atividade.
Ele precisa consultar, mesclar e resgatar as pré-vendas na base local do Checkout4g e gerar os scripts de venda para a base oficial.
Totali Terminais - Sistema Legado
Como faz parte dos requisitos o novo sistema ter os mesmos recursos do Totali Terminais é necessário entendê-lo.
O processo de gravação da pré-venda deverá ser feito na base local de forma semelhante a como é feito hoje.
Configurações necessárias para utilização do sistema antigo estão em Totali Terminais.
Atividades do Terminais
No diagrama abaixo está descrito o fluxo de atividades do Terminais.

Figura 2. Diagrama de atividades
O processo dos terminais é cíclico. Ou seja, o micro-terminal fica aberto esperando a próxima entrada do usuário.
As informações do último vendedor e última ficha devem ser guardadas em sessão.
Quando for esse o caso o ciclo é iniciado na etapa que não tem informação.
Se tiver vendedor, ele solicita a ficha.
Se tiver ficha, ele solicita o produto.
Solicita vendedor
Sistema identifica o IP da máquina client e carregar as configurações personalizadas por terminal.
Se o terminal tiver configuração para não pedir vendedor então a tela de solicitação de ficha é o início do ciclo.
Nesse caso o sistema assume o owner da base como sendo o vendedor da pré-venda.
Solicita ficha
Ainda sem gravar nada no banco o sistema simplesmente aceita qualquer número com até 8 dígitos como ficha.
Solicita produto
Sistema recebe o produto das seguintes formas:
- Leitor código-de-barras que simula o teclado e aperta enter no final.
Obs.: Se a referência for maior ou igual a 20 posições o sistema aperta o enter sozinho.
- Via teclado.
O código pode ser:
- Referência básica (TT_PRO.REFBAS); ou
- Referência de grade (TT_GRA.REFPRO).
Além disso, ele possui as seguintes variantes:
- EAN personalizado código inicia com o caracter "2" e tem 13 posições.
1: Fixo "2" 2~5: Código do Produto 6~13: Quantidade (2 posições decimais) Obs.: Obrigatoriamente requer um registro na TT_EAN, porém, ele não usa a referência de venda para nenhuma verificação.
- Código com multiplicador. A tecla de multiplicador é o "." (ponto). Ex.: <qtd>.<referência>.
- Quando código tem um EAN que não seja personalizado, a quantidade é fixa em 1.
No caso de receber a quantidade pela balança ou pelo EAN personalizado, o sistema apresenta o peso da tela para que o usuário confirme.
No caso do uso do multiplicador antes do código do produto, o sistema gera apenas um item no orçamento com quantidade igual ao multiplicador.
Regras para Exclusão de produtos
Quando o usuário exclui um produto sem explicitar a quantidade a ser excluída, ou qual é exatamente o item da pré-venda a ser excluído, o sistema respeita as seguintes regras:
- Se o usuário informar um produto que não teve a quantidade digitada (EAN, EAN personalizado ou balança) o sistema exclui o último item incluído.
- Se o usuário informar um produto que teve quantidade digitada o sistema cancela todos os itens daquela referência.
Solicita quantidade
Sistema solicita quantidade quando o produto não é um EAN personalizado e nem está vinculado a um EAN.
E também no caso dele ser pesável e o sistema não ter obtido uma resposta da balança em tempo hábil.
A quantidade pode ter até 4 caracteres depois da vírgula (NUMBER 12,4).
Telas do Terminais
No diagrama a seguir estão desenhadas todas as telas que aparecem nos micro-terminais.

Figura 3. Diagrama de telas do Totali Terminais
No artigo Check-list Terminais encontra-se como testar as telas passo-a-passo.
Para melhor visualizar o que é um micro terminal pode-se consultar o artigo Micro Terminal.
Gravação do Terminais
A seguir está detalhado a forma com que o Totali Terminais grava uma pré-venda atualmente.
Isso poderá ser útil para gravar as pré-vendas no Checkout4g e no momento de passar os dados para o concentrador.
A - Inclusão de pré-venda
1. Incluir registro na TT_ORC
| Coluna | Descrição |
| CODFIL | Filial padrão configurada no TotaliCommerceWebConfig.XML |
| TIPPED | Fixo "P" |
| NUMPED | Próximo código da TT_COD. ÿ obrigatório que seja sequencial e que não se desperdice números. Preencher com 8 zeros a esquerda. Ex.: "00010000" |
| NUMPED_PAF | Redundância do NUMPED para relatórios do PAF. |
| CODEMP | Fixo "0" |
| NUMBLO | Número da ficha/comanda. Preencher com 8 zeros a esquerda. Ex.: "00000001". |
| FLGEST | Fixo "A" |
| FILVEN | Filial do vendedor informado na pré-venda (TT_USU.FILUSU) |
| CODVEN | Código do vendedor informado na pré-venda (TT_USU.CODUSU). Espaços a esquerda. Ex.: " 1" |
| FILUSU | Mesmo dado do FILVEN |
| CODUSU | Mesmo dado do CODVEN |
| CODCTR | TD_TER.TERCTR |
| COMAND | Fixo "T" |
| FILCLI | TT_CFG.VC_FILCLI |
| CODCLI | TT_CFG.VC_CODCLI |
| FILPGT | TT_CFG.VC_FILPGT |
| CODPGT | TT_CFG.VC_CODPGT |
| FILENT | TT_CFG.VC_FILCLI |
| NUMENT | Fixo 1 |
| FILCOB | TT_CFG.VC_FILCLI |
| NUMCOB | Fixo 1 |
| FILFAT | TT_CFG.VC_FILCLI |
| NUMFAT | Fixo 1 |
| FILPRE | TT_CFG.FILPRE |
| CODPRE | TT_CFG.CODPRE |
| ATU_EM | Data e hora do Servidor |
| DATPRI | Data e hora do Servidor |
| DATVAL | Data e hora do Servidor + 2 dias |
| PED_EM | Data e hora do Servidor |
| VLRDES | Fixo 0 |
| VLRPAR | Fixo 0 |
| VLRTOT | Fixo 0 |
| CODFIN | Fixo 0 |
| QTDPAR | Fixo 0 |
| FILALC | Idem CODFIL |
| DATSEG | Nulo |
| APROVA | Fixo "A" |
| CHVAPR | Fixo 0 |
| CODUID | Nulo |
| ASSINA | Nulo |
2. Incluir registro na TT_IOR
| Coluna | Descrição |
| CODFIL | TT_ORC.CODFIL |
| TIPPED | TT_ORC.TIPPED |
| NUMPED | TT_ORC.NUMPED |
| NUMITE | Sequencial por pré-venda |
| ORDITE | Idem NUMITE |
| CODTER | TD_TER.CODTAB |
| COOVEN | Nulo |
| CODUID | Nulo |
| ASSINA | Nulo |
| FILMAT | Filial do produto referente o código informado na pré-venda (TT_PRO.FILMAT) |
| CODMAT | Código do produto referente o código informado na pré-venda (TT_PRO.CODMAT) |
| CODCOR | Código da divisão referente o código informado na pré-venda (TT_GRA.CODCOR) |
| CODTAM | Código da subdivisão referente o código informado na pré-venda (TT_GRA.CODTAM) |
| FLGEST | Fixo "A" |
| ATU_EM | Data e hora do servidor |
| QTDITE | Quantidade informada pelo usuário |
| VLRITE | Preço de venda do produto (resultado da função PrecoVendaProduto) |
| QTDENT | Fixo 1 |
| VLRENT | Idem VLRITE |
| VLRCUS | ROUND(QTDITE * VLRITE,2) |
| VLRPGT | Idem VLRCUS |
| MONTAR | Fixo "F" |
| FILRES | TT_ORC.CODFIL |
| PROMOC | Fixo "N" |
| CODMUL | Fixo 0 |
| FILUSU | TT_ORC.FILUSU |
| CODUSU | TT_ORC.CODUSU |
3. Atualiza TT_ORC com o novo total
Soma o novo total com SELECT:
SELECT SUM(QTDITE*VLRITE) AS SOMA
FROM TT_IOR
WHERE CODFIL = <filial padrão> AND FLGEST = 'A'
AND TIPPED = 'O'
AND NUMPED = (
SELECT NUMPED
FROM TT_ORC
WHERE NUMBLO = <número da ficha informada pelo usuário. Preencher com 8 zeros a esquerda> AND FLGEST = 'A'
AND TIPPED = 'O' AND COMAND = 'T'
AND CODFIL = <filial padrão> AND CODCTR = <TD_TER.TERCTR>)
| Coluna | Descrição |
| VLRTOT | SOMA |
B - Inclusão de Item em Pré-Venda Existente
Caso já exista o registro na TT_ORC deverá ser feita a inclusão no novo registro na TT_IOR. Depois, deve-se fazer a atualização da coluna VLRTOT.
C - Cancelamento de item
Ao cancelar um item (na tela aparece como excluir da comanda, mas na verdade é um cancelamento de item) o sistema deve mudar na TT_IOR a coluna FLGEST para "C".
Como a situação do item é levada em consideração para apuração do total da pré-venda (TT_ORC.VLRTOT) é necessário efetuar o cálculo e atualizar a assinatura da TT_ORC.
Atualização da TT_ORC:
| Coluna | Descrição |
| VLRTOT | SOMA |
Atualização da TT_IOR:
| Coluna | Descrição |
| FLGEST | Fixo "C" |
O sistema não permite que uma pré-venda fique com todos os itens cancelados.
Por isso, quando o usuário solicitar a exclusão do último item da comanda (último item não cancelado) o sistema não deve cancelá-lo naquele momento.
Deve-se mudar a situação de aprovação dele para "Reprovado" [TT_ORC.APROVA = "R"].
Quando for feita a inclusão de um novo item em uma pré-venda "Reprovada" deve-se cancelar todos os itens existentes que ainda não estejam cancelados, e consequentemente, mudar a situação de "Reprovado" para "Aprovado" [TT_ORC.APROVA = "A"].
Atualização da TT_ORC:
| Coluna | Descrição |
| CHVAPR | Fixo "R" |
Observação: essa parte do cancelamento do item descreve como Totali Terminais deveria fazer.
Atualmente ele não tem esse controle para impedir que a pré-venda fique vazia.
Na verdade, ele verifica se todos os itens estão cancelados e cancela a pré-venda, o que é errado.
Dicionário de Dados
Pode ser útil para uma melhor compreensão do Totali Terminais um dicionário de dados explicando as tabelas mais utilizadas no processo de terminais.
TD_TER - Terminais
| Coluna | Significado | Tipo | Tamanho | Nulo | Default | Domínio |
| CODTAB | Código | NUMBER | 5,0 | |||
| TERATI | Ativo ? | VARCHAR2 | 1 | 'T' | ||
| TER_IP | Ip do terminal | VARCHAR2 | 15 | |||
| FILTER | Filial do Terminal | CHAR | 3 | |||
| TERVEN | Exige vendedor ? | VARCHAR2 | 1 | Sim | ||
| TERCTR | Unidade de Negócio | NUMBER | 5,0 | Sim |
TT_ORC - Orçamentos
| Coluna | Tipo | Tamanho | Default | Breve Descrição | Descrição Completa | Domínio |
| codfil | bpchar | 3 | Filial | Código da filial de origem | ||
| tipped | bpchar | 1 | '0' | Tipo de Pedido/OS | Tipo de pedido | O - DAV; S - DAV-OS; P - Pré-Venda |
| numped | bpchar | 8 | Número | Número do pedido | ||
| flgest | bpchar | 1 | 'A' | Situação | Estado do pedido (Entregue/Pendente/Cancelado) | C - Cancelado; O - Concluído; A - Em aberto; E - Vendido |
| nature | bpchar | 1 | '0' | Tipo de Pagto. | Natureza do pagamento | 0 - A vista; 2 - Cheques; 1 - Crediário; 3 - Financeira |
| tipent | bpchar | 1 | '0' | Tipo de Entrega | Tipo de entrega | 6 - Apenas Orçamento; 0 - Cliente Leva; 4 - Em Outra Loja; 1 - Entrega Direta; 5 - Entrega Futura; 2 - Loja Entrega; 3 - Retira no Depósito; 7 - Venda sob Encomenda |
| codpgt | bpchar | 3 | Plano | Código do plano | ||
| codusu | bpchar | 3 | Usuário | Código do usuário | ||
| codven | bpchar | 3 | Vendedor | Vendedor | ||
| filalc | bpchar | 3 | Filial Alocada | Filial Alocada | ||
| filcli | bpchar | 3 | Filial onde foi cadastrado o cliente | |||
| filpgt | bpchar | 3 | Filial do plano | |||
| filpre | bpchar | 3 | Filial de origem da Tabela de preços | |||
| filusu | bpchar | 3 | Filial do usuário | |||
| filven | bpchar | 3 | Filial do Vendedor | |||
| codcli | bpchar | 6 | Código do Cliente | Código do cliente | ||
| atu_em | timestamp | 8 | Data~Atualização | Atualizado em ... | ||
| datpri | timestamp | 8 | 1º Parcela | Data da 1ª parcela | ||
| datval | timestamp | 8 | Validade | Data de validade do pedido | ||
| ped_em | timestamp | 8 | Pedido em | Data e hora do pedido | ||
| numcob | numeric | 4 | Núm. End Cobrança | Número Endereço da Cobrança | ||
| nument | numeric | 4 | Núm. End. Entrega | Número Endereço de Entrega | ||
| numfat | numeric | 4 | Núm. End. Fatura | Número Endereço da Fatura | ||
| codfin | numeric | 5 | Financeira | Código da financeira | ||
| codpre | numeric | 5 | Tabela de Preços | Código Tabela de preços | ||
| qtdpar | numeric | 5 | Qtd. de Parcelas | Quantidade de parcelas | ||
| vlrdes | numeric | 12,2 | Valor do Desconto | Valor do desconto | ||
| vlrpar | numeric | 12,2 | Valor da Parcela | Valor da parcela | ||
| vlrtot | numeric | 12,2 | Valor Total | Valor total do pedido | ||
| descli | varchar | 1 | 'F' | Usu Interno? | Desconto especial para cliente | |
| emides | varchar | 1 | 'F' | Frete pelo Emitente? | Especifica se o frete é pelo emitente ou pelo destinatário | |
| reserv | varchar | 1 | 'F' | Reserva? | Reserva o estoque (Verdadeiro/Falso) | |
| codapr | bpchar | 3 | Aprovação feita por | Aprovação feita por | ||
| filapr | bpchar | 3 | Filial do Aprovador | Filial do aprovador | ||
| filcob | bpchar | 3 | Filial do Endereço de Cobrança | |||
| filent | bpchar | 3 | Filial do Endereço de Entrega | |||
| filfat | bpchar | 3 | Filial do Endereço de Fatura | |||
| filreg | bpchar | 3 | Filial do Registro | Código da filial do registro | ||
| filtra | bpchar | 3 | Filial da transportadora | |||
| labori | bpchar | 3 | Laboratório Origem | Laboratório de origem | ||
| lojori | bpchar | 3 | Loja Origem | Loja de origem | ||
| numecf | bpchar | 3 | ECF | Número do ECF | ||
| numori | bpchar | 3 | Número da Origem | Número da loja de origem | ||
| codtra | bpchar | 6 | Transportadora | Código da Transportadora | ||
| cupfis | bpchar | 8 | Cupom Fiscal | Número do cupom fiscal | ||
| numnot | bpchar | 8 | Número da Nota | Nota do fornecedor terceirizado | ||
| codreg | bpchar | 10 | Código Registro | Código Registro | ||
| datent | timestamp | 8 | Entrega em | Data da entrega (prevista) | ||
| especi | numeric | 5 | Espécie Volume | Espécie de Volume | ||
| signat | numeric | 5 | Ativo? | Ativo(T) se SIGNAT >=0 e Desativo(F) se SIGNAT < 0 | ||
| tipobs | numeric | 5 | Observação Padrão | Observação padrão | ||
| numlor | numeric | 10 | Usu Interno | Número do lote de retorno | ||
| numlot | numeric | 10 | Número do Lote | Número do lote | ||
| numvol | numeric | 10 | Num.Volume | Numero de Volumes | ||
| abatim | numeric | 12,2 | Abatimento | Abatimento | ||
| pesbru | numeric | 12,2 | Peso Bruto | Peso Bruto | ||
| pesliq | numeric | 12,2 | Peso Líquido | Peso Líquido | ||
| sinal | numeric | 12,2 | Sinal ou Entrada | Sinal ou entrada | ||
| sinalp | numeric | 12,2 | Sinal Apropriado | Sinal pago ou valor dos itens | ||
| vlrfre | numeric | 12,2 | Valor do Frete | Valor do Frete | ||
| vlrseg | numeric | 12,2 | Valor do Seguro | Valor do Seguro | ||
| codext | numeric | 15 | Código Externo | Código Externo | ||
| marcas | varchar | 5 | Marcas | Marcas | ||
| numblo | varchar | 8 | Número do Bloco | Número do Bloco | ||
| numaut | varchar | 10 | Num. Aprovação | Num. Aprovação | ||
| numres | varchar | 10 | Núm. da Reserva | Número de reserva | ||
| numser | varchar | 30 | Número de Série | Número de Série | ||
| observ | varchar | 4000 | Observações | Observações | ||
| obsorc | varchar | 4000 | Observação Orçamento | Observação do Orçamento | ||
| datseg | timestamp | 8 | 2º Parcela | Data da 2ª parcela | ||
| aprova | bpchar | 1 | 'E' | Tipo Aprovação | Tipo Aprovação | A - Aprovado; E - Em Aprovação; R - Reprovado |
| chvapr | numeric | 5 | Chave Aprovação | Chave Aprovação | ||
| aprcli | bpchar | 1 | '1' | Aprovação Cliente | Aprovação Cliente | 1 - Aprovado; A - Em Aberto; 2 - Reprovado |
| codvpe | numeric | 5 | Motivo Venda Perdida | Código Venda Perdida | ||
| msgvpe | varchar | 4000 | Mensagem Ven.Perdida | Mensagem Ven.Perdida | ||
| placas | varchar | 7 | Placa Veículo | Placa do Veículo | ||
| qtd_km | numeric | 7 | Qtde KM | Qtde KM | ||
| separa | varchar | 1 | 'F' | Necessita Separação? | Necessita Separação? | |
| codctr | numeric | 5 | Unidade de Negócio | Unidade de Negócio | ||
| comand | bpchar | 1 | 'F' | Comanda | Comanda | F - Não é comanda; T - ÿ comanda; E - ÿ comanda entregue |
| filgui | bpchar | 3 | ||||
| codgui | bpchar | 6 | ||||
| codseq | int4 | 4 | Cód. Sequen. NSU | Código sequencial NSU | ||
| televe | bpchar | 1 | 'F' | Por Televendas | Orçamento por Televendas (não envia para Checkout) | |
| codser | bpchar | 2 | Série Padr. de Venda | Série Padrão de Venda | ||
| docnfp | varchar | 15 | Documento p/ NFP | Número do documento para Nota Fiscal Paulista | ||
| datapr | timestamp | 8 | Data de aprovação | Data de Aprovação | ||
| canpre | bpchar | 3 | Cancelou pre-venda | ECF que cancelou a Pré-Venda | ||
| predav | bpchar | 1 | 'D' | Pré-venda/DAV | Pré-venda/DAV | D - DAV; P - Pré Venda |
| vlradi | numeric | 12,2 | Valor Adiantamento | Valor do Adiantamento | ||
| filadi | bpchar | 3 | ||||
| seqadi | bpchar | 10 | ||||
| nomcli | varchar | 64 | Nom. Clien. não Reg. | Nome do Cliente não Registrado | ||
| dddcli | bpchar | 2 | DDD Clien. não Reg. | DDD do Cliente não Registrado | ||
| telcli | varchar | 10 | Tel. Clien. não Reg. | Telefone do Cliente não Registrado | ||
| numped_paf | bpchar | 10 | Número do Pedido para PAF-ECF | |||
| assina | varchar | 256 | Assinatura para PAF-ECF | |||
| coduid | numeric | 10 | Identificação de Acesso | |||
| codemp | numeric | 5 | 0 | Empr. da Retaguarda | Empresa da Retaguarda | |
| codras | varchar | 20 | Cod. Rastreamento | Código do Rastreamento | ||
| codsve | numeric | 5 | Cód Serviço Correios | Código do Serviço dos Correios | 81019 - FRETE E-SEDEX; 44105 - FRETE MALOTE; 41017 - FRETE NORMAL; 41106 - FRETE PAC; 40010 - FRETE SEDEX; 40215 - FRETE SEDEX 10; 40290 - FRETE SEDEX HOJE; 40045 - SEDEX A COBRAR | |
| datenv | timestamp | 8 | Data Envio ao Client | Data de Envio ao Cliente | ||
| enveco | varchar | 1 | Pend Envio p/ E-Comm | Pendente de Envio para E-commerce | ||
| przent | numeric | 3 | Núm Dias p/ entrega | Número do Dias para Entrega | ||
| flgeco | bpchar | 1 | Sit. DAV E-Commerce | Situação da DAV no E-Commerce | P - Pagamento aprovado; F - Pagamento efetivado; T - Pagamento em análise; R - Pendente de pagamento; E - Produto Enviado | |
| orcimp | varchar | 1 | 'F' | Orçamento Impresso? | Orçamento Impresso? | |
| cooorc | numeric | 6 | COO da Impressão do | COO da Impressão do DAV | ||
| codnat | numeric | 5 | Cod. Natureza Oper. | Cod. Natureza Oper. |
TT_IOR - Itens de Orçamento
| Coluna | Tipo | Tamanho | Default | Breve Descrição | Descrição Completa | Domínio |
| codfil | bpchar | 3 | Filial | Código da filial | ||
| tipped | bpchar | 1 | 'O' | Tipo Pedido/OS | Tipo Pedido/OS | O - DAV; S - DAV-OS; P - Pré-Venda |
| numped | bpchar | 8 | Número Pedido/OS | Número Pedido/OS | ||
| numite | numeric | 5 | Item | Número do item do pedido | ||
| flgest | bpchar | 1 | 'A' | Situação | Situação | C - Cancelado; O - Concluído; A - Em aberto; T - Em andamento; E - Faturado/Vendido; R - Reservado |
| promoc | bpchar | 1 | 'N' | Promoção | Promoção | N - Não Promocional no Plano; E - Promocional no Plano; Q - Qualquer Plano |
| filmat | bpchar | 3 | Filial do Produto | |||
| filres | bpchar | 3 | Filial da Reserva | |||
| codmat | bpchar | 5 | Código do Produto | |||
| atu_em | timestamp | 8 | Data~Atualização | Atualizado em ... | ||
| ordite | numeric | 3 | 0 | Ordem de Itens | Ordem de Itens | |
| codtam | numeric | 5 | Sub-Divisão | Sub-Divisão do produto | ||
| vlrcus | numeric | 12,2 | Valor Total | Valor Total | ||
| vlrent | numeric | 14,4 | Vlr. Entregue | Valor entregue | ||
| vlrite | numeric | 14,4 | Vlr. Pedido/OS | Valor deste item | ||
| vlrpgt | numeric | 12,2 | Valor Total Sem Desc | Valor pago ao fornecedor Valor Total Sem Desconto | ||
| qtdent | numeric | 12,4 | Qtd. Entregue | Quantidade entregue | ||
| qtdite | numeric | 12,4 | Qtd. Pedida/OS | Quantidade de determinado item | ||
| montar | varchar | 1 | 'F' | Montargem | Montagem | I - Montagem Interna; T - Montagem na entrega; F - Sem Montagem |
| period | bpchar | 1 | Período da aplicação | Período da aplicação | D - Diário; M - Mensal; S - Semanal | |
| tippar | bpchar | 1 | Tipo de Técnico | Tipo de Técnico | F - Compra; T - Frete | |
| codusu | bpchar | 3 | Usuário | Código do Usuário | ||
| filfor | bpchar | 3 | Filial do fornecedor | |||
| filive | bpchar | 3 | Filial Item de Venda | |||
| filpar | bpchar | 3 | Filial do Tecnico | |||
| filusu | bpchar | 3 | Filial do Usuário | |||
| codfor | bpchar | 6 | Código do Fornecedor | Código do Fornecedor | ||
| codpar | bpchar | 6 | Código do Técnico | Código do Técnico | ||
| seqive | bpchar | 10 | Numero Item de Venda | |||
| entreg | timestamp | 8 | Data~Entrega | Data e hora da entrega | ||
| repete | numeric | 2 | Nº vezes a aplicar | Número de vezes a aplicar (ex. 2 vezes ao dia) | ||
| diadur | numeric | 3 | Duração | Duração | ||
| numive | numeric | 5 | Item de Venda | Item de Venda | ||
| phoiso | numeric | 5 | ISO | ISO do filme | ||
| phomar | numeric | 5 | Marca do Filme | Marca do Filme | ||
| phoout | numeric | 5 | Outros | Outra classificação do filme | ||
| photip | numeric | 5 | Tipo de Filme | Tipo de Filme | ||
| result | numeric | 5 | Resultado | Resultado | ||
| aplica | numeric | 10,4 | Qtd. a aplicar | Quantidade a aplicar (ex.10 gotas) | ||
| preuni | numeric | 12,2 | Preço Unitário | Preço Unitário | ||
| numfor | varchar | 20 | Número Externo | Número Externo | ||
| codmul | numeric | 5 | 0 | Sub-Estoque | Nome do Sub-Estoque | |
| codcor | numeric | 5 | Divisão | Divisão do Produto | ||
| codamb | numeric | 5 | Ambiente | Ambiente | ||
| dummy | bpchar | 1 | ||||
| serite | numeric | 5 | Rel. Serv./Produtos | Permite auto relacionamento entre os serviços e os produtos | ||
| filrct | bpchar | 3 | Filial da Receita | Filial da Receita | ||
| seqrct | bpchar | 10 | Sequenciador Receita | Sequenciador Receita | ||
| qtdpre | numeric | 14,4 | Quantidade Prescrita | Quantidade Prescrita | ||
| fildou | bpchar | 3 | ||||
| seqdou | bpchar | 10 | ||||
| codter | numeric | 5 | Terminal | Terminal | ||
| fileqp | bpchar | 3 | ||||
| seqeqp | bpchar | 10 | ||||
| observ | varchar | 4000 | Observação | Observação | ||
| filori | bpchar | 3 | ||||
| tipori | bpchar | 1 | ||||
| numori | bpchar | 8 | ||||
| iteori | numeric | 5 | ||||
| tippgt | bpchar | 1 | Tipo de Pagamento | Tipo de Pagamento | C - Contrato; F - Faturamento | |
| datinc | timestamp | 8 | Data de inclusão | Data de inclusão | ||
| peripi | numeric | 5,2 | % IPI ÿltima Compra | % IPI ÿltima Compra | ||
| tipent | bpchar | 1 | '0' | Tipo de entrega | Tipo de entrega | 6 - Apenas Orçamento; 0 - Cliente Leva; 1 - Depósito Entrega; 4 - Em Outra Loja; 5 - Entrega Futura; 2 - Loja Entrega; 3 - Retira no Depósito; 7 - Venda sob Encomenda |
| flgivo | bpchar | 1 | Processada Separação | Processada Separação? | A - Aberto; P - Processado | |
| filend | bpchar | 3 | Filial do endereço | Filial do endereço | ||
| numend | numeric | 4 | Número do endereço | Número do endereço | ||
| cooven | bpchar | 6 | Código COO da venda | Código COO da venda | ||
| flgenc | varchar | 1 | 'F' | Encomendado? | Indica se o item pode ser encomendado sem ser faturado | |
| qtdori | numeric | 12,4 | ||||
| conclu | varchar | 1 | ||||
| assina | varchar | 256 | Assinatura para PAF-ECF | |||
| coduid | numeric | 10 | Identificação de Acesso | |||
| desicm | numeric | 12,2 | Vlr isenção de ICMS | Valor de isenção de ICMS | ||
| descon | numeric | 12,2 | Desconto/Acréscimo | Desconto/Acréscimo | ||
| ecfven | bpchar | 3 | Número Ecf Vendido | Número Ecf Vendido | ||
| numite_paf | numeric | 5 | Número de Item para | Número de Item para PAF-ECF | ||
| basicm | numeric | 12,2 | Base ICMS | Base ICMS | ||
| vlricm | numeric | 12,2 | Valor ICMS | Valor ICMS | ||
| bassub | numeric | 12,2 | Base de Substituição | Base de Substituição | ||
| vlrsub | numeric | 12,2 | Valor Substituição | Valor de Substituição | ||
| basstc | numeric | 14,4 | Base se ST da compra | Base se ST da compra | ||
| vlrstc | numeric | 14,4 | Vlr BC do ICMS Retid | Vlr BC do ICMS Retid | ||
| mvaven | numeric | 14,4 | MVA da venda | MVA da venda | ||
| taxicm | numeric | 6,4 | Alíquota de ICMS | Alíquota de ICMS | ||
| taxsub | numeric | 6,4 | Alíquota de ST | Alíquota de ST | ||
| redicm | numeric | 7,4 | Red. de Base de ICMS | Red. de Base de ICMS | ||
| redsub | numeric | 7,4 | Red. de Base de ST | Red. de Base de ST | ||
| iseicm | numeric | 12,2 |
Outros scripts
Além dessas tabelas, estão disponíveis os selects realizados pelo Terminais em:
\\ttadm\Anexos_PRJ\Posto Sao Cristovao\1022 - Customizações Restaurante\sqls_gravação_item \\ttadm\Anexos_PRJ\Posto Sao Cristovao\1022 - Customizações Restaurante\sqls_exclusão_item_comanda \\ttadm\Anexos_PRJ\Posto Sao Cristovao\1022 - Customizações Restaurante\sqls_gravação_checkout\30112012.001
Importante: Checkout mudar a situação do item da pré-venda para entregue (TT_IOR.FLGEST="E"), o que faz com que o sistema entenda que é necessário criar novo orçamento.
Além disso, destacamos aqui dois selects muito importantes para o entendimento do processo legado.
Consulta do Preço
A view TV_IPR é a consulta de produtos.
A função PrecoVendaProduto busca a tabela de preço de acordo com os dados passados por parâmetro.
Observe que o terminal atual aceita preços diferentes por unidade de negócio e filial.
SELECT COALESCE(IPR.DESECF,CAST(IPR.DESMAT AS VARCHAR(15))) AS DESCRICAO,
PrecoVendaProduto(DTER.TERCTR,DTER.FILTER,NULL,IPR.FILMAT,IPR.CODMAT,IPR.CODCOR,IPR.CODTAM) AS PRECO FROM TV_IPR IPR CROSS JOIN TD_TER DTER
WHERE IPR.REFBAS = '00002219'
AND DTER.TER_IP = '192.168.1.2'
AND IPR.SIGNAT >= 0
UNION
SELECT COALESCE(IPR.DESECF,CAST(IPR.DESMAT AS VARCHAR(15))) AS DESCRICAO,
PrecoVendaProduto(DTER.TERCTR,DTER.FILTER,NULL,IPR.FILMAT,IPR.CODMAT,IPR.CODCOR,IPR.CODTAM) AS PRECO FROM TV_IPR IPR CROSS JOIN TD_TER DTER
WHERE IPR.REFPRO = '00002219'
AND DTER.TER_IP = '192.168.1.2'
AND IPR.SIGNAT >= 0
Consulta EAN
Esse conceito precisará ser diferente no novo Checkout4g.
Esse select é forma com que o Terminais identifica se o produto digitado deve ser tratado como código-de-barras ou como produto referência digitada.
Esse conceito não é bom.
SELECT CASE WHEN EXISTS(SELECT EAN.FILMAT||EAN.CODMAT
FROM TT_EAN EAN
WHERE EAN.FILMAT = '001'
AND EAN.CODMAT = ' 1938' ) THEN 'T' ELSE 'F' END AS EXISTE_EAN FROM DUAL
Base de Conhecimento - KB
A partir desse momento serão descritos aspectos estruturais que precisão ser esclarecidos ou modificados na KB do Checkout4g para permitir realizar as pré-vendas.
Terminal ou Client
Com a utilização de software e computadores para a solução fica estranho ter um conceito de cadastro de IPs que podem registrar pré-vendas.
O novo Checkout4g já possui configuração para indicar a filial e a unidade de negócio onde ele se encontra, ou seja, esses controles não precisam ser de terminal em terminal.
O vendedor será escolhido via login e os grupos de produto devem ser guardados em sessão.
Ou seja, a princípio não será necessário ter um cadastro de terminais.
Orçamento (TT_ORC do Commerce)
ÿ necessário armazenar as pré-vendas em uma tabela que sirva futuramente para DAV e DAV-OS.
Deve-se ter todas as informações já existentes no Order.
Caso seja necessário algum controle a mais, poderá ser criados novos atributos.
Item de Orçamento (TT_IOR do Commerce)
ÿ necessário armazenar os itens das pré-vendas em uma tabela que sirva futuramente para itens de DAV e DAV-OS.
Deve-se ter todas as informações já existentes no Order.
Caso seja necessário algum controle a mais, poderá ser criados novos atributos.
Protótipo de Pré-Venda Web
Sistema deverá ter as mesmas funções do atual Totali Terminais.
Mas por se tratar de um sistema e não de um dispositivo físico não devemos ficar presos às limitações físicas dos terminais.
Entretanto, deve-se ter uma atenção muito especial com relação a integração com a balança, porque o desempenho tem que ser rápido suficiente para não parar a fila do almoço.
Tela de Login
No processo novo, a escolha do vendedor se dará pela tradicional tela de login, que deve ser parecida com a tela de login do Checkout 4g.
Sistema precisa de um endereço de login especial para saber se é para entrar em modo de pré-venda.
Não precisa de tanta propaganda nesse login.
Seria interessante que o sistema apresentasse uma lista de vendedores com a permissão de realizar pré-venda para o usuário selecionar.

Figura 4. Login do Checkout4g.
Tela Principal
No diagrama em anexo está um esboço do que deve ser a tela principal do sistema.

Figura 5. Diagrama de Telas.
Ficha: Volta para situação de aguardando ficha.
Logoff: Volta para a tela de login.
Voltar: Botão voltar no padrão no novo Checkout.
Se o sistema estiver esperando ficha o botão não fará nada.
Se o sistema estiver esperando produto, e o sistema estiver mostrando os grupos de produto sem pais, o botão voltará para solicitação de ficha.
Quando o usuário estiver navegando pelos grupos de produto ele voltará um nível nos grupos.
Se o sistema estiver esperando quantidade, o botão voltará para solicitação de produto.
entrada de dados: Deve estar preparado para utilizar o conceito de gabarito do novo Checkout.
Isso vai servir para que o usuário possa indicar que houve troca de ficha sem precisa apertar o botão "Ficha" ou "Voltar".
Produtos da ficha: Lista de produtos (código e valor) da ficha ordenados decrescentemente pela data e hora da inclusão.
Cada produto deve ter um X vermelho no final para permitir exclusão.
Tela dinâmica: Deve apresentar o que é relevante para a "entrada de dados" que o usuário deverá realizar.
Ao aguardar ficha não deve apresentar nada.
Ao aguardar produto deve apresentar a navegação por grupos de produto do Checkout4g.
Ao aguardar quantidade não deve apresentar nada.
Entrada dos dados
O usuário poderá a qualquer momento alternar a forma de comandar a pré-venda entre as diversas formas possíveis (teclado, mouse, touch).
Mas para facilitar o entendimento vamos exemplificar a operações separando por forma de entrada.
Exemplo de Entrada com Teclado
Sistema mostra no campo que está aguardando vendedor.
A sugestão é indicar que é necessário preencher o vendedor em um texto no fundo do campo para dar entrada nos dados.
Exemplo:
Figura 5. Input text com texto no fundo.
Usuário vai digitar o código externo do vendedor e teclar enter.
Sistema vai validar se o código existe e se o vendedor possui a permissão necessária.
Sistema mostra no campo que está aguardando ficha.
Usuário vai digitar o código da ficha e apertar enter.
Sistema mostra no campo que está aguardando produto.
Usuário vai digitar o produto de acordo com o especificado no fluxo de atividades, onde em alguns casos não será necessário apertar enter.
Também deve ser tratado o processo de gabarito para que o usuário possa "bipar" uma comanda sem ter que sair do modo de espera do produto.
Se nessa tela o usuário apertar DEL (delete), o sistema mostra que está aguardando produto para ser cancelado.
Sistema deve tratar o cancelamento de item conforme especificado no fluxo de atividades.
Se o produto necessitar de quantidade, o sistema deve mostrar que está aguardando quantidade com até 4 casas decimais.
Exemplo de Entrada com Touch
Usuário vai escolher um dos vendedores da lista.
Essa lista só deve mostrar usuário ativos que tenham a permissão de vender pré-venda.
Quando clicar no nome do vendedor ele já deve ir para solicitação de ficha.
Na tela que espera a ficha ele deve usar o teclado numérico para informar o número e apertar o botão enter (CR).
Na tela que espera o produto deve ser possível ao usuário navegar nos grupos de produtos conforme o conceito do Checkout4g.
Para voltar na navegação dos níveis do produto, deve-se usar o botão "Voltar" que será padrão para todas as operações no Checkout4g.
Quando o usuário apertar um produto que não tenha filhos esse deve ser escolhido.
O sistema verificará se deve fazer a pesagem, se ele vai pegar a quantidade fixa 1, a referência personalizada ou se mostrará a tela de quantidade.
Se for o caso de mostrar a tela de quantidade, o usuário deverá dar entrada com o teclado numérico.
Aspectos Visuais Gerais
Outros aspectos que devem ser respeitados na interface com o usuário estão listados abaixo:
- Ao aguardar o vendedor, o sistema deve desabilitar o botão "F".
- O botão "Voltar" não deve ter efeito quando estiver na tela de vendedor, ou quando estiver na tela de ficha e o terminal tiver um vendedor padrão.
- Tecla BS (backspace) tanto do teclado físico quanto do virtual deve apagar um caracter para trás no campo de entrada de dados.
- Quando o sistema ficar em modo de exclusão de produto ele deve apresentar uma diferença de cor que chame a atenção do usuário.
- Após exclusão sistema deve apresentar mensagem indicando que determinado produto foi excluído.
- Sistema deve exigir uma permissão especial para exclusão de produto da pré-venda.
- Outra forma de excluir produto é através do botão excluir ao lado de cada produto contido na ficha.
A ideia é que o visual dessa aplicação se pareça moderno.
Pode-se basear no visual do Windows 8 (metro ui) como referência de como o visual deve-se parecer.

Figura 6. Visual metro.
Como inspiração pode-se observar sistemas de outras empresas como:
- Restô

Figura 7. Visual Restô.
Fonte: http://www.softwarepararestaurante.com.br/equipamentos-e-sistemas-para-empresas
- Bematech Chef

Figura 8. Visual Bematech Chef.
Fonte: http://www.bematech.com.br/
Mudanças por Módulo
Checkout4g
- Criar módulo de pré-venda.
- Enviar as pré-vendas para o concentrador (Commerce Web).
Banco de dados
- Criar permissão especial para cancelar item de pré-venda.
DLL PAFECF
- Criar novo método para MesclarPreVenda em base do Checkout4g.
Checkout
- Tratar para resgatar Pré-venda da base do Checkout4g.
- Tratar para mesclar pré-venda da base do Checkout4g.
- Tratar para cancelar as pré-vendas que ficaram abertas no dia da base do Checkout4g.
Commerce Web
- Criar o conceito de concentrador para receber as pré-vendas no banco de dados da matriz.
Referenciado por: Check-list Terminais | Micro Terminal | Padrões de Programação em Genexus | Totali Terminais |