Pular para o conteúdo
Fiscal ProBiblioteca
Rejeição 396 · Regra ZX02-312

Rejeição 396: Hash ausente no QR Code versão 2

Revisão editorial em 16 de out. de 2026. Confira as versões e condições das regras nas fontes do artigo.

A Rejeição 396/ZX02-312 identifica o Hash final ausente no QR Code versão 2 da NFC-e. O Hash fecha a URL e é gerado a partir dos parâmetros do código e do CSC. Não se confunde com o DigestValue que aparece apenas no QR 2 off-line.

Onde deveria estar o Hash

No QR 2 online, o Hash é o quinto parâmetro; no QR 2 off-line, é o oitavo. A emissão off-line contém posições adicionais: dia, total e DigestValue. O MOC 7.0 condiciona ZX02-312 à versão 2 e aponta que o Schema verifica a presença. MOC 7.0, p. 133

Leia o texto em NFe/infNFeSupl/qrCode, não apenas a imagem. Se a codificação da imagem perde a parte final, mas o XML a contém, investigue a impressão. Se o XML também termina sem Hash, investigue a montagem.

Presença depende da ordem de geração

O Manual 6.0, pp. 23–24, descreve a sequência: montar os parâmetros na ordem oficial, concatenar o CSC ao texto correspondente, calcular SHA-1 e representar o resultado em hexadecimal. No online entram os parâmetros 1 a 4; no off-line, 1 a 7. O Hash calculado é então adicionado à URL como a última posição. O CSC secreto usado no cálculo não é adicionado à URL. Manual 6.0, pp. 21–24

A ausência pode ser causada por montagem antes de concluir o cálculo, falha de configuração do CSC, erro retornado pela função de Hash ou corte do texto. Identifique qual dessas etapas produziu o arquivo; não preencha a última posição com um texto qualquer.

Exemplo: Hash calculado, mas não serializado

Considere um gerador que calcula o Hash em memória e guarda o resultado, porém serializa apenas os parâmetros anteriores. A URL continua incompleta, mesmo que o log de cálculo tenha terminado. Compare o texto intermediário com o valor final gravado no XML. Já um Hash presente, com formato hexadecimal mas calculado sobre outra string, corresponde a 464/ZX02-320, não a ausência 396.

Não há URL operacional no exemplo porque seria necessário incluir chave e credenciais ou resultado derivado do conjunto real. A comparação textual localiza a falha sem fabricar um Hash fiscal.

Não trate a assinatura do QR 3 como Hash 2

O QR 3 online termina após o terceiro parâmetro. No QR 3 off-line, a última posição é uma assinatura dos parâmetros, com estrutura própria; não é o Hash SHA-1 com CSC da versão 2. A NT 2025.001 documenta ambos e prevê eliminação futura do CSC sem data definida. Isso não torna o Hash dispensável no QR 2 ainda utilizado. NT 2025.001 v1.03, pp. 5,14

Validação após corrigir a origem

Confira separadamente: presença 396, formato 400/ZX02-316 e resultado 464/ZX02-320. Passar no teste de presença não garante que a SEFAZ aceite o Hash. Preserve o XML assinado e documentos autorizados; qualquer correção ocorre no gerador para uma tentativa cujo resultado possa ser esclarecido. Não envie novamente enquanto a situação fiscal anterior estiver incerta.