File size: 4,412 Bytes
c009ac1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, render_template, request
import matplotlib.pyplot as plt
import io
import base64
import csv
from flask import send_file

app = Flask(__name__)

def calcular_retornos(capital, studio_valor_anual, studio_valoriza, franquia_valor_anual, acoes_retorno, renda_fixa_retorno):
    anos = [2025, 2026, 2027, 2028, 2029]
    resultados = {
        'studio': [],
        'franquia': [],
        'acoes': [],
        'renda_fixa': []
    }

    valor_studio = capital
    valor_franquia = capital
    valor_acoes = capital
    valor_rf = capital

    for _ in anos:
        valor_studio += studio_valor_anual
        valor_studio *= (1 + studio_valoriza / 100)
        resultados['studio'].append(round(valor_studio, 2))

        valor_franquia += franquia_valor_anual
        resultados['franquia'].append(round(valor_franquia, 2))

        valor_acoes *= (1 + acoes_retorno / 100)
        resultados['acoes'].append(round(valor_acoes, 2))

        valor_rf *= (1 + renda_fixa_retorno / 100)
        resultados['renda_fixa'].append(round(valor_rf, 2))

    return anos, resultados

@app.route('/', methods=['GET', 'POST'])
def index():
    grafico = None
    resultados = {}
    anos = []
    params = {
        'capital': 400000,
        'studio_valor_anual': 49440,
        'studio_valoriza': 6,
        'franquia_valor_anual': 20000,
        'acoes_retorno': 10,
        'renda_fixa_retorno': 9,
    }
    if request.method == 'POST':
        params['capital'] = float(request.form.get('capital', params['capital']))
        params['studio_valor_anual'] = float(request.form.get('studio_valor_anual', params['studio_valor_anual']))
        params['studio_valoriza'] = float(request.form.get('studio_valoriza', params['studio_valoriza']))
        params['franquia_valor_anual'] = float(request.form.get('franquia_valor_anual', params['franquia_valor_anual']))
        params['acoes_retorno'] = float(request.form.get('acoes_retorno', params['acoes_retorno']))
        params['renda_fixa_retorno'] = float(request.form.get('renda_fixa_retorno', params['renda_fixa_retorno']))

        anos, resultados = calcular_retornos(
            params['capital'],
            params['studio_valor_anual'],
            params['studio_valoriza'],
            params['franquia_valor_anual'],
            params['acoes_retorno'],
            params['renda_fixa_retorno']
        )

        plt.figure(figsize=(8, 5))
        for tipo, valores in resultados.items():
            plt.plot(anos, valores, marker='o', label=tipo.title())

        plt.title("Comparativo de Investimentos (2025-2029)", fontsize=14)
        plt.xlabel("Ano")
        plt.ylabel("Valor acumulado (R$)")
        plt.grid(True, linestyle='--', alpha=0.7)
        plt.legend()

        buf = io.BytesIO()
        plt.savefig(buf, format='png')
        buf.seek(0)
        grafico = base64.b64encode(buf.getvalue()).decode('utf8')
        plt.close()

    return render_template('index.html', grafico=grafico, resultados=resultados, anos=anos, params=params)

def gerar_csv(resultados, anos):
    buf = io.StringIO()
    writer = csv.writer(buf)
    header = ["Ano"] + list(resultados.keys())
    writer.writerow(header)
    for i in range(len(anos)):
        row = [anos[i]] + [resultados[tipo][i] for tipo in resultados]
        writer.writerow(row)
    buf.seek(0)
    return io.BytesIO(buf.read().encode('utf-8'))

@app.route('/download_csv', methods=['POST'])
def download_csv():
    params = {
        'capital': float(request.form.get('capital', 400000)),
        'studio_valor_anual': float(request.form.get('studio_valor_anual', 49440)),
        'studio_valoriza': float(request.form.get('studio_valoriza', 6)),
        'franquia_valor_anual': float(request.form.get('franquia_valor_anual', 20000)),
        'acoes_retorno': float(request.form.get('acoes_retorno', 10)),
        'renda_fixa_retorno': float(request.form.get('renda_fixa_retorno', 9)),
    }

    anos, resultados = calcular_retornos(
        params['capital'],
        params['studio_valor_anual'],
        params['studio_valoriza'],
        params['franquia_valor_anual'],
        params['acoes_retorno'],
        params['renda_fixa_retorno']
    )

    csv_file = gerar_csv(resultados, anos)
    return send_file(csv_file, mimetype='text/csv', as_attachment=True, download_name='simulacao_investimentos.csv')

if __name__ == '__main__':
    app.run(debug=True)