def flujo_efectivo_2010(url_flujos_efectivo): """Funcion que devuelve datos del Estado de flujos de efectivo formato 2010 """ data = {} html = report_html(url_flujos_efectivo) # Si el url existe y devuelve un html valido, se obtienen los valores # caso contrario no se hace nada if html: # Se obtiene el html del reporte report_tree = BeautifulSoup(html) # Se obtiene el html de la tabla donde esta el reporte reporte = \ report_tree.body.center.table.contents[1].td.table.tr.contents[3] \ .contents[1].table # Se busca la fila requerida entre todos los descendientes de la tabla # Una vez que se encuentra la línea se obtiene el valor buscado data['flujo_efectivo'] = float(find_tag(reporte, u'3D01ST', 6).replace(',', '')) return data else: return False
def estado_cambios_patrimonio_2010(url_cambios_patrimonio): """Funcion que devuelve los valores del reporte de cambio de patrimonio formato 2010""" data = {} html = report_html(url_cambios_patrimonio) # Si el url existe y devuelve un html valido, se obtienen los valores # caso contrario no se hace nada if html: # Parse the report html report_tree = BeautifulSoup(html) # Obtenemos la tabla donde está ubicado el reporte reporte = \ report_tree.body.center.table.tr.td.table.tr.contents[3].table. \ contents[3].td.table # Dividendos # Debido a que el texto 'Dividendos declarados y Participaciones # acordados durante el período/' se repite dos veces en el reporte # se utiliza el codigo de la fila y obtenemos el total data['dividendos'] = float(find_tag(reporte, u'4D0204', 23).replace(',', ''))*-1 # Emision de acciones con el nombre 'Nuevos Aportes de accionistas/' # Se usa el código de la fila para identificar la segunda fila que # corresponde a la fecha del reporte, no al año anterior data['emision_acciones'] = float(find_tag(reporte, u'4D0205', 23).replace(',', '')) # Si hay emision de acciones la variable es 1, caso contrario es 0 if data['emision_acciones'] != 0: data['emision_acciones'] = 1 return data else: return False
def ganancias_perdidas_2010(url_ganancias_perdidas): """Funcion que devuelve datos del Estado de Ganancias y perdidas formato 2010""" data = {} html = report_html(url_ganancias_perdidas) # Si el url existe y devuelve un html valido, se obtienen los valores # caso contrario no se hace nada if html: # Parse the report html report_tree = BeautifulSoup(html) # Obtenemos la tabla donde está ubicado el reporte reporte = \ report_tree.body.center.table.contents[1].table.tr.contents[3]. \ table.contents[3].td.table # Ingreso de actividades ordinarias data['ing_act_ord'] = float(find_tag(reporte, u'2D01ST', 7).replace(',', '')) # Ventas data['ventas'] = float(find_tag(reporte, u'2D0101', 9).replace(',', '')) # Costo de la operacion data['costo_operacion'] = round(data['ventas']-data['ing_act_ord'], 3) # Utilidades data['utilidades'] = float(find_tag(reporte, u'2D07ST', 7).replace(',', '')) return data else: return False
def balance_general_2010(url_balance_general): """Funcion que devuelve datos del Estado de flujos de efectivo formato 2010""" data = {} html = report_html(url_balance_general) # Si el url existe y devuelve un html valido, se obtienen los valores # caso contrario no se hace nada if html: # Parse the report html report_tree = BeautifulSoup(html) # Obtenemos la tabla donde está ubicado el reporte reporte = \ report_tree.body.contents[1].tr.contents[1].contents[1].contents[1]. \ contents[3].contents[1].contents[3].contents[1].table # Activos data['activos'] = eliminar_comas(find_tag(reporte, u'1D020T', 6)) # Cuentas por cobrar data['cuentas_cobrar'] = eliminar_comas(find_tag(reporte, u'1D0103', 9)) # Activo circulante data['act_circulante'] = eliminar_comas(find_tag(reporte, u'1D01ST', 6)) # Inversiones de capital data['inv_capital'] = eliminar_comas(find_tag(reporte, u'1D02ST', 6)) # En caso no exista alguno de los datos relacionados a activos se # calcula en base a los otros dos if (not data['activos'] and data['inv_capital'] and data['act_circulante']): data['activos'] = data['inv_capital'] + data['act_circulante'] elif (not data['inv_capital'] and data['activos'] and data['act_circulante']): data['inv_capital'] = data['activos'] - data['act_circulante'] elif (not data['act_circulante'] and data['activos'] and data['inv_capital']): data['act_circulante'] = data['activos'] - data['inv_capital'] # Deuda total data['deuda_total'] = float(find_tag(reporte, u'1D040T', 6).replace(',','')) # Deuda corto plazo data['deuda_corto_plazo'] = float(find_tag(reporte, u'1D03ST', 6).replace(',', '')) # Deuda largo plazo # En el año 2002 un reporte no tiene la data de deuda de largo plazo # por lo que se calcula utilizando la deuda total y la deuda de corto # plazo data['deuda_largo_plazo'] = \ data['deuda_total'] - data['deuda_corto_plazo'] data['valor_libros'] = float(find_tag(reporte, u'1D07ST', 6).replace(',', '')) return data else: return False