def flujo_efectivo(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, "html5lib") # 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 # Si el flujo de efectivo no está en el asiento 3D01ST se busca en el # asiento 3D08ST data['flujo_efectivo'] = hallar_valor(report_tree, u'3D01ST', FLUJO_EFECTIVO) if data['flujo_efectivo']: data['flujo_efectivo'] = \ int(data['flujo_efectivo'].replace(',', '')) else: data['flujo_efectivo'] = int(hallar_valor(report_tree, u'3D08ST', FLUJO_EFECTIVO).replace(',', '')) else: data['flujo_efectivo'] = 0 return data
def estado_cambios_patrimonio(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, "html.parser") # 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'] = int(hallar_valor(report_tree, u'4D0204', CAMBIO_PATRIMONIO).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'] = int(hallar_valor(report_tree, u'4D0205', CAMBIO_PATRIMONIO).replace(',', '')) # Si hay emision de acciones la variable es 1, caso contrario es 0 if data['emision_acciones'] != 0: data['emision_acciones'] = 1 else: data['dividendos'] = 0 data['emision_acciones'] = 0 return data
def ganancias_perdidas(url_ganancias_perdidas): """Funcion que devuelve datos del Estado de Ganancias y perdidas formato 2010""" data = {} # Si es el reporte de un año se le da el valor de A a trim # Para que la función hallar_valor distinga entre los reportes # trimestrales y los anuales trim = 'T' if "Trimestre=A" in url_ganancias_perdidas: trim = CONSTANT_ANHO 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, "html.parser") data.update( leer_asientos(ASIENTOS_GANANCIAS_PERDIDAS, report_tree, GANANCIA_PERDIDA)) # Si no hay ventas como partida aparte, entonces los ingresos de # actividades ordinarias son iguales a las ventas if not data['ventas']: data['ventas'] = data['Ingreso total'] # Si no se encuentra data para costo de operación, entonces se prueba con otro asiento. if not data['costo_operacion']: data['costo_operacion'] = none_entero( hallar_valor(report_tree, '2D0201', GANANCIA_PERDIDA, trim)) else: data['Ingreso total'] = 0 data['ventas'] = 0 data['costo_operacion'] = 0 data['gastos_financieros'] = 0 data['ganancia_operacion'] = 0 data['utilidades'] = 0 data['costo_ventas'] = 0 return data
def ganancias_perdidas(url_ganancias_perdidas): """Funcion que devuelve datos del Estado de Ganancias y perdidas formato 2010""" data = {} # Si es el reporte de un año se le da el valor de A a trim # Para que la función hallar_valor distinga entre los reportes # trimestrales y los anuales trim = 'T' if "Trimestre=A" in url_ganancias_perdidas: trim = CONSTANT_ANHO 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, "html.parser") data.update(leer_asientos(ASIENTOS_GANANCIAS_PERDIDAS, report_tree, GANANCIA_PERDIDA)) # Si no hay ventas como partida aparte, entonces los ingresos de # actividades ordinarias son iguales a las ventas if not data['ventas']: data['ventas'] = data['Ingreso total'] # Si no se encuentra data para costo de operación, entonces se prueba con otro asiento. if not data['costo_operacion']: data['costo_operacion'] = none_entero(hallar_valor(report_tree, '2D0201', GANANCIA_PERDIDA, trim)) else: data['Ingreso total'] = 0 data['ventas'] = 0 data['costo_operacion'] = 0 data['gastos_financieros'] = 0 data['ganancia_operacion'] = 0 data['utilidades'] = 0 data['costo_ventas'] = 0 return data
def balance_general(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, "html5lib") # Obtenemos la tabla donde está ubicado el reporte # Activos data['activos'] = hallar_valor(report_tree, u'1D020T', BALANCE) if data['activos']: data['activos'] = int(data['activos'].replace(',','')) # Cuentas por cobrar data['cuentas_cobrar'] = ( int(hallar_valor(report_tree, u'1D0103', BALANCE).replace(',','')) + int(hallar_valor(report_tree, u'1D0104', BALANCE).replace(',','')) + int(hallar_valor(report_tree, u'1D0103', BALANCE).replace(',','')) ) # Activo circulante data['act_circulante'] = int(hallar_valor(report_tree, u'1D01ST', BALANCE).replace(',','')) # Inversiones de capital data['inv_capital'] = hallar_valor(report_tree,u'1D02ST', BALANCE) if data['inv_capital']: data['inv_capital'] = int(data['inv_capital'].replace(',','')) else: data['inv_capital'] = 0 # 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'] = int(hallar_valor(report_tree, u'1D040T', BALANCE).replace(',','')) # Deuda corto plazo data['deuda_corto_plazo'] = int(hallar_valor(report_tree, u'1D03ST', BALANCE).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'] = int(hallar_valor(report_tree, u'1D07ST', BALANCE).replace(',', '')) else: data['activos'] = 0 data['cuentas_cobrar'] = 0 data['act_circulante'] = 0 data['inv_capital'] = 0 data['deuda_total'] = 0 data['deuda_corto_plazo'] = 0 data['deuda_largo_plazo'] = 0 data['valor_libros'] = 0 return data
def ganancias_perdidas(url_ganancias_perdidas): """Funcion que devuelve datos del Estado de Ganancias y perdidas formato 2010""" data = {} # Si es el reporte de un año se le da el valor de A a trim # Para que la función hallar_valor distinga entre los reportes # trimestrales y los anuales trim = 'T' if "Trimestre=A" in url_ganancias_perdidas: trim = CONSTANT_ANHO 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, "html.parser") # Ingreso de actividades ordinarias data['ing_act_ord'] = int(hallar_valor(report_tree, u'2D01ST', GANANCIA_PERDIDA, trim).replace(',', '')) # Si no hay ventas como partida aparte, entonces los ingresos de # actividades ordinarias son iguales a las ventas ventas = hallar_valor(report_tree, u'2D0101', GANANCIA_PERDIDA, trim) if ventas: data['ventas'] = int(ventas.replace(',', '')) else: data['ventas'] = data['ing_act_ord'] # Costo de la operacion #data['costo_operacion'] = round(data['ventas']-data['ing_act_ord'], 3) data['costo_operacion'] = hallar_valor(report_tree, '2D0203', GANANCIA_PERDIDA, trim) if data['costo_operacion']: data['costo_operacion'] = \ int(data['costo_operacion'].replace(',', '')) else: data['costo_operacion'] = \ int(hallar_valor(report_tree, '2D0201', GANANCIA_PERDIDA, trim).replace(',', '')) # Costo de las ventas data['costo_ventas'] = hallar_valor(report_tree, '2D0201', GANANCIA_PERDIDA, trim) if data['costo_ventas']: data['costo_ventas'] = int(hallar_valor(report_tree, '2D0201', GANANCIA_PERDIDA, trim).replace(',', '')) # Ganancia operativa data['ganancia_operacion'] = hallar_valor(report_tree, '2D03ST', GANANCIA_PERDIDA, trim) if data['ganancia_operacion']: data['ganancia_operacion'] = int(hallar_valor(report_tree, '2D03ST', GANANCIA_PERDIDA, trim).replace(',', '')) # Gastos Financieros data['gastos_financieros'] = int(hallar_valor(report_tree, '2D0402', GANANCIA_PERDIDA, trim).replace(',', '')) # Utilidades data['utilidades'] = int(hallar_valor(report_tree, '2D07ST', GANANCIA_PERDIDA, trim).replace(',', '')) else: data['ing_act_ord'] = 0 data['ventas'] = 0 data['costo_operacion'] = 0 data['gastos_financieros'] = 0 data['ganancia_operacion'] = 0 data['utilidades'] = 0 data['costo_ventas'] = 0 return data