Ejemplo n.º 1
0
def constroi_tabela_balanco(balanco,inicioData,fimData,mes_ano):
    
    balanço = []
    for blc in balanco:
        balanço.append(blc)
        
    tabela = {
        'DATA': [], 
        'TOTAL CONTRATOS': [], 
        'CARGA': [], 
        'SOBRA (MWh)': [], 
        'SOBRA (%)': [], 
    }
    
    if mes_ano == 'Mensal':
        
        for x in range(len(balanço) -1,-1,-1):
            data = date(int(balanço[x]['data'].split('-')[2]),int(balanço[x]['data'].split('-')[1]),int(balanço[x]['data'].split('-')[0]))
            inicio = date(int(inicioData.split('-')[0]),int(inicioData.split('-')[1]),int(inicioData.split('-')[2]))
            fim = date(int(fimData.split('-')[0]),int(fimData.split('-')[1]),int(fimData.split('-')[2]))
            if inicio <= data <= fim:
                continue
            else:
                balanço.pop(x) 
        
        for blc in balanço:
            tabela['DATA'].append(blc['data'])
            tabela['TOTAL CONTRATOS'].append(blc['total_mwh'])
            tabela['CARGA'].append(blc['carga'])
            tabela['SOBRA (MWh)'].append( round(blc['total_mwh'] - blc['carga'], 2))
            tabela['SOBRA (%)'].append( round(((blc['total_mwh'] - blc['carga']) / blc['carga']) * 100, 2) )
        
        tabela['SOBRA (%)']  = list(map(lambda x: str(x) + '%',tabela['SOBRA (%)']))
        
        return tabela
    else:
        anos = []
        for blc in balanço:
            anos.append(blc['data'])
        anos = funcoes.remove_repetidos(map(funcoes.separa_anos,anos))
        
        mwh = 0
        carga = 0
        for ano in anos:
            for blc in balanco:
                ano_balanco = blc['data'].split('-')[2]
                if ano_balanco == ano:
                    mwh = mwh + blc['total_mwh']
                    carga = carga + blc['carga']
                
            tabela['DATA'].append(ano)
            tabela['TOTAL CONTRATOS'].append(round(mwh,2))
            tabela['CARGA'].append(round(carga,2))
            tabela['SOBRA (MWh)'].append( round(mwh - carga, 2))
            tabela['SOBRA (%)'].append( round(((mwh - carga) / carga) * 100, 2) )
        
        tabela['SOBRA (%)']  = list(map(lambda x: str(x) + '%',tabela['SOBRA (%)']))

        return tabela
Ejemplo n.º 2
0
def reuni_filtros(contrato):
    filtros = {
        'TIPO DE CONTRATO': [],
        'SUBMERCADO': [],
        'TIPO DE LEILÃO': [],
        'STATUS': [],
        'PRODUTO': [],
        'VENDEDOR': [],
        'INÍCIO DE SUPRIMENTO': [],
        'FIM DE SUPRIMENTO': []
    }

    for chave in filtros.keys():
        for cntkey in contrato.keys():
            filtros[chave].append(contrato[cntkey][chave])
        filtros[chave] = funcoes.remove_repetidos(filtros[chave])
        filtros[chave].sort()

    return filtros
Ejemplo n.º 3
0
def gera_grafico_cts(contrato, valorContrato, filtros, inicioData, fimData,
                     mes_ano, uni_tot, default):

    global fig, fig1

    datas = []
    valores = {
        0: {
            "Submercado": "Nordeste",
            "cor": "#118dff",
            "valores": []
        },
        1: {
            "Submercado": "Norte",
            "cor": "#12239e",
            "valores": []
        },
        2: {
            "Submercado": "Sudeste",
            "cor": "#e66c37",
            "valores": []
        },
        3: {
            "Submercado": "Sul",
            "cor": "#6b007b",
            "valores": []
        },
        4: {
            "Submercado": "Nordeste-Projetado",
            "cor": "#41a4ff",
            "valores": []
        },
        5: {
            "Submercado": "Norte-Projetado",
            "cor": "#414fb1",
            "valores": []
        },
        6: {
            "Submercado": "Sudeste-Projetado",
            "cor": "#eb895f",
            "valores": []
        },
        7: {
            "Submercado": "Sul-Projetado",
            "cor": "#893395",
            "valores": []
        },
        8: {
            "Submercado": "Total",
            "cor": "#118dff",
            "valores": []
        },
    }

    for chave in valorContrato.keys():
        datas.append(chave[-10:])

    datas = funcoes.remove_repetidos(datas)
    datas.sort(key=lambda l: l.split('-')[2] + '-' + l.split('-')[1] + '-' + l.
               split('-')[0])

    if mes_ano == 'Anual':
        v = ''
    else:
        for x in range(len(datas) - 1, -1, -1):
            data = date(int(datas[x].split('-')[2]),
                        int(datas[x].split('-')[1]),
                        int(datas[x].split('-')[0]))
            inicio = date(int(inicioData.split('-')[0]),
                          int(inicioData.split('-')[1]),
                          int(inicioData.split('-')[2]))
            fim = date(int(fimData.split('-')[0]), int(fimData.split('-')[1]),
                       int(fimData.split('-')[2]))
            if inicio <= data <= fim:
                continue
            else:
                datas.pop(x)

    valoresContrato = {}
    for chave in valorContrato.keys():
        valoresContrato.update({chave: valorContrato[chave]})

    contratos = {}
    for chave in contrato.keys():
        contratos.update({chave: contrato[chave]})

    for x in range(len(contratos.keys()) - 1, -1, -1):
        idContrato = list(contratos.keys())[x]
        if filtros['TIPO DE CONTRATO']:
            if contratos[idContrato]['TIPO DE CONTRATO'] in filtros[
                    'TIPO DE CONTRATO']:
                del contratos[idContrato]
        if filtros['SUBMERCADO']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['SUBMERCADO'] in filtros[
                        'SUBMERCADO']:
                    del contratos[idContrato]
        if filtros['TIPO DE LEILÃO']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['TIPO DE LEILÃO'] in filtros[
                        'TIPO DE LEILÃO']:
                    del contratos[idContrato]
        if filtros['STATUS']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['STATUS'] in filtros['STATUS']:
                    del contratos[idContrato]
        if filtros['PRODUTO']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['PRODUTO'] in filtros['PRODUTO']:
                    del contratos[idContrato]
        if filtros['VENDEDOR']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['VENDEDOR'] in filtros['VENDEDOR']:
                    del contratos[idContrato]
        if filtros['INÍCIO DE SUPRIMENTO']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['INÍCIO DE SUPRIMENTO'] in filtros[
                        'INÍCIO DE SUPRIMENTO']:
                    del contratos[idContrato]
        if filtros['FIM DE SUPRIMENTO']:
            if x < len(contratos) and idContrato in contratos.keys():
                if contratos[idContrato]['FIM DE SUPRIMENTO'] in filtros[
                        'FIM DE SUPRIMENTO']:
                    del contratos[idContrato]

    totalValorReais = 0
    totalNordesteReais = 0
    totalNorteReais = 0
    totalSudesteReais = 0
    totalSulReais = 0

    totalValorMWh = 0
    totalNordesteMWh = 0
    totalNorteMWh = 0
    totalSudesteMWh = 0
    totalSulMWh = 0
    keys = valoresContrato.keys()

    for x in range(len(datas)):
        if mes_ano == 'Mensal':
            totalValorReais = 0
            totalNordesteReais = 0
            totalNorteReais = 0
            totalSudesteReais = 0
            totalSulReais = 0

            totalValorMWh = 0
            totalNordesteMWh = 0
            totalNorteMWh = 0
            totalSudesteMWh = 0
            totalSulMWh = 0

        for cntKey in contratos.keys():

            idValorContrato = str(cntKey + '-' + datas[x])
            if mes_ano == 'Mensal':
                if idValorContrato in keys:
                    if uni_tot == 'Unitário':
                        totalValorMWh += valoresContrato[idValorContrato][
                            'mwh']
                        totalValorReais += valoresContrato[idValorContrato][
                            'custo_total']
                    elif uni_tot == 'Total':
                        totalValorReais += valoresContrato[idValorContrato][
                            'custo_total']
                    else:
                        break

                    if contratos[cntKey]['SUBMERCADO'] == 'NORDESTE':
                        if uni_tot == 'Unitário':
                            totalNordesteMWh += valoresContrato[
                                idValorContrato]['mwh']
                            totalNordesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total':
                            totalNordesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'NORTE':
                        if uni_tot == 'Unitário':
                            totalNorteMWh += valoresContrato[idValorContrato][
                                'mwh']
                            totalNorteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total':
                            totalNorteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'SUDESTE':
                        if uni_tot == 'Unitário':
                            totalSudesteMWh += valoresContrato[
                                idValorContrato]['mwh']
                            totalSudesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total':
                            totalSudesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'SUL':
                        if uni_tot == 'Unitário':
                            totalSulMWh += valoresContrato[idValorContrato][
                                'mwh']
                            totalSulReais += valoresContrato[idValorContrato][
                                'custo_total']
                        elif uni_tot == 'Total':
                            totalSulReais += valoresContrato[idValorContrato][
                                'custo_total']
                        else:
                            break
                else:
                    continue
            else:
                AnoDaVez = datas[x].split('-')[2]
                if idValorContrato in keys:

                    if uni_tot == 'Unitário' and idValorContrato[
                            -4:] == AnoDaVez:
                        totalValorMWh += valoresContrato[idValorContrato][
                            'mwh']
                        totalValorReais += valoresContrato[idValorContrato][
                            'custo_total']
                    elif uni_tot == 'Total' and idValorContrato[
                            -4:] == AnoDaVez:
                        totalValorReais += valoresContrato[idValorContrato][
                            'custo_total']
                    else:
                        break

                    if contratos[cntKey]['SUBMERCADO'] == 'NORDESTE':
                        if uni_tot == 'Unitário' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalNordesteMWh += valoresContrato[
                                idValorContrato]['mwh']
                            totalNordesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalNordesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'NORTE':
                        if uni_tot == 'Unitário' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalNorteMWh += valoresContrato[idValorContrato][
                                'mwh']
                            totalNorteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalNorteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'SUDESTE':
                        if uni_tot == 'Unitário' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalSudesteMWh += valoresContrato[
                                idValorContrato]['mwh']
                            totalSudesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        elif uni_tot == 'Total' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalSudesteReais += valoresContrato[
                                idValorContrato]['custo_total']
                        else:
                            break

                    if contratos[cntKey]['SUBMERCADO'] == 'SUL':
                        if uni_tot == 'Unitário' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalSulMWh += valoresContrato[idValorContrato][
                                'mwh']
                            totalSulReais += valoresContrato[idValorContrato][
                                'custo_total']
                        elif uni_tot == 'Total' and idValorContrato[
                                -4:] == AnoDaVez:
                            totalSulReais += valoresContrato[idValorContrato][
                                'custo_total']
                        else:
                            break
                else:
                    continue

        if mes_ano == 'Mensal':
            if uni_tot == 'Unitário':
                if totalValorMWh != 0:
                    totalValorReais /= totalValorMWh
                if totalNordesteMWh != 0:
                    totalNordesteReais /= totalNordesteMWh
                if totalNorteMWh != 0:
                    totalNorteReais /= totalNorteMWh
                if totalSudesteMWh != 0:
                    totalSudesteReais /= totalSudesteMWh
                if totalSulMWh != 0:
                    totalSulReais /= totalSulMWh
            valores[0]["valores"].append(totalNordesteReais)
            valores[1]["valores"].append(totalNorteReais)
            valores[2]["valores"].append(totalSudesteReais)
            valores[3]["valores"].append(totalSulReais)
            valores[8]["valores"].append(totalValorReais)
        else:
            if datas[x][:5] == '01-12':
                if uni_tot == 'Unitário':
                    if totalValorMWh != 0:
                        totalValorReais /= totalValorMWh
                    if totalNordesteMWh != 0:
                        totalNordesteReais /= totalNordesteMWh
                    if totalNorteMWh != 0:
                        totalNorteReais /= totalNorteMWh
                    if totalSudesteMWh != 0:
                        totalSudesteReais /= totalSudesteMWh
                    if totalSulMWh != 0:
                        totalSulReais /= totalSulMWh
                valores[0]["valores"].append(totalNordesteReais)
                valores[1]["valores"].append(totalNorteReais)
                valores[2]["valores"].append(totalSudesteReais)
                valores[3]["valores"].append(totalSulReais)
                valores[8]["valores"].append(totalValorReais)
                totalValorReais = 0
                totalNordesteReais = 0
                totalNorteReais = 0
                totalSudesteReais = 0
                totalSulReais = 0

                totalValorMWh = 0
                totalNordesteMWh = 0
                totalNorteMWh = 0
                totalSudesteMWh = 0
                totalSulMWh = 0

    if mes_ano == 'Mensal':
        datas = list(map(funcoes.transforma_data, datas))
    else:
        datas = funcoes.remove_repetidos(map(funcoes.separa_anos, datas))
    if default:
        fig = go.Figure()
        fig1 = go.Figure()
        for i in range(4):
            fig.add_trace(
                go.Bar(x=datas,
                       y=valores[i]["valores"],
                       name=valores[i]["Submercado"],
                       marker_color=valores[i]["cor"]))

        fig1.add_trace(
            go.Bar(x=datas,
                   y=valores[8]["valores"],
                   name=valores[8]["Submercado"],
                   marker_color=valores[8]["cor"]))
    else:
        for i in range(4):
            fig.update_traces(x=datas,
                              y=valores[i]["valores"],
                              selector=dict(name=valores[i]["Submercado"]))
        fig1.update_traces(x=datas,
                           y=valores[8]["valores"],
                           selector=dict(name=valores[8]["Submercado"]))
    if uni_tot == 'Unitário':
        fig.update_layout(yaxis=dict(title='R$/MWh'))
        fig1.update_layout(yaxis=dict(title='R$/MWh'))
    else:
        fig.update_layout(yaxis=dict(title='R$'))
        fig1.update_layout(yaxis=dict(title='R$'))

    fig.update_layout(
        margin=dict(l=0, r=0, t=50, b=0),
        template=template[1],
        xaxis=dict(
            title='Data',
            titlefont_size=16,
            tickfont_size=14,
        ),
        yaxis=dict(
            titlefont_size=16,
            tickfont_size=14,
        ),
        legend=dict(x=0,
                    y=1.12,
                    bgcolor='rgba(255, 255, 255, 0)',
                    bordercolor='rgba(255, 255, 255, 0)',
                    orientation="h",
                    tracegroupgap=100),
        barmode='group',
        bargap=0.15,  # gap between bars of adjacent location coordinates.
        bargroupgap=0.1  # gap between bars of the same location coordinate.
    )

    fig1.update_layout(
        margin=dict(l=0, r=0, t=50, b=0),
        template=template[1],
        xaxis=dict(
            title='Data',
            titlefont_size=16,
            tickfont_size=14,
        ),
        yaxis=dict(
            titlefont_size=16,
            tickfont_size=14,
        ),
        legend=dict(x=0,
                    y=1.12,
                    bgcolor='rgba(255, 255, 255, 0)',
                    bordercolor='rgba(255, 255, 255, 0)',
                    orientation="h",
                    tracegroupgap=100),
        bargap=0.15,  # gap between bars of adjacent location coordinates.
        bargroupgap=0.1  # gap between bars of the same location coordinate.
    )
Ejemplo n.º 4
0
def gera_grafico_balanco(balanco, inicioData, fimData, mes_ano, default):
    global fig
    datas = []
    valores = {
        0: {
            "Legenda": "Total Contratos",
            "cor": "#118dff",
            "valores": []
        },
        1: {
            "Legenda": "Carga",
            "cor": "#12239e",
            "valores": []
        },
        2: {
            "Legenda": "Sobra (MWh)",
            "cor": "#e66c37",
            "valores": []
        },
    }

    for blc in balanco:
        datas.append(blc['data'])

    if mes_ano == 'Anual':
        datas = funcoes.remove_repetidos(map(funcoes.separa_anos, datas))
    else:
        for x in range(len(datas) - 1, -1, -1):
            data = date(int(datas[x].split('-')[2]),
                        int(datas[x].split('-')[1]),
                        int(datas[x].split('-')[0]))
            inicio = date(int(inicioData.split('-')[0]),
                          int(inicioData.split('-')[1]),
                          int(inicioData.split('-')[2]))
            fim = date(int(fimData.split('-')[0]), int(fimData.split('-')[1]),
                       int(fimData.split('-')[2]))
            if inicio <= data <= fim:
                continue
            else:
                datas.pop(x)

    balanço = []
    for blc in balanco:
        balanço.append(blc)

    for x in range(len(datas)):
        totalContratos = 0
        carga = 0
        sobra = 0
        for blc in balanço:
            if mes_ano == 'Anual':
                if blc['data'].split('-')[2] == datas[x]:
                    totalContratos = totalContratos + blc['total_mwh']
                    carga = carga + blc['carga']
            else:
                if blc['data'] == datas[x]:
                    totalContratos = blc['total_mwh']
                    carga = blc['carga']
        sobra = totalContratos - carga
        valores[0]["valores"].append(totalContratos)
        valores[1]["valores"].append(carga)
        valores[2]["valores"].append(sobra)

    if mes_ano == 'Mensal':
        datas = list(map(funcoes.transforma_data, datas))

    if default:
        fig = go.Figure()
        for i in range(3):
            fig.add_trace(
                go.Bar(x=datas,
                       y=valores[i]["valores"],
                       name=valores[i]["Legenda"],
                       marker_color=valores[i]["cor"]))
    else:
        for i in range(3):
            fig.update_traces(x=datas,
                              y=valores[i]["valores"],
                              selector=dict(name=valores[i]["Legenda"]))

    fig.update_layout(yaxis=dict(title='MWh'))

    fig.update_layout(
        margin=dict(l=0, r=0, t=50, b=0),
        template=template[1],
        xaxis=dict(
            title='Data',
            titlefont_size=16,
            tickfont_size=14,
        ),
        yaxis=dict(
            titlefont_size=16,
            tickfont_size=14,
        ),
        legend=dict(x=0,
                    y=1.12,
                    bgcolor='rgba(255, 255, 255, 0)',
                    bordercolor='rgba(255, 255, 255, 0)',
                    orientation="h",
                    tracegroupgap=100),
        barmode='group',
        bargap=0.15,  # gap between bars of adjacent location coordinates.
        bargroupgap=0.1  # gap between bars of the same location coordinate.
    )
Ejemplo n.º 5
0
def controiTabelaIpca(ipca, inicioData, fimData, mes_ano):

    ipcas = []
    for i in ipca:
        ipcas.append(i)

    if mes_ano == 'Mensal':
        tabela = {
            'Data': [],
            'IPCA': [],
            'Variação Mensal': [],
        }
        for x in range(len(ipcas) - 1, -1, -1):
            data = date(int(ipcas[x]['data'].split('-')[2]),
                        int(ipcas[x]['data'].split('-')[1]),
                        int(ipcas[x]['data'].split('-')[0]))
            inicio = date(int(inicioData.split('-')[0]),
                          int(inicioData.split('-')[1]),
                          int(inicioData.split('-')[2]))
            fim = date(int(fimData.split('-')[0]), int(fimData.split('-')[1]),
                       int(fimData.split('-')[2]))
            if inicio <= data <= fim:
                continue
            else:
                ipcas.pop(x)
        for i in ipcas:
            tabela['Data'].append(i['data'])
            tabela['IPCA'].append(i['ipca'])
            tabela['Variação Mensal'].append(i['variacao ipca'])

        return tabela
    else:
        tabela = {
            'Data': [],
            'IPCA': [],
            'Variação Anual': [],
        }
        datas = []
        for i in ipca:
            datas.append(i['data'])

        datas = funcoes.remove_repetidos(map(funcoes.separa_anos, datas))

        n = 0
        var = 0
        for i in ipcas:
            if '01-12' in i['data']:
                if i['data'] == '01-12-2019':
                    tabela['IPCA'].append(i['ipca'])
                    tabela['Variação Anual'].append('4,31%')
                    n = i['ipca']
                else:
                    var = ((i['ipca'] / n) - 1) * 100
                    n = i['ipca']
                    tabela['IPCA'].append(n)
                    tabela['Variação Anual'].append(
                        str(round(var, 3)).replace('.', ',') + '%')

        tabela['Data'] = datas

        return tabela
Ejemplo n.º 6
0
def gera_grafico_ipca(ipca, inicioData, fimData, mes_ano):

    template = [
        "plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn",
        "simple_white", "none"
    ]

    ipcas = []
    for i in ipca:
        ipcas.append(i)

    if mes_ano == 'Mensal':

        for x in range(len(ipcas) - 1, -1, -1):
            data = date(int(ipcas[x]['data'].split('-')[2]),
                        int(ipcas[x]['data'].split('-')[1]),
                        int(ipcas[x]['data'].split('-')[0]))
            inicio = date(int(inicioData.split('-')[0]),
                          int(inicioData.split('-')[1]),
                          int(inicioData.split('-')[2]))
            fim = date(int(fimData.split('-')[0]), int(fimData.split('-')[1]),
                       int(fimData.split('-')[2]))
            if inicio <= data <= fim:
                continue
            else:
                ipcas.pop(x)

        valores = {"cor": "#118dff", "datas": [], "valores": []}

        for i in ipcas:
            valores['datas'].append(i['data'])
            valores['valores'].append(i['ipca'])

        valores['datas'] = list(map(funcoes.transforma_data, valores['datas']))
    else:
        datas = []
        for i in ipca:
            datas.append(i['data'])

        datas = funcoes.remove_repetidos(map(funcoes.separa_anos, datas))

        valores = {"cor": "#118dff", "datas": [], "valores": []}
        for i in ipcas:
            if '01-12' in i['data']:
                valores['valores'].append(i['ipca'])

        valores['datas'] = datas

    fig = go.Figure()
    fig.add_trace(
        go.Bar(x=valores['datas'],
               y=valores['valores'],
               marker_color=valores["cor"]))
    fig.update_layout(
        margin=dict(l=0, r=0, t=50, b=0),
        template=template[1],
        xaxis=dict(
            title='Data',
            titlefont_size=16,
            tickfont_size=14,
        ),
        yaxis=dict(
            titlefont_size=16,
            tickfont_size=14,
        ),
        barmode='group',
        bargap=0.05,  # gap between bars of adjacent location coordinates.
        bargroupgap=0.1  # gap between bars of the same location coordinate.
    )

    return fig
Ejemplo n.º 7
0
def constroi_tabela_cnt(contrato,valorContrato,filtros,inicioData,fimData,mes_ano,det_res,mwh_mwm):
    
    if det_res == 'Detalhado':
        
        datas = []
        for chave in valorContrato.keys():
            datas.append(chave[-10:])
            
        datas = funcoes.remove_repetidos(datas)
        datas.sort(key=lambda l: l.split('-')[2] + '-' + l.split('-')[1] + '-' + l.split('-')[0])
        
        contratos = {}
        for chave in contrato.keys():
            contratos.update({chave: contrato[chave]}) 
   
        for x in range(len(contratos.keys()) -1,-1,-1):
            idContrato = list(contratos.keys())[x]
            if filtros['TIPO DE CONTRATO']:
                if contratos[idContrato]['TIPO DE CONTRATO'] in filtros['TIPO DE CONTRATO']:
                    del contratos[idContrato]
            if filtros['SUBMERCADO']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['SUBMERCADO'] in filtros['SUBMERCADO']:
                        del contratos[idContrato]
            if filtros['TIPO DE LEILÃO']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['TIPO DE LEILÃO'] in filtros['TIPO DE LEILÃO']:
                        del contratos[idContrato]
            if filtros['STATUS']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['STATUS'] in filtros['STATUS']:
                        del contratos[idContrato]
            if filtros['PRODUTO']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['PRODUTO'] in filtros['PRODUTO']:
                        del contratos[idContrato]
            if filtros['VENDEDOR']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['VENDEDOR'] in filtros['VENDEDOR']:
                        del contratos[idContrato]     
            if filtros['INÍCIO DE SUPRIMENTO']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['INÍCIO DE SUPRIMENTO'] in filtros['INÍCIO DE SUPRIMENTO']:
                        del contratos[idContrato]
            if filtros['FIM DE SUPRIMENTO']:
                if x < len(contratos) and idContrato in contratos.keys(): 
                    if contratos[idContrato]['FIM DE SUPRIMENTO'] in filtros['FIM DE SUPRIMENTO']:
                        del contratos[idContrato]
            
        
        tabela = {
            'ID': [], 
            'TIPO DE CONTRATO': [], 
            'CÓDIGO': [], 
            'INÍCIO DE SUPRIMENTO': [], 
            'FIM DE SUPRIMENTO': [], 
            'STATUS': [], 
            'VENDEDOR': [], 
            'EMPREENDIMENTO': [], 
            'SUBMERCADO': [], 
            'TIPO DE LEILÃO': [], 
            'PRODUTO': [], 
            'DATA': [], 
            'TIPO DE ENERGIA': [], 
            'TIPO DE FONTE': [],
        #  'PREÇO NA DATA DO LEILÃO': [], 
        #   'REAJUSTE': []}
        } 
        for cntKey in contratos.keys():
            tabela['ID'].append(contratos[cntKey]['ID'])
            tabela['TIPO DE CONTRATO'].append(contratos[cntKey]['TIPO DE CONTRATO'])
            tabela['CÓDIGO'].append(contratos[cntKey]['CÓDIGO'])
            tabela['INÍCIO DE SUPRIMENTO'].append(contratos[cntKey]['INÍCIO DE SUPRIMENTO'])
            tabela['FIM DE SUPRIMENTO'].append(contratos[cntKey]['FIM DE SUPRIMENTO'])
            tabela['STATUS'].append(contratos[cntKey]['STATUS'])
            tabela['VENDEDOR'].append(contratos[cntKey]['VENDEDOR'])
            tabela['EMPREENDIMENTO'].append(contratos[cntKey]['EMPREENDIMENTO'])
            tabela['SUBMERCADO'].append(contratos[cntKey]['SUBMERCADO'])
            tabela['TIPO DE LEILÃO'].append(contratos[cntKey]['TIPO DE LEILÃO'])
            tabela['PRODUTO'].append(contratos[cntKey]['PRODUTO'])
            tabela['DATA'].append(contratos[cntKey]['DATA'])
            tabela['TIPO DE ENERGIA'].append(contratos[cntKey]['TIPO DE ENERGIA'])
            tabela['TIPO DE FONTE'].append(contratos[cntKey]['TIPO DE FONTE'])
        
        
        if mes_ano == 'Mensal':
            
            for x in range(len(datas) -1,-1,-1):
                data = date(int(datas[x].split('-')[2]),int(datas[x].split('-')[1]),int(datas[x].split('-')[0]))
                inicio = date(int(inicioData.split('-')[0]),int(inicioData.split('-')[1]),int(inicioData.split('-')[2]))
                fim = date(int(fimData.split('-')[0]),int(fimData.split('-')[1]),int(fimData.split('-')[2]))
                # inicio = date(2019,1,1)
                # fim = date(2019,6,1)
                if inicio <= data <= fim:
                    continue
                else:
                    datas.pop(x)
            
            for data in datas:
                tabela.update({data:[]})
            
            cont = 0
            mw = 0
            keys = valorContrato.keys()
            for data in datas:
                for idContrato in tabela['ID']:
                    cont = cont + 1
                    idvlcnt = idContrato + '-' + data
                    if idvlcnt in keys:
                        if mwh_mwm == 'MWh':
                            mw = valorContrato[idvlcnt]['mwh']
                        elif mwh_mwm == 'MWm':
                            mw = valorContrato[idvlcnt]['mwm']
                        else:
                            break
                    else:
                        mw = 0
                    tabela[data].append( str(round(mw, 5)).replace('.',',') )
                    mw = 0
                
            #print(tabela)    
            for data in datas:
                tabela[funcoes.transforma_data(data).upper()] = tabela[data]
                del tabela[data]
        else:
            anos = []
            datas = []
            for chave in valorContrato.keys():
                datas.append(chave[-10:])
                
            datas = funcoes.remove_repetidos(datas)
            
            anos = funcoes.remove_repetidos(map(funcoes.separa_anos,datas))
            
            for ano in anos:
                tabela.update({ano:[]})
            
            mw = 0
            
            keys = valorContrato.keys()
            for ano in anos:
                for idContrato in tabela['ID']:
                    for x in range(1,13):
                        if x <= 9:
                            idvlcnt = idContrato + '-01-0' + str(x) + '-' + ano
                        else:
                            idvlcnt = idContrato + '-01-' + str(x) + '-' + ano
                        if idvlcnt in keys:
                            if mwh_mwm == 'MWh':
                                mw = mw + valorContrato[idvlcnt]['mwh']
                            elif mwh_mwm == 'MWm':
                                mw = mw + valorContrato[idvlcnt]['mwm']
                            else:
                                break
                        else:
                            continue
                    if mwh_mwm == 'MWm':
                        horas = funcoes.numero_horas_ano(ano)
                        mw = mw / horas
                    tabela[ano].append( str(round(mw, 5)).replace('.',',') )
                    mw = 0
            
        tabela.pop('ID')
        return tabela
    else:
        
        resumido = contrato
        resumidos = {}
        for chave in resumido.keys():
            resumidos.update({chave: resumido[chave]}) 
        
        datas = []
        for chave in resumidos.keys():
            datas.append(resumidos[chave]['data'])
            
        datas = funcoes.remove_repetidos(datas)
        datas.sort(key=lambda l: l.split('-')[2] + '-' + l.split('-')[1] + '-' + l.split('-')[0])
        
        for x in range(len(resumidos.keys()) -1,-1,-1):
            idResumido = list(resumidos.keys())[x]
            if filtros['TIPO DE CONTRATO']:
                if resumidos[idResumido]['tipo de contrato'] in filtros['TIPO DE CONTRATO']:
                    del resumidos[idResumido]
            if filtros['TIPO DE LEILÃO']:
                if x < len(resumidos) and idResumido in resumidos.keys(): 
                    if resumidos[idResumido]['tipo de leilao'] in filtros['TIPO DE LEILÃO']:
                        del resumidos[idResumido]
            if filtros['PRODUTO']:
                if x < len(resumidos) and idResumido in resumidos.keys(): 
                    if resumidos[idResumido]['produto'] in filtros['PRODUTO']:
                        del resumidos[idResumido]
          
        tabela = {
            'TIPO DE CONTRATO': [], 
            'TIPO DE LEILÃO': [], 
            'PRODUTO': [], 
            'DATA': [],
        }     
        
        ids=[]
        for rsm in resumidos.keys():
            ids.append(rsm[:-11])
        ids = list(dict.fromkeys(ids))
        for i in ids:
            tabela['TIPO DE CONTRATO'].append(i.split(';')[0] )
            tabela['TIPO DE LEILÃO'].append(i.split(';')[1])
            tabela['PRODUTO'].append(i.split(';')[2])
            tabela['DATA'].append(i.split(';')[3])
         
            
        if mes_ano == 'Mensal':
            
            
            for x in range(len(datas) -1,-1,-1):
                data = date(int(datas[x].split('-')[2]),int(datas[x].split('-')[1]),int(datas[x].split('-')[0]))
                inicio = date(int(inicioData.split('-')[0]),int(inicioData.split('-')[1]),int(inicioData.split('-')[2]))
                fim = date(int(fimData.split('-')[0]),int(fimData.split('-')[1]),int(fimData.split('-')[2]))
                # inicio = date(2019,1,1)
                # fim = date(2019,6,1)
                if inicio <= data <= fim:
                    continue
                else:
                    datas.pop(x)
        
            for data in datas:
                tabela.update({data:[]})
        
            mw = 0
         
            for data in datas:
                for x in range(len(tabela['TIPO DE CONTRATO'])):
                    idResumido = str(tabela['TIPO DE CONTRATO'][x] + ';' + tabela['TIPO DE LEILÃO'][x] + ';' + tabela['PRODUTO'][x] + ';' + tabela['DATA'][x] + ';' + data)
                    if mwh_mwm == 'MWh':
                        mw = resumidos[idResumido]['soma mwh']
                    elif mwh_mwm == 'MWm':
                        mw = resumidos[idResumido]['soma mwm']
                    else:
                        break
                    tabela[data].append( str(round(mw, 5)).replace('.',',') )
                    mw = 0
                    
            for data in datas:
                tabela[funcoes.transforma_data(data).upper()] = tabela[data]
                del tabela[data]

        else:
            
            anos = funcoes.remove_repetidos(map(funcoes.separa_anos,datas))
            for ano in anos:
                tabela.update({ano:[]})
                
            mw = 0
            for x in range(len(tabela['TIPO DE CONTRATO'])):
                for data in datas:
                    idResumido = str(tabela['TIPO DE CONTRATO'][x] + ';' + tabela['TIPO DE LEILÃO'][x] + ';' + tabela['PRODUTO'][x] + ';' + tabela['DATA'][x] + ';' + data)
                    if mwh_mwm == 'MWh':
                        mw += resumidos[idResumido]['soma mwh']
                    elif mwh_mwm == 'MWm':
                        mw += resumidos[idResumido]['soma mwh']
                    else:
                        break
                    if data[:5] == '01-12':
                        if mwh_mwm == 'MWm':
                            horas = funcoes.numero_horas_ano(datas[x][-4:])
                            mw = mw / horas
                        tabela[data[-4:]].append( str(round(mw, 5)).replace('.',',') )
                        mw = 0
            
        return tabela