Com o objetivo de auxiliar nossos clientes que utilizam o  Manager eDoc ou Manager SaaS , elaboramos este tutorial que irá descrever um passo a passo mostrando como implementar em seus sistemas a consulta de notas destinadas, também chamada de  "Consulta DF-e"

Então para começar, vamos definir o que é um "DF-e" :


O DF-e é um serviço disponibilizado pela SEFAZ que retorna qualquer NF-e emitida por terceiros e que tenha seu CNPJ como participante declarado na nota (como destinatário ou transportador por exemplo). Neste contexto, a "Consulta de DF-e" é o método que usamos para saber quais notas foram emitidas contra um determinado CNPJ

 


Neste post iremos falar sobre uma das formas de fazer esta consulta de DF-e via integração por troca de arquivos nas pastas ou por requisições HTTP . Para auxiliar na montagem das requisições HTTP  clique aqui para ter acesso ao manual do eDoc/SaaS que detalha estas requisições.


 

Para facilitar a compreensão, vamos dividir o fluxo da consulta de notas destinadas em 3 partes, que devem ser feitas nesta sequência: 

1º- Consulta das DFe's : Neste passo, é feita uma consulta na SEFAZ e esta retorna para o eDoc/SaaS todas as notas emitidas contra o CNPJ de seu cliente;

2º- Manifestação do Destinatário : Nesta etapa, você irá avaliar as chaves das notas recebidas e fazer a manifestação. Isto é, declarar as chaves como "Confirmação da Operação", "Conhecimento da Operação", "Desconhecimento da Operação" ou "Operação não realizada" ;

3º- Download do XML: Após fazer a manifestação como "Confirmação da Operação", a SEFAZ libera o download do XML. Então nesta etapa, ao fazer o download o XML é gravado em nosso banco de dados e a nota já pode ser impressa, enviada por email, etc.

 

Agora vamos aos exemplos

Então seguindo o  1º Passo do fluxo , vamos começar gerando um arquivo tx2 (exemplo em anexo no final deste post, arquivo " ConsultaDFe.txt ") dentro da pasta " Envia " ou como requisição HTTP na rota da " Envia " com o seguintes parâmetros para que seja feita a Consulta DFe:    

 
  documento=dfe   

 

A geração deste arquivo é o que dispara o pedido de consulta das DFes, e após obter um retorno de sucesso, as chaves das notas destinadas já estarão no banco de dados do eDoc/SaaS.

 

Então já podemos partir para o 2º Passo , pois agora é o momento de Manifestar as chaves . Para isso, basta gerar na pasta/rota da " Envia " um arquivo txt de acordo com o tipo de manifestação desejada, que será feita para cada uma das chaves que vieram da consulta DF-e que acabamos de fazer. O tipo de Manifestação pode ser: "Confirmação da Operação", "Conhecimento da Operação", "Desconhecimento da Operação" ou "Operação não realizada"

( Em anexo existe um pacote de arquivos com txt de exemplos para cada tipo de manifestação (arquivo MDe.rar))

 

Agora vem um detalhe importante! Seu sistema precisa saber quais chaves vieram na última consulta de DFe , para então fazer a manifestação delas. Para isso, é importante que sua aplicação tenha uma tabela em seu banco de dados para guardar o handle das notas que vieram da consulta DF-e.

Então, para isso, recomendamos que seja feito desta forma:

Após fazer a consulta do DFe, seu sistema envia uma consulta "interna" no eDoc/SaaS para pegar o handle da última nota que veio da SEFAZ, e grava este handle em seu banco. Segue o modelo de consulta (txt em anexo com o nome "ConsultaHandle.txt") a ser feita no eDoc/SaaS:

 
  Campos=chave, handle
Visao=TspdNFe
Filtro=destinada=TRUE and handle > 1 and origem=2
Ordem=handle asc   

 

Este modelo de consulta acima irá trazer como resultado N notas que foram gravadas no banco do eDoc/SaaS (na primeira vez, todas as notas destinadas que a SEFAZ retornar). Então o que recomendo que seja feito é: seu sistema consome o arquivo de retorno da consulta intena no eDoc/SaaS, e guarda em uma tabela o número do último handle que retornar . Com isso, na próxima vez que for feita uma consulta de DFe, você passa no campo "Filtro=(handle>_)... o último handle que veio na consulta DF-e anterior, e que está gravado em seu banco de dados

 


Para facilitar a compreensão vamos a um exemplo:


Vamos supor que nós façamos hoje uma consulta de DFe, e depois uma consulta interna no eDoc. Como retorno da consulta no eDoc, teremos a informação que foram gravadas no banco 3 notas destinadas, com handle 4, 5 e 6 . Depois disso você manifesta as notas normalmente.

Neste momento, com base no retorno da consulta feita no eDoc/SaaS , você grava em seu banco de dados a informação de que o último handle é o 6 .

Então amanhã, quando for fazer uma outra consulta de DFe, você faz o envio da consulta DFe normalmente, mas no momento de consultar internamente no eDoc/SaaS,  você passa o "handle>6" no arquivo de consulta interna, e a consulta ficaria assim: "Filtro=destinada=TRUE and handle > 6 and origem=2".

Isso irá te retornar a listagem de chaves que foram gravadas no eDoc/SaaS como resultado da última consulta DF-e . Ou seja, o retorno da consulta não vai trazer as notas de ontem. E com isso, você vai ter uma listagem apenas das chaves novas . Isso é importante para que você não manifeste chaves que já foram manifestadas anteriormente.

Obs.: Sempre a primeira consulta de DF-e feita tende a demorar mais, porque é feita uma consulta que retorna todos os XMLs dos últimos três meses. Então, é normal demorar alguns minutos para a primeira consulta obter um retorno.

Então a consulta seria feita nesta ordem: 

Seu banco possui Handle=1 (considerando que é a primeira vez que é feita uma consulta de DF-e);
Você dispara a Consulta DFe ( 1º Passo do fluxo );
Consulta internamente no eDoc/SaaS as notas com handle > 1 para fazer a manifestação ( 2º Passo do fluxo );
Usando o retorno da mesma consulta acima, atualiza seu banco com o Handle da última nota;


E por fim, podemos partir para o 3º Passo , mas apenas para as notas que forem manifestadas como "Confirmação da Operação", nestas notas você pode fazer o Download do XML . Para isso, basta gerar um tx2 (exemplo em anexo com o nome de "Download.txt") na pasta/rota "Envia" com os seguintes parâmetros:

 
  Documento=DNF
ChaveNota=[chave da nota]
ImportaDownload=1   

 

Neste processo, basta passar no arquivo acima a chave da nota que deseja fazer o download, e após o download, o XML de autorização da nota será gravado em nosso banco de dados.


Como alternativa a esta modelo de consulta por pastas, temos também a possibilidade de fazer a consulta diretamente pela interface web. Neste link a seguir temos um passo a passo de como fazer esta manifestação: http://tsdn.tecnospeed.com.br/blog-da-consultoria-tecnica-tecnospeed/post/como-sincronizar-notas-destinadas-manifestacao-do-destinatario-e-downloadnf-pela-gui

 

Caso tenha restado qualquer dúvida neste fluxo, nós da Tecnospeed estamos totalmente a disposição para auxílio!

Arquivos para download