Atualmente, a SEFAZ não está verificando a distribuição das NF-e para o destinatário; mas com o decorrer do processo esse recurso (previsto no projeto) será exigido em breve (conforme “nota” no próprio manual). Em resumo, o arquivo eletrônico da NF-e, quando autorizada, deverá ser enviado pelo emitente para o destinatário de acordo com a cláusula décima do AJUSTE SINIEF 07/05.

O que demonstraremos à partir daqui é como fazer isso facilmente, usando o Delphi (TXMLDocument e Indy). Esse artigo será disponibilizado em duas partes: a primeira (essa que vc está lendo agora) demonstra como criar o arquivo XML conforme o leiaute de distribuição da NF-e descrito no “Manual de Integração do Contribuinte” (pág.77) à partir da NF-e assinada e protocolo de autorização de uso; a segunda parte, conterá informações para o envio do arquivo via e-mail para o destinatário.

Entendendo o leiaute da distribuição da NF-e

Então, para criar o leiaute “procNFe_v1.10.xsd” conforme schema XML atualmente em uso; vamos partir do princípio que o seu programa já esteja enviando e consultando os recibos da NF-e e, então, tenha acesso aos dois arquivos XML necessários: 01) o arquivo XML da NF-e assinada e 02) o arquivo XML do protocolo de autorização de uso da NF-e. No nosso exemplo, esses arquivos estão localizados nas pastas “c:\nfe_arquivos\assinadas” e “c:\nfe_arquivos\protocolos”.

Conforme o schema XML do leiaute da distribuição da NF-e; temos que ter uma tag raiz “nfeProc” contendo a versão do leiaute como atributo e, dentro dessa tag raiz a tag “NFe” contendo todo o conteúdo de “NFe” inclusive os dados da assinatura (dados obtidos nesse exemplo da NF-e assinada “arquivonfe.xml”) e por último a tag “protNFe” contendo todo o conteúdo do “protNFe” (dados obtidos nesse exemplo do arquivo “protocolonfe.xml”).

Parece complicado mas veja no código abaixo que o “TXMLDocument” do Delphi simplifica tudo:

Código fonte exemplo para criação do arquivo de distribuição da NF-e para o Destinatário:

var vXMLProt, vXMLNFe, vXMLCompartilha: TXMLDocument;
    NodePaiNFe, NodeProt: IXMLNode;
    NodeNivelA: IXMLNode;
begin
  vXMLProt := TXMLDocument.Create(self);
  vXMLNFe := TXMLDocument.Create(self);
  vXMLCompartilha := TXMLDocument.Create(self);
  try
 
  // Abre XML NFe assinada;
  vXMLNFe.LoadFromFile('c:\nfe_arquivos\assinadas\arquivoNFe.xml');
  //Abre XML Protocolo autorização;
  vXMLProt.LoadFromFile('c:\nfe_arquivos\protocolo\protocoloNFe.xml'); 
 
  // Le o nó "NFe" da NFe assinada
  NodePaiNFe := vXMLNFe.DocumentElement;
 
  // Le o nó "protNFe" do protocolo de autorização
  NodeProt := vXMLProt.DocumentElement.ChildNodes.FindNode('protNFe');
 
  // Cria documento de envio para o Destinatário
  With vXMLCompartilha do begin
       // ativa, versiona e codifica UTF-8 para o XML
       Active := True;
       Version := '1.0';
       Encoding := 'UTF-8';
 
       // adiciona atributos padrão arquivo
       AddChild('nfeProc','http://www.portalfiscal.inf.br/nfe');
       DocumentElement.Attributes['xmlns:ds'] :=
       'http://www.w3.org/2000/09/xmldsig#';
       DocumentElement.Attributes['xmlns:xsi'] :=
       'http://www.w3.org/2001/XMLSchema-instance';
       DocumentElement.Attributes['xsi:schemaLocation'] :=
       'http://www.portalfiscal.inf.br/nfe/procNFe_v1.10.xsd';
 
       // Prepara o nó principal e adiciona a versão como atributo
       NodeNivelA := DocumentElement;
       NodeNivelA.Attributes['versao'] := '1.10';
 
       // Adiciona o nó "NFe" da Nota Fiscal eletrônica assinada
       NodeNivelA.ChildNodes.Add(NodePaiNFe);
       NodeNivelA.ChildNodes.Add(NodeProt);
  end;
  // salva arquivo de distribuição da NF-e no disco.
  VXMLCompartilha.SaveToFile('c:\nfe_arquivos\compartilhadas\procNFE.xml');
  finally
      vXMLNFe.Free; vXMLProt.Free; vXMLCompartilha.Free;
  end;

onde:
arquivonfe.xml = nome do arquivo XML que contêm os dados NF-e assinada e autorizada.
protocolonfe.xml = nome do arquivo XML que contêm os dados do protocolo de autorização da NF-e.

Tags: , ,