NFC-e
A NFC-e, ou Nota Fiscal de Consumidor Eletrônica, modelo 65, é um documento digital emitido para documentar operações comerciais presenciais com o consumidor final, substituindo o antigo cupom fiscal emitido por ECF.
Ela é usada em comércios de varejo, como lojas, restaurantes, farmácias e supermercados, e tem como foco a agilidade, redução de custos operacionais e digitalização da experiência de venda física.
⚙️ Para que serve a NFC-e?
- Documentar a venda de produtos em estabelecimentos físicos
- Eliminar o uso de equipamentos como impressoras fiscais ECF
- Enviar os dados da venda diretamente para a SEFAZ do estado
- Permitir ao consumidor final consultar o documento online por meio de um QR Code
🧱 Estrutura do XML da NFC-e
A NFC-e é gerada em formato XML com base na estrutura do layout da NF-e, mas com menos blocos e campos obrigatórios, já que é destinada ao varejo. Abaixo, os principais blocos presentes no XML da NFC-e:
| Bloco | Descrição |
|---|---|
ide | Identificação da NFC-e (UF, número, série, tipo de operação, etc.) |
emit | Dados do emissor (CNPJ, IE, endereço, razão social) |
dest | Dados do destinatário (consumidor), pode ser omitido se venda sem CPF/CNPJ |
det | Detalhamento dos produtos vendidos |
total | Totais da nota (venda, tributos, descontos) |
pag | Informações sobre o pagamento (forma, valor, troco) |
transp | Informações de transporte – opcional, geralmente omitido na NFC-e |
infAdic | Informações adicionais para consumidor ou fiscais |
infRespTec | Dados do responsável técnico pelo sistema emissor |
infNFeSupl | Contém o QR Code que permite consulta pública da nota |
Cada um desses blocos será detalhado separadamente, com todos os campos e formatos obrigatórios, em seções específicas da documentação.
🔐 Assinatura Digital na NFC-e
A assinatura digital é um dos elementos mais importantes na Nota Fiscal de Consumidor Eletrônica (NFC-e). Ela garante que:
- O documento foi realmente emitido pelo contribuinte autorizado (autenticidade)
- Os dados da nota fiscal não foram alterados após a emissão (integridade)
- A SEFAZ possa validar e aceitar o documento oficialmente
🧾 Certificado Digital
- A assinatura deve ser feita com um certificado digital tipo A1 (arquivo
.pfx) - Esse certificado deve estar vinculado ao CNPJ do emitente
- O certificado precisa estar dentro do prazo de validade
- O ideal é gerar o certificado em ambiente seguro e protegê-lo com senha
🔐 Algoritmo de Assinatura
A assinatura segue o padrão XML Digital Signature (XMLDSIG), utilizando os seguintes algoritmos:
| Algoritmo | Finalidade |
|---|---|
SHA1 | Digest (resumo dos dados) |
RSA-SHA1 | Assinatura da Digest com chave RSA |
Canonical XML | Canonicalização da estrutura do XML |
🔄 Processo de Assinatura
- Identificar o bloco que será assinado (
<infNFe>) - Canonicalizar esse bloco usando
Canonical XML(sem comentários) - Gerar um hash SHA1 do conteúdo canonicalizado
- Criptografar o hash com a chave privada do certificado A1
- Incluir o resultado dentro da tag
<Signature>, imediatamente antes do fechamento do bloco<NFe>
🧪 Exemplo de estrutura da assinatura digital no XML
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#NFe35150300000000000000000000000000000000000001">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>U9n2+XDF+tyT+W3yfrKoHzbmiu4=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
FshkUsvM2gEzK7v50E...
</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>
MIID...
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
⚠️ Dicas importantes
- A tag
<Signature>deve ser gerada automaticamente com bibliotecas de assinatura digital compatíveis (ex:xmlsecem C,OpenSSL, bibliotecas Java ou Ruby). - O
IDda nota (infNFe Id="NFe...) precisa ser igual ao que aparece emReference URI - Caso a assinatura esteja inválida, a nota será rejeitada com erro como:
"Assinatura Digital inválida" (cStat: 215, 220 ou 290)
🛠️ Validação
Após assinar o XML, valide:
- O XML com a assinatura em um validador oficial da SEFAZ
- Se possível, use ferramentas locais como o Validador da TecnoSpeed ou NFeTools para garantir que a estrutura e assinatura estejam corretas
🔑 QR Code e CSC
O QR Code é obrigatório na NFC-e e deve ser impresso no DANFE NFC-e (versão reduzida e impressa da nota).
Componentes necessários:
- CSC (Código de Segurança do Contribuinte): um token gerado pela SEFAZ e fornecido à empresa
- ID do CSC: número identificador vinculado ao token
O QR Code permite:
- Consumidor consultar a nota diretamente na SEFAZ
- Verificação da validade e dados da operação
- Evita fraudes e garante transparência
A montagem do QR Code exige:
- Chave de acesso (composta por CNPJ, data, modelo, série, número, código numérico e dígito verificador)
- Hash SHA1 assinado com CSC
- URL de consulta específica de cada estado
🧮 Geração da chave de acesso
A chave de acesso da NFC-e é composta por 44 dígitos, formados por:
UF (2) + Data (4) + CNPJ (14) + Modelo (2) + Série (3) + Número (9) + Código Numérico (8) + Dígito Verificador (1)
Exemplo de formação:
| Parte | Valor |
|---|---|
| UF | 35 (SP) |
| Data de emissão | 2504 (abril/2025) |
| CNPJ | 12345678000195 |
| Modelo | 65 |
| Série | 001 |
| Número da NFC-e | 000012345 |
| Código Numérico | 98765432 |
| Dígito Verificador | Calculado automaticamente (módulo 11) |
Importante: a ordem e presença dos campos no XML é crítica. O XML da NFC-e não pode conter campos fora de ordem, campos em branco desnecessários, ou blocos não previstos na versão do schema. O XML é validado contra um schema oficial da SEFAZ, e qualquer divergência resulta em rejeição da nota.
✅ Exemplo simplificado de XML válido de NFC-e (sem filhos detalhados)
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe versao="4.00" Id="NFe35190412345678000195550010000012345678901234">
<ide>
<cUF>35</cUF>
<cNF>98765432</cNF>
<mod>65</mod>
<serie>1</serie>
<nNF>12345</nNF>
<dhEmi>2025-04-24T14:55:00-03:00</dhEmi>
...
</ide>
<emit>
<CNPJ>12345678000195</CNPJ>
<xNome>Minha Empresa de Exemplo LTDA</xNome>
...
</emit>
<det nItem="1">
<prod>
<cProd>001</cProd>
<xProd>Produto de Teste</xProd>
<vUnCom>100.00</vUnCom>
...
</prod>
</det>
<total>
<vNF>100.00</vNF>
</total>
<pag>
<tPag>01</tPag>
<vPag>100.00</vPag>
</pag>
<infAdic>
<infCpl>Obrigado pela preferência!</infCpl>
</infAdic>
<infNFeSupl>
<qrCode>https://www.sefaz.sp.gov.br/qr?chNFe=...</qrCode>
<urlChave>https://www.sefaz.sp.gov.br/NFeConsulta</urlChave>
</infNFeSupl>
</infNFe>
</NFe>
Esse XML está simplificado apenas para fins de demonstração. Os blocos como
dest,transp,ICMS,PIS,COFINS,impostoesignaturesão obrigatórios em uma NFC-e real e devem seguir a ordem e a estrutura correta segundo o schema.