Skip to content

Tag-icone-mini.png 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.

Terminaisweb ComponentesWeb.png
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.

Terminaisweb Atividades.png
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.

Terminaisweb Telas.png
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 ​
ColunaDescrição
CODFILFilial padrão configurada no TotaliCommerceWebConfig.XML
TIPPEDFixo "P"
NUMPEDPró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_PAFRedundância do NUMPED para relatórios do PAF.
CODEMPFixo "0"
NUMBLONúmero da ficha/comanda. Preencher com 8 zeros a esquerda. Ex.: "00000001".
FLGESTFixo "A"
FILVENFilial do vendedor informado na pré-venda (TT_USU.FILUSU)
CODVENCódigo do vendedor informado na pré-venda (TT_USU.CODUSU). Espaços a esquerda. Ex.: " 1"
FILUSUMesmo dado do FILVEN
CODUSUMesmo dado do CODVEN
CODCTRTD_TER.TERCTR
COMANDFixo "T"
FILCLITT_CFG.VC_FILCLI
CODCLITT_CFG.VC_CODCLI
FILPGTTT_CFG.VC_FILPGT
CODPGTTT_CFG.VC_CODPGT
FILENTTT_CFG.VC_FILCLI
NUMENTFixo 1
FILCOBTT_CFG.VC_FILCLI
NUMCOBFixo 1
FILFATTT_CFG.VC_FILCLI
NUMFATFixo 1
FILPRETT_CFG.FILPRE
CODPRETT_CFG.CODPRE
ATU_EMData e hora do Servidor
DATPRIData e hora do Servidor
DATVALData e hora do Servidor + 2 dias
PED_EMData e hora do Servidor
VLRDESFixo 0
VLRPARFixo 0
VLRTOTFixo 0
CODFINFixo 0
QTDPARFixo 0
FILALCIdem CODFIL
DATSEGNulo
APROVAFixo "A"
CHVAPRFixo 0
CODUIDNulo
ASSINANulo
2. Incluir registro na TT_IOR ​
ColunaDescrição
CODFILTT_ORC.CODFIL
TIPPEDTT_ORC.TIPPED
NUMPEDTT_ORC.NUMPED
NUMITESequencial por pré-venda
ORDITEIdem NUMITE
CODTERTD_TER.CODTAB
COOVENNulo
CODUIDNulo
ASSINANulo
FILMATFilial do produto referente o código informado na pré-venda (TT_PRO.FILMAT)
CODMATCódigo do produto referente o código informado na pré-venda (TT_PRO.CODMAT)
CODCORCódigo da divisão referente o código informado na pré-venda (TT_GRA.CODCOR)
CODTAMCódigo da subdivisão referente o código informado na pré-venda (TT_GRA.CODTAM)
FLGESTFixo "A"
ATU_EMData e hora do servidor
QTDITEQuantidade informada pelo usuário
VLRITEPreço de venda do produto (resultado da função PrecoVendaProduto)
QTDENTFixo 1
VLRENTIdem VLRITE
VLRCUSROUND(QTDITE * VLRITE,2)
VLRPGTIdem VLRCUS
MONTARFixo "F"
FILRESTT_ORC.CODFIL
PROMOCFixo "N"
CODMULFixo 0
FILUSUTT_ORC.FILUSU
CODUSUTT_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>)

ColunaDescrição
VLRTOTSOMA
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:

ColunaDescrição
VLRTOTSOMA

Atualização da TT_IOR:

ColunaDescrição
FLGESTFixo "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:

ColunaDescrição
CHVAPRFixo "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 ​
ColunaSignificadoTipoTamanhoNuloDefaultDomínio
CODTABCódigoNUMBER5,0
TERATIAtivo ?VARCHAR21'T'
TER_IPIp do terminalVARCHAR215
FILTERFilial do TerminalCHAR3
TERVENExige vendedor ?VARCHAR21Sim
TERCTRUnidade de NegócioNUMBER5,0Sim
TT_ORC - Orçamentos ​
ColunaTipoTamanhoDefaultBreve DescriçãoDescrição CompletaDomínio
codfilbpchar3FilialCódigo da filial de origem
tippedbpchar1'0'Tipo de Pedido/OSTipo de pedidoO - DAV; S - DAV-OS; P - Pré-Venda
numpedbpchar8NúmeroNúmero do pedido
flgestbpchar1'A'SituaçãoEstado do pedido (Entregue/Pendente/Cancelado)C - Cancelado; O - Concluído; A - Em aberto; E - Vendido
naturebpchar1'0'Tipo de Pagto.Natureza do pagamento0 - A vista; 2 - Cheques; 1 - Crediário; 3 - Financeira
tipentbpchar1'0'Tipo de EntregaTipo de entrega6 - 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
codpgtbpchar3PlanoCódigo do plano
codusubpchar3UsuárioCódigo do usuário
codvenbpchar3VendedorVendedor
filalcbpchar3Filial AlocadaFilial Alocada
filclibpchar3Filial onde foi cadastrado o cliente
filpgtbpchar3Filial do plano
filprebpchar3Filial de origem da Tabela de preços
filusubpchar3Filial do usuário
filvenbpchar3Filial do Vendedor
codclibpchar6Código do ClienteCódigo do cliente
atu_emtimestamp8Data~AtualizaçãoAtualizado em ...
datpritimestamp81º ParcelaData da 1ª parcela
datvaltimestamp8ValidadeData de validade do pedido
ped_emtimestamp8Pedido emData e hora do pedido
numcobnumeric4Núm. End CobrançaNúmero Endereço da Cobrança
numentnumeric4Núm. End. EntregaNúmero Endereço de Entrega
numfatnumeric4Núm. End. FaturaNúmero Endereço da Fatura
codfinnumeric5FinanceiraCódigo da financeira
codprenumeric5Tabela de PreçosCódigo Tabela de preços
qtdparnumeric5Qtd. de ParcelasQuantidade de parcelas
vlrdesnumeric12,2Valor do DescontoValor do desconto
vlrparnumeric12,2Valor da ParcelaValor da parcela
vlrtotnumeric12,2Valor TotalValor total do pedido
desclivarchar1'F'Usu Interno?Desconto especial para cliente
emidesvarchar1'F'Frete pelo Emitente?Especifica se o frete é pelo emitente ou pelo destinatário
reservvarchar1'F'Reserva?Reserva o estoque (Verdadeiro/Falso)
codaprbpchar3Aprovação feita porAprovação feita por
filaprbpchar3Filial do AprovadorFilial do aprovador
filcobbpchar3Filial do Endereço de Cobrança
filentbpchar3Filial do Endereço de Entrega
filfatbpchar3Filial do Endereço de Fatura
filregbpchar3Filial do RegistroCódigo da filial do registro
filtrabpchar3Filial da transportadora
laboribpchar3Laboratório OrigemLaboratório de origem
lojoribpchar3Loja OrigemLoja de origem
numecfbpchar3ECFNúmero do ECF
numoribpchar3Número da OrigemNúmero da loja de origem
codtrabpchar6TransportadoraCódigo da Transportadora
cupfisbpchar8Cupom FiscalNúmero do cupom fiscal
numnotbpchar8Número da NotaNota do fornecedor terceirizado
codregbpchar10Código RegistroCódigo Registro
datenttimestamp8Entrega emData da entrega (prevista)
especinumeric5Espécie VolumeEspécie de Volume
signatnumeric5Ativo?Ativo(T) se SIGNAT >=0 e Desativo(F) se SIGNAT < 0
tipobsnumeric5Observação PadrãoObservação padrão
numlornumeric10Usu InternoNúmero do lote de retorno
numlotnumeric10Número do LoteNúmero do lote
numvolnumeric10Num.VolumeNumero de Volumes
abatimnumeric12,2AbatimentoAbatimento
pesbrunumeric12,2Peso BrutoPeso Bruto
pesliqnumeric12,2Peso LíquidoPeso Líquido
sinalnumeric12,2Sinal ou EntradaSinal ou entrada
sinalpnumeric12,2Sinal ApropriadoSinal pago ou valor dos itens
vlrfrenumeric12,2Valor do FreteValor do Frete
vlrsegnumeric12,2Valor do SeguroValor do Seguro
codextnumeric15Código ExternoCódigo Externo
marcasvarchar5MarcasMarcas
numblovarchar8Número do BlocoNúmero do Bloco
numautvarchar10Num. AprovaçãoNum. Aprovação
numresvarchar10Núm. da ReservaNúmero de reserva
numservarchar30Número de SérieNúmero de Série
observvarchar4000ObservaçõesObservações
obsorcvarchar4000Observação OrçamentoObservação do Orçamento
datsegtimestamp82º ParcelaData da 2ª parcela
aprovabpchar1'E'Tipo AprovaçãoTipo AprovaçãoA - Aprovado; E - Em Aprovação; R - Reprovado
chvaprnumeric5Chave AprovaçãoChave Aprovação
aprclibpchar1'1'Aprovação ClienteAprovação Cliente1 - Aprovado; A - Em Aberto; 2 - Reprovado
codvpenumeric5Motivo Venda PerdidaCódigo Venda Perdida
msgvpevarchar4000Mensagem Ven.PerdidaMensagem Ven.Perdida
placasvarchar7Placa VeículoPlaca do Veículo
qtd_kmnumeric7Qtde KMQtde KM
separavarchar1'F'Necessita Separação?Necessita Separação?
codctrnumeric5Unidade de NegócioUnidade de Negócio
comandbpchar1'F'ComandaComandaF - Não é comanda; T - ÿ comanda; E - ÿ comanda entregue
filguibpchar3
codguibpchar6
codseqint44Cód. Sequen. NSUCódigo sequencial NSU
televebpchar1'F'Por TelevendasOrçamento por Televendas (não envia para Checkout)
codserbpchar2Série Padr. de VendaSérie Padrão de Venda
docnfpvarchar15Documento p/ NFPNúmero do documento para Nota Fiscal Paulista
dataprtimestamp8Data de aprovaçãoData de Aprovação
canprebpchar3Cancelou pre-vendaECF que cancelou a Pré-Venda
predavbpchar1'D'Pré-venda/DAVPré-venda/DAVD - DAV; P - Pré Venda
vlradinumeric12,2Valor AdiantamentoValor do Adiantamento
filadibpchar3
seqadibpchar10
nomclivarchar64Nom. Clien. não Reg.Nome do Cliente não Registrado
dddclibpchar2DDD Clien. não Reg.DDD do Cliente não Registrado
telclivarchar10Tel. Clien. não Reg.Telefone do Cliente não Registrado
numped_pafbpchar10Número do Pedido para PAF-ECF
assinavarchar256Assinatura para PAF-ECF
coduidnumeric10Identificação de Acesso
codempnumeric50Empr. da RetaguardaEmpresa da Retaguarda
codrasvarchar20Cod. RastreamentoCódigo do Rastreamento
codsvenumeric5Cód Serviço CorreiosCódigo do Serviço dos Correios81019 - 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
datenvtimestamp8Data Envio ao ClientData de Envio ao Cliente
envecovarchar1Pend Envio p/ E-CommPendente de Envio para E-commerce
przentnumeric3Núm Dias p/ entregaNúmero do Dias para Entrega
flgecobpchar1Sit. DAV E-CommerceSituação da DAV no E-CommerceP - Pagamento aprovado; F - Pagamento efetivado; T - Pagamento em análise; R - Pendente de pagamento; E - Produto Enviado
orcimpvarchar1'F'Orçamento Impresso?Orçamento Impresso?
cooorcnumeric6COO da Impressão doCOO da Impressão do DAV
codnatnumeric5Cod. Natureza Oper.Cod. Natureza Oper.
TT_IOR - Itens de Orçamento ​
ColunaTipoTamanhoDefaultBreve DescriçãoDescrição CompletaDomínio
codfilbpchar3FilialCódigo da filial
tippedbpchar1'O'Tipo Pedido/OSTipo Pedido/OSO - DAV; S - DAV-OS; P - Pré-Venda
numpedbpchar8Número Pedido/OSNúmero Pedido/OS
numitenumeric5ItemNúmero do item do pedido
flgestbpchar1'A'SituaçãoSituaçãoC - Cancelado; O - Concluído; A - Em aberto; T - Em andamento; E - Faturado/Vendido; R - Reservado
promocbpchar1'N'PromoçãoPromoçãoN - Não Promocional no Plano; E - Promocional no Plano; Q - Qualquer Plano
filmatbpchar3Filial do Produto
filresbpchar3Filial da Reserva
codmatbpchar5Código do Produto
atu_emtimestamp8Data~AtualizaçãoAtualizado em ...
orditenumeric30Ordem de ItensOrdem de Itens
codtamnumeric5Sub-DivisãoSub-Divisão do produto
vlrcusnumeric12,2Valor TotalValor Total
vlrentnumeric14,4Vlr. EntregueValor entregue
vlritenumeric14,4Vlr. Pedido/OSValor deste item
vlrpgtnumeric12,2Valor Total Sem DescValor pago ao fornecedor Valor Total Sem Desconto
qtdentnumeric12,4Qtd. EntregueQuantidade entregue
qtditenumeric12,4Qtd. Pedida/OSQuantidade de determinado item
montarvarchar1'F'MontargemMontagemI - Montagem Interna; T - Montagem na entrega; F - Sem Montagem
periodbpchar1Período da aplicaçãoPeríodo da aplicaçãoD - Diário; M - Mensal; S - Semanal
tipparbpchar1Tipo de TécnicoTipo de TécnicoF - Compra; T - Frete
codusubpchar3UsuárioCódigo do Usuário
filforbpchar3Filial do fornecedor
filivebpchar3Filial Item de Venda
filparbpchar3Filial do Tecnico
filusubpchar3Filial do Usuário
codforbpchar6Código do FornecedorCódigo do Fornecedor
codparbpchar6Código do TécnicoCódigo do Técnico
seqivebpchar10Numero Item de Venda
entregtimestamp8Data~EntregaData e hora da entrega
repetenumeric2Nº vezes a aplicarNúmero de vezes a aplicar (ex. 2 vezes ao dia)
diadurnumeric3DuraçãoDuração
numivenumeric5Item de VendaItem de Venda
phoisonumeric5ISOISO do filme
phomarnumeric5Marca do FilmeMarca do Filme
phooutnumeric5OutrosOutra classificação do filme
photipnumeric5Tipo de FilmeTipo de Filme
resultnumeric5ResultadoResultado
aplicanumeric10,4Qtd. a aplicarQuantidade a aplicar (ex.10 gotas)
preuninumeric12,2Preço UnitárioPreço Unitário
numforvarchar20Número ExternoNúmero Externo
codmulnumeric50Sub-EstoqueNome do Sub-Estoque
codcornumeric5DivisãoDivisão do Produto
codambnumeric5AmbienteAmbiente
dummybpchar1
seritenumeric5Rel. Serv./ProdutosPermite auto relacionamento entre os serviços e os produtos
filrctbpchar3Filial da ReceitaFilial da Receita
seqrctbpchar10Sequenciador ReceitaSequenciador Receita
qtdprenumeric14,4Quantidade PrescritaQuantidade Prescrita
fildoubpchar3
seqdoubpchar10
codternumeric5TerminalTerminal
fileqpbpchar3
seqeqpbpchar10
observvarchar4000ObservaçãoObservação
filoribpchar3
tiporibpchar1
numoribpchar8
iteorinumeric5
tippgtbpchar1Tipo de PagamentoTipo de PagamentoC - Contrato; F - Faturamento
datinctimestamp8Data de inclusãoData de inclusão
peripinumeric5,2% IPI ÿltima Compra% IPI ÿltima Compra
tipentbpchar1'0'Tipo de entregaTipo de entrega6 - 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
flgivobpchar1Processada SeparaçãoProcessada Separação?A - Aberto; P - Processado
filendbpchar3Filial do endereçoFilial do endereço
numendnumeric4Número do endereçoNúmero do endereço
coovenbpchar6Código COO da vendaCódigo COO da venda
flgencvarchar1'F'Encomendado?Indica se o item pode ser encomendado sem ser faturado
qtdorinumeric12,4
concluvarchar1
assinavarchar256Assinatura para PAF-ECF
coduidnumeric10Identificação de Acesso
desicmnumeric12,2Vlr isenção de ICMSValor de isenção de ICMS
desconnumeric12,2Desconto/AcréscimoDesconto/Acréscimo
ecfvenbpchar3Número Ecf VendidoNúmero Ecf Vendido
numite_pafnumeric5Número de Item paraNúmero de Item para PAF-ECF
basicmnumeric12,2Base ICMSBase ICMS
vlricmnumeric12,2Valor ICMSValor ICMS
bassubnumeric12,2Base de SubstituiçãoBase de Substituição
vlrsubnumeric12,2Valor SubstituiçãoValor de Substituição
basstcnumeric14,4Base se ST da compraBase se ST da compra
vlrstcnumeric14,4Vlr BC do ICMS RetidVlr BC do ICMS Retid
mvavennumeric14,4MVA da vendaMVA da venda
taxicmnumeric6,4Alíquota de ICMSAlíquota de ICMS
taxsubnumeric6,4Alíquota de STAlíquota de ST
redicmnumeric7,4Red. de Base de ICMSRed. de Base de ICMS
redsubnumeric7,4Red. de Base de STRed. de Base de ST
iseicmnumeric12,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.

Login checkout4g.png
Figura 4. Login do Checkout4g.

Tela Principal ​

No diagrama em anexo está um esboço do que deve ser a tela principal do sistema.

Terminaisweb TelasWeb.png
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:
Terminaisweb input.PNG
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.

Windows-8-desktop-new.jpg
Figura 6. Visual metro.

Como inspiração pode-se observar sistemas de outras empresas como:

  • Restô

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

  • Bematech Chef

Bematech chef.jpg
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 |