Persano commited on
Commit
c009ac1
·
verified ·
1 Parent(s): cfa8146

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request
2
+ import matplotlib.pyplot as plt
3
+ import io
4
+ import base64
5
+ import csv
6
+ from flask import send_file
7
+
8
+ app = Flask(__name__)
9
+
10
+ def calcular_retornos(capital, studio_valor_anual, studio_valoriza, franquia_valor_anual, acoes_retorno, renda_fixa_retorno):
11
+ anos = [2025, 2026, 2027, 2028, 2029]
12
+ resultados = {
13
+ 'studio': [],
14
+ 'franquia': [],
15
+ 'acoes': [],
16
+ 'renda_fixa': []
17
+ }
18
+
19
+ valor_studio = capital
20
+ valor_franquia = capital
21
+ valor_acoes = capital
22
+ valor_rf = capital
23
+
24
+ for _ in anos:
25
+ valor_studio += studio_valor_anual
26
+ valor_studio *= (1 + studio_valoriza / 100)
27
+ resultados['studio'].append(round(valor_studio, 2))
28
+
29
+ valor_franquia += franquia_valor_anual
30
+ resultados['franquia'].append(round(valor_franquia, 2))
31
+
32
+ valor_acoes *= (1 + acoes_retorno / 100)
33
+ resultados['acoes'].append(round(valor_acoes, 2))
34
+
35
+ valor_rf *= (1 + renda_fixa_retorno / 100)
36
+ resultados['renda_fixa'].append(round(valor_rf, 2))
37
+
38
+ return anos, resultados
39
+
40
+ @app.route('/', methods=['GET', 'POST'])
41
+ def index():
42
+ grafico = None
43
+ resultados = {}
44
+ anos = []
45
+ params = {
46
+ 'capital': 400000,
47
+ 'studio_valor_anual': 49440,
48
+ 'studio_valoriza': 6,
49
+ 'franquia_valor_anual': 20000,
50
+ 'acoes_retorno': 10,
51
+ 'renda_fixa_retorno': 9,
52
+ }
53
+ if request.method == 'POST':
54
+ params['capital'] = float(request.form.get('capital', params['capital']))
55
+ params['studio_valor_anual'] = float(request.form.get('studio_valor_anual', params['studio_valor_anual']))
56
+ params['studio_valoriza'] = float(request.form.get('studio_valoriza', params['studio_valoriza']))
57
+ params['franquia_valor_anual'] = float(request.form.get('franquia_valor_anual', params['franquia_valor_anual']))
58
+ params['acoes_retorno'] = float(request.form.get('acoes_retorno', params['acoes_retorno']))
59
+ params['renda_fixa_retorno'] = float(request.form.get('renda_fixa_retorno', params['renda_fixa_retorno']))
60
+
61
+ anos, resultados = calcular_retornos(
62
+ params['capital'],
63
+ params['studio_valor_anual'],
64
+ params['studio_valoriza'],
65
+ params['franquia_valor_anual'],
66
+ params['acoes_retorno'],
67
+ params['renda_fixa_retorno']
68
+ )
69
+
70
+ plt.figure(figsize=(8, 5))
71
+ for tipo, valores in resultados.items():
72
+ plt.plot(anos, valores, marker='o', label=tipo.title())
73
+
74
+ plt.title("Comparativo de Investimentos (2025-2029)", fontsize=14)
75
+ plt.xlabel("Ano")
76
+ plt.ylabel("Valor acumulado (R$)")
77
+ plt.grid(True, linestyle='--', alpha=0.7)
78
+ plt.legend()
79
+
80
+ buf = io.BytesIO()
81
+ plt.savefig(buf, format='png')
82
+ buf.seek(0)
83
+ grafico = base64.b64encode(buf.getvalue()).decode('utf8')
84
+ plt.close()
85
+
86
+ return render_template('index.html', grafico=grafico, resultados=resultados, anos=anos, params=params)
87
+
88
+ def gerar_csv(resultados, anos):
89
+ buf = io.StringIO()
90
+ writer = csv.writer(buf)
91
+ header = ["Ano"] + list(resultados.keys())
92
+ writer.writerow(header)
93
+ for i in range(len(anos)):
94
+ row = [anos[i]] + [resultados[tipo][i] for tipo in resultados]
95
+ writer.writerow(row)
96
+ buf.seek(0)
97
+ return io.BytesIO(buf.read().encode('utf-8'))
98
+
99
+ @app.route('/download_csv', methods=['POST'])
100
+ def download_csv():
101
+ params = {
102
+ 'capital': float(request.form.get('capital', 400000)),
103
+ 'studio_valor_anual': float(request.form.get('studio_valor_anual', 49440)),
104
+ 'studio_valoriza': float(request.form.get('studio_valoriza', 6)),
105
+ 'franquia_valor_anual': float(request.form.get('franquia_valor_anual', 20000)),
106
+ 'acoes_retorno': float(request.form.get('acoes_retorno', 10)),
107
+ 'renda_fixa_retorno': float(request.form.get('renda_fixa_retorno', 9)),
108
+ }
109
+
110
+ anos, resultados = calcular_retornos(
111
+ params['capital'],
112
+ params['studio_valor_anual'],
113
+ params['studio_valoriza'],
114
+ params['franquia_valor_anual'],
115
+ params['acoes_retorno'],
116
+ params['renda_fixa_retorno']
117
+ )
118
+
119
+ csv_file = gerar_csv(resultados, anos)
120
+ return send_file(csv_file, mimetype='text/csv', as_attachment=True, download_name='simulacao_investimentos.csv')
121
+
122
+ if __name__ == '__main__':
123
+ app.run(debug=True)