-
Notifications
You must be signed in to change notification settings - Fork 174
Fluxo da Consulta de Distribuicao CTe
Raphael edited this page May 7, 2024
·
2 revisions
Consulta distribuição de CT-e retornando uma lista de todos os XMLs:
from pynfe.processamento.comunicacao import ComunicacaoCTe
from pynfe.utils.descompactar import DescompactaGzip
from pynfe.utils.flags import NAMESPACE_CTE
from lxml import etree
certificado = "/home/user/certificado.pfx"
senha = 'senha'
uf = 'uf'
homologacao = True
CPFCNPJ = ''
NSU = 0
CHAVE = ''
con = ComunicacaoCTe(uf, certificado, senha, homologacao)
ultNSU = 0
maxNSU = 0
cStat = 0
while True:
xml = con.consulta_distribuicao(cnpj=CPFCNPJ, chave=CHAVE, nsu=NSU)
NSU = str(NSU).zfill(15)
print(f'Nova consulta a partir do NSU: {NSU}')
resposta = etree.fromstring(xml.text.encode('utf-8'))
ns = {'ns': NAMESPACE_CTE}
contador_resposta = len(resposta.xpath('//ns:retDistDFeInt/ns:loteDistDFeInt/ns:docZip', namespaces=ns))
print(f'Quantidade de NSUs na consulta atual: {contador_resposta}')
cStat = resposta.xpath('//ns:retDistDFeInt/ns:cStat', namespaces=ns)[0].text
print(f'cStat: {cStat}')
xMotivo = resposta.xpath('//ns:retDistDFeInt/ns:xMotivo', namespaces=ns)[0].text
print(f'xMotivo: {xMotivo}')
maxNSU = resposta.xpath('//ns:retDistDFeInt/ns:maxNSU', namespaces=ns)[0].text
print(f'maxNSU: {maxNSU}')
# 137=nao tem mais arquivos e 138=existem mais arquivos para baixar
if (cStat == '138'):
for contador_xml in range(contador_resposta):
tipo_schema = resposta.xpath('//ns:retDistDFeInt/ns:loteDistDFeInt/ns:docZip/@schema', namespaces=ns)[contador_xml]
numero_nsu = resposta.xpath('//ns:retDistDFeInt/ns:loteDistDFeInt/ns:docZip/@NSU', namespaces=ns)[contador_xml]
if (tipo_schema == 'procCTe_v4.00.xsd'):
zip_resposta = resposta.xpath('//ns:retDistDFeInt/ns:loteDistDFeInt/ns:docZip', namespaces=ns)[contador_xml].text
resposta_descompactado = DescompactaGzip.descompacta(zip_resposta)
texto_descompactado = etree.tostring(resposta_descompactado).decode('utf-8')
with open(f'./consulta_distrib-nsu-{NSU}-contador-{contador_xml}.xml', 'w+', encoding='UTF-8') as f:
f.write(texto_descompactado)
NSU = resposta.xpath('//ns:retDistDFeInt/ns:ultNSU', namespaces=ns)[0].text
print(f'NSU: {NSU}')
elif (cStat == '137'):
print(f'Não há mais documentos a pesquisar')
break
else:
print(f'Falha')
break