Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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