Integração do sistema de PDV com o MFE (Módulo Fiscal Eletrônico) – Equipamento que atende à especificação nacional do SAT (CF-e-SAT), prevista no ATO COTEPE 33/2011, com especificações adicionais do Estado do Ceará, responsável pela emissão do Cupom Fiscal Eletrônico – CF-e. A função desse equipamento é substituir o equipamento SAT já utilizado no estado de São Paulo.
Comunicação:
Para realizar a comunicação do equipamento MFE com a Secretaria da Fazenda do Estado do Ceará - SEFAZ-CE, foi desenvolvido um aplicativo chamado Integrador Fiscal, que é uma plataforma de comunicação disponibilizada pela SEFAZ-CE para a integração de AC/PDV dos estabelecimentos contribuintes do ICMS do estado. O Integrador é responsável por realizar o envio das solicitações de pagamento e dados das vendas para o MFE e para a SEFAZ. As requisições são passadas para o Integrador através do repositório de entrada do Integrador, onde o MID-e Client grava um arquivo XML que é consumido pelo Integrador. Após processar as requisições o Integrador gera um XML de retorno na sua pasta de saída, que é consumido e apagado pelo MID-e Client, que devolve os dados do retorno ao PDV. A comunicação da AC/PDV com o Integrador Fiscal é realizada através do MID-e Client, cabendo ao AC/PDV enviar as requisições via API no formato JSON.
Antes de realizar a emissão do CF-e, será obrigatório enviar a SEFAZ os dados do Recebimento da venda quando este for realizado via TEF ou POS, para isso foi criado o VFP-e ou sistema de verificação de pagamentos eletrônico. O sistema VFP-e visa cruzar as informações do recebimento com a nota emitida, garantindo que todo pagamento recebido via cartão seja vinculado a um documento fiscal. Caso os dados do pagamento não sejam enviados para o verificador a emissão do CF-e não poderá ser realizada.
Instalação:
Para maiores informações, documentos, manuais e instaladores referentes ao MFE, favor acessar os seguintes links para download




Estrutura do Banco de Dados:
Para o controle dos pagamentos via TEF ou POS enviados a SEFAZ-CE, foi necessário a criação de tabelas para gravar os dados obrigatórios do pagamento. Foram adicionadas no Banco de Dados do sistema as seguintes tabelas: TAB_PAGAMENTO_MFE_ABERTO (armazena os dados dos pagamentos a cartão TEF ou POS enquanto os mesmos ainda estão abertos), TAB_PAGAMENTO_MFE (armazena os dados dos pagamentos), TAB_CADASTRO_POS (Armazena os dados dos terminais de POS, cadastrados no Sistema de Gestão). Além das tabelas adicionadas foi alterado a procedure SP_GRAVA_CUPOM_FISCAL para gravar os dados da TAB_PAGAMENTO_MFE_ABERTO para a TAB_PAGAMENTO_MFE.



CREATE TABLE TAB_PAGAMENTO_MFE_ABERTO (
NOM_HOST VARCHAR(30) NOT NULL,
NUM_SERIE_ECF VARCHAR(20) NOT NULL,
NUM_CUPOM INTEGER NOT NULL,
SEQ_PAGAMENTO INTEGER NOT NULL,
COD_RESPOSTA_MFE VARCHAR(4),
VAL_RESPOSTA_MFE VARCHAR(32),
ID_REFERENCIA_ORIGINAL INTEGER,
ID_REFERENCIA_CLIENT INTEGER,
ID_PAGAMENTO INTEGER,
DES_MENSAGEM_MFE VARCHAR(255),
DES_STATUS_PAGAMENTO VARCHAR(100),
COD_AUTORIZACAO_MFE VARCHAR(20),
NUM_BIN_CARTAO VARCHAR(8),
NOM_DONO_CARTAO VARCHAR(120),
DTA_EXPIRACAO VARCHAR(5),
DES_INSTITUICAO_FINANCEIRA VARCHAR(100), NUM_PARCELAS VARCHAR(100), NUM_ULTIMOS_QUATRO_DIGITOS VARCHAR(6),
COD_PAGAMENTO VARCHAR(20),
VAL_PARAMETRO VARCHAR(20),
ID_FILA INTEGER,
DES_TIPO VARCHAR(10),
DES_RETORNO VARCHAR(100),
NUM_NSU VARCHAR(10),
NUM_APROVACAO VARCHAR(20),
DES_BANDEIRA VARCHAR(100),
DES_ADQUIRENTE VARCHAR(100),
IND_TIPO_PAGTO VARCHAR(15),
COD_POS INTEGER
);
ALTER TABLE TAB_PAGAMENTO_MFE_ABERTO ADD CONSTRAINT PK_TAB_PAGAMENTO_MFE_ABERTO PRIMARY KEY (NOM_HOST, NUM_SERIE_ECF, NUM_CUPOM, SEQ_PAGAMENTO);


DDL TAB_PAGAMENTO_MFE_ABERTO


CREATE TABLE TAB_PAGAMENTO_MFE (
SEQ_CUPOM INTEGER NOT NULL,
SEQ_PAGAMENTO INTEGER NOT NULL,
COD_RESPOSTA_MFE VARCHAR(4),
VAL_RESPOSTA_MFE VARCHAR(32),
ID_REFERENCIA_ORIGINAL INTEGER,
ID_REFERENCIA_CLIENT INTEGER,
ID_PAGAMENTO INTEGER,
DES_MENSAGEM_MFE VARCHAR(255),
DES_STATUS_PAGAMENTO VARCHAR(100),
COD_AUTORIZACAO_MFE VARCHAR(20),
NUM_BIN_CARTAO VARCHAR(8),
NOM_DONO_CARTAO VARCHAR(120),
DTA_EXPIRACAO VARCHAR(5),
DES_INSTITUICAO_FINANCEIRA VARCHAR(100), NUM_PARCELAS VARCHAR(100), NUM_ULTIMOS_QUATRO_DIGITOS VARCHAR(6),
COD_PAGAMENTO VARCHAR(20),
VAL_PARAMETRO VARCHAR(20),
ID_FILA INTEGER,
DES_TIPO VARCHAR(10),
DES_RETORNO VARCHAR(100),
NUM_NSU VARCHAR(10),
NUM_APROVACAO VARCHAR(20),
DES_BANDEIRA VARCHAR(100),
DES_ADQUIRENTE VARCHAR(100),
IND_TIPO_PAGTO VARCHAR(15),
COD_POS INTEGER
);
ALTER TABLE TAB_PAGAMENTO_MFE ADD CONSTRAINT PK_TAB_PAGAMENTO_MFE PRIMARY KEY (SEQ_CUPOM, SEQ_PAGAMENTO);


DDL TAB_PAGAMENTO_MFE


CREATE TABLE TAB_CADASTRO_POS (
COD_POS INTEGER NOT NULL,
DES_POS VARCHAR(100),
NUM_SERIE_POS VARCHAR(50),
NOM_HOST VARCHAR(30),
NUM_CNPJ_ADQUIRENTE VARCHAR(14), DES_GUID VARCHAR(32), COD_ESTABELECIMENTO VARCHAR(5)
);
ALTER TABLE TAB_CADASTRO_POS ADD CONSTRAINT UNQ1_TAB_CADASTRO_POS UNIQUE (NUM_SERIE_POS); ALTER TABLE TAB_CADASTRO_POS ADD CONSTRAINT PK_TAB_CADASTRO_POS PRIMARY KEY (COD_POS);


DDL TAB_CADASTRO_POS


CREATE OR ALTER PROCEDURE SP_GRAVA_CUPOM_FISCAL ( SEQTURNO INTEGER,
NOMHOST VARCHAR(30),
NUMSERIEECF VARCHAR(20),
NUMCUPOM INTEGER)
AS
DECLARE VARIABLE SEQHAVER INTEGER;
DECLARE VARIABLE SEQCUPOM INTEGER;
DECLARE VARIABLE DOTZ INTEGER;
DECLARE VARIABLE VALDESCUPOM NUMERIC(9,2); DECLARE VARIABLE VALACRCUPOM NUMERIC(9,2); DECLARE VARIABLE VALTOTALCUPOM NUMERIC(9,2); DECLARE VARIABLE VALTOTALITENS NUMERIC(9,2); DECLARE VARIABLE VALTOTALPAGTOS NUMERIC(9,2); BEGIN
/ CONSISTE VALOR TOTAL DO CUPOM, DOS ITENS E PAGAMENTOS*/*
SELECT VAL_DESCONTO, VAL_ACRESCIMO, VAL_TOTAL_CUPOM FROM TAB_CUPOM_FISCAL_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM
INTO :VALDESCUPOM, :VALACRCUPOM, :VALTOTALCUPOM;
SELECT SUM(VAL_TOTAL_ITEM) - :VALDESCUPOM + :VALACRCUPOM FROM TAB_ITEM_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM
AND IND_CANCELADO = 'N'
INTO :VALTOTALITENS;
SELECT COALESCE(SUM(VAL_PAGAMENTO), 0) FROM TAB_PAGAMENTO_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM
INTO :VALTOTALPAGTOS;
IF (((UDF_TRUNCDEC(VALTOTALCUPOM, 2) <> UDF_TRUNCDEC(VALTOTALITENS, 2)) AND (UDF_TRUNCDEC(VALTOTALCUPOM, 2) <> 0))
OR
(UDF_TRUNCDEC(VALTOTALPAGTOS, 2) < UDF_TRUNCDEC(VALTOTALCUPOM, 2))) THEN
*EXCEPTION E0011 ' - TOTAL CUPOM: '

CAST(:VALTOTALCUPOM AS VARCHAR(10))

' TOTAL ITENS: '

CAST(:VALTOTALITENS AS VARCHAR(10))


  • *' TOTAL PAGTOS: '

CAST(:VALTOTALPAGTOS AS VARCHAR(10));*
SEQCUPOM = GEN_ID(GEN_CUPOM_FISCAL, 1);
*/GRAVA O SEQCUPOM NA TAB_CHEQUE_TROCO/*
UPDATE TAB_CHEQUE_TROCO
SET SEQ_CUPOM = :SEQCUPOM
WHERE SEQ_TURNO = :SEQTURNO
AND NUM_CUPOM = :NUMCUPOM;
*/TRANSFERE TODOS OS CHEQUES UTILIZADOS NO CUPOM PARA A TAB_CHEQUE_TROCO_CUPOM/ INSERT INTO TAB_CHEQUE_TROCO_CUPOM*




SELECT SEQ_CHEQUE, SEQ_CUPOM, DTA_EMISSAO, NUM_CHEQUE, VAL_CHEQUE
FROM TAB_CHEQUE_TROCO
WHERE SEQ_CUPOM = :SEQCUPOM;
INSERT INTO TAB_CUPOM_FISCAL
(SEQ_CUPOM, SEQ_TURNO, NUM_SERIE_ECF,
NUM_CUPOM, DTA_CUPOM, COD_CLIENTE, COD_VENDEDOR,
VAL_TOTAL_ITEM,
VAL_DESCONTO,
VAL_ACRESCIMO,
VAL_TOTAL_CUPOM,
VAL_TROCO, IND_CANCELADO,
IND_IMPRESSAO_AUTOMATICA,
NUM_PLACA, DES_VEICULO, NUM_ODOMETRO,
QTD_QUILOMETRAGEM,
HRA_INICIO, HRA_FIM,
IND_VENDA_SINCRONIZADA,
IND_CANCELAMENTO_SINCRONIZADO,
DES_OBSERVACAO,
NOM_CLIENTE, NUM_CNPJ_CPF,
NUM_IE_RG, DES_LOGRADOURO,
NUM_REQUISICAO,
DES_FROTA, NUM_CARTAO, NOM_MOTORISTA,
NOM_OPERADOR,
DES_CAMPO1, DES_CAMPO2, DES_CAMPO3, DES_CAMPO4, DES_CAMPO5, SITUACAO_VEICULO,
NUM_REDZ, NUM_DIST_PERC_SEMANA,
NUM_CCF,
HRA_INICIO_COMPLETO,
SEQ_PRE_VENDA_MOBILE)
SELECT :SEQCUPOM,
:SEQTURNO, NUM_SERIE_ECF,
NUM_CUPOM, DTA_CUPOM, COD_CLIENTE, COD_VENDEDOR,
VAL_TOTAL_ITEM,
VAL_DESCONTO,
VAL_ACRESCIMO,
VAL_TOTAL_CUPOM,
VAL_TROCO, 'N',
IND_IMPRESSAO_AUTOMATICA,
NUM_PLACA, DES_VEICULO, NUM_ODOMETRO,
QTD_QUILOMETRAGEM,
HRA_INICIO, HRA_FIM,
'N',
'N',
DES_OBSERVACAO,
NOM_CLIENTE, NUM_CNPJ_CPF,
NUM_IE_RG, DES_LOGRADOURO,
NUM_REQUISICAO,




DES_FROTA, NUM_CARTAO, NOM_MOTORISTA,
NOM_OPERADOR, DES_CAMPO1, DES_CAMPO2, DES_CAMPO3, DES_CAMPO4, DES_CAMPO5, SITUACAO_VEICULO,
NUM_REDZ,
NUM_DIST_PERC_SEMANA,
NUM_CCF,
HRA_INICIO_COMPLETO,
SEQ_PRE_VENDA_MOBILE
FROM TAB_CUPOM_FISCAL_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
SELECT SUM(QTD_PONTOS) AS QTD_PONTOS FROM TAB_ITEM_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM
AND IND_CANCELADO = 'N'
INTO :DOTZ;
IF (:DOTZ > 0) THEN BEGIN
INSERT INTO TAB_CUPOM_FISCAL_DOTZ (
SEQ_CUPOM,
NUM_CPF_CNPJ,
NUM_CARTAO_DOTZ, DES_EMAIL)
SELECT
:SEQCUPOM,
NUM_CPF_CNPJ_DOTZ, NUM_CARTAO_DOTZ, DES_EMAIL
FROM TAB_CUPOM_FISCAL_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
END
DELETE FROM TAB_CUPOM_FISCAL_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
INSERT INTO TAB_ITEM_CUPOM
(SEQ_CUPOM,
SEQ_ITEM,
COD_BARRA,
DES_ITEM,
QTD_ITEM,
VAL_UNITARIO, VAL_BRUTO_ITEM, VAL_DESCONTO, VAL_ACRESCIMO, VAL_TOTAL_ITEM, VAL_DESCONTO_RATEADO,
VAL_ACRESCIMO_RATEADO,
COD_REGISTRADOR_FISCAL,
IND_CANCELADO, COD_BICO,
NUM_ENCERRANTE, DTA_ABASTECIMENTO,
HRA_ABASTECIMENTO,
QTD_PONTO_OBTIDO,
SEQ_ABASTECIMENTO,
COD_VENDEDOR, SEQ_PEDIDO,
NOM_OPERADOR, SEQ_ITEM_MIX, COD_BARRA_MIX, IND_ARREDONDA_TRUNCAMENTO,
IND_PRODUCAO_PROPRIA_TERCEIRO,




QTD_CASAS_QUANTIDADE, QTD_CASAS_VAL_UNITARIO, SEQ_MOVIMENTO_ENCERRANTE, VAL_DESCONTO_PROMOCAO, SEQ_NCM,
VAL_ALIQUOTA_IMPOSTO, VAL_IMPOSTO,
PER_ALIQUOTA_FEDERAL, VAL_IMPOSTO_FEDERAL, PER_ALIQUOTA_MUNICIPAL, VAL_IMPOSTO_MUNICIPAL, DES_ORIGEM,
VAL_DESCONTO_AMBEV, QTD_APROVADA_AMBEV, COD_TRIBUTACAO,
PER_ALIQUOTA,
IND_TRUNCA_ARREDONDA
)
SELECT :SEQCUPOM,
SEQ_ITEM,
COD_BARRA,
DES_ITEM,
QTD_ITEM,
VAL_UNITARIO,
VAL_BRUTO_ITEM,
VAL_DESCONTO,
VAL_ACRESCIMO,
VAL_TOTAL_ITEM,
VAL_DESCONTO_RATEADO, VAL_ACRESCIMO_RATEADO, COD_REGISTRADOR_FISCAL, IND_CANCELADO,
COD_BICO,
NUM_ENCERRANTE,
DTA_ABASTECIMENTO, HRA_ABASTECIMENTO, QTD_PONTO_OBTIDO,
SEQ_ABASTECIMENTO, COD_VENDEDOR,
SEQ_PEDIDO,
NOM_OPERADOR,
SEQ_ITEM_MIX,
COD_BARRA_MIX,
IND_ARREDONDA_TRUNCAMENTO, IND_PRODUCAO_PROPRIA_TERCEIRO,
QTD_CASAS_QUANTIDADE, QTD_CASAS_VAL_UNITARIO, SEQ_MOVIMENTO_ENCERRANTE, VAL_DESCONTO_PROMOCAO, SEQ_NCM,
VAL_ALIQUOTA_IMPOSTO, VAL_IMPOSTO,
PER_ALIQUOTA_FEDERAL, VAL_IMPOSTO_FEDERAL, PER_ALIQUOTA_MUNICIPAL, VAL_IMPOSTO_MUNICIPAL, DES_ORIGEM,
VAL_DESCONTO_AMBEV, QTD_APROVADA_AMBEV, COD_TRIBUTACAO,
PER_ALIQUOTA,
IND_TRUNCA_ARREDONDA
FROM TAB_ITEM_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
IF (:DOTZ > 0) THEN BEGIN
INSERT INTO TAB_ITEM_CUPOM_FISCAL_DOTZ (
SEQ_CUPOM,
SEQ_ITEM,
COD_PROMOCAO_DOTZ, QTD_PONTOS)
SELECT
:SEQCUPOM,
SEQ_ITEM,
COD_PROMOCAO_DOTZ, QTD_PONTOS
FROM TAB_ITEM_CUPOM_ABERTO




WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM;
END
DELETE FROM TAB_ITEM_CUPOM_ABERTO WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
EXECUTE PROCEDURE SP_ATUALIZA_DESCONTO_ACRESCIMO(0, 0, 0, :NUMSERIEECF, :NUMCUPOM, SEQCUPOM);
INSERT INTO TAB_PAGAMENTO_CUPOM
(SEQ_CUPOM,
SEQ_PAGAMENTO, COD_FORMA_PAGTO, VAL_PAGAMENTO, COD_BANCO,
NUM_AGENCIA, NUM_CONTA,
NUM_CHEQUE,
VAL_CHEQUE,
DTA_CHEQUE,
NUM_CNPJ_CPF, DTA_PREDATADO, NUM_TELEFONE, NOM_REDE_TEF, NOM_ADMINISTRADORA_TEF,
NUM_TRANSACAO_TEF,
DTA_TRANSACAO_TEF,
HRA_TRANSACAO_TEF,
IND_TIPO_TRANSACAO_TEF,
QTD_PARCELAS_TEF, NUM_CARTA_FRETE, NUM_ADIANTAMENTO_FRETE,
SEQ_HAVER,
NUM_CMC7,
VAL_TROCO_TEF, COD_PESSOA_SACADO,
NUM_AUTORIZACAO_POS,
NUM_GNF,
DES_FORMA_PAGTO_ECF,
NSU_SEM_PARAR, NOM_REDE_TEF_ORIGINAL,
IND_TRANSACAO_TEF_CANCELADA,
VAL_DESCONTO_TEF, COD_TIPO_DOCUMENTO_PAF,
COD_AUTORIZACAO_TRASACAO_TEF,
NSU_PIT_STOP, COD_AUTORIZACAO_ACELERA,
VAL_SALDO_CLIENTE_FIDEL,
SEQ_CARTA_FRETE, NUM_CNPJ_CREDENCIADORA,
COD_BANDEIRA_CREDENCIADORA)
SELECT :SEQCUPOM,
SEQ_PAGAMENTO, COD_FORMA_PAGTO, VAL_PAGAMENTO, COD_BANCO,
NUM_AGENCIA, NUM_CONTA,
NUM_CHEQUE,
VAL_CHEQUE,
DTA_CHEQUE,
NUM_CNPJ_CPF, DTA_PREDATADO, NUM_TELEFONE, NOM_REDE_TEF, NOM_ADMINISTRADORA_TEF,
NUM_TRANSACAO_TEF,
DTA_TRANSACAO_TEF,
HRA_TRANSACAO_TEF,
IND_TIPO_TRANSACAO_TEF,
QTD_PARCELAS_TEF, NUM_CARTA_FRETE, NUM_ADIANTAMENTO_FRETE,
SEQ_HAVER,
NUM_CMC7,
VAL_TROCO_TEF, COD_PESSOA_SACADO,




NUM_AUTORIZACAO_POS,
NUM_GNF,
DES_FORMA_PAGTO_ECF,
NSU_SEM_PARAR,
NOM_REDE_TEF_ORIGINAL, IND_TRANSACAO_TEF_CANCELADA, VAL_DESCONTO_TEF,
COD_TIPO_DOCUMENTO_PAF, COD_AUTORIZACAO_TRASACAO_TEF, NSU_PIT_STOP,
COD_AUTORIZACAO_ACELERA, VAL_SALDO_CLIENTE_FIDEL, SEQ_CARTA_FRETE,
NUM_CNPJ_CREDENCIADORA, COD_BANDEIRA_CREDENCIADORA
FROM TAB_PAGAMENTO_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
DELETE FROM TAB_PAGAMENTO_CUPOM_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
INSERT INTO TAB_PAGTO_CUPOM_CF (
SEQ_CUPOM,
SEQ_PAGAMENTO, SEQ_PAGAMENTO_CF, COD_FORMA_PAGTO, VAL_PAGAMENTO, NUM_ADIANTAMENTO_FRETE,
NUM_CARTA_FRETE, COD_PESSOA_SACADO, SEQ_CARTA_FRETE, DES_FORMA_PAGTO_ECF)
SELECT :SEQCUPOM, SEQ_PAGAMENTO, SEQ_PAGAMENTO_CF, COD_FORMA_PAGTO, VAL_PAGAMENTO, NUM_ADIANTAMENTO_FRETE,
NUM_CARTA_FRETE, COD_PESSOA_SACADO, SEQ_CARTA_FRETE, DES_FORMA_PAGTO_ECF
FROM TAB_PAGTO_CUPOM_CF_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
DELETE FROM TAB_PAGTO_CUPOM_CF_ABERTO WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM;
INSERT INTO TAB_PAGAMENTO_MFE (
SEQ_CUPOM,
SEQ_PAGAMENTO, COD_RESPOSTA_MFE, VAL_RESPOSTA_MFE, ID_REFERENCIA_ORIGINAL,
ID_REFERENCIA_CLIENT,
ID_PAGAMENTO, DES_MENSAGEM_MFE, DES_STATUS_PAGAMENTO,
COD_AUTORIZACAO_MFE,
NUM_BIN_CARTAO, NOM_DONO_CARTAO, DTA_EXPIRACAO, DES_INSTITUICAO_FINANCEIRA,
NUM_PARCELAS, NUM_ULTIMOS_QUATRO_DIGITOS,
COD_PAGAMENTO, VAL_PARAMETRO, ID_FILA,
DES_TIPO,
DES_RETORNO, NUM_NSU,
NUM_APROVACAO,




DES_BANDEIRA, DES_ADQUIRENTE, IND_TIPO_PAGTO, COD_POS)
SELECT
:SEQCUPOM,
SEQ_PAGAMENTO, COD_RESPOSTA_MFE, VAL_RESPOSTA_MFE, ID_REFERENCIA_ORIGINAL,
ID_REFERENCIA_CLIENT,
ID_PAGAMENTO, DES_MENSAGEM_MFE, DES_STATUS_PAGAMENTO,
COD_AUTORIZACAO_MFE,
NUM_BIN_CARTAO, NOM_DONO_CARTAO, DTA_EXPIRACAO, DES_INSTITUICAO_FINANCEIRA,
NUM_PARCELAS, NUM_ULTIMOS_QUATRO_DIGITOS,
COD_PAGAMENTO, VAL_PARAMETRO, ID_FILA,
DES_TIPO,
DES_RETORNO,
NUM_NSU,
NUM_APROVACAO, DES_BANDEIRA, DES_ADQUIRENTE, IND_TIPO_PAGTO, COD_POS
FROM TAB_PAGAMENTO_MFE_ABERTO
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
DELETE FROM TAB_PAGAMENTO_MFE_ABERTO WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM;
UPDATE TAB_PAGTO_ADIANTAMENTO_PDV SET SEQ_CUPOM = :SEQCUPOM
WHERE NOM_HOST = :NOMHOST
AND NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM
AND ((SEQ_CUPOM IS NULL) OR (SEQ_CUPOM = 0)) ;
INSERT INTO TAB_DESCONTO_FIDELIDADE (
SEQ_DESCONTO,
SEQ_CUPOM,
SEQ_ITEM,
NUM_CARTAO,
COD_FORMA_PAGTO, VAL_DESCONTO)
SELECT SEQ_DESCONTO,
:SEQCUPOM,
SEQ_ITEM,
NUM_CARTAO,
COD_FORMA_PAGTO,
VAL_DESCONTO
FROM TAB_DESCONTO_FIDELIDADE_ABERTO WHERE NUM_SERIE_ECF = :NUMSERIEECF AND NUM_CUPOM = :NUMCUPOM;
DELETE FROM TAB_DESCONTO_FIDELIDADE_ABERTO WHERE NUM_SERIE_ECF = :NUMSERIEECF
AND NUM_CUPOM = :NUMCUPOM;
SELECT A.SEQ_HAVER
FROM TAB_VALE_HAVER A
WHERE A.NUM_CUPOM = :NUMCUPOM AND A.SEQ_TURNO = :SEQTURNO INTO :SEQHAVER;
IF (:SEQHAVER > 0) THEN
BEGIN
UPDATE TAB_VALE_HAVER SET SEQ_CUPOM = :SEQCUPOM WHERE SEQ_HAVER = :SEQHAVER; END



END

DDL SP_GRAVA_CUPOM_FISCAL
Configuração:
Para utilização do MFE será necessário configurar no Configurador dos sistemas os seguintes parâmetros na aba MIDe:


  • Produtos MIDe (parâmetro 16001) >> opção "4 – MFE";



Figura 1: Produtos MIDe (parâmetro 16001)


  • Chave Acesso Validador (parâmetro 16018) >> copiar e colar a Chave Acesso Validador disponível nas configurações do MID-e Client >> Emissores.

de 19




Figura 3: Chave Acesso Validador



Chave Acesso Validador (parâmetro 16018)
Utilização do sistema:
O fluxo de venda não sofreu alterações devido as implementações da integração do sistema com o MFE, sendo assim, a venda de produtos e/ou serviços continuam da mesma forma. Os efeitos das implementações ocorrem no fechamento da venda, no fluxo de pagamentos da conta.
Na escolha da forma de pagamento, independente de qual seja o tipo da forma de pagamento, será realizada uma requisição de consulta do status do Integrador, caso esteja inativo ou sem comunicação, o MID-e Client retornará a seguinte mensagem: "MC009 – Não foi possível se comunicar com o integrador", devendo o PDV interromper o processo até que a comunicação com o Integrador se restabeleça. Estando o Integrador ativo o processo segue o fluxo normalmente.
Observação: Somente pagamentos a cartão (TEF ou POS) devem realizar o envio do pagamento, as outras formas de pagamento deverão ser enviadas juntamente com os dados de encerramento da venda.
O PDV deverá informar ao Integrador os dados de cada pagamento realizado via CARTÃO, esse processo deverá ser realizado antes do operador realizar a transação, utilizando a API "IniciarVenda". Caso a forma de pagamento escolhida seja do tipo cartão ('CC', 'CD', 'VO' ou 'PL'), os dados dos pagamentos serão enviados ao Integrador, que irá registrar o pagamento e devolverá o id do pagamento (IdPagamento), que vinculará o CF-e ao pagamento realizado. Na requisição da API "IniciarVenda", caso o Integrador esteja inativo ou sem comunicação, o


MID-e Client retornará a seguinte mensagem: "MC009 – Não foi possível se comunicar com o integrador", devendo o PDV interromper o processo até que a comunicação com o Integrador se restabeleça.

A próxima etapa será a realização da transação TEF ou POS, devendo o PDV seguir as seguintes regras:
• Pagamento via POS: Será necessário enviar os dados do pagamento POS para validação através da API "ValidarPagamento", para que o MID-e Client possa validar os dados entre o pagamento registrado junto a SEFAZ e os dados de pagamento registrados pelo PDV. Caso o Integrador esteja off-line por falta de internet ou problema de comunicação com a SEFAZ, será retornado o erro "MC010 – O integrador não conseguiu se comunicar com a SEFAZ", cabendo ao PDV apresentar uma tela para que as informações do pagamento sejam inseridas manualmente, permitindo assim o PDV realizar o encerramento da venda.



Mensagem para realizar a transação POS



Mensagem quando retorno MC010 – O Integrador não conseguiu se comunicar com a SEFAZ



Tela para que as informações do pagamento sejam inseridas manualmente
• Pagamentos TEF:
Não é necessário chamar a API "ValidarPagamento", nessa modalidade os dados do pagamento serão enviados juntamente com os dados de encerramento da venda.
Após a realização dos pagamentos, o sistema deverá enviar o encerramento da venda, utilizando o mesmo método para operações com SAT em São Paulo, incluindo apenas as informações dos pagamentos realizados via TEF ou POS.
O MID-e cliente irá vincular os dados dos pagamentos a venda realizada e enviará essa venda ao equipamento MFE para autorização da venda, retornando os dados do CF-e autorizado ou o erro apresentado em caso de rejeição ou falha no equipamento.
Observação: Caso ocorra o retorno MC010 durante alguma etapa do processo de venda, o PDV deverá obter o IDPagamento, IDFila e retorno da resposta fiscal através da API "/Integrador/GetRetornoConciliacaoByChaveNota?". Essas informações deverão ser gravadas no banco do PDV, conforme as exigências da SEFAZ CE. Essa conciliação é realizada automaticamente a cada 10 minutos.
Exemplos Json Web API:
{"ChaveAcessoValidador":"25CFE38D-3B92-46C0-91CA CFF751A82D3D","ChaveRequisicao":"54517628-0116-0102-0580- 019100000000","Estabelecimento":10,"SerialPos":"999999999104","Cnpj":"54517628001160"," IcmsBase":5.9,"ValorTotalVenda":5.9,"HabilitarMultiplosPagamentos":"true","HabilitarCon