def update_carteraAFP_govt(cartera_date): filename = str(cartera_date.year) + str('{:02}'.format( cartera_date.month)) + str('{:02}'.format(cartera_date.day)) print(filename) wb = fs.open_workbook(".\\" + filename + ".xlsx", True, True) array_columns = [ "clase_activo", "tipo_RA", "tipo_instrumento", "moneda", "emisor", "nemo" ] fs.paste_val_xl(wb, "Sheet0", 1, 1, array_columns) cartera_govt = fs.get_frame_xl(wb, "Sheet0", 1, 1, [5]) cartera_govt = cartera_govt[[ "tipo_instrumento", "moneda", "% Fondo", "% Familia Activo", "Duración" ]] cartera_govt.rename(columns={'Duración': 'duration'}, inplace=True) types = ["BCP", "BTP", "BCU", "BTU"] cartera_govt = cartera_govt.loc[cartera_govt["tipo_instrumento"].isin( types)] cartera_govt = get_buckets_soberanos(cartera_govt) cartera_govt["date"] = cartera_date cartera_govt = cartera_govt.reset_index() cartera_govt.set_index(['date'], inplace=True) tuples = cartera_govt.to_records().tolist() print(cartera_govt) upload_data(tuples) return cartera_govt
def genera_excel(df_retorno_fondos, df_rentorno_ins, df_forwards, df_rezagados, df_risk, df_monedas): df_rentorno_ins = df_rentorno_ins.set_index('codigo_fdo') conditions = [ df_rentorno_ins["tipo_SVC"] == 'Nacional', df_rentorno_ins["tipo_SVC"] == 'Internacional' ] values_spot = [ df_rentorno_ins["tasa_spot"], df_rentorno_ins["precio_spot"] ] values_anterior = [ df_rentorno_ins["tasa_anterior"], df_rentorno_ins["precio_anterior"] ] df_rentorno_ins['tasa/precio_spot'] = np.select(conditions, values_spot, default=None) df_rentorno_ins['tasa/precio_anterior'] = np.select(conditions, values_anterior, default=None) df_rentorno_ins = df_rentorno_ins.loc[:, [ 'codigo_ins', 'tipo_SVC', 'tipo_instrumento', 'Moneda', 'weight_adj', 'dur_mod', 'tasa/precio_spot', 'tasa/precio_anterior', 'CTR_Ins', 'r_ins', 'devengo', 'r_moneda' ]] df_forwards = df_forwards[[ 'moneda_compra', 'moneda_venta', 'parity', 'r_moneda', 'monto_compra', 'monto_venta', 'weight_adj', 'CTR_Forwards' ]] df_rezagados = df_rezagados[[ 'codigo_fdo', 'codigo_ins', 'tipo_instrumento', 'Moneda', 'weight' ]] df_rezagados.set_index('codigo_fdo', inplace=True) df_monedas = df_monedas.set_index(['currency', 'paridad']) wb = fs.open_workbook("output.xlsx", True, True) fs.clear_sheet_xl(wb, "fondos") fs.clear_sheet_xl(wb, "instrumentos") fs.clear_sheet_xl(wb, "forwards") fs.clear_sheet_xl(wb, "rezagados") fs.clear_sheet_xl(wb, "info_fondos") fs.clear_sheet_xl(wb, "paridades") fs.paste_val_xl(wb, "fondos", 1, 1, df_retorno_fondos) fs.paste_val_xl(wb, "instrumentos", 1, 1, df_rentorno_ins) fs.paste_val_xl(wb, "forwards", 1, 1, df_forwards) fs.paste_val_xl(wb, "rezagados", 1, 1, df_rezagados) fs.paste_val_xl(wb, "info_fondos", 1, 1, df_risk) fs.paste_val_xl(wb, "paridades", 1, 1, df_monedas) wb.save() wb.close()
def indice_camara(date, index_term=5): date = pd.Timestamp(fs.convert_string_to_date(date)) fechas = get_fechas_habiles(date, index_term) wb = fs.open_workbook(".\\calculo.xlsx", True, True) # Obtenemos los paths de politica monetaria path_scenario = fs.get_frame_xl(wb, "path", 1, 1, [0]) path_scenario = utiles.fs.get_frame_xl(wb, "path", 1, 1, [0]) fechas= fechas.set_index(['Fecha']) path_scenario = path_scenario_date_mapping(path_scenario, fechas) indice_camara = fechas.merge(path_scenario, how='left', left_index=True, right_index=True) indice_camara = indice_camara.fillna(method='ffill').reset_index() print(indice_camara) indice_camara['dias_dif'] = (indice_camara['Fecha'] - indice_camara['anterior']) / np.timedelta64(1, 'D') indice_camara = add_tpm_and_icp(date,indice_camara) indice_camara['retorno_icp_dove'] = (1+indice_camara['dove']*indice_camara['dias_dif']/36000) indice_camara['retorno_icp_central'] = (1+indice_camara['central']*indice_camara['dias_dif']/36000) indice_camara['retorno_icp_hawk'] = (1+indice_camara['hawk']*indice_camara['dias_dif']/36000) indice_camara.loc[0,'retorno_icp_dove'] = 0 indice_camara.loc[0,'retorno_icp_central'] = 0 indice_camara.loc[0,'retorno_icp_hawk'] = 0 indice_camara = get_index_values(date, indice_camara) indice_camara['indice_dove'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_dove'] indice_camara['indice_central'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_central'] indice_camara['indice_hawk'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_hawk'] wb = fs.open_workbook("calculo.xlsx", True, True) fs.clear_sheet_xl(wb, "indice") fs.paste_val_xl(wb, "indice", 1, 1, indice_camara) return indice_camara
def generar_excel(df_retorno_fondos, df_retorno_instrumentos, df_nacional, df_internacional, rezagados, name): #PARCHE, saco de los dataframes el fondo liquidez, se comsulta en muchos lados asi que es más fácil sacarlo por aca df_nacional = df_nacional.loc[df_nacional["codigo_fdo"] != "LIQUIDEZ"] rezagados = rezagados.loc[rezagados["codigo_fdo"] != "LIQUIDEZ"] wb = fs.open_workbook("rentabilidad.xlsx", True, True) fs.clear_sheet_xl(wb, "Resumen_fondos") fs.clear_sheet_xl(wb, "Instrumentos") fs.clear_sheet_xl(wb, "Nacional_Market") fs.clear_sheet_xl(wb, "International_Market") fs.clear_sheet_xl(wb, "rezagados") fs.paste_val_xl(wb, "Resumen_fondos", 1, 1, df_retorno_fondos) fs.paste_val_xl(wb, "Instrumentos", 1, 1, df_retorno_instrumentos) fs.paste_val_xl(wb, "Nacional_Market", 1, 1, df_nacional) fs.paste_val_xl(wb, "International_market", 1, 1, df_internacional) fs.paste_val_xl(wb, "rezagados", 1, 1, rezagados) wb.save() wb.close()
def write_excel(df_risk_internacional): wb = fs.open_workbook("data_riskamerica_internacional.xlsx", True, True) fs.clear_sheet_xl(wb, "data") fs.paste_val_xl(wb, "data", 1, 1, df_risk_internacional)
def check_excel(): today = str(dt.datetime.now().date()) yesterday = fs.get_prev_weekday(str(dt.datetime.now().date())) excel = fs.get_self_path() + "Cupones_{}".format(today) + ".xlsx" wb = fs.open_workbook(excel, True, True) df = fs.get_frame_xl(wb, "Hoja1", 2, 3, [0]) fs.close_workbook(wb) query_bonos = ( "SELECT [codigo_ins], [codigo_fdo], [nominal], [fec_vcto] FROM [MesaInversiones].[dbo].[ZHIS_Carteras_Main] WHERE [fecha] = '{}' AND ([codigo_ins] NOT LIKE '{}' AND [codigo_ins] NOT LIKE '{}') AND [codigo_fdo] IN ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}') AND [Tipo_Instrumento] NOT IN ('{}', '{}')" ).format(yesterday, 'PAGARE%', 'PDBC%', 'SPREADCORP', 'DEUDA CORP', 'DEUDA 360', 'LIQUIDEZ', 'M_MARKET', 'MACRO CLP3', 'MACRO 1.5', 'RENTA', 'IMT E-PLUS', 'Cuota de Fondo', 'Letra Hipotecaria') df_bonos = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1", "usuario1", query_bonos) query_depositos = ( "SELECT [codigo_ins], [codigo_fdo], [nominal], [codigo_emi], [Moneda], [fec_vcto] FROM [MesaInversiones].[dbo].[ZHIS_Carteras_Main] WHERE [fecha] = '{}' AND ([codigo_ins] LIKE '{}' OR [codigo_ins] LIKE '{}') AND [codigo_fdo] in ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')" ).format( ##(Tipo_Instrumento IN ('Bono Corporativo', 'Deposito', 'Bono de Gobierno', 'Letra Hipotecaria', 'Factura', 'RF LATAM') OR Tipo_Instrumento is NULL)").format( yesterday, 'PAGARE%', 'PDBC%', 'SPREADCORP', 'DEUDA CORP', 'DEUDA 360', 'LIQUIDEZ', 'M_MARKET', 'MACRO CLP3', 'MACRO 1.5', 'RENTA', 'IMT E-PLUS') df_depositos = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1", "usuario1", query_depositos) query_cupones = "SELECT * FROM [MesaInversiones].[dbo].[Cupones_RF]" df_cupones = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1", "usuario1", query_cupones) df_bonos_t = df_bonos.loc[df_bonos['fec_vcto'] == today] df_depositos = df_depositos.loc[df_depositos['fec_vcto'] == today] df_excel = pd.DataFrame(columns=[ 'Fondo', 'Cupones', 'Vencimiento D', 'Vencimiento B', 'Total' ]) for row in df.iterrows(): fondo = row[0].strip() vencimiento_recibido_pdf_d = float( str(row[1]['Vencimiento D']).replace('.', '').replace(',', '.')) vencimiento_recibido_base_d = 0 vencimiento_recibido_pdf_b = float( str(row[1]['Vencimiento B']).replace('.', '').replace(',', '.')) vencimiento_recibido_base_b = 0 recibido_base = 0 total_recibido_cupones = float( str(row[1]['Cupones']).replace('.', '').replace(',', '.')) for line in df_depositos.iterrows(): if line[1]['codigo_fdo'].strip() == fondo: vencimiento_recibido_base_d += float(line[1]['nominal']) for linea in df_bonos_t.iterrows(): instrumento = linea[1]['codigo_ins'] df_cupon = df_cupones.loc[df_cupones['Instrumento'] == instrumento] for i in df_cupon.iterrows(): vencimiento_recibido_base_b += i[1]['Cantidad_corte'] if vencimiento_recibido_pdf_d != vencimiento_recibido_base_d: ### Acá agregar que pasa si es que los vencimientos del pdf no coinciden con los vencimientos de la base de datos pass excel_row = [ fondo, locale.format("%f", total_recibido_cupones, grouping=True, monetary=True)[:-5], locale.format("%f", vencimiento_recibido_base_d, grouping=True, monetary=True)[:-5], locale.format("%f", vencimiento_recibido_base_b, grouping=True, monetary=True)[:-5], locale.format("%f", total_recibido_cupones + vencimiento_recibido_base_d + vencimiento_recibido_base_b, grouping=True, monetary=True)[:-5] ] df_excel = df_excel.append(pd.DataFrame([excel_row], columns=[ 'Fondo', 'Cupones', 'Vencimiento D', 'Vencimiento B', 'Total' ]), ignore_index=True) excel = resource_path("Cupones_" + today + ".xlsx") writer = pd.ExcelWriter(excel) #### Escribe el dataframe del resumen de los fondos corregidos en una página del excel df_excel.to_excel(writer, sheet_name='Resumen', startrow=1, startcol=1) writer.sheets['Resumen'].column_dimensions['C'].width = 13 writer.sheets['Resumen'].column_dimensions['D'].width = 14 writer.sheets['Resumen'].column_dimensions['E'].width = 14 writer.sheets['Resumen'].column_dimensions['F'].width = 14 writer.sheets['Resumen'].column_dimensions['G'].width = 14 writer.save() ### Imprime solo el resumen de los fondos en un PDF #fs.export_sheet_pdf_jp(0, fs.get_self_path()+"Cupones_" + today + ".xlsx", fs.get_self_path()+"Informe_cupones_" + today + "_corregido.pdf") fondos = [ 'SPREADCORP', 'DEUDA CORP', 'DEUDA 360', 'LIQUIDEZ', 'M_MARKET', 'MACRO CLP3', 'MACRO 1.5', 'RENTA', 'IMT E-PLUS', 'None' ] for fondo in fondos: df_sheet = pd.DataFrame( columns=['Fondo', 'Instrumento', 'Emisor' 'Ingreso']) for line in df_depositos.iterrows(): if line[1]['codigo_fdo'].strip() == fondo: row = [ fondo, line[1]['codigo_ins'].strip(), line[1]['codigo_emi'].strip(), locale.format("%f", float(line[1]['nominal']), grouping=True, monetary=True)[:-5] ] print(row) df_sheet = df_sheet.append(pd.DataFrame( [row], columns=['Fondo', 'Instrumento', 'Emisor', 'Ingreso']), ignore_index=True) for fila in df_cupones.loc[df_cupones['Fecha_corte'] == today].iterrows(): instrumento = fila[1]['Instrumento'] for linea in df_bonos.iterrows(): if instrumento == linea[1]['codigo_ins'] and fondo == linea[1][ 'codigo_fdo']: row = [ fondo, instrumento, None, locale.format( "%f", ((float(linea[1]['Cantidad_corte']) / 1000000) * linea[1]['nominal']), grouping=True, monetary=True)[:-5] ] df_sheet = df_sheet.append(pd.DataFrame( [row], columns=['Fondo', 'Instrumento', 'Emisor', 'Ingreso']), ignore_index=True) print(row) #### Escribe el detalle de todos los intrumentos de cada fondo que reportan ingresos df_sheet.to_excel(writer, sheet_name=fondo, startrow=1, startcol=1) print('-------------' + fondo + '-------------') print(df_sheet) for fon in fondos: writer.sheets[fon].column_dimensions['C'].width = 14 writer.sheets[fon].column_dimensions['D'].width = 14 writer.sheets[fon].column_dimensions['E'].width = 14 writer.sheets[fon].column_dimensions['F'].width = 14 writer.sheets[fon].column_dimensions['G'].width = 15 writer.save() writer.close() #### Imprime el detalle de todos los fondos en un PDF (la primera lista indica los indices del excel que quiero pasar a PDF, #### deberían llegar hasta el 10 para que los imprima todos, pero tira un error de list index que no he podido arreglar) fs.export_sheet_pdf_multiple_index( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], fs.get_self_path() + "Cupones_" + today + ".xlsx", fs.get_self_path() + "Informe_cupones_" + today + "_detalle.pdf")