Beispiel #1
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")

        #for llave, valor in ASIENTOS_CAMBIO_PATRIMONIO.items():
        #    data[valor] = none_entero(hallar_valor(report_tree, llave,
        #                                           CAMBIO_PATRIMONIO))

        data.update(leer_asientos(ASIENTOS_CAMBIO_PATRIMONIO, report_tree,
                                   CAMBIO_PATRIMONIO))

        # 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
Beispiel #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")

        #for llave, valor in ASIENTOS_CAMBIO_PATRIMONIO.items():
        #    data[valor] = none_entero(hallar_valor(report_tree, llave,
        #                                           CAMBIO_PATRIMONIO))

        data.update(
            leer_asientos(ASIENTOS_CAMBIO_PATRIMONIO, report_tree,
                          CAMBIO_PATRIMONIO))

        # 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
Beispiel #3
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
Beispiel #4
0
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
Beispiel #5
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
Beispiel #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")

        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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
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
Beispiel #10
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")

        # Lee los asientos del balance general de la web de la bvl
        # y actualiza el diccionario data con los resultados
        data.update(
            leer_asientos(ASIENTOS_BALANCE_GENERAL, report_tree, BALANCE))

        # Obtenemos la tabla donde está ubicado el reporte

        data['cuentas_cobrar'] = 0

        if '1D0103' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0103']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0103']]
        if '1D0104' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0104']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0104']]
        if '1D0105' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0105']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0105']]

        # Si no hay datos sobre inversiones de capital entonces el valor es cero
        if not data['inv_capital']:
            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 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
        if data['deuda_total'] and data['deuda_corto_plazo']:
            data['deuda_largo_plazo'] = \
                               data['deuda_total'] - data['deuda_corto_plazo']

        #data['valor_libros'] = none_entero(hallar_valor(report_tree,
        #                                                u'1D07ST', BALANCE))

    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
Beispiel #11
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")

        # Lee los asientos del balance general de la web de la bvl
        # y actualiza el diccionario data con los resultados
        data.update(leer_asientos(ASIENTOS_BALANCE_GENERAL, report_tree, BALANCE))

        # Obtenemos la tabla donde está ubicado el reporte

        data['cuentas_cobrar'] = 0

        if '1D0103' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0103']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0103']]
        if '1D0104' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0104']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0104']]
        if '1D0105' in ASIENTOS_BALANCE_GENERAL:
            data['cuentas_cobrar'] += data[ASIENTOS_BALANCE_GENERAL['1D0105']]
            del data[ASIENTOS_BALANCE_GENERAL['1D0105']]


        # Si no hay datos sobre inversiones de capital entonces el valor es cero
        if not data['inv_capital']:
            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 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
        if data['deuda_total'] and data['deuda_corto_plazo']:
            data['deuda_largo_plazo'] = \
                               data['deuda_total'] - data['deuda_corto_plazo']

        #data['valor_libros'] = none_entero(hallar_valor(report_tree,
        #                                                u'1D07ST', BALANCE))

    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
Beispiel #12
0
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
Beispiel #13
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
Beispiel #14
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