def test_factura_incompleta(self):
        """Factura de datos horarios con horas perdidas."""
        from esiosdata.prettyprinting import print_ok, print_red, print_cyan, print_info

        t_0, t_f = '2016-11-01', '2017-01-05'
        params = dict(tipo_peaje=TIPO_PEAJE_VHC,
                      zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES,
                      alquiler_euros=1.62)
        f1 = FacturaElec(t_0, t_f, consumo=[219, 126, 154], **params)
        print_info(f1)
        print_ok(f1.consumo_total)
        _check_results_factura(f1, 65, 25.72, 53.31, 4.04, 1.62, 17.78, 102.47)

        datos_horarios = f1.consumo_horario.copy()
        FacturaElec(consumo=datos_horarios, **params)

        # Pérdida de 2 horas. Idénticos subtotales:
        print_info(len(datos_horarios))
        datos_horarios = datos_horarios.drop(datos_horarios.index[1500:1502])
        print_red(len(datos_horarios))

        f2 = FacturaElec(consumo=datos_horarios, **params)
        print_ok(f2)
        print_ok(f2.consumo_total)
        _check_results_factura(f2, 65, 25.72, 53.31, 4.04, 1.62, 17.78, 102.47)

        # Pérdida de > horas. Resultado diferente con menos consumo:
        datos_horarios = datos_horarios.drop(datos_horarios.index[1400:1412])
        print_red(len(datos_horarios))

        f3 = FacturaElec(consumo=datos_horarios, **params)
        print_cyan(f3)
        print_cyan(f3.consumo_total)
        assert str(f3) != str(f1)
        self.assertLess(f3.coste_termino_consumo, f1.coste_termino_consumo)
Esempio n. 2
0
    def test_genera_facturas(self):
        # t_0, t_f = '2016-11-01', '2016-12-09'
        d_cambio = '2016-10-30'
        t_0, t_f = '2016-09-01', '2016-12-09'
        f = FacturaElec(t_0, t_f, consumo=1000.)
        print('FACTURA CON PEAJE "{}":\n{}'.format(f.tipo_peaje, f))
        str_1 = str(f)

        # Generación con datos horarios
        consumo_horario = f.consumo_horario
        f2 = FacturaElec(consumo=consumo_horario)
        # print(f2)
        assert str_1 == str(f2)

        try:
            _ = FacturaElec()
            assert 0
        except AttributeError as e:
            print(e)

        # Generación con datos horarios sin tz:
        print(consumo_horario.loc[d_cambio].iloc[:10])
        consumo_horario_naive = consumo_horario.copy()
        consumo_horario_naive.index = consumo_horario_naive.index.tz_localize(None)
        print(consumo_horario_naive.loc[d_cambio].iloc[:10])
        print(len(consumo_horario_naive), consumo_horario_naive.index.is_unique)
        consumo_horario_naive = consumo_horario_naive.reset_index()
        consumo_horario_naive = consumo_horario_naive.loc[consumo_horario_naive.fecha.drop_duplicates(keep='first').index]
        print(len(consumo_horario_naive), consumo_horario_naive.set_index('fecha').index.is_unique)

        f3 = FacturaElec(consumo=consumo_horario_naive.set_index('fecha').kWh)
        print(f3)
        assert str_1 == str(f3)
        print(f3.consumo_horario.loc[d_cambio].iloc[:10])
        assert not f3.consumo_horario.equals(f.consumo_horario)
Esempio n. 3
0
 def test_pvpc_data(self):
     t_0, t_f = '2016-11-01', '2016-12-09'
     f = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, zona_impuestos=ZONA_IMPUESTOS_CEUTA_MELILLA)
     f.gasto_equipo_medida = 10.8
     print(f)
     _check_results_factura(f, 38, 15.06, 0., 0.77, 10.8, 0.59, 27.22)
     print(f.pvpc_horas_periodo)
Esempio n. 4
0
    def test_exporta_fichero_consumo_ofi(self):
        """Exportación de CSV de consumo horario conforme al formato generado por las distribuidoras."""

        path_export = os.path.dirname(os.path.abspath(__file__))
        t_0, t_f = '2016-11-01', '2016-12-09'
        f3 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, consumo=[219, 280],
                         zona_impuestos=ZONA_IMPUESTOS_CEUTA_MELILLA)
        print(f3)
        _check_results_factura(f3, 38, 15.06, 51.89, 3.42, 1.01, 0.74, 72.12)
        consumo_ofi = f3.generacion_csv_oficial_consumo_horario(path_export)
        print(consumo_ofi)

        t_0, t_f = '2017-01-01', '2017-01-30'
        f = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_GEN, consumo=600,
                        zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES, con_bono_social=True)
        print(f)
        _check_results_factura(f, 29, 11.28, 88.76, 3.84, 0.77, 16.72, 96.36)
        consumo_ofi = f.generacion_csv_oficial_consumo_horario(path_export)
        print(consumo_ofi)

        t_0, t_f = '2016-10-30', '2017-01-30'
        f = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_GEN, consumo=800,
                        zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES, con_bono_social=True)
        print(f)
        _check_results_factura(f, 92, 36.24, 107.14, 5.5, 2.45, 24.25, 139.73)
        consumo_ofi = f.generacion_csv_oficial_consumo_horario(path_export)
        print(consumo_ofi)
Esempio n. 5
0
    def test_output_facturas(self):
        t_0, t_f = '2016-01-01', '2017-01-09'
        f1 = FacturaElec(t_0, t_f, consumo=[500, 500], tipo_peaje=TIPO_PEAJE_NOC)
        _variaciones_factura_noc(f1, '2_tramos')

        t_0, t_f = '2016-11-01', '2016-12-09'
        f1 = FacturaElec(t_0, t_f, consumo=[500, 500], tipo_peaje=TIPO_PEAJE_NOC)
        _variaciones_factura_noc(f1, '1_tramo')

        t_0, t_f = '2016-11-01', '2016-12-09'
        f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC)
        _variaciones_factura_noc(f1, '1_tramo_vacia')

        t_0, t_f = '2016-01-01', '2017-01-09'
        f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC)
        _variaciones_factura_noc(f1, '2_tramos_vacia')
Esempio n. 6
0
    def test_reparto_coste(self):

        def _check_export_coste(f):
            s_coste = f.reparto_coste()
            df_coste = f.reparto_coste(detallado=True)
            total_s = s_coste.sum()
            total_df = df_coste.drop(COL_CONSUMO, axis=1).sum().round(2).sum()
            print_cyan(df_coste.head(3))
            print(df_coste.sum())
            print_red('COSTE TOTAL: {:.2f} €; s_coste: {:.2f} €; df_coste: {:.2f} €'
                      .format(f.coste_total, total_s, total_df))
            print(f)

        t_0, t_f = '2016-10-01', '2016-10-04'
        f1 = FacturaElec(t_0, t_f, consumo=[30, 40], tipo_peaje=TIPO_PEAJE_NOC)
        _check_export_coste(f1)

        f2 = FacturaElec(t_0, t_f, consumo=70)
        _check_export_coste(f2)

        t_0, t_f = '2016-10-01', '2017-02-04'
        f3 = FacturaElec(t_0, t_f, consumo=[300, 400], tipo_peaje=TIPO_PEAJE_NOC)
        _check_export_coste(f3)

        f4 = FacturaElec(t_0, t_f, consumo=700)
        _check_export_coste(f4)

        print(f4.reparto_coste())
        print(f4.reparto_coste().describe())
Esempio n. 7
0
    def test_facturas_base(self):
        """Facturas base, comprueba subtotales con resultados de simuladores:
        https://www.esios.ree.es/es/lumios? y https://facturaluz.cnmc.es/facturaluz1.html"""
        t_0, t_f = '2016-11-01', '2017-01-05'
        f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_VHC, consumo=[219, 126, 154],
                         zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES, alquiler_euros=1.62)
        print(f1)
        print(f1.consumo_total)
        _check_results_factura(f1, 65, 25.72, 53.31, 4.04, 1.62, 17.78, 102.47)

        f2 = FacturaElec(t_0, t_f, potencia_contratada=5, tipo_peaje=TIPO_PEAJE_GEN, consumo=[499],
                         zona_impuestos=ZONA_IMPUESTOS_CANARIAS, con_bono_social=False, alquiler_euros=1.62)
        print(f2)
        _check_results_factura(f2, 65, 37.28, 63.68, 5.16, 1.62, 3.30, 111.04)

        f2_b = FacturaElec(t_0, t_f, potencia_contratada=5, tipo_peaje=TIPO_PEAJE_GEN, consumo=499,
                           zona_impuestos=ZONA_IMPUESTOS_CANARIAS, con_bono_social=True, alquiler_euros=1.62)
        _check_results_factura(f2_b, 65, 37.28, 63.68, 3.87, 1.62, 2.50, 83.71)
        print(f2_b)

        t_0, t_f = '2016-11-01', '2016-12-09'
        f3 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, consumo=[219, 280],
                         zona_impuestos=ZONA_IMPUESTOS_CEUTA_MELILLA, alquiler_euros=1.62)
        print(f3)
        _check_results_factura(f3, 38, 15.06, 51.89, 3.42, 1.62, 0.77, 72.76)

        f4 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_VHC, consumo=[219, 126, 154],
                         zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES, alquiler_euros=1.62)
        print(f4)
        _check_results_factura(f4, 38, 15.06, 51.75, 3.42, 1.62, 15.09, 86.94)

        t_0, t_f = '2016-02-25', '2017-01-30'
        f_dst1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, consumo=[4000, 2000],
                             zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES)
        print(f_dst1)
        _check_results_factura(f_dst1, 340, 134.53, 650.84, 40.15, 9.03, 175.26, 1009.81)

        t_0, t_f = '2016-02-25', '2016-08-30'
        f_dst2 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, consumo=[4000, 2000],
                             zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES, alquiler_euros=9.03)
        print(f_dst2)
        _check_results_factura(f_dst2, 187, 74.11, 552.91, 32.06, 9.03, 140.30, 808.41)
Esempio n. 8
0
    def test_cambio_tarifa(self):
        t_0, t_f = '2016-11-01', '2016-12-09'
        f = FacturaElec(t_0, t_f, consumo=1000.)
        print('FACTURA CON PEAJE "{}":\n{}'.format(f.tipo_peaje, f))
        str_1 = str(f)

        f.tipo_peaje = 2
        print('FACTURA CON PEAJE "{}":\n{}'.format(f.tipo_peaje, f))

        f.tipo_peaje = 'VHC'
        print('FACTURA CON PEAJE "{}":\n{}'.format(f.tipo_peaje, f))

        f.tipo_peaje = '2.0A'
        print('FACTURA CON PEAJE "{}":\n{}'.format(f.tipo_peaje, f))
        assert str_1 == str(f)

        f.tipo_peaje = 'lalala'
        assert str_1 == str(f)
Esempio n. 9
0
    def test_json_facturas(self):
        t_0, t_f = '2016-01-01', '2017-01-09'
        f1 = FacturaElec(t_0, t_f, consumo=[500, 500], tipo_peaje=TIPO_PEAJE_NOC)
        print(json.dumps(f1.to_dict(include_text_repr=True, include_html_repr=True)))

        t_0, t_f = '2016-11-01', '2016-12-09'
        f1 = FacturaElec(t_0, t_f, consumo=[500, 500], tipo_peaje=TIPO_PEAJE_NOC)
        print(json.dumps(f1.to_dict(include_text_repr=True, include_html_repr=True)))

        t_0, t_f = '2016-11-01', '2016-12-09'
        f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC)
        print(json.dumps(f1.to_dict(include_text_repr=True, include_html_repr=True)))

        t_0, t_f = '2016-01-01', '2017-01-09'
        f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC)
        print(json.dumps(f1.to_dict(include_text_repr=True, include_html_repr=True)))
Esempio n. 10
0
def _gen_stream_data_factura(start=None, end=None, **kwargs_factura):
    tic = time()
    if start is None:
        # Inicio de mes actual hasta instante actual
        start = dt.datetime.now(tz=SENSORS.TZ).replace(day=1,
                                                       hour=0,
                                                       minute=0,
                                                       second=0,
                                                       microsecond=0)
        end = dt.datetime.now(tz=SENSORS.TZ)
    cat = enerpi_data_catalog(check_integrity=False)
    df = cat.get_summary(start=start, end=end)
    toc_df = time()
    if (df is not None) and not df.empty and ('kWh' in df):
        consumption = df['kWh']
        # Fix timezone (ya en esiosdata)
        # try:
        #     consumption.index = consumption.index.tz_localize(SENSORS.TZ, ambiguous='infer')
        # except AmbiguousTimeError as e:
        #     consumption.index = consumption.index.tz_localize(SENSORS.TZ, ambiguous='NaT')
        #     consumption = consumption.reindex(DatetimeIndex(start=consumption.index[0], end=consumption.index[-1],
        #                                                     freq='1h', tz=SENSORS.TZ)).interpolate()
        #     log('AmbiguousTimeError ({}) en elec_bill. Se reindexa e interpola el índice.'.format(e), 'error')
        factura = FacturaElec(consumo=consumption, **kwargs_factura)
        data_factura = factura.to_dict(include_text_repr=True,
                                       include_html_repr=True)
        toc_p = time()
        msg = 'Factura generada en {:.3f} s; datos en {:.3f} s.'.format(
            toc_p - toc_df, toc_df - tic)
        log(msg, 'debug', False)
        log(
            'stream_data_factura: STREAM BILL from "{}" to "{}"'.format(
                start, end), 'debug', False)
        yield _format_event_stream(
            dict(success=True,
                 factura=data_factura,
                 took=round(toc_p - tic, 3),
                 took_df=round(toc_df - tic, 3)))
    elif df is not None:
        factura = FacturaElec(start, end, **kwargs_factura)
        data_factura = factura.to_dict(include_text_repr=True,
                                       include_html_repr=True)
        toc_p = time()
        msg = 'Factura vacía generada en {:.3f} s; datos en {:.3f} s.'.format(
            toc_p - toc_df, toc_df - tic)
        log(msg, 'debug', False)
        log(
            'stream_data_factura: STREAM EMPTY BILL from "{}" to "{}"'.format(
                start, end), 'debug', False)
        yield _format_event_stream(
            dict(success=True,
                 factura=data_factura,
                 error=msg,
                 took=round(toc_p - tic, 3),
                 took_df=round(toc_df - tic, 3)))
    else:
        msg = 'No data from {} to {}. CATALOG:\n{}'.format(start, end, cat)
        log(msg, 'debug', False)
        log(
            'stream_data_factura: STREAM ERR NO DATA from "{}" to "{}"'.format(
                start, end), 'debug', False)
        yield _format_event_stream(
            dict(success=False,
                 error=msg,
                 took=round(time() - tic, 3),
                 took_df=round(toc_df - tic, 3)))
    log(
        'CLOSING stream_data_factura from "{}" to "{}" with args={}'.format(
            start, end, kwargs_factura), 'debug', False)
    yield _format_event_stream('CLOSE')
Esempio n. 11
0
 def test_factura_vacia(self):
     t_0, t_f = '2016-11-01', '2016-12-09'
     f = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_NOC, zona_impuestos=ZONA_IMPUESTOS_CEUTA_MELILLA)
     print(f)
     print(f.consumo_total)
     _check_results_factura(f, 38, 15.06, 0., 0.77, 1.01, 0.20, 17.04)