Pular para o conteúdo principal

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:

BlocoDescrição
ideIdentificação da NFC-e (UF, número, série, tipo de operação, etc.)
emitDados do emissor (CNPJ, IE, endereço, razão social)
destDados do destinatário (consumidor), pode ser omitido se venda sem CPF/CNPJ
detDetalhamento dos produtos vendidos
totalTotais da nota (venda, tributos, descontos)
pagInformações sobre o pagamento (forma, valor, troco)
transpInformações de transporte – opcional, geralmente omitido na NFC-e
infAdicInformações adicionais para consumidor ou fiscais
infRespTecDados do responsável técnico pelo sistema emissor
infNFeSuplConté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:

AlgoritmoFinalidade
SHA1Digest (resumo dos dados)
RSA-SHA1Assinatura da Digest com chave RSA
Canonical XMLCanonicalização da estrutura do XML

🔄 Processo de Assinatura

  1. Identificar o bloco que será assinado (<infNFe>)
  2. Canonicalizar esse bloco usando Canonical XML (sem comentários)
  3. Gerar um hash SHA1 do conteúdo canonicalizado
  4. Criptografar o hash com a chave privada do certificado A1
  5. 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: xmlsec em C, OpenSSL, bibliotecas Java ou Ruby).
  • O ID da nota (infNFe Id="NFe...) precisa ser igual ao que aparece em Reference 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:

  1. O XML com a assinatura em um validador oficial da SEFAZ
  2. 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:

ParteValor
UF35 (SP)
Data de emissão2504 (abril/2025)
CNPJ12345678000195
Modelo65
Série001
Número da NFC-e000012345
Código Numérico98765432
Dígito VerificadorCalculado 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, imposto e signature são obrigatórios em uma NFC-e real e devem seguir a ordem e a estrutura correta segundo o schema.