예제 #1
0
def get_carteras_fondos(date_anterior):
    path_rf = ".\\Querys\\Bonos.sql"
    path_if = ".\\Querys\\Depositos.sql"
    query_rf = fs.read_file(path=path_rf).replace("AUTODATE", str(date_anterior))
    query_if = fs.read_file(path=path_if).replace("AUTODATE", str(date_anterior))

    cartera_fondos_rf = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query_rf)
    cartera_fondos_rf.set_index(["codigo_ins"], inplace=True)

    cartera_fondos_if = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query_if)


    cartera_fondos_if = comput_nemotecnico_depositos(cartera_fondos_if, perf_att=False)

    cartera_fondos_if.index.name='codigo_ins'
    cartera_fondos = cartera_fondos_rf.append(cartera_fondos_if)
    cartera_fondos['weight'] = cartera_fondos['weight'].astype('float64') 
    
    return cartera_fondos
예제 #2
0
def get_currency_value(date, name=None):
    '''
    Obtiene los valores de los currency para dos fechas. Cada vez que hay una nueva moneda hay que agregarlo a mano acá.
    '''
    days_dif = 0

    if name.strip() == 'US$':
        date_inc = fs.convert_date_to_string(date)
        date = fs.convert_date_to_string(get_next_weekdays(date))
    else:
        prev_day = get_previous_weekdays(date)
        date_inc = fs.convert_date_to_string(prev_day)
        #solo para calcular bien el devengo diario de la uf, los dias lunes
        days_dif = (date - prev_day).days

    dic_id = {'UF': 23, 'US$': 66, 'MX': 85}
    currency_id = dic_id[name]
    query = "Select Valor from Indices_Dinamica where Index_ID={} and  fecha in ('{}', '{}')".format(
        currency_id, date_inc, date)
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    return df.loc[1]['Valor'], df.loc[0]['Valor'], days_dif
예제 #3
0
def get_currency_data(date, currency):

    if currency.strip() == 'US$':
        date_0 = date
        date_1 =  get_fecha_habil_posterior(date)
    else:
        date_0 = get_fecha_habil_anterior(date)
        date_1 = date

    delta_dias = (date_1 - date_0).days

    currency_id = dic_currencies[currency][0]
    paridad = dic_currencies[currency][1]

    query = "Select valor from Indices_Dinamica where Index_ID={} and  fecha in ('{}', '{}')".format(currency_id, date_0, date_1)
    df_ccy_values = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)

    valor_0= df_ccy_values.loc[0]['valor']
    valor_1= df_ccy_values.loc[1]['valor']

    return valor_0, valor_1, delta_dias
예제 #4
0
def poblate_fondos(self):
    '''
    Llena la lista con los fondos disponibles en la base de datos
    '''
    self.model1.clear()

    df = get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1",
                            "usuario1", "Select * From Fondos")
    for i in df["codigo_fdo"]:
        self.model1.appendRow(QStandardItem(i))
예제 #5
0
def get_fechas_habiles():

    query = "Select Fecha from Fechas_habiles"
    fechas_hab = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)

    #fechas_hab['Fecha'] = fechas_hab['Fecha'].apply(lambda x: datetime.datetime.strftime(x, '%Y-%m-%d'))
    return fechas_hab
예제 #6
0
def get_flujo_compra_venta(date):

    query = "Select Fecha, nemotecnico, vende, compra where fecha_liq = 'AUTODATE'"
    query  = query.replace("AUTODATE",str(date))

    df_flujos = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)
    return df_flujos
예제 #7
0
def get_dic_em():
    '''
    Obtiene un frame con los nombres de emisor igual al de los de riskamerica
    '''
    query = 'select ltrim(rtrim(Emisor)) as Emisor, ltrim(rtrim(Codigo_SVS)) as Codigo_SVS from EmisoresIIF'
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    df.set_index(["Emisor"], inplace=True)
    return df
예제 #8
0
def get_updated_IIF(funds_list):
    
    spot = fs.get_ndays_from_today(0)
    yesterday = fs.get_ndays_from_today(1)
    query = "select codigo_ins, fondo, SUM(cantidad) as nominal, codigo_emi, moneda, fec_vcto, SUM(Monto) as monto from (select codigo_fdo COLLATE DATABASE_DEFAULT as fondo, codigo_ins COLLATE DATABASE_DEFAULT as codigo_ins, codigo_emi, moneda,fec_vcto, cantidad, monto from zhis_carteras_main where fecha='YESTERDAY' and (codigo_ins like 'PAGARE%' or codigo_ins like 'PDBC%') UNION ALL select compra COLLATE DATABASE_DEFAULT as fondo, instrumento COLLATE DATABASE_DEFAULT as codigo_ins, emisor COLLATE DATABASE_DEFAULT as codigo_emi, moneda COLLATE DATABASE_DEFAULT as moneda, DATEADD(DAY, dias, Fecha) as fec_vcto,  sum(rescate) as cantidad, sum(captacion) as monto from TransaccionesIIF where fecha='SPOT_DATE' and compra is not null group by fecha, instrumento, emisor,moneda, dias, compra UNION ALL select vende COLLATE DATABASE_DEFAULT as fondo, instrumento COLLATE DATABASE_DEFAULT as codigo_ins, emisor COLLATE DATABASE_DEFAULT as codigo_emi, moneda COLLATE DATABASE_DEFAULT as moneda, DATEADD(DAY, dias, Fecha) as fec_vcto,  -sum(rescate) as cantidad, -sum(captacion) as monto from TransaccionesIIF where fecha='SPOT_DATE' and vende is not null group by fecha, instrumento, emisor,moneda, dias, vende ) T1 where fondo in (FUNDS_LIST) group by fondo, codigo_ins, codigo_emi, moneda, fec_vcto"
    query = query.replace("SPOT_DATE", str(spot))
    query = query.replace("YESTERDAY", str(yesterday))
    query = query.replace("FUNDS_LIST", str(funds_list))
   
    iif_portfolio = fs.get_frame_sql_user(server="puyehue", database="MesaInversiones", username="******", password="******", query=query)

    return iif_portfolio
예제 #9
0
def get_updated_RFI(funds_list):
    
    spot = fs.get_ndays_from_today(0)
    yesterday = fs.get_ndays_from_today(1)
    query = " select codigo_ins, fondo, SUM(Cantidad) as nominal, SUM(Monto) as monto from (select codigo_fdo COLLATE DATABASE_DEFAULT as fondo, codigo_ins COLLATE DATABASE_DEFAULT as codigo_ins, cantidad, monto from zhis_carteras_main where fecha='YESTERDAY' and codigo_ins not like 'PAGARE%' and Tipo_Instrumento not in ('Cuota de Fondo','Letra Hipotecaria') UNION ALL select compra COLLATE DATABASE_DEFAULT as fondo, instrumento COLLATE DATABASE_DEFAULT as codigo_ins, sum(cantidad), sum(Monto) from TransaccionesIRF where fecha='SPOT_DATE' and compra is not null group by Instrumento, compra UNION ALL select vende COLLATE DATABASE_DEFAULT as fondo, instrumento COLLATE DATABASE_DEFAULT as codigo_ins, -sum(cantidad), -sum(Monto) from TransaccionesIRF where fecha='SPOT_DATE' and vende is not null group by Instrumento, vende) T1 where fondo in (FUNDS_LIST) group by fondo, codigo_ins"
    query = query.replace("SPOT_DATE", str(spot))
    query = query.replace("YESTERDAY", str(yesterday))
    query = query.replace("FUNDS_LIST", str(funds_list))
    print(query)
    irf_portfolio = fs.get_frame_sql_user(server="puyehue", database="MesaInversiones", username="******", password="******", query=query)

    return irf_portfolio
예제 #10
0
def get_dic_ins():
    '''
    Obtenemos el listado de los nombre de los instrumentos equivalentes para riskamerica
    '''
    query = 'Select ltrim(rtrim(Codigo_Ins)) as Codigo_Ins, ltrim(rtrim(Isin)) as Isin from Mapping_BBL_BCS_diego'
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    df.set_index(["Isin"], inplace=True)
    return df
예제 #11
0
def get_fund_names():
    '''
    Obtenemos los nombres de los fondos a trabajar
    '''
    query = "select ltrim(rtrim(codigo_fdo)) as codigo_fdo , ltrim(rtrim(moneda))  as moneda from fondosir where shore= 'onshore' and estrategia in ('renta fija' , 'credito', 'retorno absoluto') and codigo_fdo not in ('LIQUIDEZ')"
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    df.set_index(['codigo_fdo'], inplace=True)
    return df.index.tolist(), df
예제 #12
0
def eliminar_bonos_vencidos():
    today = str(dt.datetime.now().date())
    #today = dt.datetime.now()
    query_cupones = "SELECT * FROM [MesaInversiones].[dbo].[RF_Cupones]"  ##WHERE [Fecha_corte] <= '{}' OR [Vencimiento] <= '{}'".format(today, today)
    df_cupones = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                       "usuario1", "usuario1", query_cupones)
    indices = df_cupones[(df_cupones['Fecha_corte'] <= today) |
                         (df_cupones['Vencimiento'] <= today)].index.tolist()
    print('----------------indices----------------')
    print(len(indices))
    df_cupones = df_cupones.drop(indices)
    insert_into_database(df_cupones)
예제 #13
0
def getInfoIndicesAFP():

    

	path="queryAFPs.sql"
	query = lib.read_file(path=path)
	sqlQuery="SELECT INDEX_ID FROM INDICES_ESTATICA WHERE NOMBRE_INDEX LIKE '%FONDO E%'"
	vals =  lib.get_frame_sql_user(server="Puyehue",
        	                   database="MesaInversiones",
    	                       username="******",
    	                       password="******", 
    	                       query=query)
	return vals
예제 #14
0
파일: utiles.py 프로젝트: dxcv/repo_dp
def get_liquidacion_transacciones(date):

    query_iif = "Select Fecha, nemotecnico as nemo, vende, compra, captacion as monto from TransaccionesIIF where fecha_liq = 'AUTODATE'"
    query_iif = query_iif.replace("AUTODATE", str(date))
    query_irf = "Select Fecha, instrumento as nemo, vende, compra, monto from TransaccionesIRF where fecha_liq = 'AUTODATE'"
    query_irf = query_irf.replace("AUTODATE", str(date))

    df_flujos_iif = fs.get_frame_sql_user(server="Puyehue",
                                          database="MesaInversiones",
                                          username="******",
                                          password="******",
                                          query=query_iif)

    df_flujos_irf = fs.get_frame_sql_user(server="Puyehue",
                                          database="MesaInversiones",
                                          username="******",
                                          password="******",
                                          query=query_irf)

    df_flujos = df_flujos_iif.append(df_flujos_irf)

    return df_flujos
예제 #15
0
def get_currency_types(date):
    '''
    Obtenemos los tipos de moneds de los instrumentos para una fecha
    '''
    date = fs.convert_date_to_string(get_previous_weekdays(date))
    query = open('./querys/currency.txt', 'r').read()
    query = query.replace('[DATE]', "'"+date+"'")
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    return df['moneda'].tolist()
예제 #16
0
def get_funds_currency():
    '''
    Obtenemos los nombres de los fondos a trabajar
    '''
    #query = "select ltrim(rtrim(codigo_fdo)) as codigo_fdo , ltrim(rtrim(moneda))  as moneda_fondo from fondosir where shore= 'onshore' and estrategia in ('renta fija' , 'credito', 'retorno absoluto')"
    query = "select ltrim(rtrim(codigo_fdo)) as codigo_fdo , ltrim(rtrim(moneda))  as moneda_fondo from fondosir where estrategia in ('renta fija' , 'credito', 'retorno absoluto')"
    df_funds_currency = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query) 

    df_funds_currency = df_funds_currency.set_index('codigo_fdo')
    return df_funds_currency
예제 #17
0
def get_data(name, date, new_index=False):
    '''
    Obtiene los leverage de los fondos
    '''
    date = fs.convert_date_to_string(get_previous_weekdays(date))
    query = open('./querys/{}'.format(name), 'r').read()
    query = query.replace('[DATE]', "'"+date+"'")
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)
    if new_index is not False:
        df.set_index([new_index], inplace=True)
    return df
예제 #18
0
def get_leverage(date):

    path = ".\\Querys\\Leverage.sql"
    query = fs.read_file(path=path).replace("AUTODATE", str(date))

    df_leverage = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)

    df_leverage['monto_pactado'] = df_leverage['monto_pactado'].astype('float64')
    df_leverage = df_leverage.set_index('codigo_fdo')

    return df_leverage
예제 #19
0
def get_posiciones_forwards(date):

    path = ".\\Querys\\Forwards.sql"
    query = fs.read_file(path=path).replace("AUTODATE", str(date))

    df_forwards = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)

    df_forwards = compute_forwards_net_positions(df_forwards)
    df_forwards = df_forwards.set_index('codigo_fdo')

    return df_forwards
예제 #20
0
def get_funds_aum(date):

    path = ".\\Querys\\AUM.sql"
    query = fs.read_file(path=path).replace("AUTODATE", str(date))

    df_funds_aum = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)

    df_funds_aum['AUM'] = df_funds_aum['AUM'].astype('float64')
    df_funds_aum = df_funds_aum.set_index('codigo_fdo')

    return df_funds_aum
예제 #21
0
def get_currency_type(date, df_risk):

    date_anterior = utiles.get_fecha_habil_anterior(date)
    path = ".\\querys\\mapping_cinta.sql"
    query = fs.read_file(path=path).replace("AUTODATE", str(date_anterior))
    cinta_ra = fs.get_frame_sql_user(server="Puyehue",
                                    database="MesaInversiones",
                                    username="******",
                                    password="******",
                                    query=query)

    cinta_ra.set_index(["Codigo_Ins"], inplace=True)

    df_mapped = df_risk.merge(cinta_ra, how='left', left_index=True, right_index=True)

    
    return df_mapped
예제 #22
0
def get_currency_types(date):
    '''
    Obtenemos los tipos de moneds de los instrumentos para una fecha
    ESTO SE PUEDE HACER MEJOR
    '''
   
    #date_anterior = fs.convert_date_to_string(get_fecha_habil_anterior(date))
    date_anterior =get_fecha_habil_anterior(date)
   
    query = "select ltrim(rtrim(c.moneda)) as moneda from ZHIS_Carteras_Recursive as c INNER JOIN fondosir as f ON f.Codigo_fdo = c.codigo_fdo collate database_default where  fecha ='AUTODATE' and c.moneda not in ('$') and Tipo_instrumento in ('Bono Corporativo', 'Bono de Gobierno', 'Deposito') and f.shore= 'onshore' and f.estrategia in ('renta fija' , 'credito', 'retorno absoluto') GROUP BY c.moneda"
    query = query.replace("AUTODATE", str(date_anterior))
  
    df = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query)


    return df['moneda'].tolist()
예제 #23
0
def get_tpm_and_icp(date):

	date_ayer = utiles.get_fecha_habil_anterior(date)
	date_ante_ayer = utiles.get_fecha_habil_anterior(date_ayer)

	query_tpm = "Select Fecha, valor from Indices_Dinamica where Index_Id=459 and Fecha>='DATE_1' and Fecha<='DATE_2'"
	query_tpm = query_tpm.replace('DATE_1',str(date_ante_ayer)).replace('DATE_2', str(date_ayer))
	
	df_tpm = fs.get_frame_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query_tpm)

	query_icp = "Select valor from Indices_Dinamica where Index_Id=4 and Fecha='DATE'"
	query_icp = query_icp.replace('DATE', str(date))
	print(query_icp)
	icp = fs.get_val_sql_user(server="puyehue",
                               database="MesaInversiones",
                               username="******",
                               password="******",
                               query=query_icp)

	return df_tpm, icp
예제 #24
0
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")
예제 #25
0
def transaccionesRVN(path, fecha):

    l = [
        "estado", "fecha_sesion", "codigo_secuencia", "apertura_cierre",
        "base_calculo", "broker", "cam_divisa", "canones_div", "cartera",
        "comision_div", "corretaje_div", "cot_recompra", "cot_rf_cup",
        "cotizacion", "cupon_corrido_div", "cupon_per", "cupon_per_div",
        "dias", "divisa", "efectivo_div", "efectivo_vto_div",
        "ent_contrapartida", "ent_depositaria", "ent_liquidadora",
        "ent_mediadora", "fec_comunicacion_be", "fec_liquidacion",
        "fec_operacion", "fec_recompra", "fec_valor", "fec_vto", "gasto_extra",
        "gastos_div", "gestor_ordenante", "ind_nominal_srn",
        "ind_periodificar", "instrumento", "liquido_div", "mercado",
        "minusvalia", "minusvalia_div", "neto_div", "nominal_div", "operacion",
        "otros_gastos_div", "previa_compromiso_plazo", "plusvalia",
        "plusvalia_div", "prima_div", "primario_secundario", "regularizar_sn",
        "repo_dia", "tipo_interes", "titulos", "ventana_tratamiento",
        "ind_proceso", "enlace_sucursal", "enlace_tipo_ap",
        "enlace_plan_subplan", "retencion_div", "ind_cambio_asegurado",
        "ind_depositario", "simple_compuesto", "tex_pago", "tex_pagare_cod",
        "tex_pagares", "num_comunica_be", "iva", "iva_div", "cuenta_ccc",
        "ind_cobertura", "fecha_saldo", "libre_n1", "libre_n2", "libre_x1",
        "libre_x2", "fecha_ejecucion", "codigo_uti", "comision_ecc_div",
        "tir_mercado"
    ]

    excel = path
    diccionario = []
    contador = 0

    with open(excel, "r") as datos:
        for linea in datos:
            oracion = linea.strip()
            oracion = oracion.split(";")
            diccionario.append(oracion)

    date = fecha[6:10] + '-' + fecha[3:5] + '-' + fecha[0:2]
    #instrumentos =  get_frame_sql_user("Puyehue", "MesaInversiones","usrConsultaComercial" , "Comercial1w","Select * from Instrumentos where  tipo_instrumento  not like '%RF LATAM%' AND tipo_instrumento  not like '%accion%' AND tipo_instrumento  not like '%cuota%' AND tipo_instrumento  not like '%ETF%'")

    instrumentos = get_frame_sql_user(
        "Puyehue", "MesaInversiones", "usrConsultaComercial", "Comercial1w",
        "Select * from Instrumentos where tipo_instrumento  not like '%Bono%' AND tipo_instrumento  not like '%letra%' AND tipo_instrumento  not like '%deposito%' and tipo_instrumento != ';D15;' and Tipo_Instrumento != ''  AND tipo_instrumento  not like '%pagare%'  AND tipo_instrumento  not like '%Factura%'"
    )
    df = get_frame_sql_user(
        "Puyehue", "MesaInversiones", "usrConsultaComercial", "Comercial1w",
        "select * from [MesaInversiones].[dbo].[Perfil Clientes] WHERE not Rut IS NULL"
    )
    df = df.drop([
        "Nombre", "Tipo", "Orientacion", "Perfil_riesgo", "Tracking Objetivo",
        "RVL", "RVG", "RFL", "RFG", "Liq", "LIQ_USD", "Fwd", "Cuenta Pershing",
        "RutConVerificador", "Administracion", "FechaTermino",
        "Codigo_Recomendacion"
    ],
                 axis=1)

    nombres_ins = instrumentos["Codigo_Ins"].values.tolist()

    new_df = pd.DataFrame(columns=[
        'Folio_operacion', 'Fecha operacion', '1', '2', '3', 'Rut',
        'secuencia', 'monto', 'Precio', 'Cantidad', '4', 'Operacion', '5',
        'instrumento', '6', 'Moneda', 'fecha_liq', '7', 'ent_depositaria',
        'liquidacion', '8', '9', '10', '11', '12', '13'
    ],
                          data=diccionario)
    new_df = new_df.drop(
        ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"],
        axis=1)

    new_df2 = new_df.copy()
    eliminados = 0
    eliminados2 = 0
    largo = len(new_df.index)
    for indice in range(largo):
        if not new_df.iloc[indice - eliminados]["instrumento"] in nombres_ins:
            new_df = new_df.drop(new_df.index[[indice - eliminados]])
            eliminados += 1
        else:
            new_df2 = new_df2.drop(new_df2.index[[indice - eliminados2]])
            eliminados2 += 1
    #print(new_df)
    if new_df.empty:
        df1 = pd.DataFrame(columns=l)
        return df1

    else:
        fecha_operaciones = date
        cambio_diario = get_frame_sql_user(
            "Puyehue", "replicasCredicorp", "usrConsultaComercial",
            "Comercial1w",
            "select RTRIM(LTRIM(CODIGO_MONEDA_ORIGEN)) AS Moneda,VALOR_PARIDAD from VISTA_PARIDADES_CDP WHERE FECHA_PARIDAD = '{}' AND CODIGO_MONEDA = 'CLP' AND (CODiGO_MONEDA_ORIGEN = 'USD' OR CODiGO_MONEDA_ORIGEN = 'EUR') AND GRUPO_COTIZACION = 1  "
            .format(fecha_operaciones))

        df1 = pd.DataFrame(columns=[
            "estado", "fecha_sesion", "codigo_secuencia", "apertura_cierre",
            "base_calculo", "broker", "cam_divisa", "canones_div", "cartera",
            "comision_div", "corretaje_div", "cot_recompra", "cot_rf_cup",
            "cotizacion", "cupon_corrido_div", "cupon_per", "cupon_per_div",
            "dias", "divisa", "efectivo_div", "efectivo_vto_div",
            "ent_contrapartida", "ent_depositaria", "ent_liquidadora",
            "ent_mediadora", "fec_comunicacion_be", "fec_liquidacion",
            "fec_operacion", "fec_recompra", "fec_valor", "fec_vto",
            "gasto_extra", "gastos_div", "gestor_ordenante", "ind_nominal_srn",
            "ind_periodificar", "instrumentox", "liquido_div", "mercado",
            "minusvalia", "minusvalia_div", "neto_div", "nominal_div",
            "operacion", "otros_gastos_div", "previa_compromiso_plazo",
            "plusvalia", "plusvalia_div", "prima_div", "primario_secundario",
            "regularizar_sn", "repo_dia", "tipo_interes", "titulos",
            "ventana_tratamiento", "ind_proceso", "enlace_sucursal",
            "enlace_tipo_ap", "enlace_plan_subplan", "retencion_div",
            "ind_cambio_asegurado", "ind_depositario", "simple_compuesto",
            "tex_pago", "tex_pagareS_cod", "tex_pagares", "num_comunica_be",
            "iva", "iva_div", "cuenta_ccc", "ind_cobertura", "fecha_saldo",
            "libre_n1", "libre_n2", "libre_x1", "libre_x2", "fecha_ejecucion",
            "codigo_uti", "tir_mercado"
        ])

        df1 = df1.assign(fecha_sesion=new_df['Fecha operacion'])

        vago = new_df["Rut"]

        new_df["codigo_secuencia"] = new_df.index

        df1 = df1.assign(codigo_secuencia=new_df.index)

        df1 = df1.assign(estado='T')

        #df1 = df1.assign(fecha_sesion = new_df['Fecha operacion'])

        df1 = df1.assign(apertura_cierre='NULL')

        df1 = df1.assign(base_calculo=3)  # modificar

        df1 = df1.assign(broker='CCCAPITAL')

        df1 = df1.assign(cam_divisa=new_df['Moneda'])

        #print(cambio_diario['VALOR_PARIDAD'].loc[cambio_diario['Moneda']== 'USD'] )

        df1.loc[df1['cam_divisa'] == 'US$',
                'cam_divisa'] = cambio_diario['VALOR_PARIDAD'].loc[
                    cambio_diario['Moneda'] == 'USD']
        df1.loc[df1['cam_divisa'] == '$', 'cam_divisa'] = '1'
        df1.loc[df1['cam_divisa'] == 'UF',
                ' cam_divisa'] = cambio_diario['VALOR_PARIDAD'].loc[
                    cambio_diario['Moneda'] == 'UF']
        df1.loc[df1['cam_divisa'] == 'EUR',
                'cam_divisa'] = cambio_diario['VALOR_PARIDAD'].loc[
                    cambio_diario['Moneda'] == 'EUR']

        df1 = df1.assign(canones_div=None)
        df = df.astype({"Rut": int, "Secuencia": int})
        new_df[['Rut', 'no']] = new_df['Rut'].str.split('-', expand=True)
        new_df = new_df.astype({"Rut": int, "secuencia": int})

        df["Dig Ver"] = df["Dig Ver"].str.strip()
        df_join = dataframe_join(df, new_df, 'Rut')

        df_join = df_join.loc[(df_join["Secuencia"] == df_join["secuencia"])
                              & (df_join["no"].to_string(index=False).upper()
                                 == df_join["Dig Ver"].to_string(
                                     index=False).upper())]

        df1 = dataframe_join(df_join, df1, 'codigo_secuencia')

        df1['Codigo_Fdo'] = df1['Codigo_Fdo'].str.strip()

        instrumentos = instrumentos.rename(
            columns={"Codigo_Ins": "instrumento"})
        instrumentos["instrumento"] = instrumentos["instrumento"].str.strip()
        instrumentos["Codigo_Emi"] = instrumentos["Codigo_Emi"].str.strip()

        df1 = dataframe_join(df1, instrumentos[["instrumento", "Codigo_Emi"]],
                             "instrumento")

        df1 = df1.drop(["cartera"], axis=1)
        df1 = df1.drop(["cotizacion"], axis=1)
        df1 = df1.drop(["instrumentox"], axis=1)
        df1 = df1.drop(["efectivo_div"], axis=1)
        df1 = df1.drop(["ent_liquidadora"], axis=1)
        df1 = df1.drop(["nominal_div"], axis=1)
        df1 = df1.drop(["operacion"], axis=1)

        df1 = df1.rename(columns={"Codigo_Emi": "ent_liquidadora"})

        df1 = df1.rename(columns={"Precio": "cotizacion"})

        #df1 = df1.assign(cotizacion =0 )

        df1 = df1.rename(columns={"monto": "efectivo_div"})
        df1 = df1.rename(columns={"Cantidad": "nominal_div"})
        df1 = df1.rename(columns={"Operacion": "operacion"})
        df1 = df1.rename(columns={"Codigo_Fdo": "cartera"})

        df1 = df1.assign(comision_div=0)
        df1 = df1.assign(corretaje_div=0)
        df1 = df1.assign(cot_recompra=0)

        df1 = df1.assign(cot_rf_cup=0)  # cotizacion renta fija con cupon

        df1 = df1.assign(cupon_corrido_div=None)

        df1 = df1.assign(cupon_per_div=0)

        df1 = df1.assign(cupon_per=0)

        df1 = df1.assign(dias=0)

        df1 = df1.assign(divisa=new_df['Moneda'])

        #print(cambio_diario['VALOR_PARIDAD'].loc[cambio_diario['Moneda']== 'USD'] )

        df1.loc[df1['divisa'] == 'US$', 'divisa'] = '5'
        df1.loc[df1['divisa'] == '$', 'divisa'] = '39'
        df1.loc[df1['divisa'] == 'UF', ' divisa'] = '84'
        df1.loc[df1['divisa'] == 'EUR', 'divisa'] = '4'

        df1 = df1.assign(efectivo_vto_div=0)  #

        df1 = df1.assign(ent_contrapartida='CCCAPITAL')

        df1 = df1.assign(ent_depositaria='DCV')  # deposito central de valores
        # sicav sociedad de inversion de capital variable
        # sicaf socidad de inversion de capital fijo

        df1 = df1.assign(ent_mediadora=None)  # consultar

        df1 = df1.assign(fec_comunicacion_be=None)  # consultar
        ## ponerle el assign con el loc aca segun el tipo de liquidacion
        df1.loc[df1["liquidacion"] == "PH", "fec_liquidacion"] = date
        df1.loc[df1["liquidacion"] == "PM",
                "fec_liquidacion"] = get_next_weekday(date)
        df1.loc[df1["liquidacion"] == "PM",
                "fec_liquidacion"] = get_nex2_weekday(date)
        df1 = df1.assign(fec_operacion=date)  # consultar
        df1 = df1.assign(fec_recompra=None)  # consultar
        df1 = df1.assign(fec_valor=date)  # consultar

        df1 = df1.assign(fec_vto=None)

        df1 = df1.assign(gasto_extra=0)

        df1 = df1.assign(gastos_div="")

        df1 = df1.assign(gestor_ordenante=2960)  # Consultar

        # consultar suma o resta segun que

        df1.loc[df1["operacion"] == "C", 'ind_nominal_srn'] = "S"
        df1.loc[df1["operacion"] == "V", "ind_nominal_srn"] = "R"

        df1 = df1.assign(ind_periodificar=None)

        df1 = df1.assign(liquido_div=df1['efectivo_div'])

        # Renta variable Nacional
        df1 = df1.assign(mercado='RVN')

        df1 = df1.assign(minusvalia=0)
        df1 = df1.assign(minusvalia_div=0)

        df1 = df1.assign(neto_div=df1['efectivo_div'])

        df1 = df1.assign(otros_gastos_div='')

        df1 = df1.assign(
            previa_compromiso_plazo='D')  # compromiso diario segun que

        df1 = df1.assign(plusvalia=0)
        df1 = df1.assign(plusvalia_div=0)

        df1 = df1.assign(prima_div=None)

        df1 = df1.assign(primario_secundario='P')
        df1 = df1.assign(regularizar_sn='S')  # CONDICIONES
        df1 = df1.assign(repo_dia='N')

        df1 = df1.assign(tipo_interes=0)
        df1 = df1.assign(titulos=df1['nominal_div'])  # consultar

        df1 = df1.assign(ventana_tratamiento='RVN')

        df1 = df1.assign(ind_proceso='D')

        df1 = df1.assign(enlace_sucursal='')
        df1 = df1.assign(enlace_tipo_ap='')
        df1 = df1.assign(enlace_plan_subplan='')

        df1 = df1.assign(retencion_div=0)

        df1.loc[df1["liquidacion"] != "PH", "fec_liquidacion"] = "S"
        df1.loc[df1["liquidacion"] == "PH", "ind_cambio_asegurado"] = "N"

        df1 = df1.assign(ind_depositario='')
        df1 = df1.assign(simple_compuesto='')
        df1 = df1.assign(tex_pago='')

        df1 = df1.assign(tex_pagareS_cod=None)
        df1 = df1.assign(tex_pagares=None)

        df1 = df1.assign(num_comunica_be=None)
        df1 = df1.assign(iva=None)
        df1 = df1.assign(iva_div=None)

        df1 = df1.assign(cuenta_ccc='')

        df1 = df1.assign(ind_cobertura=None)
        df1 = df1.assign(fecha_saldo='')
        df1 = df1.assign(libre_n1='')
        df1 = df1.assign(libre_n2='')
        df1 = df1.assign(libre_x1='')
        df1 = df1.assign(libre_x2='')
        df1 = df1.assign(fecha_ejecucion='')
        df1 = df1.assign(codigo_uti='')

        df1 = df1.assign(tir_mercado=0.000000000)  # consultar
        df1 = df1.drop([
            "Rut", "Dig Ver", "Secuencia", "Status", "Folio_operacion",
            "Fecha operacion", "secuencia", "Moneda", "liquidacion", "no"
        ],
                       axis=1)

        columnas = list(df1.columns)
        for columna in columnas:
            if not columna in l:

                df1 = df1.drop(["{}".format(columna)], axis=1)
        for col in l:
            if not col in df1.columns:
                pass
                #print(col)

        duplicateRowsDF = df1[df1.duplicated(
            ['codigo_secuencia', 'efectivo_div'])]
        df1.drop_duplicates(subset=['codigo_secuencia', 'efectivo_div'],
                            keep=False,
                            inplace=True)

        df1 = df1.reindex(columns=l)
        duplicateRowsDF = duplicateRowsDF.reindex(columns=l)
        df1["tir_mercado"] = None
        df1["comision_ecc_div"] = None

        data = pd.concat([df1, duplicateRowsDF])

        data["tir_mercado"] = None
        data["comision_ecc_div"] = None

        duplicateRowsDF1 = data[data.duplicated(
            ['codigo_secuencia', 'efectivo_div'])]
        data.drop_duplicates(subset=['codigo_secuencia', 'efectivo_div'],
                             keep=False,
                             inplace=True)

        data = data.reindex(columns=l)
        duplicateRowsDF1 = duplicateRowsDF1.reindex(columns=l)
        data["tir_mercado"] = None
        data["comision_ecc_div"] = None

        data1 = pd.concat([data, duplicateRowsDF1])
        #print_full(data1)

        print(data1['operacion'])
        #data1.to_csv("hola.csv", index=False,sep = ';',encoding='latin-1')

        return data1


#transaccionesRVN('GEO_ap/Geo/2020-01-03geo.txt', '03-01-2020')
예제 #26
0
def refreh_sql():
    yesterday = fs.get_prev_weekday(str(dt.datetime.now().date()))

    funds = utiles.get_FI_funds()
    df_bonos = utiles.get_updated_RFI(funds)
    df_depositos = utiles.get_updated_IIF(funds)

    #query_f = "SELECT Codigo_Fdo FROM [MesaInversiones].[dbo].[FondosIR]"
    #df_fondos = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1", "usuario1", query_f)
    #query_c = "SELECT Codigo_Fdo FROM [MesaInversiones].[dbo].[Perfil Clientes]"
    #df_carteras = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1", "usuario1", query_c)
    #fondos =  df_fondos['Codigo_Fdo'].values.tolist()
    #carteras = df_carteras['Codigo_Fdo'].values.tolist()
    #df_f = df.loc[(df['codigo_fdo'].isin(fondos))]
    #df_c = df.loc[(df['codigo_fdo'].isin(carteras))]

    query_cupones = "SELECT * FROM [MesaInversiones].[dbo].[RF_Cupones]"
    df_cupones = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                       "usuario1", "usuario1", query_cupones)
    cupones = df_cupones['Instrumento'].values.tolist()
    print('----------------cupones----------------')
    print(len(cupones))
    df_emisor = fs.get_frame_sql_user(
        "Puyehue", "MesaInversiones", "usuario1", "usuario1",
        "SELECT RTRIM(LTRIM([Emisor])) AS [Emisor], [Codigo_SVS] FROM EmisoresIIF"
    )
    set_bonos = {
        row[1]['codigo_ins'].strip() + ' Corp'
        for row in df_bonos.iterrows()
    }
    print(set_bonos)
    set_depositos = {
        nemo_depo(row[1]['codigo_emi'].strip(), row[1]['moneda'].strip(),
                  row[1]['fec_vcto'].strip(), df_emisor) + ' M-Mkt':
        [row[1]['fec_vcto'], row[1]['moneda']]
        for row in df_depositos.iterrows()
    }

    LocalTerminal = v3api.Terminal('localhost', 8194)

    fails = []
    for instrumento in set_bonos:
        if instrumento[:-5] not in cupones:
            try:
                final_row = []
                response = LocalTerminal.get_reference_data(
                    instrumento, [
                        'TRADE_CRNCY', 'NEXT_CASH_FLOW_DT', 'NEXT_CASH_FLOW',
                        'MATURITY'
                    ])
                bloombergData = response.as_frame().replace('nan', 0)
                final_row.append(instrumento[:-5])
                final_row.append(bloombergData.iloc[0]['TRADE_CRNCY'])
                final_row.append(
                    timestamp_to_string(
                        bloombergData.iloc[0]['NEXT_CASH_FLOW_DT']))
                final_row.append(bloombergData.iloc[0]['NEXT_CASH_FLOW'])
                final_row.append(
                    timestamp_to_string(bloombergData.iloc[0]['MATURITY']))
                df_cupones = df_cupones.append(pd.DataFrame(
                    [final_row],
                    columns=[
                        'Instrumento', 'moneda', 'Fecha_corte',
                        'Cantidad_corte', 'Vencimiento'
                    ]),
                                               ignore_index=True)
            except Exception as e:
                print(e)
                print(instrumento)
                fails.append(instrumento)

    for instrumento in set_depositos:
        if instrumento[:-6] not in cupones:
            try:
                final_row = []
                final_row.append(instrumento[:-6])
                moneda = set_depositos[instrumento][1].strip()
                if moneda == '$':
                    moneda = 'CLP'
                elif moneda == 'US$':
                    moneda = 'USD'
                elif moneda == 'UF':
                    moneda = 'CLF'
                final_row.append(moneda)
                final_row.append(None)
                final_row.append(1000000)
                final_row.append(set_depositos[instrumento][0])
                df_cupones = df_cupones.append(pd.DataFrame(
                    [final_row],
                    columns=[
                        'Instrumento', 'moneda', 'Fecha_corte',
                        'Cantidad_corte', 'Vencimiento'
                    ]),
                                               ignore_index=True)
            except Exception as e:
                print(e)
                print(instrumento)
                fails.append(instrumento)

    insert_into_database(df_cupones)
    print('----------------fails----------------')
    print(len(fails))
예제 #27
0
def generar_resumen_carteras():
    byesterday = fs.get_prev_weekday(
        fs.get_prev_weekday(str(dt.datetime.now().date())))
    tomorrow = fs.get_next_weekday(str(dt.datetime.now().date()))
    today = str(dt.datetime.now().date())
    query_c = "SELECT Codigo_Fdo FROM [MesaInversiones].[dbo].[Perfil Clientes]"
    df_carteras = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                        "usuario1", "usuario1", query_c)
    carteras = df_carteras['Codigo_Fdo'].values.tolist()

    query_cupones = "SELECT * FROM [MesaInversiones].[dbo].[RF_Cupones]"
    df_cupones = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                       "usuario1", "usuario1", query_cupones)

    query_carteras = (
        "SELECT [codigo_ins], RTRIM(LTRIM([codigo_fdo])) AS [codigo_fdo], [nominal], [codigo_emi], [moneda], [fec_vcto] FROM [MesaInversiones].[dbo].[ZHIS_Carteras_Main] WHERE [fecha] = '{}' 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(
        byesterday, 'SPREADCORP', 'DEUDA CORP', 'DEUDA 360', 'LIQUIDEZ',
        'M_MARKET', 'MACRO CLP3', 'MACRO 1.5', 'RENTA', 'IMT E-PLUS')
    df_carteras = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                        "usuario1", "usuario1", query_carteras)

    ### Agregarle los fines de semana
    if not is_weekend(today, tomorrow):
        cupones = {
            row[1]['Instrumento'].strip(): row[1]['Cantidad_corte']
            for row in df_cupones.iterrows()
            if row[1]['Fecha_corte'] == tomorrow
            and row[1]['Vencimiento'] != tomorrow
        }
        vencimientos = {
            row[1]['Instrumento'].strip(): row[1]['Cantidad_corte']
            for row in df_cupones.iterrows()
            if row[1]['Vencimiento'] == tomorrow
        }
    else:
        sabado = fs.get_next_day(today)
        domingo = fs.get_next_day(sabado)
        cupones = {
            row[1]['Instrumento'].strip(): row[1]['Cantidad_corte']
            for row in df_cupones.iterrows()
            if (row[1]['Fecha_corte'] == tomorrow and row[1]['Vencimiento'] !=
                tomorrow) or (row[1]['Fecha_corte'] == sabado
                              and row[1]['Vencimiento'] != sabado) or (
                                  row[1]['Fecha_corte'] == domingo
                                  and row[1]['Vencimiento'] != domingo)
        }
        vencimientos = {
            row[1]['Instrumento'].strip(): row[1]['Cantidad_corte']
            for row in df_cupones.iterrows()
            if (row[1]['Vencimiento'] == tomorrow) or (
                row[1]['Vencimiento'] == sabado) or (
                    row[1]['Vencimiento'] == domingo)
        }

    df_excel = pd.DataFrame(columns=[
        'Cartera', 'Cupones', 'Vencimiento', 'Total', 'R Vencimiento'
    ])

    df_emisor = fs.get_frame_sql_user(
        "Puyehue", "MesaInversiones", "usuario1", "usuario1",
        "SELECT RTRIM(LTRIM([Emisor])) AS [Emisor], [Codigo_SVS] FROM EmisoresIIF"
    )

    for cartera in carteras:
        df_cartera = df_carteras[df_carteras['codigo_fdo'] == cartera]
        total_recibido_vencimiento = 0
        total_recibido_cupones = 0
        vencimiento_recibido = False
        for row in df_cartera.iterrows():
            instrumento = row[1]['codigo_ins'].strip()
            if 'PAGARE' in instrumento or 'PDBC' in instrumento:
                instrumento = nemo_depo(row[1]['codigo_emi'].strip(),
                                        row[1]['moneda'].strip(),
                                        row[1]['fec_vcto'].strip(), df_emisor)
            if instrumento in vencimientos:
                print(instrumento)
                print(float(row[1]['nominal']))
                total_recibido_vencimiento += (
                    (vencimientos[instrumento] / 1000000) *
                    float(row[1]['nominal']))
                vencimiento_recibido = True
            elif instrumento in cupones:
                total_recibido_cupones += ((cupones[instrumento] / 1000000) *
                                           row[1]['nominal'])
        excel_row = [
            cartera, total_recibido_cupones, total_recibido_vencimiento,
            total_recibido_cupones + total_recibido_vencimiento,
            vencimiento_recibido
        ]
        df_excel = df_excel.append(pd.DataFrame([excel_row],
                                                columns=[
                                                    'Cartera', 'Cupones',
                                                    'Vencimiento', 'Total',
                                                    'R Vencimiento'
                                                ]),
                                   ignore_index=True)
        print(excel_row)
        print('----------------------------------------------')

    excel = resource_path("Cupones_carteras_" + tomorrow + ".xlsx")
    writer = pd.ExcelWriter(excel)
    df_excel.to_excel(writer, sheet_name='Hoja1', startrow=1, startcol=1)
    writer.sheets['Hoja1'].column_dimensions['C'].width = 15
    writer.sheets['Hoja1'].column_dimensions['D'].width = 15
    writer.sheets['Hoja1'].column_dimensions['E'].width = 15
    writer.sheets['Hoja1'].column_dimensions['F'].width = 15
    writer.sheets['Hoja1'].column_dimensions['G'].width = 15
    writer.save()
    writer.close()
    fs.export_sheet_pdf_jp(
        0,
        fs.get_self_path() + "Cupones_carteras_" + tomorrow + ".xlsx",
        fs.get_self_path() + "Informe_cupones_carteras_" + tomorrow + ".pdf")
예제 #28
0
def Pershing(fecha):

    strcuentas = [
        'HMT082415', 'HMT090053', 'HMT090418', 'HMT090830', 'HMT090848',
        'HMT090921', 'HMT090939', 'HMT090947', 'HMT090962', 'HMT090970',
        'HMT100019', 'HMT100043', 'HMT100068', 'HMT100092', 'HMT270002',
        'HMT390008', 'HMT090996', 'HMT100100', 'HMT091010', 'HMT091036',
        'HMT086655', 'HMT086663', 'HMT086671', 'HMT086689', 'HMT087083',
        'HMT091028', 'HMT091044', 'HMT087430'
    ]

    strSQL = "SET DATEFORMAT DMY SELECT mov.ID , mov.Numero_Cuenta, cue.Nombre_cuenta,mov.Instrumento,mov.Simbolo_Instrumento, ins.CUSIP, ins.Codigo_Ins, ins.Nombre, ins.Codigo_Emi ,mov.Precio, mov.Simbolo_Instrumento, mov.Codigo_compraventa,mov.Cantidad, mov.Valorizacion , mov.Moneda, mov.fecha_transaccion, mov.fecha_liquidacion FROM [CONCILIACION_INTERNACIONAL].[dbo].[TBL_MOVIMIENTO] mov INNER JOIN [CONCILIACION_INTERNACIONAL].[dbo].[TBL_CUENTAS_INTERNACIONALES] cue ON mov.Numero_Cuenta=cue.Numero_Cuenta LEFT OUTER JOIN [lagunillas].PFMIMT3.dbo.FM_INSTRUMENTOS ins ON LTRIM(RTRIM(mov.Instrumento)) = LTRIM(RTRIM(ins.CUSIP)) collate SQL_Latin1_General_CP1_CI_AS WHERE mov.Fecha_transaccion = '" + fecha + "' and ins.CUSIP is not NULL"

    df = get_frame_sql_user("Farellones", "CONCILIACION_INTERNACIONAL",
                            "usuario1", "usuario1", strSQL)

    #Extrae la tabla con el valor de las paridades segun la fecha ingresada

    eliminados = 0
    largo = df.shape[0]
    for i in range(largo):

        row = df.iloc[i - eliminados]
        if not row['Numero_Cuenta'].strip() in strcuentas:

            df = df.drop(df.index[i - eliminados])
            eliminados += 1

        else:
            pass

    for row in df['Numero_Cuenta']:

        row = row.strip()
        rut = get_frame_sql_user(
            "Farellones", "CONCILIACION_INTERNACIONAL", "usuario1", "usuario1",
            "SELECT  Rut,Nro_Secuencia FROM [CONCILIACION_INTERNACIONAL].[dbo].TBL_CUENTAS_INTERNACIONALES  where Numero_Cuenta = '"
            + row + "'")

        rut['Rut'] = rut['Rut'].to_string(index=False).strip()

        rut['Nro_Secuencia'] = rut['Nro_Secuencia'].astype(int)

        sec = rut['Nro_Secuencia']

        sec = sec.to_string(index=False)
        rut[['Rut', 'no']] = rut['Rut'].str.split('-', expand=True)

        numero = rut['Rut'].astype(int)

        digitover = rut['no'].astype(int)

        codigo = get_frame_sql_user(
            "Puyehue", "MesaInversiones", "usuario1", "usuario1",
            "select * from [Perfil Clientes] where Rut = '" +
            numero.to_string(index=False).strip() + "' and [Dig Ver] = '" +
            digitover.to_string(index=False).strip() + "' and Secuencia = '" +
            sec.strip() + "'")

        df.loc[df["Numero_Cuenta"] == row,
               "Numero_Cuenta"] = codigo['Codigo_Fdo'].to_string(
                   index=False).strip()

    df['Estado'] = 'T'
    ## creamos una columna con la fecha de la session, es decir con la fecha actual

    date = fecha[6:10] + '-' + fecha[3:5] + '-' + fecha[0:2]
    df['fechasess'] = date
    paridades = get_frame_sql_user(
        "Puyehue", "replicasCredicorp", "usrConsultaComercial", "Comercial1w",
        "Select * from VISTA_PARIDADES_CDP where CODIGO_MONEDA = 'CLP' AND FECHA_PARIDAD ='"
        + date + "' ORDER BY CODIGO_MONEDA_ORIGEN ASC")

    paridades['CODIGO_MONEDA_ORIGEN'] = paridades[
        'CODIGO_MONEDA_ORIGEN'].str.strip()

    dolar = paridades['VALOR_PARIDAD'].loc[
        (paridades['CODIGO_MONEDA_ORIGEN'] == 'USD')
        & (paridades['GRUPO_COTIZACION'] == 1)]
    dolar = dolar.to_string(index=False)

    ## creamos el dataframe con las columnas que utiliza RD
    l = [
        "estado", "fecha_sesion", "codigo_secuencia", "apertura_cierre",
        "base_calculo", "broker", "cam_divisa", "canones_div", "cartera",
        "comision_div", "corretaje_div", "cot_recompra", "cot_rf_cup",
        "cotizacion", "cupon_corrido_div", "cupon_per", "cupon_per_div",
        "dias", "divisa", "efectivo_div", "efectivo_vto_div",
        "ent_contrapartida", "ent_depositaria", "ent_liquidadora",
        "ent_mediadora", "fec_comunicacion_be", "fec_liquidacion",
        "fec_operacion", "fec_recompra", "fec_valor", "fec_vto", "gasto_extra",
        "gastos_div", "gestor_ordenante", "ind_nominal_srn",
        "ind_periodificar", "instrumento", "liquido_div", "mercado",
        "minusvalia", "minusvalia_div", "neto_div", "nominal_div", "operacion",
        "otros_gastos_div", "previa_compromiso_plazo", "plusvalia",
        "plusvalia_div", "prima_div", "primario_secundario", "regularizar_sn",
        "repo_dia", "tipo_interes", "titulos", "ventana_tratamiento",
        "ind_proceso", "enlace_sucursal", "enlace_tipo_ap",
        "enlace_plan_subplan", "retencion_div", "ind_cambio_asegurado",
        "ind_depositario", "simple_compuesto", "tex_pago", "tex_pagare_cod",
        "tex_pagares", "num_comunica_be", "iva", "iva_div", "cuenta_ccc",
        "ind_cobertura", "fecha_saldo", "libre_n1", "libre_n2", "libre_x1",
        "libre_x2", "fecha_ejecucion", "codigo_uti", "comision_ecc_div",
        "tir_mercado"
    ]

    df2 = pd.DataFrame(columns=l)

    df['Preciooo'] = df['Precio']

    ## agregamos columna estado
    df2 = df2.assign(estado=df['Estado'])

    ## agregamos columna de fecha de session
    df2 = df2.assign(fecha_sesion=date)
    ## agregamos columna con el codigo de secuencia
    df2 = df2.assign(codigo_secuencia=df['ID'])
    df2 = df2.assign(apertura_cierre='NULL')

    #
    #
    df2 = df2.assign(
        base_calculo=df['Moneda']
    )  #Agregamos columna base calculo segun las condiciones                                                     #Para RV dejaremos fijo "3". Para RFN debe ser "2" (Act/365).
    #Para IIF sería "14" (Act/30) y si el papel es en moneda distinta de $ debe ser "3" (Act/360).

    df2['base_calculo'] = df2['base_calculo'].str.strip()
    df2.loc[df2['base_calculo'] == 'USD', 'base_calculo'] = '3'  #
    df2.loc[df2['base_calculo'] == 'EUR', 'base_calculo'] = '3'  #

    ## agregamos columna broker fija para cccapital
    df2 = df2.assign(broker='CCCAPITAL')
    #
    ## agregamos columna cambio de divisa con el tipo de cambio actualizado segun los datos que se obtienen
    ## de la tabla paridades
    df2 = df2.assign(cam_divisa=df['Moneda'])

    df2['cam_divisa'] = df2['cam_divisa'].str.strip()

    df2.loc[df2['cam_divisa'] == 'USD', 'cam_divisa'] = float(dolar)
    df2.loc[df2['cam_divisa'] == 'EUR', 'cam_divisa'] = '860.44'

    df2 = df2.assign(canones_div='NULL')
    #
    ## agregamos la columna cartera con el codigo de fondo de cada instrumento
    df2 = df2.assign(cartera=df['Numero_Cuenta'])
    df2['cartera'] = df2['cartera'].str.strip()

    df2 = df2.assign(comision_div=0)
    df2 = df2.assign(corretaje_div=0)
    df2 = df2.assign(cot_recompra=0)
    df2 = df2.assign(cot_rf_cup=0)  # cotizacion renta fija con cupon

    ## agregamos cotizacion segun las condiciones parqa renta variable es el precio de la operacion y para renta fija es 0
    df2 = df2.assign(cotizacion=df['Preciooo'])

    df2 = df2.assign(cupon_corrido_div=0)  # FALTA AGREGAR
    df2 = df2.assign(cupon_per_div=0)
    df2 = df2.assign(cupon_per=0)
    #
    ## agregamos la columna dias
    #df['duration'].astype(float)
    df2 = df2.assign(dias=0)

    ## agregamos la columna divisa con el ID de tipo de moneda
    df2 = df2.assign(divisa=df['Moneda'])
    df2['divisa'] = df2['divisa'].str.strip()
    df2.loc[df2['divisa'] == 'USD', 'divisa'] = '5'
    df2.loc[df2['divisa'] == 'EUR', 'divisa'] = '4'

    #
    df2 = df2.assign(efectivo_div=df['Valorizacion'])  # monto, falta validar

    df2 = df2.assign(efectivo_vto_div=0)
    df2 = df2.assign(ent_contrapartida='CCCAPITAL')  # valor por defecto
    df2 = df2.assign(
        ent_depositaria='DCV'
    )  # deposito central de valores, va como defecto v # sicav sociedad de inversion de capital variable  # sicaf socidad de inversion de capital fijo
    #
    df2 = df2.assign(ent_liquidadora='PERSHING')  # valor por defecto
    #
    df2 = df2.assign(ent_mediadora=None)  # Valor por defecto
    #
    df2 = df2.assign(fec_comunicacion_be=None)  # valores por defecto
    df2 = df2.assign(
        fec_liquidacion=df['fecha_liquidacion'])  # valores por defecto
    df2 = df2.assign(fec_operacion=df['fechasess'])  # valores por defecto

    df2 = df2.assign(fec_recompra=df['fechasess'])  # valores por defecto
    df2 = df2.assign(fec_valor=df['fechasess'])  # valores por defecto
    df2 = df2.assign(fec_vto=df['fecha_liquidacion'])

    df2 = df2.assign(gasto_extra=0)
    df2 = df2.assign(gastos_div='')

    df2 = df2.assign(gestor_ordenante=2960)  # valor por defecto

    #  suma o resta segun si es venta o compra
    df2 = df2.assign(ind_nominal_srn=df['Codigo_compraventa'])
    df2['ind_nominal_srn'] = df2['ind_nominal_srn'].str.strip()
    #df2['operacion'] = df2['operacion'].str.strip()

    df2.loc[df2['ind_nominal_srn'] == 'B', 'ind_nominal_srn'] = 'R'
    df2.loc[df2['ind_nominal_srn'] == 'S', 'ind_nominal_srn'] = 'S'

    df2 = df2.assign(ind_periodificar='NULL')

    df2 = df2.assign(instrumento=df['Codigo_Ins'])

    df2['instrumento'] = df2['instrumento'].str.strip()

    df2 = df2.assign(liquido_div=df['Valorizacion'])  # falta validar

    df2 = df2.assign(mercado='RVE')

    df2 = df2.assign(minusvalia=0)
    df2 = df2.assign(minusvalia_div=0)
    df2 = df2.assign(neto_div=df['Valorizacion'])
    df2 = df2.assign(nominal_div=df['Cantidad'])  # consultar

    # venta o compra segun la tasa de compra, si existe es compra si no es venta
    df2 = df2.assign(operacion=df['Codigo_compraventa'])

    df2['operacion'] = df2['operacion'].str.strip()

    df2.loc[df2['operacion'] == 'B', 'operacion'] = 'C'
    df2.loc[df2['operacion'] == 'S', 'operacion'] = 'V'

    df2 = df2.assign(otros_gastos_div='')
    df2 = df2.assign(
        previa_compromiso_plazo='D')  # compromiso diario segun que
    df2 = df2.assign(plusvalia=0)
    df2 = df2.assign(plusvalia_div=0)
    df2 = df2.assign(prima_div='NULL')
    df2 = df2.assign(primario_secundario='S')  # VALORES POR DEFECTO
    df2 = df2.assign(regularizar_sn='S')  # VALORES POR DEFECTO
    df2 = df2.assign(repo_dia='N')  # VALORES POR DEFECTO

    df2 = df2.assign(tipo_interes=0)

    df2 = df2.assign(titulos=df2['nominal_div'])

    df2 = df2.assign(ventana_tratamiento='RVE')

    df2 = df2.assign(ind_proceso='D')
    df2 = df2.assign(enlace_sucursal='')
    df2 = df2.assign(enlace_tipo_ap='')
    df2 = df2.assign(enlace_plan_subplan='')
    df2 = df2.assign(retencion_div=0)

    # Ind_cambio_asegurado: si la fecha_operacion es distinta a fecha_liquidacion el campo debe ser “S”, si son iguales debe ser “N”
    df2 = df2.assign(ind_cambio_asegurado=df2['nominal_div'])
    df2 = df2.assign(ind_cambio_asegurado='N')

    df2 = df2.assign(ind_depositario='')
    df2 = df2.assign(simple_compuesto='')
    df2 = df2.assign(tex_pago='')
    df2 = df2.assign(tex_pagare_cod='NULL')
    df2 = df2.assign(tex_pagares='NULL')
    df2 = df2.assign(num_comunica_be='NULL')
    df2 = df2.assign(iva='NULL')
    df2 = df2.assign(iva_div=' NULL')
    df2 = df2.assign(cuenta_ccc='')
    df2 = df2.assign(ind_cobertura='NULL')
    df2 = df2.assign(fecha_saldo='')
    df2 = df2.assign(libre_n1='')
    df2 = df2.assign(libre_n2='')
    df2 = df2.assign(libre_x1='')
    df2 = df2.assign(libre_x2='')
    df2 = df2.assign(fecha_ejecucion='')
    df2 = df2.assign(codigo_uti='')
    df2 = df2.assign(comision_ecc_div='')
    df2 = df2.assign(tir_mercado=0)  # consultar

    df2['cam_divisa'] = df2['cam_divisa'].astype(str)
    df2['cotizacion'] = df2['cotizacion'].astype(str)
    df2['efectivo_div'] = df2['efectivo_div'].astype(str)
    df2['liquido_div'] = df2['liquido_div'].astype(str)
    df2['neto_div'] = df2['neto_div'].astype(str)
    df2['nominal_div'] = df2['nominal_div'].astype(str)
    df2['titulos'] = df2['titulos'].astype(str)
    df2['mercado'] = df2['mercado'].astype(str)
    df2['codigo_secuencia'] = df2['codigo_secuencia'].astype(str)

    df2['cam_divisa'] = df2['cam_divisa'].str.replace('.', ',')
    df2['cotizacion'] = df2['cotizacion'].str.replace('.', ',')
    df2['efectivo_div'] = df2['efectivo_div'].str.replace('.', ',')
    df2['liquido_div'] = df2['liquido_div'].str.replace('.', ',')
    df2['neto_div'] = df2['neto_div'].str.replace('.', ',')
    df2['nominal_div'] = df2['nominal_div'].str.replace('.', ',')
    df2['titulos'] = df2['titulos'].str.replace('.', ',')
    df2['mercado'] = df2['mercado'].str.replace('.', ',')
    df2['codigo_secuencia'] = df2['codigo_secuencia'].str.replace('.', ',')

    df2 = df2.reindex(columns=l)
    print(df2['operacion'])

    return df2