Skip to content

Consulta Distribuição

Leonardo Gregianin edited this page Oct 4, 2022 · 8 revisions

A Distribuição de DF-e suporta três tipos de consultas:

  1. distNSU – Distribuição de Conjunto de DF-e a partir do NSU informado
  2. consNSU – Consulta DF-e vinculado ao NSU informado
  3. consChNFe – Consulta de NF-e por chave de acesso informada

Exemplo do Tipo 1 para consulta a partir de um NSU e retornará uma lista dos próximos 50 NSUs:

Observações:

  • Se o retorno do status (tag cStat) for 138 quer dizer que existe mais documentos após a última consulta, portanto, grave o número do último NSU localizado e re-faça a consulta.
  • Se o retorno do status (tag cStat) for 137 quer dizer que não existe novos documentos após o último NSU consultado.
from pynfe.processamento.comunicacao import ComunicacaoSefaz

certificado = "/home/user/certificado.pfx"
senha = 'senha'
uf = 'pr'
homologacao = True

CNPJ = 'CPNJ_DA_EMPRESA' 
CHAVE = '' # deixar a chave de acesso vazia
ULT_NSU = 0

con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
xml = con.consulta_distribuicao(cnpj=CNPJ, chave='', nsu=ULT_NSU, consulta_nsu_especifico=False)

Exemplo do Tipo 2 para consulta de um NSU específico:

from pynfe.processamento.comunicacao import ComunicacaoSefaz

certificado = "/home/user/certificado.pfx"
senha = 'senha'
uf = 'pr'
homologacao = True

CNPJ = 'CPNJ_DA_EMPRESA' 
CHAVE = '' # deixar a chave de acesso vazia
NSU = 50123 # baixar o xml do NSU especifico

con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
xml = con.consulta_distribuicao(cnpj=CNPJ, chave='', nsu=NSU, consulta_nsu_especifico=True)

Exemplo do Tipo 3 para consulta específica por Chave de Acesso:

from pynfe.processamento.comunicacao import ComunicacaoSefaz

certificado = "/home/user/certificado.pfx"
senha = 'senha'
uf = 'pr'
homologacao = True

CNPJ = 'CPNJ_DA_EMPRESA' 
CHAVE = 'CHAVE_DA_NOTA_DA_CONSULTA'

con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
xml = con.consulta_distribuicao(cnpj=CNPJ, chave=CHAVE)

Descompactar o conteúdo zipado.

from pynfe.utils.descompactar import DescompactaGzip
from pynfe.utils.flags import NAMESPACE_NFE
from lxml import etree

resposta = etree.fromstring(xml.content)
ns = {'ns': NAMESPACE_NFE}

zip_resposta = resposta.xpath('//ns:retDistDFeInt/ns:loteDistDFeInt/ns:docZip', namespaces=ns)[0].text

des_resposta = DescompactaGzip.descompacta(zip_resposta)

Voltar