Esempio n. 1
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. 2
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
Esempio n. 3
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. 4
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. 5
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. 6
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. 7
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. 8
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. 9
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. 10
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. 11
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, numero_lote, resposta, status_resposta,status_motivo e reason.
        """

        p = ProcessadorNFe()
        p.ambiente = ambiente
        p.estado = estado
        p.certificado.cert_str = cert
        p.certificado.key_str = key
        p.salvar_arquivos = True
        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
        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