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
Esempio n. 3
1
    def efetuar_manifesto(self, cnpj, tipo_evento, chave,  cert, key, versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
        """
            Realiza o manifesto do destinatário
            @param chave:chave da 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 scan: habilita a contigência SCAN.
            @return: Dicionário com o envio,resposta e reason.
            """
        p = ProcessadorNFe()
        p.versao = versao
        p.estado = estado
        #Provisoriamente apontado para um estado que usa o webservice de ambiente nacional, pois em MG ainda não existe suporte ao Manifesto do Destinatário
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.contingencia_SCAN = scan
        p.salvar_arquivos = False
        processo = p.consultar_manifesto_destinatario(cnpj, tipo_evento=tipo_evento, chave_nfe=chave)

        vals = {'envio': processo.envio.xml,
                'resposta': processo.processo_evento_nfe.xml,
                'status_resposta': processo.resposta.infEvento.cStat.valor,
                'status_motivo': processo.resposta.infEvento.xMotivo.valor,
                'reason': processo.resposta.reason}
        if processo.resposta.infEvento.cStat.valor == '135':
            vals['protocolo'] = processo.resposta.infEvento.nProt.valor

        return vals
Esempio n. 4
1
 def consultar_nfe(self,chave, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
     """
         @param chave:chave da 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 scan: habilita a contigência SCAN.
         @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.contingencia_SCAN = scan
     p.salvar_arquivos = False
     processo, arquivos = p.consultar_nota(chave_nfe=chave)
     vals = {'envio': processo.envio.xml,
             'resposta': processo.resposta.xml,
             'status_resposta': processo.resposta.cStat.valor,
             'status_motivo': processo.resposta.xMotivo.valor,
             'reason': processo.resposta.reason,
             'arquivos':arquivos}
     return vals
Esempio n. 5
1
 def consultar_cadastro(self, cpf_cnpj, inscricao_estadual, uf, cert, key, versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
     """
         @param chave:chave da 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 scan: habilita a contigência SCAN.
         @return: Dicionário com o envio,resposta e reason.
          """
     p = ProcessadorNFe()
     p.versao = versao
     p.estado = estado
     if uf in ('AC', 'RN', 'PB', 'SC', 'AC', 'AL', 'AP', 'DF', 'PB', 'RJ', 'RN', 'RO', 'RR', 'SC', 'SE', 'TO'):
         SVRS[NFE_AMBIENTE_PRODUCAO][u'servidor'] = u'svp-ws.sefazvirtual.rs.gov.br'
     if uf == 'RS':
         UFRS[NFE_AMBIENTE_PRODUCAO][u'servidor'] = u'sef.sefaz.rs.gov.br'
     p.ambiente = ambiente
     p.certificado.cert_str = cert
     p.certificado.key_str = key
     p.contingencia_SCAN = scan
     p.salvar_arquivos = False
     processo = p.consultar_cadastro_contribuinte(cpf_cnpj=cpf_cnpj, inscricao_estadual=inscricao_estadual, uf=uf, ambiente=ambiente)
     vals = {'envio': processo.envio.xml,
             'resposta': processo.resposta.xml,
             'status_resposta': processo.resposta.infCons.cStat.valor,
             'status_motivo': processo.resposta.infCons.xMotivo.valor,
             'reason': processo.resposta.reason}
     return vals
    def cancelar_nota(self, cnpj, chave, protocolo, justificativa, cert, key, versao=u'2.00',
                      ambiente=2, estado=u'MG', tipo_contingencia=False):
        """
        Realiza o cancelamento da nfe.
        @param chave:chave da nfe
        @param protocolo: protocolo do processamento da nfe
        @param justificativa: justificativa do cancelamento 
        @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.tipo_contingencia = tipo_contingencia
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.salvar_arquivos = False
        processo = p.cancelar_nota(cnpj, chave_nfe=chave, numero_protocolo=protocolo,
                                   justificativa=justificativa)
        processo.resposta.reason
        vals = {'envio': processo.envio.xml,
                'resposta': processo.processo_cancelamento_nfe.xml,
                'status_resposta': processo.resposta.infEvento.cStat.valor,
                'status_motivo': processo.resposta.infEvento.xMotivo.valor,
                'reason': processo.resposta.reason}
        if processo.resposta.infEvento.cStat.valor == '135':
            vals['protocolo'] = processo.resposta.infEvento.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}
Esempio n. 8
1
    def download_xml(self, cnpj, lista_chaves,  cert, key, ambiente_nacional=True, versao=u'2.00', ambiente=2, estado=u'MG',
                     tipo_contingencia=False):
        """
            Realiza  a consulta do manifesto do destinatário
            @param lista_chaves: lista de até 10 chaves
            @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.
            """
        if len(lista_chaves)>10:
            raise ValueError(u'Maximo de 10 Chaves de Acesso por lote.')
            
        p = ProcessadorNFe()
        p.versao = versao
        p.estado = estado
        if ambiente_nacional:
            ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.tipo_contingencia = tipo_contingencia
        p.salvar_arquivos = False
        processo = p.download_nfe_xml(cnpj, ambiente, lista_chaves=lista_chaves)

        vals = {'envio': processo.envio.xml,
                'resposta': processo.resposta.xml,
                'proc_xml':processo.resposta.original,
                #'status_resposta': processo.resposta.retNFe.cStat.valor,
                #'status_motivo': processo.resposta.retNFe.xMotivo.valor,
                'reason': processo.resposta.reason}
        for i,ret in enumerate(processo.resposta.retNFe):
            vals['status_resp_nota_' + str(i)] = ret.cStat.valor
            vals['status_motivo_nota_' + str(i)] = ret.xMotivo.valor

        return vals
Esempio n. 9
1
    def consultar_nfe_destinatario(self, cnpj, indnfe, indemi, cert, key, nsu='0', versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
        """
            Realiza  a consulta do manifesto do destinatário
            @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 = versao
        p.estado = estado
        #Provisoriamente apontado para um estado que usa o webservice de ambiente nacional, pois em MG ainda não existe suporte ao Manifesto do Destinatário
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.contingencia_SCAN = scan
        p.salvar_arquivos = False
        processo = p.consultar_notas_destinatario(cnpj=cnpj, indnfe=indnfe, indemi=indemi, nsu=nsu)
        resp = processo.resposta
        lista_notas = []
        if resp.cStat.valor == '138':#Documento localizado para o destinatário
            for resp in resp.ret:
                if resp.resNFe.xml:
                    dict_resnfe = {
                        'NSU': resp.resNFe.NSU.valor,
                        'chNFe': resp.resNFe.chNFe.valor,
                        'CNPJ': resp.resNFe.CNPJ.valor,
                        'CPF': resp.resNFe.CPF.valor,
                        'xNome': resp.resNFe.xNome.valor,
                        'IE': resp.resNFe.IE.valor,
                        'dEmi': resp.resNFe.dEmi.valor,
                        'tpNF': resp.resNFe.tpNF.valor,
                        'vNF': resp.resNFe.vNF.valor,
                        'digVal': resp.resNFe.digVal.valor,
                        'dhRecbto': resp.resNFe.dhRecbto.valor,
                        'cSitNFe': resp.resNFe.cSitNFe.valor,
                        'cSitConf': resp.resNFe.cSitConf.valor
                    }
                    lista_notas.append({'resNFe': dict_resnfe})
                if resp.resCanc.xml:
                    dict_rescanc = {
                        'NSU': resp.resCanc.NSU.valor,
                        'chNFe': resp.resCanc.chNFe.valor,
                        'CNPJ': resp.resCanc.CNPJ.valor,
                        'CPF': resp.resCanc.CPF.valor,
                        'xNome': resp.resCanc.xNome.valor,
                        'IE': resp.resCanc.IE.valor,
                        'dEmi': resp.resCanc.dEmi.valor,
                        'tpNF': resp.resCanc.tpNF.valor,
                        'vNF': resp.resCanc.vNF.valor,
                        'digVal': resp.resCanc.digVal.valor,
                        'dhRecbto': resp.resCanc.dhRecbto.valor,
                        'cSitNFe': resp.resCanc.cSitNFe.valor,
                        'cSitConf': resp.resCanc.cSitConf.valor
                    }
                    lista_notas.append({'resCanc': dict_rescanc})
                if resp.resCCe.xml:
                    dict_rescce = {
                        'NSU': resp.resCCe.NSU.valor,
                        'chNFe': resp.resCCe.chNFe.valor,
                        'dhEvento': resp.resCCe.dhEvento.valor,
                        'tpEvento': resp.resCCe.tpEvento.valor,
                        'nSeqEvento': resp.resCCe.nSeqEvento.valor,
                        'descEvento': resp.resCCe.descEvento.valor,
                        'xCorrecao': resp.resCCe.xCorrecao.valor,
                        'tpNF': resp.resCCe.tpNF.valor,
                        'dhRecbto': resp.resCCe.dhRecbto.valor
                    }
                    lista_notas.append({'resCCe': dict_rescce})


        vals = {'envio':processo.envio.xml,
                'resposta': processo.resposta.xml,
                'status_resposta': processo.resposta.cStat.valor,
                'status_motivo': processo.resposta.xMotivo.valor,
                'lista_notas': lista_notas,
                'reason': processo.resposta.reason}

        return vals
Esempio n. 10
0
 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}
Esempio n. 11
0
    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}
Esempio n. 12
0
    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
Esempio n. 13
0
    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
Esempio n. 14
0
 def consultar_cadastro(self, cpf_cnpj, inscricao_estadual, uf, cert, key, versao=u'2.00',
                        ambiente=2, estado=u'MG', tipo_contingencia=False):
     """
         @param chave:chave da 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.versao = versao
     p.estado = estado
     if uf in ('AC', 'RN', 'PB', 'SC', 'AC', 'AL', 'AP', 'DF', 'PB', 'RJ', 'RN', 'RO', 'RR',
               'SC', 'SE', 'TO'):
         SVRS[NFE_AMBIENTE_PRODUCAO][u'servidor'] = u'svp-ws.sefazvirtual.rs.gov.br'
     if uf == 'RS':
         UFRS[NFE_AMBIENTE_PRODUCAO][u'servidor'] = u'sef.sefaz.rs.gov.br'
     p.ambiente = ambiente
     p.certificado.cert_str = cert
     p.certificado.key_str = key
     p.tipo_contingencia = tipo_contingencia
     p.salvar_arquivos = False
     processo = p.consultar_cadastro_contribuinte(cpf_cnpj=cpf_cnpj,
                                                  inscricao_estadual=inscricao_estadual, uf=uf,
                                                  ambiente=ambiente)
     vals = {'envio': processo.envio.xml,
             'resposta': processo.resposta.xml,
             'status_resposta': processo.resposta.infCons.cStat.valor,
             'status_motivo': processo.resposta.infCons.xMotivo.valor,
             'reason': processo.resposta.reason}
     return vals
Esempio n. 15
0
    def download_xml(self, cnpj, chave,  cert, key, versao=u'2.00', ambiente=2, estado=u'MG',
                     tipo_contingencia=False):
        """
            Realiza  a consulta do manifesto do destinatário
            @param chave:chave da 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.versao = versao
        p.estado = estado
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.tipo_contingencia = tipo_contingencia
        p.salvar_arquivos = False
        processo = p.download_nfe_xml(cnpj, ambiente, chave_nfe=chave)

        vals = {'envio': processo.envio.xml,
                'resposta': processo.resposta.xml,
                'proc_xml':processo.resposta.original,
                'status_resposta': processo.resposta.retNFe.cStat.valor,
                'status_motivo': processo.resposta.retNFe.xMotivo.valor,
                'reason': processo.resposta.reason}


        return vals
Esempio n. 16
0
    def efetuar_manifesto(self, cnpj, tipo_evento, chave,  cert, key, versao=u'2.00', ambiente=2,
                          estado=u'MG', tipo_contingencia=False):
        """
            Realiza o manifesto do destinatário
            @param chave:chave da 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.versao = versao
        p.estado = estado
        #Provisoriamente apontado para um estado que usa o webservice de ambiente nacional,
        # pois em MG ainda não existe suporte ao Manifesto do Destinatário
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.tipo_contingencia = tipo_contingencia
        p.salvar_arquivos = False
        processo = p.consultar_manifesto_destinatario(cnpj, tipo_evento=tipo_evento, chave_nfe=chave)

        vals = {'envio': processo.envio.xml,
                'resposta': processo.processo_evento_nfe.xml,
                'status_resposta': processo.resposta.infEvento.cStat.valor,
                'status_motivo': processo.resposta.infEvento.xMotivo.valor,
                'reason': processo.resposta.reason}
        if processo.resposta.infEvento.cStat.valor == '135':
            vals['protocolo'] = processo.resposta.infEvento.nProt.valor

        return vals
Esempio n. 17
0
 def consultar_nfe(self,chave, cert, key, versao=u'2.00', ambiente=2, estado=u'MG',
                   tipo_contingencia=False):
     """
         @param chave:chave da 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.versao = versao
     p.estado = estado
     p.ambiente = ambiente
     p.certificado.cert_str = cert
     p.certificado.key_str = key
     p.tipo_contingencia=tipo_contingencia
     p.salvar_arquivos = False
     processo, arquivos = p.consultar_nota(chave_nfe=chave)
     vals = {'envio': processo.envio.xml,
             'resposta': processo.resposta.xml,
             'status_resposta': processo.resposta.cStat.valor,
             'status_motivo': processo.resposta.xMotivo.valor,
             'reason': processo.resposta.reason,
             'arquivos':arquivos}
     return vals
Esempio n. 18
0
  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
              }
Esempio n. 19
0
    def emitir_carta_correcao(self, chave, cnpj, texto_correcao, cert, key, sequencia=None,
                              versao=u'2.00', ambiente=2, estado=u'MG',
                              tipo_contingencia=False):
        """
            @param chave:chave da 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.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
        processo = p.corrigir_nota(chave_nfe=chave, cnpj=cnpj, texto_correcao=texto_correcao,
                                   ambiente=ambiente,sequencia=sequencia)
        processo.resposta.reason
        vals = {'envio': processo.envio.xml,
                'resposta': processo.processo_correcao_nfe.xml,
                'status_resposta': processo.resposta.infEvento.cStat.valor,
                'status_motivo': processo.resposta.infEvento.xMotivo.valor,
                'reason': processo.resposta.reason}
        if processo.resposta.infEvento.cStat.valor == '135':
            vals['protocolo'] = processo.resposta.infEvento.nProt.valor

        return vals
Esempio n. 20
0
 def cancelar_nota(self,chave,protocolo,justificativa,cert,key,versao=u'2.00',ambiente=2,estado=u'MG',scan=False):
     
     """
     Realiza o cancelamento da nfe.
     @param chave:chave da nfe
     @param protocolo: protocolo do processamento da nfe
     @param justificativa: justificativa do cancelamento 
     @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=versao
     p.estado=estado 
     p.ambiente=ambiente
     p.certificado.cert_str=cert
     p.certificado.key_str=key
     processo = p.cancelar_nota(chave_nfe=chave,numero_protocolo=protocolo,justificativa=justificativa)
     p.salvar_arquivos=False
     p.contingencia_SCAN=scan
 
     processo.envio.xml
     processo.resposta.xml
     processo.resposta.reason
     
     return {'envio':processo.envio.xml,'resposta':processo.resposta.xml,'reason':processo.resposta.reason}
Esempio n. 21
0
    def emitir_carta_correcao(self, chave, cnpj, texto_correcao, cert, key, sequencia=None,versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
        """
            @param chave:chave da 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 scan: habilita a contigência SCAN.
            @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.contingencia_SCAN = scan
        p.salvar_arquivos = False
        p.contingencia_SCAN = scan
        processo = p.corrigir_nota(chave_nfe=chave, cnpj=cnpj, texto_correcao=texto_correcao, ambiente=ambiente,sequencia=sequencia)
        processo.resposta.reason
        vals = {'envio': processo.envio.xml,
                'resposta': processo.processo_correcao_nfe.xml,
                'status_resposta': processo.resposta.infEvento.cStat.valor,
                'status_motivo': processo.resposta.infEvento.xMotivo.valor,
                'reason': processo.resposta.reason}
        if processo.resposta.infEvento.cStat.valor == '135':
            vals['protocolo'] = processo.resposta.infEvento.nProt.valor

        return vals
Esempio n. 22
0
    def download_xml(self, cnpj, chave,  cert, key, versao=u'2.00', ambiente=2, estado=u'MG', scan=False):
        """
            Realiza  a consulta do manifesto do destinatário
            @param chave:chave da 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 scan: habilita a contigência SCAN.
            @return: Dicionário com o envio,resposta e reason.
            """
        p = ProcessadorNFe()
        p.versao = versao
        p.estado = estado
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.contingencia_SCAN = scan
        p.salvar_arquivos = False
        processo = p.download_nfe_xml(cnpj, ambiente, chave_nfe=chave)

        vals = {'envio': processo.envio.xml,
                'resposta': processo.resposta.xml,
                'proc_xml':processo.resposta.original,
                'status_resposta': processo.resposta.retNFe.cStat.valor,
                'status_motivo': processo.resposta.retNFe.xMotivo.valor,
                'reason': processo.resposta.reason}


        return vals
Esempio n. 23
0
    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
        }
Esempio n. 24
0
    def consultar_nfe_destinatario(self, cnpj, indnfe, indemi, cert, key, nsu='0', versao=u'2.00',
                                   ambiente=2, estado=u'MG', tipo_contingencia=False):
        """
            Realiza  a consulta do manifesto do destinatário
            @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
        #Provisoriamente apontado para um estado que usa o webservice de ambiente nacional, pois em MG ainda
        # não existe suporte ao Manifesto do Destinatário
        ESTADO_WS[estado] = SVAN
        p.ambiente = ambiente
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.tipo_contingencia = tipo_contingencia
        p.salvar_arquivos = False
        processo = p.consultar_notas_destinatario(cnpj=cnpj, indnfe=indnfe, indemi=indemi, nsu=nsu)
        resp = processo.resposta
        lista_notas = []
        if resp.cStat.valor == '138':#Documento localizado para o destinatário
            for resp in resp.ret:
                if resp.resNFe.xml:
                    dict_resnfe = {
                        'NSU': resp.resNFe.NSU.valor,
                        'chNFe': resp.resNFe.chNFe.valor,
                        'CNPJ': resp.resNFe.CNPJ.valor,
                        'CPF': resp.resNFe.CPF.valor,
                        'xNome': resp.resNFe.xNome.valor,
                        'IE': resp.resNFe.IE.valor,
                        'dEmi': resp.resNFe.dEmi.valor,
                        'tpNF': resp.resNFe.tpNF.valor,
                        'vNF': resp.resNFe.vNF.valor,
                        'digVal': resp.resNFe.digVal.valor,
                        'dhRecbto': resp.resNFe.dhRecbto.valor,
                        'cSitNFe': resp.resNFe.cSitNFe.valor,
                        'cSitConf': resp.resNFe.cSitConf.valor
                    }
                    lista_notas.append({'resNFe': dict_resnfe})
                if resp.resCanc.xml:
                    dict_rescanc = {
                        'NSU': resp.resCanc.NSU.valor,
                        'chNFe': resp.resCanc.chNFe.valor,
                        'CNPJ': resp.resCanc.CNPJ.valor,
                        'CPF': resp.resCanc.CPF.valor,
                        'xNome': resp.resCanc.xNome.valor,
                        'IE': resp.resCanc.IE.valor,
                        'dEmi': resp.resCanc.dEmi.valor,
                        'tpNF': resp.resCanc.tpNF.valor,
                        'vNF': resp.resCanc.vNF.valor,
                        'digVal': resp.resCanc.digVal.valor,
                        'dhRecbto': resp.resCanc.dhRecbto.valor,
                        'cSitNFe': resp.resCanc.cSitNFe.valor,
                        'cSitConf': resp.resCanc.cSitConf.valor
                    }
                    lista_notas.append({'resCanc': dict_rescanc})
                if resp.resCCe.xml:
                    dict_rescce = {
                        'NSU': resp.resCCe.NSU.valor,
                        'chNFe': resp.resCCe.chNFe.valor,
                        'dhEvento': resp.resCCe.dhEvento.valor,
                        'tpEvento': resp.resCCe.tpEvento.valor,
                        'nSeqEvento': resp.resCCe.nSeqEvento.valor,
                        'descEvento': resp.resCCe.descEvento.valor,
                        'xCorrecao': resp.resCCe.xCorrecao.valor,
                        'tpNF': resp.resCCe.tpNF.valor,
                        'dhRecbto': resp.resCCe.dhRecbto.valor
                    }
                    lista_notas.append({'resCCe': dict_rescce})


        vals = {'envio':processo.envio.xml,
                'resposta': processo.resposta.xml,
                'status_resposta': processo.resposta.cStat.valor,
                'status_motivo': processo.resposta.xMotivo.valor,
                'lista_notas': lista_notas,
                'reason': processo.resposta.reason}

        return vals