Persano commited on
Commit
72240dc
·
verified ·
1 Parent(s): 488d3ee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -37
app.py CHANGED
@@ -31,17 +31,17 @@ def gerar_analise(investimentos_finais, capital, patrimonio_studio_final):
31
 
32
  def gerar_analise_ia(investimentos_finais, capital, patrimonio_studio_final):
33
  prompt = f"""
34
- Faça uma análise profissional e detalhada em linguagem clara e acessível sobre os seguintes dados financeiros:
35
- - Capital inicial: R$ {capital:,.2f}
36
- - Valor patrimonial final do Studio: R$ {patrimonio_studio_final:,.2f}
37
- - Investimentos finais após 5 anos:
38
- """
39
  for nome, valor in investimentos_finais.items():
40
- prompt += f" - {nome}: R$ {valor:,.2f}\n"
41
 
42
  prompt += """
43
- Destaque qual foi o melhor investimento, o retorno percentual sobre o capital, e comente sobre possíveis estratégias e perfis de risco. Seja objetivo, claro e com tom consultivo.
44
- """
45
 
46
  resposta = openai.ChatCompletion.create(
47
  model="gpt-4o",
@@ -55,26 +55,24 @@ Destaque qual foi o melhor investimento, o retorno percentual sobre o capital, e
55
  def render_pdf(template_src, context_dict):
56
  html = render_template(template_src, **context_dict)
57
  result = io.BytesIO()
58
- # Importante: usar io.StringIO para passar a string HTML para pisa
59
- pisa_status = pisa.CreatePDF(io.StringIO(html), dest=result)
60
- if not pisa_status.err:
61
- result.seek(0)
62
- return result
63
- return None
 
64
 
65
  @app.route("/", methods=["GET", "POST"])
66
  def index():
67
  if request.method == "POST":
68
- try:
69
- capital = float(request.form["capital"])
70
- studio_ret = float(request.form["studio_ret"])
71
- valorizacao = float(request.form["valorizacao"])
72
- franquia_ret = float(request.form["franquia_ret"])
73
- acoes_ret = float(request.form["acoes_ret"])
74
- renda_fixa = float(request.form["renda_fixa"])
75
- inflacao = float(request.form["inflacao"])
76
- except (KeyError, ValueError):
77
- return render_template("index.html", erro="Por favor, preencha todos os campos corretamente.")
78
 
79
  anos = list(range(1, 6))
80
 
@@ -126,7 +124,7 @@ def index():
126
  for col in df.columns:
127
  if col != "Ano":
128
  df_formatado[col] = df_formatado[col].apply(formatar_brl)
129
- tabela = df_formatado.to_html(index=False, classes="tabela", border=0)
130
 
131
  analise_final = gerar_analise(investimentos_finais, capital, patrimonio_studio[-1])
132
 
@@ -142,16 +140,13 @@ def index():
142
 
143
  @app.route("/gerar-pdf", methods=["POST"])
144
  def gerar_pdf():
145
- try:
146
- capital = float(request.form["capital"])
147
- studio_ret = float(request.form["studio_ret"])
148
- valorizacao = float(request.form["valorizacao"])
149
- franquia_ret = float(request.form["franquia_ret"])
150
- acoes_ret = float(request.form["acoes_ret"])
151
- renda_fixa = float(request.form["renda_fixa"])
152
- inflacao = float(request.form["inflacao"])
153
- except (KeyError, ValueError):
154
- return "Erro: dados inválidos.", 400
155
 
156
  anos = list(range(1, 6))
157
 
@@ -178,7 +173,6 @@ def gerar_pdf():
178
  "Renda Fixa": renda_fixa_valores[-1],
179
  }
180
 
181
- buf = io.BytesIO()
182
  plt.figure(figsize=(8, 5))
183
  plt.plot(anos, studio_total, label="Studio (Patrimônio + Renda)", marker="o")
184
  plt.plot(anos, franquia, label="Franquia", marker="o")
@@ -191,6 +185,8 @@ def gerar_pdf():
191
  plt.grid(True)
192
  plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x, _: f"R${x:,.0f}".replace(",", ".")))
193
  plt.tight_layout()
 
 
194
  plt.savefig(buf, format="png")
195
  buf.seek(0)
196
  grafico_base64 = base64.b64encode(buf.read()).decode("utf-8")
@@ -209,7 +205,7 @@ def gerar_pdf():
209
  "capital": capital,
210
  "grafico": grafico_base64,
211
  "tabela": tabela_html,
212
- "analise_final": analise_final_ia.replace("\n", "<br>"),
213
  "data_hoje": datetime.now().strftime("São Paulo, %d de %B de %Y")
214
  }
215
 
 
31
 
32
  def gerar_analise_ia(investimentos_finais, capital, patrimonio_studio_final):
33
  prompt = f"""
34
+ Faça uma análise profissional e detalhada em linguagem clara e acessível sobre os seguintes dados financeiros:
35
+ - Capital inicial: R$ {capital:,.2f}
36
+ - Valor patrimonial final do Studio: R$ {patrimonio_studio_final:,.2f}
37
+ - Investimentos finais após 5 anos:
38
+ """
39
  for nome, valor in investimentos_finais.items():
40
+ prompt += f" - {nome}: R$ {valor:,.2f}\n"
41
 
42
  prompt += """
43
+ Destaque qual foi o melhor investimento, o retorno percentual sobre o capital, e comente sobre possíveis estratégias e perfis de risco. Seja objetivo, claro e com tom consultivo.
44
+ """
45
 
46
  resposta = openai.ChatCompletion.create(
47
  model="gpt-4o",
 
55
  def render_pdf(template_src, context_dict):
56
  html = render_template(template_src, **context_dict)
57
  result = io.BytesIO()
58
+ # Passa o HTML diretamente para CreatePDF (mais confiável)
59
+ pisa_status = pisa.CreatePDF(src=html, dest=result)
60
+ if pisa_status.err:
61
+ print(f"[ERRO] Pisa CreatePDF falhou com código: {pisa_status.err}")
62
+ return None
63
+ result.seek(0)
64
+ return result
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"])
71
+ valorizacao = float(request.form["valorizacao"])
72
+ franquia_ret = float(request.form["franquia_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
  anos = list(range(1, 6))
78
 
 
124
  for col in df.columns:
125
  if col != "Ano":
126
  df_formatado[col] = df_formatado[col].apply(formatar_brl)
127
+ tabela = df_formatado.to_html(index=False, classes="table table-striped table-sm text-end", border=0)
128
 
129
  analise_final = gerar_analise(investimentos_finais, capital, patrimonio_studio[-1])
130
 
 
140
 
141
  @app.route("/gerar-pdf", methods=["POST"])
142
  def gerar_pdf():
143
+ capital = float(request.form["capital"])
144
+ studio_ret = float(request.form["studio_ret"])
145
+ valorizacao = float(request.form["valorizacao"])
146
+ franquia_ret = float(request.form["franquia_ret"])
147
+ acoes_ret = float(request.form["acoes_ret"])
148
+ renda_fixa = float(request.form["renda_fixa"])
149
+ inflacao = float(request.form["inflacao"])
 
 
 
150
 
151
  anos = list(range(1, 6))
152
 
 
173
  "Renda Fixa": renda_fixa_valores[-1],
174
  }
175
 
 
176
  plt.figure(figsize=(8, 5))
177
  plt.plot(anos, studio_total, label="Studio (Patrimônio + Renda)", marker="o")
178
  plt.plot(anos, franquia, label="Franquia", marker="o")
 
185
  plt.grid(True)
186
  plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x, _: f"R${x:,.0f}".replace(",", ".")))
187
  plt.tight_layout()
188
+
189
+ buf = io.BytesIO()
190
  plt.savefig(buf, format="png")
191
  buf.seek(0)
192
  grafico_base64 = base64.b64encode(buf.read()).decode("utf-8")
 
205
  "capital": capital,
206
  "grafico": grafico_base64,
207
  "tabela": tabela_html,
208
+ "analise_final": analise_final_ia,
209
  "data_hoje": datetime.now().strftime("São Paulo, %d de %B de %Y")
210
  }
211