def get_partner_info(partner, in_invoice, nombre_razon=False): vat_type = partner.sii_get_vat_type() contraparte = {} if nombre_razon: contraparte['NombreRazon'] = unidecode_str(partner.name) partner_country = partner.country_id or partner.country if vat_type == '02': if not partner.aeat_registered and not in_invoice: contraparte['IDOtro'] = { 'CodigoPais': partner_country.code, 'IDType': '07', 'ID': VAT.clean_vat(partner.vat) } else: contraparte['NIF'] = VAT.clean_vat(partner.vat) else: contraparte['IDOtro'] = { 'CodigoPais': partner_country.code, 'IDType': vat_type, 'ID': VAT.clean_vat(partner.vat) } return contraparte
def get_baja_factura_emitida_dict(invoice): cabecera = get_header(invoice) cabecera.pop('TipoComunicacion') obj = { 'BajaLRFacturasEmitidas': { 'Cabecera': cabecera, 'RegistroLRBajaExpedidas': { 'PeriodoLiquidacion': { 'Ejercicio': invoice.period_id.name[3:7], 'Periodo': invoice.period_id.name[0:2] }, 'IDFactura': { 'IDEmisorFactura': { 'NIF': VAT.clean_vat(invoice.company_id.partner_id.vat) }, 'NumSerieFacturaEmisor': invoice.number, 'FechaExpedicionFacturaEmisor': invoice.date_invoice } } } } return obj
def get_factura_emitida_dict(invoice, rect_sust_opc1=False, rect_sust_opc2=False): obj = { 'SuministroLRFacturasEmitidas': { 'Cabecera': get_header(invoice), 'RegistroLRFacturasEmitidas': { 'PeriodoLiquidacion': { 'Ejercicio': invoice.period_id.name[3:7], 'Periodo': invoice.period_id.name[0:2] }, 'IDFactura': { 'IDEmisorFactura': { 'NIF': VAT.clean_vat(invoice.company_id.partner_id.vat) }, 'NumSerieFacturaEmisor': invoice.number, 'FechaExpedicionFacturaEmisor': invoice.date_invoice }, 'FacturaExpedida': get_factura_emitida( invoice, rect_sust_opc1, rect_sust_opc2 ) } } } return obj
def get_header(invoice): cabecera = { 'IDVersionSii': __SII_VERSION__, 'Titular': { 'NombreRazon': unidecode_str(invoice.company_id.partner_id.name), 'NIF': VAT.clean_vat(invoice.company_id.partner_id.vat) }, 'TipoComunicacion': 'A0' if not invoice.sii_registered else 'A1' } return cabecera
def sii_get_vat_type(self): return VAT.sii_get_vat_type(self.vat)
def get_factura_emitida_tipo_desglose(invoice): in_invoice = False is_export = invoice.sii_out_clave_regimen_especial == '02' # Exportación iva_values = get_iva_values( invoice, in_invoice=in_invoice, is_export=is_export ) if bool(is_export): if iva_values['sujeta_a_iva']: detalle_iva = iva_values['detalle_iva'] entrega = { 'Sujeta': { 'NoExenta': { # No exenta - Sin inversion sujeto pasivo 'TipoNoExenta': 'S1', 'DesgloseIVA': { 'DetalleIVA': detalle_iva } } } } else: detalle_iva_exento = iva_values['detalle_iva_exento'] entrega = { 'Sujeta': { 'Exenta': { 'DetalleExenta': detalle_iva_exento, } } } # Exenta por el artículo 21 entrega['Sujeta']['Exenta']['DetalleExenta']['CausaExencion'] = 'E2' tipo_desglose = { 'DesgloseTipoOperacion': { 'Entrega': entrega } } elif iva_values['inversion_sujeto_pasivo']: tipo_desglose = { 'DesgloseTipoOperacion': { 'Entrega': { 'Sujeta': { 'NoExenta': { # No exenta - Con Inversion sujeto pasivo 'TipoNoExenta': 'S2', 'DesgloseIVA': { 'DetalleIVA': ( iva_values['inversion_sujeto_pasivo'] ) } } } } } } else: desglose = {} detalle_iva_exento = iva_values['detalle_iva_exento'] detalle_iva = iva_values['detalle_iva'] importe_no_sujeto = iva_values['importe_no_sujeto'] if iva_values['sujeta_a_iva']: desglose['Sujeta'] = {} if iva_values['iva_exento']: desglose['Sujeta']['Exenta'] = { 'DetalleExenta': detalle_iva_exento } if iva_values['iva_no_exento']: desglose['Sujeta']['NoExenta'] = { # No exenta - Sin inversion sujeto pasivo 'TipoNoExenta': 'S1', 'DesgloseIVA': { 'DetalleIVA': detalle_iva } } if iva_values['no_sujeta_a_iva']: fp = invoice.fiscal_position if fp and 'islas canarias' in unidecode_str(fp.name.lower()): desglose['NoSujeta'] = { 'ImporteTAIReglasLocalizacion': importe_no_sujeto } else: desglose['NoSujeta'] = { 'ImportePorArticulos7_14_Otros': importe_no_sujeto } partner_vat = VAT.clean_vat(invoice.partner_id.vat) partner_vat_starts_with_n = ( partner_vat and partner_vat.upper().startswith('N') ) has_id_otro = invoice.partner_id.sii_get_vat_type() != '02' if has_id_otro or partner_vat_starts_with_n: tipo_desglose = { 'DesgloseTipoOperacion': { 'PrestacionServicios': desglose } } else: tipo_desglose = { 'DesgloseFactura': desglose } return tipo_desglose