Prezado Daniel,
Você tem razão, a documentação sobre o assunto múltiplos cartões é bem superficial e a gente acaba tendo que cruzar a especificação com o roteiro de testes pra ter uma idéia do que fazer e mesmo assim não é suficiente.
O problema nem é tanto o pagamento com N cartões, mas o tratamento das exceções que podem ocorrer durante o pagamento e a forma como as mesmas devem ser tratadas. Então, vamos supor o seguinte pagamento com múltiplos cartões:
Forma1: Cartão ->R$ 1,00
Forma2: Cartão -> R$ 2,00
Forma3: Cartão -> R$ 3,00
Forma4: Cartão -> R$ 4,00
Os comandos do GP devem ser os seguintes:
Forma1: ATV – CRT – ATV – CNF (não imprimir cupom TEF)
Forma2: ATV – CRT – ATV – CNF (não imprimir cupom TEF)
Forma3: ATV – CRT – ATV – CNF (não imprimir cupom TEF)
Forma4: ATV – CRT – imprimir todos os 4 cupons TEF e depois que imprimir todos os cupons TEF –> ATV – CNF.
Considerações:
· O GP não permite que uma compra com cartão seja feita antes que a compra anterior tenha sido confirmada, então, tem que fazer a confirmação da transação mesmo sem imprimir o cupom TEF, o que faz necessário saber que a compra atual é uma compra com múltiplos cartões, porque se for com apenas um cartão, a confirmação só deve ser feita depois que o cupom TEF for impresso;
· Como a impressão dos cupons TEF só ocorre após a aprovação do último cartão, é necessário que o valor de cada cartão (campo 003-000) e seu cupom TEF (029-XXX) sejam buferizados porque cada cupom TEF deve ser impresso num cupom não fiscal vinculado (CNFV) separado. Como os parâmetros do CNFV são descrição da forma de pagamento (ou o código da forma no ACBrECF), valor da forma de pagamento e o texto a ser impresso (nesse caso, o cupom TEF) pelo menos os dois parâmetros acima devem ser buferizados, visto que a descrição da forma de pagamento Cartão varia de aplicação para aplicação;
· O último cartão só é confirmado depois que todos os cupons TEF de todos os cartões terminarem de ser impressos, ou seja, de algum jeito, tem que se saber qual é o último cartão que está sendo usado para fechar as formas de pagamento do cupom fiscal porque esse não pode ser confirmado.
Exceções:
· Durante a impressão dos N cupons TEF, ou seja, depois que todos os cartões foram aprovados, caso ocorra uma queda de energia – reinicialização do computador – derrubar a aplicação com CTRL + ALT + DEL, quando a aplicação voltar, o sistema ou a tela de frente de caixa não podem abrir enquanto a seguinte sequencia de comandos não for realizada:
Forma4: ATV – NCN – mensagem que a última transação foi cancelada;
Forma3: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Forma2: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Forma1: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Um de nossos clientes informou que agora as homologadoras estão exigindo que a ordem dos comandos acima seja trocada, então, a ordem acima é passível de alteração;
· Caso, por exemplo, a Forma4 tenha sido negada pelo cartão não ter saldo, deve ser feita a seguinte pergunta ao operador do PDV:
“Gostaria de continuar a transação com outra(s) forma(s) de pagamento?”
- Se sim, entendemos que a aplicação deve ter guardado todos os valores e cupons TEF aprovados para que outras formas de pagamento sejam usadas para encerrar o cupom fiscal, visto que um componente de TEF não é um gerenciador de formas de pagamento. Quem deve fazer isso é a aplicação, em nosso entendimento, porém, o componente deve disponibilizar meios para que a aplicação o faça.
- Se não, todos as transações anteriores devem ser canceladas com os comandos:
Forma3: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Forma2: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Forma1: ATV – CNC (imprimir relatório gerencial de cancelamento de transação) – ATV – CNF;
Esses são os tratamentos básicos para um pagamento com múltiplos cartões, sendo que o EasyTEF já resolveu a problemática descrita acima. Esperamos que este texto ajude não apenas o projeto ACBr, que é muito bom, mas também qualquer desenvolvedor que queira se aventurar em sua própria implementação de TEF.
Att.
Robson Braga
EasyTEF Team
P.S. Conheça o EasyTEFVespague, componente para TEF dedicado que roda tanto em Windows como em Linux, no Lazarus!
http://www.easytef.c...go_vespague.pdf
http://www.easytef.c...pague_linux.png
http://www.easytef.c...gue_windows.png
Daniel Simões, em 29 November 2009 - 02:16 PM, disse:
Olá pessoal,
Depois de analisar o ACBrTEF, e concluir que seria muito difícil implementar suporte a múltiplos cartões nele, decidi criar em um novo componente para TEF... que por enquanto estou chamando-o de ACBrTEFD...
O processo de desenvolvimento ainda está no inicio... e por isso, estou comitando as alterações na pasta "branches" do SVN do ACBr... o repositório pode ser acessando em:
https://acbr.svn.sou...nches/ACBrTEFD/
( Para baixar pelo SVN (pela primeira vez) faça um novo Checkout )
Como estou usando Lazarus como ferramenta principal, por enquanto apenas fiz um Package e Demo para Lazarus... mas que podem ser facilmente convertidos para Delphi (agradeço se algum colaborador o fizer e me enviar...)
O diretório ACBrTEFD deve ser copiado dentro da pasta do ACBr... no mesmo nível dos diretórios ACBrNFePCN e ACBrSpedFiscal
Quem quiser testar no Lazarus, recomendo baixar a versão de Snapshot do Lazarus
http://www.hu.freepascal.org/lazarus/ (para Windows use: Lazarus + fpc 2.3.1 win32 )
Será necessária a instalação do Package ACBr_LCL.lpk, e depois o ACBrTEFD.lpk