Persano commited on
Commit
76663a7
·
verified ·
1 Parent(s): 84bcdd8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -19
app.py CHANGED
@@ -13,15 +13,19 @@ from datetime import datetime
13
 
14
  app = Flask(__name__)
15
 
 
 
 
 
16
  def gerar_analise(investimentos_finais, capital):
17
  melhor = max(investimentos_finais, key=investimentos_finais.get)
18
  valor_melhor = investimentos_finais[melhor]
19
  retorno_pct = ((valor_melhor - capital) / capital) * 100
20
  analise = f"""
21
  Após análise dos cenários projetados para 5 anos, o investimento <strong>{melhor}</strong> apresenta o melhor desempenho,
22
- com um valor final estimado de <strong>R$ {valor_melhor:,.2f}</strong>, equivalente a um retorno de <strong>{retorno_pct:.1f}%</strong>.
23
  """
24
- return analise.replace(",", ".")
25
 
26
  @app.route("/", methods=["GET", "POST"])
27
  def index():
@@ -36,6 +40,7 @@ def index():
36
 
37
  anos = list(range(1, 6))
38
 
 
39
  studio = [capital * ((1 + studio_ret / 100) ** (12 * ano)) for ano in anos]
40
  franquia = [capital + (franquia_ret * ano) for ano in anos]
41
  acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
@@ -62,6 +67,7 @@ def index():
62
  investimento_mais_valorizado = max(investimentos_finais, key=investimentos_finais.get)
63
  valor_mais_alto = investimentos_finais[investimento_mais_valorizado]
64
 
 
65
  plt.figure(figsize=(8, 5))
66
  plt.plot(anos, studio, label="Studio", marker="o")
67
  plt.plot(anos, franquia, label="Franquia", marker="o")
@@ -87,35 +93,35 @@ def index():
87
  buf.close()
88
  plt.close()
89
 
 
90
  df_formatado = df.copy()
91
  for col in ["Studio", "Franquia", "Ações", "Renda Fixa", "Studio c/ Inflação"]:
92
- df_formatado[col] = df_formatado[col].apply(lambda x: f"R$ {x:,.2f}".replace(",", "."))
93
 
94
  tabela = df_formatado.to_html(index=False, classes="table table-striped table-sm", border=0)
95
 
96
  analise_final = gerar_analise(investimentos_finais, capital)
97
 
98
- # Tabela resumo
99
  resumo = []
100
  for nome, valor_final in investimentos_finais.items():
101
  retorno_abs = valor_final - capital
102
  retorno_pct = (retorno_abs / capital) * 100
103
  resumo.append({
104
  "Investimento": nome,
105
- "Valor Final": f"R$ {valor_final:,.2f}".replace(",", "."),
106
- "Retorno Absoluto": f"R$ {retorno_abs:,.2f}".replace(",", "."),
107
  "Retorno (%)": f"{retorno_pct:.1f}%"
108
  })
109
- resumo = sorted(resumo, key=lambda x: float(x["Retorno (%)"].replace("%", "")), reverse=True)
110
 
111
- diferenca_pct = float(resumo[0]["Retorno (%)"].replace("%", "")) - float(resumo[1]["Retorno (%)"].replace("%", ""))
112
  comentario_extra = ""
113
  if diferenca_pct < 5:
114
  comentario_extra = f"""
115
  Apesar do <strong>{resumo[0]['Investimento']}</strong> ter se destacado, a diferença em relação ao segundo colocado
116
  (<strong>{resumo[1]['Investimento']}</strong>) foi de apenas {diferenca_pct:.1f} pontos percentuais.
117
  Isso indica que ambas as estratégias podem ser consideradas, dependendo do perfil de risco e objetivos do investidor.
118
- """.replace(",", ".")
119
 
120
  return render_template(
121
  "index.html",
@@ -163,7 +169,7 @@ def download_pdf():
163
  "Franquia": valores_franquia,
164
  "Ações": valores_acoes,
165
  "Renda Fixa": valores_renda_fixa,
166
- "Studio c/ Inflação": valores_studio_ajustado_inflacao,
167
  })
168
 
169
  investimentos_finais = {
@@ -176,12 +182,12 @@ def download_pdf():
176
  investimento_mais_valorizado = max(investimentos_finais, key=investimentos_finais.get)
177
  valor_mais_alto = investimentos_finais[investimento_mais_valorizado]
178
 
 
179
  plt.figure(figsize=(8, 5))
180
  plt.plot(anos, valores_studio, label="Studio", marker="o")
181
  plt.plot(anos, valores_franquia, label="Franquia", marker="o")
182
  plt.plot(anos, valores_acoes, label="Ações", marker="o")
183
  plt.plot(anos, valores_renda_fixa, label="Renda Fixa", marker="o")
184
- plt.plot(anos, valores_studio_ajustado_inflacao, label="Studio c/ Inflação", linestyle='--', marker="o")
185
  plt.title("Comparação dos Investimentos")
186
  plt.xlabel("Ano")
187
  plt.ylabel("Valor (R$)")
@@ -195,9 +201,10 @@ def download_pdf():
195
  grafico_base64 = base64.b64encode(img_buffer.getvalue()).decode('utf-8')
196
  plt.close()
197
 
 
198
  df_formatado = df.copy()
199
- for col in ["Studio", "Franquia", "Ações", "Renda Fixa", "Studio c/ Inflação"]:
200
- df_formatado[col] = df_formatado[col].apply(lambda x: f"R$ {x:,.2f}".replace(",", "."))
201
 
202
  tabela = df_formatado.to_html(index=False, classes="table table-sm table-bordered", border=1)
203
 
@@ -209,20 +216,20 @@ def download_pdf():
209
  retorno_pct = (retorno_abs / capital_inicial) * 100
210
  resumo.append({
211
  "Investimento": nome,
212
- "Valor Final": f"R$ {valor_final:,.2f}".replace(",", "."),
213
- "Retorno Absoluto": f"R$ {retorno_abs:,.2f}".replace(",", "."),
214
  "Retorno (%)": f"{retorno_pct:.1f}%"
215
  })
216
- resumo = sorted(resumo, key=lambda x: float(x["Retorno (%)"].replace("%", "")), reverse=True)
217
 
218
- diferenca_pct = float(resumo[0]["Retorno (%)"].replace("%", "")) - float(resumo[1]["Retorno (%)"].replace("%", ""))
219
  comentario_extra = ""
220
  if diferenca_pct < 5:
221
  comentario_extra = f"""
222
  Apesar do <strong>{resumo[0]['Investimento']}</strong> ter se destacado, a diferença em relação ao segundo colocado
223
  (<strong>{resumo[1]['Investimento']}</strong>) foi de apenas {diferenca_pct:.1f} pontos percentuais.
224
  Isso indica que ambas as estratégias podem ser consideradas, dependendo do perfil de risco e objetivos do investidor.
225
- """.replace(",", ".")
226
 
227
  html = render_template(
228
  "relatorio_pdf.html",
@@ -255,4 +262,3 @@ def download_pdf():
255
 
256
  if __name__ == '__main__':
257
  app.run(host='0.0.0.0', port=7860, debug=True)
258
-
 
13
 
14
  app = Flask(__name__)
15
 
16
+ def formatar_brl(valor):
17
+ """Formata número para moeda brasileira: R$ 1.234,56"""
18
+ return f"R$ {valor:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")
19
+
20
  def gerar_analise(investimentos_finais, capital):
21
  melhor = max(investimentos_finais, key=investimentos_finais.get)
22
  valor_melhor = investimentos_finais[melhor]
23
  retorno_pct = ((valor_melhor - capital) / capital) * 100
24
  analise = f"""
25
  Após análise dos cenários projetados para 5 anos, o investimento <strong>{melhor}</strong> apresenta o melhor desempenho,
26
+ com um valor final estimado de <strong>{formatar_brl(valor_melhor)}</strong>, equivalente a um retorno de <strong>{retorno_pct:.1f}%</strong>.
27
  """
28
+ return analise
29
 
30
  @app.route("/", methods=["GET", "POST"])
31
  def index():
 
40
 
41
  anos = list(range(1, 6))
42
 
43
+ # Cálculo dos valores projetados
44
  studio = [capital * ((1 + studio_ret / 100) ** (12 * ano)) for ano in anos]
45
  franquia = [capital + (franquia_ret * ano) for ano in anos]
46
  acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
 
67
  investimento_mais_valorizado = max(investimentos_finais, key=investimentos_finais.get)
68
  valor_mais_alto = investimentos_finais[investimento_mais_valorizado]
69
 
70
+ # Gráfico com todas as linhas (incluindo Studio c/ Inflação)
71
  plt.figure(figsize=(8, 5))
72
  plt.plot(anos, studio, label="Studio", marker="o")
73
  plt.plot(anos, franquia, label="Franquia", marker="o")
 
93
  buf.close()
94
  plt.close()
95
 
96
+ # Formatação da tabela com moeda brasileira
97
  df_formatado = df.copy()
98
  for col in ["Studio", "Franquia", "Ações", "Renda Fixa", "Studio c/ Inflação"]:
99
+ df_formatado[col] = df_formatado[col].apply(formatar_brl)
100
 
101
  tabela = df_formatado.to_html(index=False, classes="table table-striped table-sm", border=0)
102
 
103
  analise_final = gerar_analise(investimentos_finais, capital)
104
 
 
105
  resumo = []
106
  for nome, valor_final in investimentos_finais.items():
107
  retorno_abs = valor_final - capital
108
  retorno_pct = (retorno_abs / capital) * 100
109
  resumo.append({
110
  "Investimento": nome,
111
+ "Valor Final": formatar_brl(valor_final),
112
+ "Retorno Absoluto": formatar_brl(retorno_abs),
113
  "Retorno (%)": f"{retorno_pct:.1f}%"
114
  })
115
+ resumo = sorted(resumo, key=lambda x: float(x["Retorno (%)"].replace("%", "").replace(",", ".")), reverse=True)
116
 
117
+ diferenca_pct = float(resumo[0]["Retorno (%)"].replace("%", "").replace(",", ".")) - float(resumo[1]["Retorno (%)"].replace("%", "").replace(",", "."))
118
  comentario_extra = ""
119
  if diferenca_pct < 5:
120
  comentario_extra = f"""
121
  Apesar do <strong>{resumo[0]['Investimento']}</strong> ter se destacado, a diferença em relação ao segundo colocado
122
  (<strong>{resumo[1]['Investimento']}</strong>) foi de apenas {diferenca_pct:.1f} pontos percentuais.
123
  Isso indica que ambas as estratégias podem ser consideradas, dependendo do perfil de risco e objetivos do investidor.
124
+ """
125
 
126
  return render_template(
127
  "index.html",
 
169
  "Franquia": valores_franquia,
170
  "Ações": valores_acoes,
171
  "Renda Fixa": valores_renda_fixa,
172
+ # Não inclui "Studio c/ Inflação" para remover do PDF
173
  })
174
 
175
  investimentos_finais = {
 
182
  investimento_mais_valorizado = max(investimentos_finais, key=investimentos_finais.get)
183
  valor_mais_alto = investimentos_finais[investimento_mais_valorizado]
184
 
185
+ # Gráfico SEM o "Studio c/ Inflação"
186
  plt.figure(figsize=(8, 5))
187
  plt.plot(anos, valores_studio, label="Studio", marker="o")
188
  plt.plot(anos, valores_franquia, label="Franquia", marker="o")
189
  plt.plot(anos, valores_acoes, label="Ações", marker="o")
190
  plt.plot(anos, valores_renda_fixa, label="Renda Fixa", marker="o")
 
191
  plt.title("Comparação dos Investimentos")
192
  plt.xlabel("Ano")
193
  plt.ylabel("Valor (R$)")
 
201
  grafico_base64 = base64.b64encode(img_buffer.getvalue()).decode('utf-8')
202
  plt.close()
203
 
204
+ # Formatação para tabela do PDF (sem a coluna Studio c/ Inflação)
205
  df_formatado = df.copy()
206
+ for col in ["Studio", "Franquia", "Ações", "Renda Fixa"]:
207
+ df_formatado[col] = df_formatado[col].apply(formatar_brl)
208
 
209
  tabela = df_formatado.to_html(index=False, classes="table table-sm table-bordered", border=1)
210
 
 
216
  retorno_pct = (retorno_abs / capital_inicial) * 100
217
  resumo.append({
218
  "Investimento": nome,
219
+ "Valor Final": formatar_brl(valor_final),
220
+ "Retorno Absoluto": formatar_brl(retorno_abs),
221
  "Retorno (%)": f"{retorno_pct:.1f}%"
222
  })
223
+ resumo = sorted(resumo, key=lambda x: float(x["Retorno (%)"].replace("%", "").replace(",", ".")), reverse=True)
224
 
225
+ diferenca_pct = float(resumo[0]["Retorno (%)"].replace("%", "").replace(",", ".")) - float(resumo[1]["Retorno (%)"].replace("%", "").replace(",", "."))
226
  comentario_extra = ""
227
  if diferenca_pct < 5:
228
  comentario_extra = f"""
229
  Apesar do <strong>{resumo[0]['Investimento']}</strong> ter se destacado, a diferença em relação ao segundo colocado
230
  (<strong>{resumo[1]['Investimento']}</strong>) foi de apenas {diferenca_pct:.1f} pontos percentuais.
231
  Isso indica que ambas as estratégias podem ser consideradas, dependendo do perfil de risco e objetivos do investidor.
232
+ """
233
 
234
  html = render_template(
235
  "relatorio_pdf.html",
 
262
 
263
  if __name__ == '__main__':
264
  app.run(host='0.0.0.0', port=7860, debug=True)