Persano commited on
Commit
0586bcf
·
verified ·
1 Parent(s): ab1bcf6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -85
app.py CHANGED
@@ -1,89 +1,70 @@
1
- import os
2
- os.environ['MPLCONFIGDIR'] = '/tmp/matplotlib-config'
3
-
4
- from flask import Flask, render_template, request
5
- import matplotlib.pyplot as plt
6
  import io
7
  import base64
 
8
  import pandas as pd
9
 
10
  app = Flask(__name__)
11
 
12
  def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao):
13
- # Simulação de 10 anos
14
- anos = list(range(11))
15
- studio_valor = []
16
- franquia_valor = []
17
- acoes_valor = []
18
- renda_fixa_valor = []
19
-
20
- cap_studio = capital
21
- cap_franquia = capital
22
- cap_acoes = capital
23
- cap_rf = capital
24
-
25
- for ano in anos:
26
- # Studio (rendimento mensal *12 + valorização anual)
27
- rent_studio = cap_studio * (studio_ret/100) * 12
28
- val_studio = cap_studio * (valorizacao/100)
29
- cap_studio += rent_studio + val_studio
30
-
31
- # Franquia (lucro fixo anual)
32
- cap_franquia += franquia_ret
33
-
34
- # Ações (rendimento anual percentual)
35
- cap_acoes += cap_acoes * (acoes_ret/100)
36
-
37
- # Renda fixa (rendimento anual percentual)
38
- cap_rf += cap_rf * (renda_fixa/100)
39
-
40
- # Ajuste pela inflação
41
- cap_studio /= (1 + inflacao/100)
42
- cap_franquia /= (1 + inflacao/100)
43
- cap_acoes /= (1 + inflacao/100)
44
- cap_rf /= (1 + inflacao/100)
45
-
46
- # Armazena valores ajustados
47
- studio_valor.append(cap_studio)
48
- franquia_valor.append(cap_franquia)
49
- acoes_valor.append(cap_acoes)
50
- renda_fixa_valor.append(cap_rf)
51
-
52
- # Monta DataFrame para excel e gráfico
53
- df = pd.DataFrame({
54
  'Ano': anos,
55
- 'Studio (R$)': [round(v,2) for v in studio_valor],
56
- 'Franquia (R$)': [round(v,2) for v in franquia_valor],
57
- 'Ações (R$)': [round(v,2) for v in acoes_valor],
58
- 'Renda Fixa (R$)': [round(v,2) for v in renda_fixa_valor],
59
- })
60
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  return df
62
 
63
- def criar_grafico(df):
64
- plt.style.use('seaborn-darkgrid')
65
- fig, ax = plt.subplots(figsize=(10,6))
66
- ax.plot(df['Ano'], df['Studio (R$)'], label='Studio')
67
- ax.plot(df['Ano'], df['Franquia (R$)'], label='Franquia')
68
- ax.plot(df['Ano'], df['Ações (R$)'], label='Ações')
69
- ax.plot(df['Ano'], df['Renda Fixa (R$)'], label='Renda Fixa')
70
- ax.set_title('Simulação de Investimentos - Valor Ajustado pela Inflação')
71
- ax.set_xlabel('Ano')
72
- ax.set_ylabel('Valor acumulado (R$)')
73
- ax.legend()
74
- plt.tight_layout()
75
-
76
  buf = io.BytesIO()
77
- plt.savefig(buf, format='png')
78
- plt.close(fig)
79
  buf.seek(0)
80
- img_png = base64.b64encode(buf.getvalue()).decode('utf-8')
81
- return img_png
82
 
83
  @app.route('/', methods=['GET', 'POST'])
84
  def index():
85
- grafico = None
86
- df = None
87
  if request.method == 'POST':
88
  capital = float(request.form['capital'])
89
  studio_ret = float(request.form['studio_ret'])
@@ -92,21 +73,26 @@ def index():
92
  acoes_ret = float(request.form['acoes_ret'])
93
  renda_fixa = float(request.form['renda_fixa'])
94
  inflacao = float(request.form['inflacao'])
95
-
96
  df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
97
- grafico = criar_grafico(df)
98
-
99
- return render_template('index.html', grafico=grafico, capital=request.form.get('capital', ''),
100
- studio_ret=request.form.get('studio_ret', ''),
101
- valorizacao=request.form.get('valorizacao', ''),
102
- franquia_ret=request.form.get('franquia_ret', ''),
103
- acoes_ret=request.form.get('acoes_ret', ''),
104
- renda_fixa=request.form.get('renda_fixa', ''),
105
- inflacao=request.form.get('inflacao', ''))
 
 
 
 
 
 
106
 
107
  @app.route('/download_excel', methods=['POST'])
108
  def download_excel():
109
- from flask import send_file
110
  capital = float(request.form['capital'])
111
  studio_ret = float(request.form['studio_ret'])
112
  valorizacao = float(request.form['valorizacao'])
@@ -114,8 +100,31 @@ def download_excel():
114
  acoes_ret = float(request.form['acoes_ret'])
115
  renda_fixa = float(request.form['renda_fixa'])
116
  inflacao = float(request.form['inflacao'])
117
-
118
- df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret,
119
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
 
 
1
+ from flask import Flask, render_template, request, send_file
 
 
 
 
2
  import io
3
  import base64
4
+ import matplotlib.pyplot as plt
5
  import pandas as pd
6
 
7
  app = Flask(__name__)
8
 
9
  def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao):
10
+ # Cria DataFrame com dados simulados para 10 anos
11
+ anos = list(range(1, 11))
12
+ dados = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  'Ano': anos,
14
+ 'Studio_Rentabilidade_Bruta': [],
15
+ 'Studio_Valorizacao': [],
16
+ 'Franquia_Lucro_Anual': [],
17
+ 'Acoes_Retorno': [],
18
+ 'Renda_Fixa_Retorno': [],
19
+ }
20
+
21
+ capital_studio = capital
22
+ capital_acoes = capital
23
+ capital_rf = capital
24
+
25
+ for ano in anos:
26
+ # Studio: rentabilidade mensal bruta acumulada no ano + valorização
27
+ rent_mes = studio_ret / 100
28
+ rent_anual = ((1 + rent_mes) ** 12 - 1) * capital_studio
29
+ val_ano = (valorizacao / 100) * capital_studio
30
+ dados['Studio_Rentabilidade_Bruta'].append(rent_anual)
31
+ dados['Studio_Valorizacao'].append(val_ano)
32
+
33
+ # Franquia: valor fixo anual informado (pode ser ajustado depois)
34
+ dados['Franquia_Lucro_Anual'].append(franquia_ret)
35
+
36
+ # Ações e RF: acumulam juros compostos
37
+ capital_acoes = capital_acoes * (1 + (acoes_ret / 100))
38
+ capital_rf = capital_rf * (1 + (renda_fixa / 100))
39
+
40
+ dados['Acoes_Retorno'].append(capital_acoes - capital)
41
+ dados['Renda_Fixa_Retorno'].append(capital_rf - capital)
42
+
43
+ df = pd.DataFrame(dados)
44
  return df
45
 
46
+ def gerar_grafico(df):
47
+ plt.figure(figsize=(10,6))
48
+ plt.plot(df['Ano'], df['Studio_Rentabilidade_Bruta'], label='Studio - Renda Bruta')
49
+ plt.plot(df['Ano'], df['Studio_Valorizacao'], label='Studio - Valorização')
50
+ plt.plot(df['Ano'], df['Franquia_Lucro_Anual'], label='Franquia - Lucro Anual')
51
+ plt.plot(df['Ano'], df['Acoes_Retorno'], label='Ações - Retorno Acumulado')
52
+ plt.plot(df['Ano'], df['Renda_Fixa_Retorno'], label='Renda Fixa - Retorno Acumulado')
53
+ plt.xlabel('Ano')
54
+ plt.ylabel('Retorno (R$)')
55
+ plt.title('Simulação de Retorno de Investimentos')
56
+ plt.legend()
57
+ plt.grid(True)
58
+
59
  buf = io.BytesIO()
60
+ plt.savefig(buf, format='png', bbox_inches='tight')
61
+ plt.close()
62
  buf.seek(0)
63
+ img_base64 = base64.b64encode(buf.read()).decode('utf-8')
64
+ return img_base64
65
 
66
  @app.route('/', methods=['GET', 'POST'])
67
  def index():
 
 
68
  if request.method == 'POST':
69
  capital = float(request.form['capital'])
70
  studio_ret = float(request.form['studio_ret'])
 
73
  acoes_ret = float(request.form['acoes_ret'])
74
  renda_fixa = float(request.form['renda_fixa'])
75
  inflacao = float(request.form['inflacao'])
76
+
77
  df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
78
+ grafico = gerar_grafico(df)
79
+
80
+ return render_template(
81
+ 'index.html',
82
+ grafico=grafico,
83
+ capital=capital,
84
+ studio_ret=studio_ret,
85
+ valorizacao=valorizacao,
86
+ franquia_ret=franquia_ret,
87
+ acoes_ret=acoes_ret,
88
+ renda_fixa=renda_fixa,
89
+ inflacao=inflacao
90
+ )
91
+ else:
92
+ return render_template('index.html')
93
 
94
  @app.route('/download_excel', methods=['POST'])
95
  def download_excel():
 
96
  capital = float(request.form['capital'])
97
  studio_ret = float(request.form['studio_ret'])
98
  valorizacao = float(request.form['valorizacao'])
 
100
  acoes_ret = float(request.form['acoes_ret'])
101
  renda_fixa = float(request.form['renda_fixa'])
102
  inflacao = float(request.form['inflacao'])
103
+
104
+ df = gerar_simulacao(
105
+ capital,
106
+ studio_ret,
107
+ valorizacao,
108
+ franquia_ret,
109
+ acoes_ret,
110
+ renda_fixa,
111
+ inflacao
112
+ )
113
+
114
+ output = io.BytesIO()
115
+ with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
116
+ df.to_excel(writer, index=False, sheet_name='Simulação')
117
+ writer.save()
118
+ output.seek(0)
119
+
120
+ return send_file(
121
+ output,
122
+ download_name="simulacao_investimentos.xlsx",
123
+ as_attachment=True,
124
+ mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
125
+ )
126
+
127
+ if __name__ == '__main__':
128
+ app.run(host='0.0.0.0', port=7860, debug=True)
129
 
130