Exemplo n.º 1
0
    def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
        difs = []  # si hay reproceso, verifico las diferencias con AFIP

        ret = self.client.FECompConsultar(Auth={
            'Token': self.Token,
            'Sign': self.Sign,
            'Cuit': self.Cuit
        },
                                          FeCompConsReq={
                                              'CbteTipo': tipo_cbte,
                                              'CbteNro': cbte_nro,
                                              'PtoVta': punto_vta,
                                          })

        result = ret['FECompConsultarResult']
        if 'ResultGet' in result:
            resultget = result['ResultGet']

            if reproceso:
                # verifico los campos registrados coincidan con los enviados:
                f = self.factura
                verificaciones = {
                    'Concepto':
                    f['concepto'],
                    'DocTipo':
                    f['tipo_doc'],
                    'DocNro':
                    f['nro_doc'],
                    'CbteDesde':
                    f['cbt_desde'],
                    'CbteHasta':
                    f['cbt_hasta'],
                    'CbteFch':
                    f['fecha_cbte'],
                    'ImpTotal':
                    f['imp_total'] and float(f['imp_total']) or 0.0,
                    'ImpTotConc':
                    f['imp_tot_conc'] and float(f['imp_tot_conc']) or 0.0,
                    'ImpNeto':
                    f['imp_neto'] and float(f['imp_neto']) or 0.0,
                    'ImpOpEx':
                    f['imp_op_ex'] and float(f['imp_op_ex']) or 0.0,
                    'ImpTrib':
                    f['imp_trib'] and float(f['imp_trib']) or 0.0,
                    'ImpIVA':
                    f['imp_iva'] and float(f['imp_iva']) or 0.0,
                    'FchServDesde':
                    f.get('fecha_serv_desde'),
                    'FchServHasta':
                    f.get('fecha_serv_hasta'),
                    'FchVtoPago':
                    f.get('fecha_venc_pago'),
                    'FchServDesde':
                    f.get('fecha_serv_desde'),
                    'FchServHasta':
                    f.get('fecha_serv_hasta'),
                    'FchVtoPago':
                    f['fecha_venc_pago'],
                    'MonId':
                    f['moneda_id'],
                    'MonCotiz':
                    float(f['moneda_ctz']),
                    'CbtesAsoc': [{
                        'CbteAsoc': {
                            'Tipo': cbte_asoc['tipo'],
                            'PtoVta': cbte_asoc['pto_vta'],
                            'Nro': cbte_asoc['nro']
                        }
                    } for cbte_asoc in f['cbtes_asoc']],
                    'Tributos': [{
                        'Tributo': {
                            'Id': tributo['tributo_id'],
                            'Desc': tributo['desc'],
                            'BaseImp': float(tributo['base_imp']),
                            'Alic': float(tributo['alic']),
                            'Importe': float(tributo['importe']),
                        }
                    } for tributo in f['tributos']],
                    'Iva': [{
                        'AlicIva': {
                            'Id': iva['iva_id'],
                            'BaseImp': float(iva['base_imp']),
                            'Importe': float(iva['importe']),
                        }
                    } for iva in f['iva']],
                }
                verifica(verificaciones, resultget.copy(), difs)
                if difs:
                    print "Diferencias:", difs
                    self.log("Diferencias: %s" % difs)
            self.FechaCbte = resultget['CbteFch']  #.strftime("%Y/%m/%d")
            self.CbteNro = resultget['CbteHasta']  # 1L
            self.PuntoVenta = resultget['PtoVta']  # 4000
            self.Vencimiento = resultget['FchVto']  #.strftime("%Y/%m/%d")
            self.ImpTotal = str(resultget['ImpTotal'])
            cod_aut = resultget['CodAutorizacion'] and str(
                resultget['CodAutorizacion']) or ''  # 60423794871430L
            self.Resultado = resultget['Resultado']
            self.CbtDesde = resultget['CbteDesde']
            self.CbtHasta = resultget['CbteHasta']
            self.ImpTotal = resultget['ImpTotal']
            self.ImpNeto = resultget['ImpNeto']
            self.ImptoLiq = self.ImpIVA = resultget['ImpIVA']
            self.ImpOpEx = resultget['ImpOpEx']
            self.ImpTrib = resultget['ImpTrib']
            self.EmisionTipo = resultget['EmisionTipo']
            if self.EmisionTipo == 'CAE':
                self.CAE = cod_aut
            elif self.EmisionTipo == 'CAEA':
                self.CAEA = cod_aut

        self.__analizar_errores(result)
        if not difs:
            return self.CAE or self.CAEA
        else:
            return ''
Exemplo n.º 2
0
    def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
        difs = [] # si hay reproceso, verifico las diferencias con AFIP

        ret = self.client.FECompConsultar(
            Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit},
            FeCompConsReq={
                'CbteTipo': tipo_cbte,
                'CbteNro': cbte_nro,
                'PtoVta': punto_vta,
            })
        
        result = ret['FECompConsultarResult']
        if 'ResultGet' in result:
            resultget = result['ResultGet']
            
            if reproceso:
                # verifico los campos registrados coincidan con los enviados:
                f = self.factura
                verificaciones = {
                    'Concepto': f['concepto'],
                    'DocTipo': f['tipo_doc'],
                    'DocNro': f['nro_doc'],
                    'CbteDesde': f['cbt_desde'],
                    'CbteHasta': f['cbt_hasta'],
                    'CbteFch': f['fecha_cbte'],
                    'ImpTotal': float(f['imp_total']),
                    'ImpTotConc': float(f['imp_tot_conc']),
                    'ImpNeto': float(f['imp_neto']),
                    'ImpOpEx': float(f['imp_op_ex']),
                    'ImpTrib': f['imp_trib'] and float(f['imp_trib']) or 0.0,
                    'ImpIVA': f['imp_iva'] and float(f['imp_iva']) or 0.0,
                    'FchServDesde': f.get('fecha_serv_desde'),
                    'FchServHasta': f.get('fecha_serv_hasta'),
                    'FchVtoPago': f.get('fecha_venc_pago'),
                    'FchServDesde': f.get('fecha_serv_desde'),
                    'FchServHasta': f.get('fecha_serv_hasta'),
                    'FchVtoPago': f['fecha_venc_pago'],
                    'MonId': f['moneda_id'],
                    'MonCotiz': float(f['moneda_ctz']),
                    'CbtesAsoc': [
                        {'CbteAsoc': {
                            'Tipo': cbte_asoc['tipo'],
                            'PtoVta': cbte_asoc['pto_vta'], 
                            'Nro': cbte_asoc['nro']}}
                        for cbte_asoc in f['cbtes_asoc']],
                    'Tributos': [
                        {'Tributo': {
                            'Id': tributo['tributo_id'], 
                            'Desc': tributo['desc'],
                            'BaseImp': float(tributo['base_imp']),
                            'Alic': float(tributo['alic']),
                            'Importe': float(tributo['importe']),
                            }}
                        for tributo in f['tributos']],
                    'Iva': [ 
                        {'AlicIva': {
                            'Id': iva['iva_id'],
                            'BaseImp': float(iva['base_imp']),
                            'Importe': float(iva['importe']),
                            }}
                        for iva in f['iva']],
                    }
                verifica(verificaciones, resultget, difs)
                if difs:
                    print "Diferencias:", difs
                    self.log("Diferencias: %s" % difs)
            self.FechaCbte = resultget['CbteFch'] #.strftime("%Y/%m/%d")
            self.CbteNro = resultget['CbteHasta'] # 1L
            self.PuntoVenta = resultget['PtoVta'] # 4000
            self.Vencimiento = resultget['FchVto'] #.strftime("%Y/%m/%d")
            self.ImpTotal = str(resultget['ImpTotal'])
            cod_aut = resultget['CodAutorizacion'] and str(resultget['CodAutorizacion']) or ''# 60423794871430L
            self.Resultado = resultget['Resultado']
            self.CbtDesde =resultget['CbteDesde']
            self.CbtHasta = resultget['CbteHasta']
            self.ImpTotal = resultget['ImpTotal']
            self.ImpNeto = resultget['ImpNeto']
            self.ImptoLiq = self.ImpIVA = resultget['ImpIVA']
            self.ImpOpEx = resultget['ImpOpEx']
            self.ImpTrib = resultget['ImpTrib']
            self.EmisionTipo = resultget['EmisionTipo']
            if self.EmisionTipo=='CAE':
                self.CAE = cod_aut
            elif self.EmisionTipo=='CAEA':
                self.CAEA = cod_aut

        self.__analizar_errores(result)
        if not difs:
            return self.CAE or self.CAEA
        else:
            return ''
Exemplo n.º 3
0
 def ConsultarComprobante(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
     "Recuperar los datos completos de un comprobante ya autorizado"
     res = self.client.consultarComprobanteTipoPVentaNro(
         authRequest={'token': self.Token, 'sign': self.Sign, 'cuitRepresentada': self.Cuit},
         codigoTipoComprobante=tipo_cbte,
         numeroPuntoVenta=punto_vta,
         numeroComprobante=cbte_nro,
         )
     ret = res.get('consultarComprobanteReturn', {})
     # diferencias si hay reproceso:
     difs = []
     # analizo el resultado:
     if 'comprobante' in ret:
             cbteresp = ret['comprobante']
             if reproceso:
                 # verifico los campos registrados coincidan con los enviados:
                 f = self.factura
                 verificaciones = {
                     'codigoTipoComprobante': f['tipo_cbte'],
                     'numeroPuntoVenta': f['punto_vta'],
                     'codigoTipoDocumento': f['tipo_doc'],
                     'numeroDocumento': f['nro_doc'],
                     'numeroComprobante': f['cbt_desde'],
                     'numeroComprobante': f['cbt_hasta'],
                     'fechaEmision': f['fecha_cbte'],
                     'idImpositivo': f['id_impositivo'],
                     'codigoPais': f['cod_pais'], 'domicilioReceptor': f['domicilio'],
                     'codigoRelacionEmisorReceptor': f['cod_relacion'],
                     'importeTotal': decimal.Decimal(str(f['imp_total'])),
                     'importeNoGravado': decimal.Decimal(str(f['imp_tot_conc'])),
                     'importeGravado': decimal.Decimal(str(f['imp_neto'])),
                     'importeExento': decimal.Decimal(str(f['imp_op_ex'])),
                     'importeOtrosTributos': f['tributos'] and decimal.Decimal(str(f['imp_trib'])) or None,
                     'importeSubtotal': f['imp_subtotal'],
                     'importeReintegro': f['imp_reintegro'],
                     'codigoMoneda': f['moneda_id'],
                     'cotizacionMoneda': str(decimal.Decimal(str(f['moneda_ctz']))),
                     'arrayItems': [
                         {'item': {
                             'tipo': it['tipo'],
                             'codigoTurismo': it['cod_tur'],
                             'codigo': it['codigo'],
                             'descripcion': it['ds'],
                             'codigoAlicuotaIVA': decimal.Decimal(str(it['iva_id'])),
                             'importeIVA': decimal.Decimal(str(it['imp_iva'])) if int(f['tipo_cbte']) not in (6, 7, 8) and it['imp_iva'] is not None else None,
                             'importeItem': decimal.Decimal(str(it['imp_subtotal'])),
                             }}
                         for it in f['detalles']],
                     'arrayComprobantesAsociados': [
                         {'comprobanteAsociado': {
                             'codigoTipoComprobante': cbte_asoc['tipo'],
                             'numeroPuntoVenta': cbte_asoc['pto_vta'], 
                             'numeroComprobante': cbte_asoc['nro']}}
                         for cbte_asoc in f['cbtes_asoc']],
                     'arrayOtrosTributos': [
                         {'otroTributo': {
                             'codigo': tributo['tributo_id'], 
                             'descripcion': tributo['desc'],
                             'baseImponible': decimal.Decimal(str(tributo['base_imp'])),
                             'importe': decimal.Decimal(str(tributo['importe'])),
                             }}
                         for tributo in f['tributos']],
                     'arraySubtotalesIVA': [ 
                         {'subtotalIVA': {
                             'codigo': iva['iva_id'],
                             'importe': decimal.Decimal(str(iva['importe'])),
                             }}
                         for iva in f['iva']],
                     }
                 verifica(verificaciones, cbteresp, difs)
                 if difs:
                     print "Diferencias:", difs
                     self.log("Diferencias: %s" % difs)
             self.FechaCbte = cbteresp['fechaEmision'].strftime("%Y/%m/%d")
             self.CbteNro = cbteresp['numeroComprobante'] # 1L
             self.PuntoVenta = cbteresp['numeroPuntoVenta'] # 4000
             self.Vencimiento = cbteresp['fechaVencimiento'].strftime("%Y/%m/%d")
             self.ImpTotal = str(cbteresp['importeTotal'])
             self.CAE = str(cbteresp['codigoAutorizacion']) # 60423794871430L
             self.EmisionTipo =  cbteresp['codigoTipoAutorizacion']=='A' and 'CAEA' or 'CAE'
     self.__analizar_errores(ret)
     if not difs:
         return self.CAE
Exemplo n.º 4
0
 def ConsultarComprobante(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
     "Recuperar los datos completos de un comprobante ya autorizado"
     res = self.client.consultarComprobanteTipoPVentaNro(
         authRequest={'token': self.Token, 'sign': self.Sign, 'cuitRepresentada': self.Cuit},
         codigoTipoComprobante=tipo_cbte,
         numeroPuntoVenta=punto_vta,
         numeroComprobante=cbte_nro,
         )
     ret = res.get('consultarComprobanteReturn', {})
     # diferencias si hay reproceso:
     difs = []
     # analizo el resultado:
     if 'comprobante' in ret:
             cbteresp = ret['comprobante']
             if reproceso:
                 # verifico los campos registrados coincidan con los enviados:
                 f = self.factura
                 verificaciones = {
                     'codigoTipoComprobante': f['tipo_cbte'],
                     'numeroPuntoVenta': f['punto_vta'],
                     'codigoTipoDocumento': f['tipo_doc'],
                     'numeroDocumento': f['nro_doc'],
                     'numeroComprobante': f['cbt_desde'],
                     'numeroComprobante': f['cbt_hasta'],
                     'fechaEmision': f['fecha_cbte'],
                     'idImpositivo': f['id_impositivo'],
                     'codigoPais': f['cod_pais'], 'domicilioReceptor': f['domicilio'],
                     'codigoRelacionEmisorReceptor': f['cod_relacion'],
                     'importeTotal': decimal.Decimal(str(f['imp_total'])),
                     'importeNoGravado': decimal.Decimal(str(f['imp_tot_conc'])),
                     'importeGravado': decimal.Decimal(str(f['imp_neto'])),
                     'importeExento': decimal.Decimal(str(f['imp_op_ex'])),
                     'importeOtrosTributos': f['tributos'] and decimal.Decimal(str(f['imp_trib'])) or None,
                     'importeSubtotal': f['imp_subtotal'],
                     'importeReintegro': f['imp_reintegro'],
                     'codigoMoneda': f['moneda_id'],
                     'cotizacionMoneda': str(decimal.Decimal(str(f['moneda_ctz']))),
                     'arrayItems': [
                         {'item': {
                             'tipo': it['tipo'],
                             'codigoTurismo': it['cod_tur'],
                             'codigo': it['codigo'],
                             'descripcion': it['ds'],
                             'codigoAlicuotaIVA': decimal.Decimal(str(it['iva_id'])),
                             'importeIVA': decimal.Decimal(str(it['imp_iva'])) if int(f['tipo_cbte']) not in (6, 7, 8) and it['imp_iva'] is not None else None,
                             'importeItem': decimal.Decimal(str(it['imp_subtotal'])),
                             }}
                         for it in f['detalles']],
                     'arrayComprobantesAsociados': [
                         {'comprobanteAsociado': {
                             'codigoTipoComprobante': cbte_asoc['tipo'],
                             'numeroPuntoVenta': cbte_asoc['pto_vta'], 
                             'numeroComprobante': cbte_asoc['nro']}}
                         for cbte_asoc in f['cbtes_asoc']],
                     'arrayOtrosTributos': [
                         {'otroTributo': {
                             'codigo': tributo['tributo_id'], 
                             'descripcion': tributo['desc'],
                             'baseImponible': decimal.Decimal(str(tributo['base_imp'])),
                             'importe': decimal.Decimal(str(tributo['importe'])),
                             }}
                         for tributo in f['tributos']],
                     'arraySubtotalesIVA': [ 
                         {'subtotalIVA': {
                             'codigo': iva['iva_id'],
                             'importe': decimal.Decimal(str(iva['importe'])),
                             }}
                         for iva in f['iva']],
                     }
                 verifica(verificaciones, cbteresp, difs)
                 if difs:
                     print "Diferencias:", difs
                     self.log("Diferencias: %s" % difs)
             self.FechaCbte = cbteresp['fechaEmision'].strftime("%Y/%m/%d")
             self.CbteNro = cbteresp['numeroComprobante'] # 1L
             self.PuntoVenta = cbteresp['numeroPuntoVenta'] # 4000
             self.Vencimiento = cbteresp['fechaVencimiento'].strftime("%Y/%m/%d")
             self.ImpTotal = str(cbteresp['importeTotal'])
             self.CAE = str(cbteresp['codigoAutorizacion']) # 60423794871430L
             self.EmisionTipo =  cbteresp['codigoTipoAutorizacion']=='A' and 'CAEA' or 'CAE'
     self.__analizar_errores(ret)
     if not difs:
         return self.CAE
Exemplo n.º 5
0
    def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
        difs = []  # si hay reproceso, verifico las diferencias con AFIP

        ret = self.client.FECompConsultar(
            Auth={"Token": self.Token, "Sign": self.Sign, "Cuit": self.Cuit},
            FeCompConsReq={"CbteTipo": tipo_cbte, "CbteNro": cbte_nro, "PtoVta": punto_vta},
        )

        result = ret["FECompConsultarResult"]
        if "ResultGet" in result:
            resultget = result["ResultGet"]

            if reproceso:
                # verifico los campos registrados coincidan con los enviados:
                f = self.factura
                verificaciones = {
                    "Concepto": f["concepto"],
                    "DocTipo": f["tipo_doc"],
                    "DocNro": f["nro_doc"],
                    "CbteDesde": f["cbt_desde"],
                    "CbteHasta": f["cbt_hasta"],
                    "CbteFch": f["fecha_cbte"],
                    "ImpTotal": f["imp_total"] and float(f["imp_total"]) or 0.0,
                    "ImpTotConc": f["imp_tot_conc"] and float(f["imp_tot_conc"]) or 0.0,
                    "ImpNeto": f["imp_neto"] and float(f["imp_neto"]) or 0.0,
                    "ImpOpEx": f["imp_op_ex"] and float(f["imp_op_ex"]) or 0.0,
                    "ImpTrib": f["imp_trib"] and float(f["imp_trib"]) or 0.0,
                    "ImpIVA": f["imp_iva"] and float(f["imp_iva"]) or 0.0,
                    "FchServDesde": f.get("fecha_serv_desde"),
                    "FchServHasta": f.get("fecha_serv_hasta"),
                    "FchVtoPago": f.get("fecha_venc_pago"),
                    "FchServDesde": f.get("fecha_serv_desde"),
                    "FchServHasta": f.get("fecha_serv_hasta"),
                    "FchVtoPago": f["fecha_venc_pago"],
                    "MonId": f["moneda_id"],
                    "MonCotiz": float(f["moneda_ctz"]),
                    "CbtesAsoc": [
                        {
                            "CbteAsoc": {
                                "Tipo": cbte_asoc["tipo"],
                                "PtoVta": cbte_asoc["pto_vta"],
                                "Nro": cbte_asoc["nro"],
                            }
                        }
                        for cbte_asoc in f["cbtes_asoc"]
                    ],
                    "Tributos": [
                        {
                            "Tributo": {
                                "Id": tributo["tributo_id"],
                                "Desc": tributo["desc"],
                                "BaseImp": float(tributo["base_imp"]),
                                "Alic": float(tributo["alic"]),
                                "Importe": float(tributo["importe"]),
                            }
                        }
                        for tributo in f["tributos"]
                    ],
                    "Iva": [
                        {
                            "AlicIva": {
                                "Id": iva["iva_id"],
                                "BaseImp": float(iva["base_imp"]),
                                "Importe": float(iva["importe"]),
                            }
                        }
                        for iva in f["iva"]
                    ],
                }
                verifica(verificaciones, resultget.copy(), difs)
                if difs:
                    print "Diferencias:", difs
                    self.log("Diferencias: %s" % difs)
            self.FechaCbte = resultget["CbteFch"]  # .strftime("%Y/%m/%d")
            self.CbteNro = resultget["CbteHasta"]  # 1L
            self.PuntoVenta = resultget["PtoVta"]  # 4000
            self.Vencimiento = resultget["FchVto"]  # .strftime("%Y/%m/%d")
            self.ImpTotal = str(resultget["ImpTotal"])
            cod_aut = resultget["CodAutorizacion"] and str(resultget["CodAutorizacion"]) or ""  # 60423794871430L
            self.Resultado = resultget["Resultado"]
            self.CbtDesde = resultget["CbteDesde"]
            self.CbtHasta = resultget["CbteHasta"]
            self.ImpTotal = resultget["ImpTotal"]
            self.ImpNeto = resultget["ImpNeto"]
            self.ImptoLiq = self.ImpIVA = resultget["ImpIVA"]
            self.ImpOpEx = resultget["ImpOpEx"]
            self.ImpTrib = resultget["ImpTrib"]
            self.EmisionTipo = resultget["EmisionTipo"]
            if self.EmisionTipo == "CAE":
                self.CAE = cod_aut
            elif self.EmisionTipo == "CAEA":
                self.CAEA = cod_aut

        self.__analizar_errores(result)
        if not difs:
            return self.CAE or self.CAEA
        else:
            return ""
Exemplo n.º 6
0
 def ConsultarComprobante(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
     "Recuperar los datos completos de un comprobante ya autorizado"
     ret = self.client.consultarComprobante(
         authRequest={'token': self.Token, 'sign': self.Sign, 'cuitRepresentada': self.Cuit},
         consultaComprobanteRequest = {
             'codigoTipoComprobante': tipo_cbte,
             'numeroPuntoVenta': punto_vta,
             'numeroComprobante': cbte_nro,
             },
         )
     # diferencias si hay reproceso:
     difs = []
     # analizo el resultado:
     if 'comprobante' in ret:
             cbteresp = ret['comprobante']
             if reproceso:
                 # verifico los campos registrados coincidan con los enviados:
                 f = self.factura
                 verificaciones = {
                     'codigoTipoComprobante': f['tipo_cbte'],
                     'numeroPuntoVenta': f['punto_vta'],
                     'codigoConcepto': f['concepto'],
                     'codigoTipoDocumento': f['tipo_doc'],
                     'numeroDocumento': f['nro_doc'],
                     'numeroComprobante': f['cbt_desde'],
                     'numeroComprobante': f['cbt_hasta'],
                     'fechaEmision': f['fecha_cbte'],
                     'importeTotal': decimal.Decimal(f['imp_total']),
                     'importeNoGravado': decimal.Decimal(f['imp_tot_conc']),
                     'importeGravado': decimal.Decimal(f['imp_neto']),
                     'importeExento': decimal.Decimal(f['imp_op_ex']),
                     'importeOtrosTributos': f['tributos'] and decimal.Decimal(f['imp_trib']) or None,
                     'importeSubtotal': f['imp_subtotal'],
                     'fechaServicioDesde': f.get('fecha_serv_desde'),
                     'fechaServicioHasta': f.get('fecha_serv_hasta'),
                     'fechaVencimientoPago': f.get('fecha_venc_pago'),
                     'codigoMoneda': f['moneda_id'],
                     'cotizacionMoneda': decimal.Decimal(f['moneda_ctz']),
                     'arrayItems': [
                         {'item': {
                             'unidadesMtx': it['u_mtx'],
                             'codigoMtx': it['cod_mtx'],
                             'codigo': it['codigo'],                
                             'descripcion': it['ds'],
                             'cantidad': it['qty'] and decimal.Decimal(it['qty']),
                             'codigoUnidadMedida': it['umed'],
                             'precioUnitario': it['precio'] and decimal.Decimal(it['precio']) or None,
                             #'importeBonificacion': it['bonif'],
                             'codigoCondicionIVA': decimal.Decimal(it['iva_id']),
                             'importeIVA': decimal.Decimal(it['imp_iva']) if int(f['tipo_cbte']) not in (6, 7, 8) and it['imp_iva'] is not None else None,
                             'importeItem': decimal.Decimal(it['imp_subtotal']),
                             }}
                         for it in f['detalles']],
                     'arrayComprobantesAsociados': [
                         {'comprobanteAsociado': {
                             'codigoTipoComprobante': cbte_asoc['tipo'],
                             'numeroPuntoVenta': cbte_asoc['pto_vta'], 
                             'numeroComprobante': cbte_asoc['nro']}}
                         for cbte_asoc in f['cbtes_asoc']],
                     'arrayOtrosTributos': [
                         {'otroTributo': {
                             'codigo': tributo['tributo_id'], 
                             'descripcion': tributo['desc'],
                             'baseImponible': decimal.Decimal(tributo['base_imp']),
                             'importe': decimal.Decimal(tributo['importe']),
                             }}
                         for tributo in f['tributos']],
                     'arraySubtotalesIVA': [ 
                         {'subtotalIVA': {
                             'codigo': iva['iva_id'],
                             'importe': decimal.Decimal(iva['importe']),
                             }}
                         for iva in f['iva']],
                     }
                 verifica(verificaciones, cbteresp, difs)
                 if difs:
                     print "Diferencias:", difs
                     self.__log("Diferencias: %s" % difs)
             self.FechaCbte = cbteresp['fechaEmision'].strftime("%Y/%m/%d")
             self.CbteNro = cbteresp['numeroComprobante'] # 1L
             self.PuntoVenta = cbteresp['numeroPuntoVenta'] # 4000
             self.Vencimiento = cbteresp['fechaVencimiento'].strftime("%Y/%m/%d")
             self.ImpTotal = str(cbteresp['importeTotal'])
             self.CAE = str(cbteresp['codigoAutorizacion']) # 60423794871430L
             self.EmisionTipo =  cbteresp['codigoTipoAutorizacion']=='A' and 'CAEA' or 'CAE'
     self.__analizar_errores(ret)
     if not difs:
         return self.CAE