Cancelamento de nota

1 view
Skip to first unread message

Romário Ribeiro

unread,
Feb 25, 2026, 2:43:13 PMFeb 25
to Node Sped NFe
fiz uma api pra cancelara nota mais mando o pst ele da ok 200 mais nao cancela e nao retorna nada 

app.post('/api/nfe/cancelar', async (req, res) => {
    try {
        const { cnpj, senha_pfx, chave, justificativa, nProt, tpAmb } = req.body;

        if (!cnpj || !senha_pfx || !chave || !justificativa || !nProt || !tpAmb) {
            return res.status(400).json({ erro: "Campos obrigatórios não informados." });
        }

        if (justificativa.length < 15) {
            return res.status(400).json({ erro: "Justificativa deve ter no mínimo 15 caracteres." });
        }

        const cnpjLimpo = cnpj.replace(/\D/g, '');
        const pfxPath = path.join(certDir, `${cnpjLimpo}.pfx`);

        if (!fs.existsSync(pfxPath)) {
            return res.status(404).json({ erro: "Certificado não encontrado." });
        }

        // 🔹 Extrai cUF da chave (2 primeiros dígitos)
        const cUF = chave.substring(0, 2);
        const UF = mapaUF[cUF];

        if (!UF) {
            return res.status(400).json({ erro: "UF inválida na chave da NFe." });
        }

//console.log("BODY:", req.body);
//console.log("CHAVE:", chave);
        const tools = new Tools(
            {
                mod: '55',
                versao: '4.00',
                tpAmb: Number(tpAmb),
                cUF: Number(cUF),
                UF: UF,
                CNPJ: cnpjLimpo
            },
            {
                pfx: fs.readFileSync(pfxPath),
                senha: senha_pfx
            }
        );

const agora = new Date();

const dhEvento =
agora.getFullYear() + '-' +
String(agora.getMonth() + 1).padStart(2, '0') + '-' +
String(agora.getDate()).padStart(2, '0') + 'T' +
String(agora.getHours()).padStart(2, '0') + ':' +
String(agora.getMinutes()).padStart(2, '0') + ':' +
String(agora.getSeconds()).padStart(2, '0') +
'-03:00';

console.log("URL EVENTO:", tools.urls?.recepcaoEvento);

const retorno = await tools.sefazEvento({
chNFe: chave,
tpEvento: '110111',
nProt: nProt,
xJust: justificativa,
sequencial: 1
});

console.log("RETORNO EVENTO:", retorno);

        return res.json({
            status: "sucesso",
            retorno_sefaz: retorno
        });

    } catch (error) {
        console.error("Erro no cancelamento:", error);

        return res.status(500).json({
            erro: "Falha ao processar cancelamento",
            detalhes: error.message || error
        });
    }
});
Reply all
Reply to author
Forward
0 new messages