Rejeição 396: DigestValue ausente no QR Code versão 2 off-line
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-288 indica que falta o parâmetro DigestValue no QR Code versão 2 de uma NFC-e em contingência off-line (tpEmis=9). Nesse perfil ele ocupa a sexta posição. Trata-se de um valor derivado da assinatura do XML, diferente do Hash final do QR.
Localização e contexto da regra
O MOC 7.0, página 132, vincula ZX02-288 ao modelo 65, QR versão 2 e contingência 9. A URL fica em NFe/infNFeSupl/qrCode. No QR 2 online esse parâmetro não existe. A regra observa que o Schema também verifica a presença; isso não dispensa a conferência do conteúdo. MOC 7.0, p. 132
Não transporte a sexta posição para QR 3. No QR 3 off-line ela corresponde ao tipo de identificação do destinatário; não há DigestValue nesse lugar. A assinatura dos parâmetros ocupa a oitava posição. O QR 3 online contém apenas chave, versão e ambiente. Manual DANFE/QR 6.0, pp. 29–30
A informação deve vir da assinatura correta
No QR 2 off-line, o Manual 6.0 determina converter para hexadecimal o valor de DigestValue da NFC-e e utilizá-lo na montagem. O exemplo oficial da página 26 mostra a conversão dos caracteres da representação textual do DigestValue em hexadecimal. Não confunda esse procedimento com o Hash do QR calculado sobre parâmetros e CSC. Manual 6.0, pp. 22,24,26
A geração precisa usar a assinatura do XML da mesma nota. Se o QR é montado antes da assinatura estar disponível, a posição pode ficar vazia. Também investigue leitura de um XPath incorreto, namespace de assinatura ignorado ou uso de um arquivo anterior.
Exemplo de ordem de geração
Imagine que o emissor monte os parâmetros off-line antes de finalizar a assinatura. Chave, versão, ambiente, dia e total existem, mas a sexta posição permanece vazia. A causa possível é a ordem de geração, que deve ser confirmada comparando o XML assinado e os registros da integração. Se a sexta posição está preenchida com valor de outra nota, o padrão é de divergência, 397/ZX02-296.
A demonstração é textual porque o valor válido depende da assinatura real. Não se publica um DigestValue fictício como se comprovasse uma NFC-e, nem se recalcula a assinatura de um documento autorizado para reproduzir o exemplo.
Ausência, formato e divergência têm testes distintos
O código 396/ZX02-288 é ausência. 400/ZX02-292 verifica formato hexadecimal; 397/ZX02-296 verifica a divergência em relação à assinatura. Um texto formado apenas por caracteres hexadecimais ainda pode representar o DigestValue errado. Preencher a partir de outro campo para eliminar a ausência não resolve a coerência da URL.
Confirme o resultado da última tentativa antes de qualquer novo envio; preserve XML assinado e autorizado. Corrija a origem no gerador e confronte a URL gravada no XML com a URL lida da imagem do QR.