Situação:
Ao transmitir um cupom fiscal no Checkout, é dado a seguinte rejeição: Rejeição 865: Total dos pagamentos menor que o total da nota.
sso ocorre devido a inconsistência na gravação dos campos referentes a forma de pagamento na tabela ENCEFAT, onde o valor total das formas de pagamento fica menor que o valor da nota na tabela NFSAIDC.
Solução:
Para a solução, siga os passos abaixo. Antes disso, lembre-se de realizar um backup do banco do Checkout e do banco da API. Caso ocorra rejeição na forma de pagamento PIX, o update específico encontra-se ao final do documento.
Lembre-se de alterar o CODEMPRESA, a SÉRIE e a DATA de acordo com a correção desejada. Essas três condições foram incluídas para evitar que outros cupons sejam alterados de forma incorreta.
Caso seja necessário definir um intervalo de datas, utilize o BETWEEN, por exemplo:
BETWEEN '01.01.2026' AND '05.01.2026'.
Se precisar trabalhar com datas específicas em um único update, utilize o IN, por exemplo:
IN ('01.01.2026', '02.01.2026', '05.01.2026').
1. Preparação e Alteração de Status
O primeiro passo é marcar os cupons que precisam de correção. O script abaixo altera o status para 'R' (Reprocessar) na tabela COMPLNFCE, vinculando com a data de emissão da nota.
Este primeiro update é essencial, pois ajusta os status de todos os registros que estiverem diferentes de 'A'. Os próximos updates só serão aplicados aos cupons com status 'R', garantindo que não ocorram alterações indevidas em cupons que não têm relação.
UPDATE COMPLNFCE CP
SET CP.STATUS = 'R'
WHERE CP.CODEMPRESA = '00'
AND CP.SERIE = '21'
AND CP.STATUS <> 'A'
AND EXISTS (
SELECT 1 FROM NFSAIDC N
WHERE N.NUMNF = CP.NUMNFCE
AND N.SERIE = CP.SERIE
AND N.CODEMPRESA = CP.CODEMPRESA
AND N.DT_EMISSAO = '27.01.2026'
);
2. Correção das Parcelas (CONVENCEFAT)
Para evitar travamentos no Firebird 2.5, utilizamos o comando MERGE. Ele sincroniza o campo VALOR com o TOTALNF da nota de origem.
MERGE INTO CONVENCEFAT C
USING (
SELECT N.TOTALNF, N.CODPEDIDO, N.CODEMPRESA
FROM NFSAIDC N
INNER JOIN COMPLNFCE CP ON (N.NUMNF = CP.NUMNFCE AND N.SERIE = CP.SERIE AND N.CODEMPRESA = CP.CODEMPRESA)
WHERE CP.STATUS = 'R'
AND CP.CODEMPRESA = '00'
AND CP.SERIE = '21'
AND N.DT_EMISSAO = '27.01.2026'
) src
ON (C.CODPEDIDO = src.CODPEDIDO AND C.CODEMPRESA = src.CODEMPRESA)
WHEN MATCHED THEN
UPDATE SET C.VALOR = src.TOTALNF;
3. Correção da ENCEFAT
Este comando corrige todos os campos de valor (VLR...). A lógica identifica qual forma de pagamento foi usada e atualiza apenas o campo que contém valor maior que zero.
MERGE INTO ENCEFAT E
USING (
SELECT N.TOTALNF, N.CODPEDIDO, N.CODEMPRESA
FROM NFSAIDC N
INNER JOIN COMPLNFCE CP ON (N.NUMNF = CP.NUMNFCE AND N.SERIE = CP.SERIE AND N.CODEMPRESA = CP.CODEMPRESA)
WHERE CP.STATUS = 'R'
AND CP.CODEMPRESA = '00'
AND CP.SERIE = '21'
AND N.DT_EMISSAO = '27.01.2026'
) src
ON (E.CODPEDIDO = src.CODPEDIDO AND E.CODEMPRESA = src.CODEMPRESA)
WHEN MATCHED THEN
UPDATE SET
E.VLRCONVENIO = CASE WHEN E.VLRCONVENIO > 0 THEN src.TOTALNF ELSE E.VLRCONVENIO END,
E.VLRDINHEIRO = CASE WHEN E.VLRDINHEIRO > 0 THEN src.TOTALNF ELSE E.VLRDINHEIRO END,
E.VLRCARTAO = CASE WHEN E.VLRCARTAO > 0 THEN src.TOTALNF ELSE E.VLRCARTAO END,
E.VLRCHEQUE = CASE WHEN E.VLRCHEQUE > 0 THEN src.TOTALNF ELSE E.VLRCHEQUE END,
E.VLRTICKET = CASE WHEN E.VLRTICKET > 0 THEN src.TOTALNF ELSE E.VLRTICKET END,
E.VLRRECEBER = CASE WHEN E.VLRRECEBER > 0 THEN src.TOTALNF ELSE E.VLRRECEBER END,
E.VLRBANCO = CASE WHEN E.VLRBANCO > 0 THEN src.TOTALNF ELSE E.VLRBANCO END,
E.VLRCHPREDATADO= CASE WHEN E.VLRCHPREDATADO > 0 THEN src.TOTALNF ELSE E.VLRCHPREDATADO END,
E.VLRFINANC = CASE WHEN E.VLRFINANC > 0 THEN src.TOTALNF ELSE E.VLRFINANC END,
E.VLRCTF = CASE WHEN E.VLRCTF > 0 THEN src.TOTALNF ELSE E.VLRCTF END;
Observação Importante: Rejeição no PIX
Caso a rejeição ocorra especificamente em vendas via PIX, o valor divergente estará na tabela PAGAMENTODIGITAL. Para resolver, basta rodar o update específico abaixo após realizar o Passo 1:
MERGE INTO PAGAMENTODIGITAL PD
USING (
SELECT N.TOTALNF, N.CODPEDIDO, N.CODEMPRESA
FROM NFSAIDC N
INNER JOIN COMPLNFCE CP ON (N.NUMNF = CP.NUMNFCE AND N.SERIE = CP.SERIE AND N.CODEMPRESA = CP.CODEMPRESA)
WHERE CP.STATUS = 'R'
AND CP.CODEMPRESA = '00'
AND CP.SERIE = '21'
AND N.DT_EMISSAO = '28.01.2026'
) src
ON (PD.CODPEDIDO = src.CODPEDIDO AND PD.CODEMPRESA = src.CODEMPRESA)
WHEN MATCHED THEN
UPDATE SET PD.VALOR = src.TOTALNF;