File size: 4,476 Bytes
0586bcf
c009ac1
 
0586bcf
c5a9b0c
c009ac1
 
 
c5a9b0c
0586bcf
 
 
c5a9b0c
0586bcf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c5a9b0c
 
0586bcf
 
 
 
 
 
 
 
 
 
 
 
 
c5a9b0c
0586bcf
 
c5a9b0c
0586bcf
 
c5a9b0c
 
c009ac1
c5a9b0c
 
 
 
 
 
 
 
0586bcf
c5a9b0c
0586bcf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c5a9b0c
 
 
 
 
 
 
 
 
 
0586bcf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8c591c
a4c7e98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from flask import Flask, render_template, request, send_file
import io
import base64
import matplotlib.pyplot as plt
import pandas as pd

app = Flask(__name__)

def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao):
    # Cria DataFrame com dados simulados para 10 anos
    anos = list(range(1, 11))
    dados = {
        'Ano': anos,
        'Studio_Rentabilidade_Bruta': [],
        'Studio_Valorizacao': [],
        'Franquia_Lucro_Anual': [],
        'Acoes_Retorno': [],
        'Renda_Fixa_Retorno': [],
    }
    
    capital_studio = capital
    capital_acoes = capital
    capital_rf = capital
    
    for ano in anos:
        # Studio: rentabilidade mensal bruta acumulada no ano + valorização
        rent_mes = studio_ret / 100
        rent_anual = ((1 + rent_mes) ** 12 - 1) * capital_studio
        val_ano = (valorizacao / 100) * capital_studio
        dados['Studio_Rentabilidade_Bruta'].append(rent_anual)
        dados['Studio_Valorizacao'].append(val_ano)
        
        # Franquia: valor fixo anual informado (pode ser ajustado depois)
        dados['Franquia_Lucro_Anual'].append(franquia_ret)
        
        # Ações e RF: acumulam juros compostos
        capital_acoes = capital_acoes * (1 + (acoes_ret / 100))
        capital_rf = capital_rf * (1 + (renda_fixa / 100))
        
        dados['Acoes_Retorno'].append(capital_acoes - capital)
        dados['Renda_Fixa_Retorno'].append(capital_rf - capital)
    
    df = pd.DataFrame(dados)
    return df

def gerar_grafico(df):
    plt.figure(figsize=(10,6))
    plt.plot(df['Ano'], df['Studio_Rentabilidade_Bruta'], label='Studio - Renda Bruta')
    plt.plot(df['Ano'], df['Studio_Valorizacao'], label='Studio - Valorização')
    plt.plot(df['Ano'], df['Franquia_Lucro_Anual'], label='Franquia - Lucro Anual')
    plt.plot(df['Ano'], df['Acoes_Retorno'], label='Ações - Retorno Acumulado')
    plt.plot(df['Ano'], df['Renda_Fixa_Retorno'], label='Renda Fixa - Retorno Acumulado')
    plt.xlabel('Ano')
    plt.ylabel('Retorno (R$)')
    plt.title('Simulação de Retorno de Investimentos')
    plt.legend()
    plt.grid(True)
    
    buf = io.BytesIO()
    plt.savefig(buf, format='png', bbox_inches='tight')
    plt.close()
    buf.seek(0)
    img_base64 = base64.b64encode(buf.read()).decode('utf-8')
    return img_base64

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        capital = float(request.form['capital'])
        studio_ret = float(request.form['studio_ret'])
        valorizacao = float(request.form['valorizacao'])
        franquia_ret = float(request.form['franquia_ret'])
        acoes_ret = float(request.form['acoes_ret'])
        renda_fixa = float(request.form['renda_fixa'])
        inflacao = float(request.form['inflacao'])
        
        df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
        grafico = gerar_grafico(df)
        
        return render_template(
            'index.html',
            grafico=grafico,
            capital=capital,
            studio_ret=studio_ret,
            valorizacao=valorizacao,
            franquia_ret=franquia_ret,
            acoes_ret=acoes_ret,
            renda_fixa=renda_fixa,
            inflacao=inflacao
        )
    else:
        return render_template('index.html')

@app.route('/download_excel', methods=['POST'])
def download_excel():
    capital = float(request.form['capital'])
    studio_ret = float(request.form['studio_ret'])
    valorizacao = float(request.form['valorizacao'])
    franquia_ret = float(request.form['franquia_ret'])
    acoes_ret = float(request.form['acoes_ret'])
    renda_fixa = float(request.form['renda_fixa'])
    inflacao = float(request.form['inflacao'])
    
    df = gerar_simulacao(
        capital,
        studio_ret,
        valorizacao,
        franquia_ret,
        acoes_ret,
        renda_fixa,
        inflacao
    )
    
    output = io.BytesIO()
    with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
        df.to_excel(writer, index=False, sheet_name='Simulação')
        writer.save()
    output.seek(0)
    
    return send_file(
        output,
        download_name="simulacao_investimentos.xlsx",
        as_attachment=True,
        mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    )

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=True)