def inutilizar_nota(self, cnpj, serie, numero, justificativa, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Realiza a inutilização do número de uma nota fiscal @param cnpj:cnpj do emitente @param serie: serie da nfe @param numero: número da nota que deseja inutilizar @param justificativa: justificativa da inutilização @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com o envio,resposta e reason. """ p = ProcessadorNFe() p.versao = versao p.estado = estado p.ambiente = ambiente p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = False p.tipo_contingencia = tipo_contingencia p.caminho = u'' processo = p.inutilizar_nota(cnpj=cnpj, serie=serie, numero_inicial=numero, justificativa=justificativa) processo.envio.xml processo.resposta.xml processo.resposta.reason vals = {'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'status_resposta': processo.resposta.infInut.cStat.valor, 'status_motivo': processo.resposta.infInut.xMotivo.valor, 'reason': processo.resposta.reason} return vals
def processar_nfe(self, xml_nfe, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Este método realiza o processamento de validação, assinatura e transmissão da nfe. @param xml_nfe:xml da nfe (string) @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com a chave_nfe, protocolo, envio, numero_lote, resposta, status_resposta,status_motivo e reason. """ p = ProcessadorNFe() p.ambiente = ambiente p.estado = estado p.versao = versao p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = True p.tipo_contingencia = tipo_contingencia p.caminho = u'' if versao == '3.10': n = NFe_310() else: n = NFe_200() n.infNFe.xml = xml_nfe for processo in p.processar_notas([n]): processo.envio.xml processo.resposta.xml processo.resposta.reason vals = {'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'chave_nfe': n.chave, 'xml_pre_validado': n.xml, 'status_resposta': processo.resposta.cStat.valor, 'status_motivo': processo.resposta.xMotivo.valor, 'reason': processo.resposta.reason } try: if processo.resposta.infProt.nProt.valor == '': vals['protocolo'] = processo.resposta.protNFe.infProt.nProt.valor except: pass for nome, proc in p.processos.iteritems(): for arquivo in proc[1]: if arquivo[0] == 'numero_lote': vals['numero_lote'] = arquivo[1] if arquivo[0] == 'numero_protocolo': vals['protocolo'] = arquivo[1] vals['resposta'] = proc[1][1][1] if arquivo[0] == 'status_resp': vals['status_resposta'] = arquivo[1][0] vals['status_motivo'] = arquivo[1][1] return vals
def processar_lote(self, lista_xml_nfe, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Este método realiza o processamento de validação, assinatura e transmissão da nfe. @param lista_xml_nfe:lista nfe @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com o envio,resposta e reason. """ p = ProcessadorNFe() p.ambiente = ambiente p.estado = estado p.versao=versao p.tipo_contingencia = tipo_contingencia p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = False p.caminho = u'' if versao == '3.10': n = NFe_310() else: n = NFe_200() lista = [] if lista_xml_nfe: for x in lista_xml_nfe: n.infNFe.xml = x lista.append(n) for processo in p.processar_notas(lista): processo.envio.xml processo.resposta.xml processo.resposta.reason return {'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'reason': processo.resposta.reason}
def processar_nfe(self,xml_nfe,cert,key,versao=u'2.00',ambiente=2,estado=u'MG',scan=False): """ Este método realiza o processamento de validação, assinatura e transmissão da nfe. @param xml_nfe:xml da nfe (string) @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param scan: habilita a contigência SCAN. @return: Dicionário com a chave_nfe, protocolo, envio,resposta e reason. """ p = ProcessadorNFe() p.ambiente=ambiente p.estado=estado p.certificado.cert_str=cert p.certificado.key_str=key p.salvar_arquivos=False p.contingencia_SCAN=scan p.caminho = u'' n = NFe_200() n.infNFe.xml=xml_nfe for processo in p.processar_notas([n]): processo.envio.xml processo.resposta.xml processo.resposta.reason return {'envio':processo.envio.xml, 'resposta':processo.resposta.xml, 'chave_nfe':n.chave, 'protocolo':processo.resposta.protNFe.infProt.nProt.valor, 'reason':processo.resposta.reason }
def consultar_servidor(self,cert,key,versao=u'2.00',ambiente=2,estado=u'MG',scan=False): """ Este método verifica se o servidor está em operação @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará a consulta do servidor, @param scan: habilita a contigência SCAN. @return: Dicionário com o status,envio,resposta e reason. """ p = ProcessadorNFe() p.ambiente=ambiente p.estado=estado p.versao=versao p.certificado.cert_str=cert p.certificado.key_str=key p.salvar_arquivos=False p.contingencia_SCAN=scan p.caminho = u'' processo = p.consultar_servico() status=processo.resposta.cStat.valor processo.envio.xml processo.resposta.xml processo.resposta.reason return{'status':status,'envio':processo.envio.xml,'resposta':processo.resposta.xml,'reason':processo.resposta.reason}
def inutilizar_faixa_numeracao(self,cnpj,serie,numero_inicial,numero_final,justificativa,cert,key,versao=u'2.00',ambiente=2,estado=u'MG',scan=False): """ Realiza a inutilização de faixa de numeração de nota fiscal @param cnpj:cnpj do emitente @param serie: série da nfe @param numero_inicial: faixa inicial da nota que deseja inutilizar @param numero_final: faixa final da nota que deseja inutilizar @param justificativa: justificativa da inutilização @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param scan: habilita a contigência SCAN. @return: Dicionário com o envio,resposta e reason. """ p = ProcessadorNFe() p.versao= u'2.00' p.estado= u'MG' p.ambiente= 2 p.certificado.cert_str=cert p.certificado.key_str=key p.salvar_arquivos=False p.contingencia_SCAN=scan p.caminho = u'' processo = p.inutilizar_nota(cnpj=cnpj,serie=serie,numero_inicial=numero_inicial,numero_final=numero_final,justificativa=justificativa) processo.envio.xml processo.resposta.xml processo.resposta.reason return {'envio':processo.envio.xml,'resposta':processo.resposta.xml,'reason':processo.resposta.reason}
def processar_nfe(self, xml_nfe, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Este método realiza o processamento de validação, assinatura e transmissão da nfe. @param xml_nfe:xml da nfe (string) @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com a chave_nfe, protocolo, envio, numero_lote, resposta, status_resposta,status_motivo e reason. """ p = ProcessadorNFe() p.ambiente = ambiente p.estado = estado p.versao = versao p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = True p.tipo_contingencia = tipo_contingencia p.caminho = u'' if versao == '3.10': n = NFe_310() else: n = NFe_200() n.infNFe.xml = xml_nfe for processo in p.processar_notas([n]): processo.envio.xml processo.resposta.xml processo.resposta.reason vals = {'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'chave_nfe': n.chave, 'xml_pre_validado': n.xml, 'status_resposta': processo.resposta.cStat.valor, 'status_motivo': processo.resposta.xMotivo.valor, 'reason': processo.resposta.reason } try: if processo.resposta.infProt.nProt.valor == '': vals['protocolo'] = processo.resposta.protNFe.infProt.nProt.valor except: pass for nome, proc in p.processos.iteritems(): for arquivo in proc[1]: if arquivo[0] == 'numero_lote': vals['numero_lote'] = arquivo[1] if arquivo[0] == 'numero_protocolo': vals['protocolo'] = arquivo[1] vals['resposta'] = proc[1][1][1] if arquivo[0] == 'status_resp': vals['status_resposta'] = arquivo[1][0] vals['status_motivo'] = arquivo[1][1] return vals
def inutilizar_faixa_numeracao(self, cnpj, serie, numero_inicial, numero_final, justificativa, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Realiza a inutilização de faixa de numeração de nota fiscal @param cnpj:cnpj do emitente @param serie: série da nfe @param numero_inicial: faixa inicial da nota que deseja inutilizar @param numero_final: faixa final da nota que deseja inutilizar @param justificativa: justificativa da inutilização @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com o envio,resposta e reason. """ p = ProcessadorNFe() p.versao = versao p.estado = estado p.ambiente = ambiente p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = False p.tipo_contingencia = tipo_contingencia p.caminho = u'' processo = p.inutilizar_nota(cnpj=cnpj, serie=serie, numero_inicial=numero_inicial, numero_final=numero_final, justificativa=justificativa) processo.envio.xml processo.resposta.xml processo.resposta.reason vals = { 'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'status_resposta': processo.resposta.infInut.cStat.valor, 'status_motivo': processo.resposta.infInut.xMotivo.valor, 'reason': processo.resposta.reason } if processo.resposta.infInut.cStat.valor == '102': vals['protocolo'] = processo.resposta.infInut.nProt.valor return vals
def processar_lote(self, lista_xml_nfe, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', tipo_contingencia=False): """ Este método realiza o processamento de validação, assinatura e transmissão da nfe. @param lista_xml_nfe:lista nfe @param cert: string do certificado digital A1, @param key: chave privada do certificado digital, @param versao: versão da nfe, @param ambiente: ambiente da consulta, pode ser 1 para o ambiente de produção e 2 para homologação, @param estado: estado em que realizará o processamento, @param tipo_contingencia: habilita a contigência . @return: Dicionário com o envio,resposta e reason. """ p = ProcessadorNFe() p.ambiente = ambiente p.estado = estado p.versao = versao p.tipo_contingencia = tipo_contingencia p.certificado.cert_str = cert p.certificado.key_str = key p.salvar_arquivos = False p.caminho = u'' if versao == '3.10': n = NFe_310() else: n = NFe_200() lista = [] if lista_xml_nfe: for x in lista_xml_nfe: n.infNFe.xml = x lista.append(n) for processo in p.processar_notas(lista): processo.envio.xml processo.resposta.xml processo.resposta.reason return { 'envio': processo.envio.xml, 'resposta': processo.resposta.xml, 'reason': processo.resposta.reason }