NFC-e

Rejeição 402 e 878 na NFC-e da SEFAZ-MT: Encoding UTF-8 vs ASCII 7-Bit e URL HTTP do QR Code / Consulta Chave

Descubra por que o autorizador de NFC-e da SEFAZ-MT (MT_A2_NFCe-4.100) rejeita XML com acentos sob cStat 402 (encoding diferente de UTF-8) e cStat 878 na URL do QR Code/urlChave, e como resolver via API REST.

Fábio Magalhães CostaAtualizado em 11/11/2026
Arquitetura de transliteração ASCII 7-bit e resolução de URLs da SEFAZ-MT para eliminar as Rejeições 402 e 878 na NFC-e e em eventos fiscais

Arquitetura de transliteração ASCII 7-bit e resolução de URLs da SEFAZ-MT para eliminar as Rejeições 402 e 878 na NFC-e e em eventos fiscais

Qualquer engenheiro que já colocou um sistema de PDV ou varejo para rodar em Mato Grosso (UF MT, código IBGE 51) conhece a sensação de olhar para um XML 100% codificado em UTF-8, assinado corretamente com Certificado A1, e receber de volta da SEFAZ-MT uma resposta desconcertante: cStat 402 — Rejeição: XML utiliza codificação diferente de UTF-8.

O mais intrigante é que o mesmo ERP emite NF-e (Modelo 55) para o mesmo CNPJ mato-grossense com acentos ("PRODUÇÃO", "COMÉRCIO", "SÃO JOSÉ") e a nota é autorizada em menos de um segundo. Porém, ao transmitir uma NFC-e (Modelo 65) ou um Evento (RecepcaoEvento4, como cancelamento ou Carta de Correção) contendo um único caractere acentuado, o autorizador de Mato Grosso derruba a requisição com cStat 402. E, logo depois que você remove os acentos da NFC-e em produção, surge uma segunda armadilha exclusiva da UF: a cStat 878 — Rejeição: Endereço do site da UF da Consulta por chave de acesso diverge do previsto por causa de um único 's' no protocolo https:// versus http://.

Aqui na Notaas, nós dissecamos o comportamento interno dos servidores da SEFAZ-MT nas releases v0.56.135, v0.56.142 e v0.56.143. Neste artigo, vou explicar a causa raiz exata nos autorizadores MT_A2_NFCe-4.100 e RecepcaoEvento4, por que a regra ZX03-20 exige http:// em produção para a NFC-e de Mato Grosso, e como nossa engine resolve ambos os problemas automaticamente sem que você precise sanitizar strings no seu código.

Na SEFAZ-MT, o problema do cStat 402 na NFC-e não é o seu header HTTP nem o prólogo do XML: é uma re-serialização interna em ISO-8859-1 dentro do próprio servidor autorizador MT_A2_NFCe-4.100.


Por que a SEFAZ-MT retorna cStat 402 na NFC-e (v0.56.142) e nos Eventos (v0.56.135), mas não na NF-e Modelo 55?

Quando investigamos os pacotes SOAP enviados para Mato Grosso, comparamos o comportamento dos três webservices estaduais:

  1. Emissão de NF-e Modelo 55 (/nfews/v2/services/NfeAutorizacao4 — servidor MT_NFE-4.000):
    • Preserva o stream de bytes UTF-8 original durante toda a validação. Textos com caracteres multibyte (0xC3 0x87 para Ç, 0xC3 0x83 para Ã) passam normalmente.
  2. Emissão de NFC-e Modelo 65 (/nfcews/services/NfeAutorizacao4 — servidor MT_A2_NFCe-4.100 — corrigido na v0.56.142):
    • Ao desempacotar o nó <NFe> de dentro do lote <enviNFe> no pipeline SOAP, o servidor MT_A2_NFCe-4.100 da SEFAZ-MT re-serializa internamente o XML em ISO-8859-1 (Latin-1) antes de invocar o validador de encoding UTF-8.
    • Resultado: qualquer caractere fora da tabela ASCII de 7 bits (bytes > 0x7F, como Ç, Ã, É, Õ, º) vira um byte isolado inválido em UTF-8 durante a etapa interna da SEFAZ-MT, disparando falsamente o cStat 402 — Rejeição: XML utiliza codificação diferente de UTF-8.
    • Pior: mesmo usando entidades numéricas XML (&#xE7;), o parser DOM do autorizador expande a entidade antes da re-serialização Latin-1 e continua rejeitando com 402. A única representação que é byte-a-byte idêntica tanto em UTF-8 quanto em ISO-8859-1 é o ASCII puro de 7 bits (0x20..0x7E).
  3. Eventos de NF-e e NFC-e em MT (RecepcaoEvento4 — cancelamento 110111 e CC-e 110110 — corrigido na v0.56.135):
    • O webservice RecepcaoEvento4 da SEFAZ-MT sofre do mesmo comportamento ao processar a justificativa (<xJust>), a descrição do evento (<descEvento>Cancelamento</descEvento> / <descEvento>Carta de Correcao</descEvento>) ou o texto da correção (<xCorrecao>). Na release v0.56.135, ativamos o modo híbrido ASCII para eventos na SEFAZ-MT e passamos a expor errorMessage no retorno da API caso uma tentativa de cancelamento seja rejeitada pela SEFAZ.

Como funciona a transliteração 1-para-1 e o Fallback CAS na Notaas (v0.56.142)

Para que o desenvolvedor integrado ao nosso guia prático de API NFC-e (Modelo 65) ou à API de NF-e (Modelo 55) nunca precise se preocupar com isso, implementamos na v0.56.142 uma defesa em duas camadas:

  1. Prevenção Proativa por UF (UFS_NFCE_ASCII_ONLY = new Set(['MT'])):
    • Quando modelo === 65 e a UF do emitente está em UFS_NFCE_ASCII_ONLY, o NfceBuilder ativa asciiOnly: true antes de assinar o XML.
    • Nossa função transliterateNfeTextToAscii faz o mapeamento 1-para-1 (preservando rigorosamente o tamanho length da string) via decomposição Unicode NFD + remoção de diacríticos combinantes + mapa explícito de símbolos (º ➔ o, ª ➔ a, § ➔ S, ° ➔ o, travessões –/— ➔ -), sem jamais estourar os limites de maxLength dos campos XSD (xNome, xLgr, xBairro, xProd, infCpl) e mantendo a assinatura XMLDSig (DigestValue) 100% íntegra.
  2. Auto-Recovery Reativo com Guard CAS (replaceSignedXmlForProcessing):
    • E se outra UF atualizar seu autorizador no futuro e passar a devolver cStat 402 em uma NFC-e com acentos?
    • Nosso worker detecta o retorno síncrono cStat === '402' no modelo 65, verifica se o XML assinado contém bytes > 0x7F e executa um único retry imediato: reconstrói e re-assina o XML da NFC-e com asciiOnly: true (recalculando DigestValue, SignatureValue e o cHashQRCode do QR Code v2.00), persiste o novo XML no banco sob lock atômico CAS (WHERE id = $1 AND status = 'processing') e reenvia à SEFAZ na mesma requisição.
export function transliterateNfeTextToAscii(input: string): string {
  const symbolMap: Record<string, string> = {
    'º': 'o',
    'ª': 'a',
    '°': 'o',
    '§': 'S',
    '–': '-',
    '—': '-',
    '´': "'",
    '`': "'",
  };

  return input
    .normalize('NFD')
    .replace(/[\u0300-\u036f]/g, '') // Remove diacríticos mantendo 1 char base
    .replace(/[^\x20-\x7E]/g, (ch) => symbolMap[ch] ?? ' ');
}

Rejeição cStat 878 na SEFAZ-MT (v0.56.143): O detalhe do protocolo http:// em <urlChave> e <qrCode>

Superada a barreira do encoding, quem emite NFC-e em produção (tpAmb=1) no estado de Mato Grosso encontra a validação da Regra ZX03-20 (cStat 878 — Rejeição: Endereço do site da UF da Consulta por chave de acesso diverge do previsto).

A causa é uma assimetria entre os ambientes de homologação e produção na tabela oficial de endereços da SEFAZ-MT:

  • Em Homologação (tpAmb=2), a SEFAZ-MT utiliza https://homologacao.sefaz.mt.gov.br/....
  • Em Produção (tpAmb=1), o Portal Nacional da NFC-e (nfce.encat.org/desenvolvedor/qrcode/) e o validador ZX03-20 da SEFAZ-MT exigem o protocolo http:// (sem s) tanto na URL base do <qrCode> quanto na tag <urlChave>.

Veja a tabela exata configurada na release v0.56.143 (src/lib/nfce/nfce-qrcode-urls.ts):

Ambiente SEFAZ-MT (UF 51) Tag <qrCode> (URL Base antes de ?p=) Tag <urlChave> (Consulta Pública por Chave)
Produção (tpAmb = 1) http://www.sefaz.mt.gov.br/nfce/consultanfce http://www.sefaz.mt.gov.br/nfce/consultanfce
Homologação (tpAmb = 2) https://homologacao.sefaz.mt.gov.br/nfce/consultanfce https://homologacao.sefaz.mt.gov.br/nfce/consultanfce

Se o seu sistema montar https://www.sefaz.mt.gov.br/nfce/consultanfce em produção, o autorizador MT_A2_NFCe-4.100 rejeita imediatamente o lote com cStat 878.

⚡ Resumo do Pipeline de Emissão de NFC-e para Mato Grosso na Notaas:

  • 1. Recepção JSON Normal (Com Acentos): Sua aplicação envia os dados do cliente, endereço e produtos normalmente em UTF-8 para POST /api/v1/nfce.
  • 2. Transliteração Determinística (v0.56.142): Para UF = MT (e em eventos RecepcaoEvento4 da v0.56.135), o builder converte o conteúdo textual do XML para ASCII 7-bit (0x20..0x7E) antes da assinatura XMLDSig, eliminando o cStat 402.
  • 3. Resolução Exata de URLs (v0.56.143): O gerador de <infNFeSupl> injeta http://www.sefaz.mt.gov.br/nfce/consultanfce em produção e calcula o cHashQRCode com o CSC do emitente, eliminando o cStat 878.
  • 4. Contingência e Alta Disponibilidade: Se o webservice estadual oscilar em datas de pico, nossa camada de contingência automática de NFC-e e NF-e garante a continuidade do PDV.

Emita NFC-e e NF-e em Mato Grosso e em todas as 27 UFs com uma única API

Não desperdice horas de engenharia mantendo regras de exceção de encoding e tabelas de URLs por estado no código do seu ERP ou PDV. Na API de Nota Fiscal Gratuita da Notaas, você envia o mesmo JSON limpo para qualquer estado brasileiro:

  • 20 notas fiscais gratuitas por mês em Produção Real (1 CNPJ) + até 5 projetos simultâneos em Homologação via Org API.
  • Suporte completo a NF-e (Mod 55), NFC-e (Mod 65), NFS-e (4.836 municípios) e CT-e/MDF-e.
  • DANFE NFC-e 80mm e DANFE A4 gerados em milissegundos.

👉 Criar Conta Gratuita na Notaas Platform · Consultar a Documentação Técnica

Notaas — Infraestrutura Fiscal Multi-Tenant para SaaS, ERPs e BPOs

Escale a emissão de NFS-e, NF-e, NFC-e, CT-e e MDF-e para dezenas de CNPJs

Integre a API de Nota Fiscal da Notaas no seu software: provisione clientes via Org API Multi-CNPJ, isole certificados A1 em nuvem, receba webhooks assinados com HMAC e gere DANFSe v2.0 local. Sandbox ilimitado e planos sob medida para operações em escala.

Artigos Relacionados em NFC-e

NFS-e • 11/11/2026

Integração NFS-e GovDigital (v2.00), Conam, PublicSoft, Megasoft e Ágili: Como Resolver os Erros E183, GOV103, GOV105, GOV113 e GOV130

Guia técnico da ativação global das 12 engines OOP de NFS-e na Notaas (v0.56.147 e v0.56.148): protocolo GovDigital v2.00 mTLS, solução das rejeições E183, GOV103, GOV105, GOV113 e GOV130, e validação Conam, PublicSoft e Aspec.

NF-e • 11/11/2026

Rejeição 768, 963 e 391 na NF-e e NFC-e: Regra YA04-20 vs YA04-10 e Grupo <card> em tPag=16 (Depósito) e tPag=19 (Cashback)

Entenda por que a SEFAZ rejeita NF-e e NFC-e com cStat 768 e cStat 963 (Regra YA04-20) ao enviar o grupo <card> em tPag=16 (Depósito Bancário) ou tPag=19 (Cashback/Fidelidade), a diferença para a Rejeição 391 (YA04-10) e como sanitizar detPag na API.

NF-e • 09/11/2026

Tag xFant na NF-e e NFC-e: Como Exibir Nome Fantasia e Logotipo no DANFE A4 e Cupom 80mm via API

Aprenda a configurar a tag xFant (Nome Fantasia do emitente) e o logotipo personalizado na NF-e (Modelo 55) e NFC-e (Modelo 65) via API REST JSON e Org API para exibir a marca comercial da loja no DANFE A4 e no cupom térmico 80mm.

NFS-e • 06/11/2026

Tag <tribFed> na NFS-e (Retenções de IRRF, PIS, COFINS, CSLL e INSS na NT-007) e Serviços para o Exterior (NIF / ISO2)

Guia técnico da NT-007 do SNNFSE: como destacar retenções federais na fonte (<tribFed>: IRRF 1,5%, CSRF 4,65% e INSS 11%), faturar serviços para tomador no exterior (NIF / ISO2) e integrar Uberlândia, Caxias do Sul e Fortaleza.

Guias Pilares de Integração Fiscal