Persano commited on
Commit
ec8e4f8
·
verified ·
1 Parent(s): e354358

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -30
app.py CHANGED
@@ -174,43 +174,82 @@ def index():
174
 
175
  return render_template("index.html")
176
 
 
 
 
 
 
177
  @app.route("/gerar-pdf", methods=["POST"])
178
  def gerar_pdf():
179
  try:
180
- logging.debug(f"Dados recebidos para gerar PDF: {request.form}")
181
-
182
- capital = safe_float(request.form.get("capital"), "capital")
183
- studio_ret = safe_float(request.form.get("studio_ret"), "studio_ret")
184
- valorizacao = safe_float(request.form.get("valorizacao"), "valorizacao")
185
- franquia_ret = safe_float(request.form.get("franquia_ret"), "franquia_ret")
186
- acoes_ret = safe_float(request.form.get("acoes_ret"), "acoes_ret")
187
- renda_fixa = safe_float(request.form.get("renda_fixa"), "renda_fixa")
188
- inflacao = safe_float(request.form.get("inflacao"), "inflacao")
189
-
190
- dados, investimentos_finais = calcular_projecoes(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
 
192
- df = pd.DataFrame(dados)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  df_formatado = df.copy()
194
  for col in df.columns:
195
  if col != "Ano":
196
  df_formatado[col] = df_formatado[col].apply(formatar_brl)
197
  tabela_html = df_formatado.to_html(index=False, classes="tabela", border=0)
198
 
199
- anos = dados["Ano"]
200
- studio_total = dados["Studio (Patrimônio + Renda)"]
201
-
202
- grafico_base64 = gerar_grafico(
203
- anos,
204
- studio_total,
205
- dados["Franquia"],
206
- dados["Ações"],
207
- dados["Renda Fixa"],
208
- )
209
-
210
-
211
- analise_final_ia = gerar_analise_ia(investimentos_finais, capital, patrimonio_studio[-1])
212
- analise_final_ia = analise_final_ia.replace("\n", "<br>")
213
 
 
214
  context = {
215
  "capital": capital,
216
  "grafico": grafico_base64,
@@ -219,16 +258,18 @@ def gerar_pdf():
219
  "data_hoje": datetime.now().strftime("São Paulo, %d de %B de %Y")
220
  }
221
 
 
222
  pdf = render_pdf("relatorio.html", context)
223
  if pdf:
224
  return send_file(pdf, mimetype="application/pdf", as_attachment=True, download_name="relatorio_investimento.pdf")
225
  else:
226
- logging.error("Erro ao gerar PDF: pisa.CreatePDF retornou erro")
227
  return "Erro ao gerar PDF", 500
228
 
229
- except Exception:
230
- logging.error("Erro na rota /gerar-pdf", exc_info=True)
231
- return "Erro interno no servidor ao gerar PDF. Verifique os logs.", 500
 
 
232
 
233
  if __name__ == "__main__":
234
  app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)), debug=True)
 
174
 
175
  return render_template("index.html")
176
 
177
+
178
+
179
+
180
+
181
+
182
  @app.route("/gerar-pdf", methods=["POST"])
183
  def gerar_pdf():
184
  try:
185
+ # --- Coleta e conversão dos dados do formulário
186
+ capital = float(request.form["capital"])
187
+ studio_ret = float(request.form["studio_ret"])
188
+ valorizacao = float(request.form["valorizacao"])
189
+ franquia_ret = float(request.form["franquia_ret"])
190
+ acoes_ret = float(request.form["acoes_ret"])
191
+ renda_fixa = float(request.form["renda_fixa"])
192
+ inflacao = float(request.form["inflacao"]) # Ainda não usado
193
+
194
+ anos = list(range(1, 6))
195
+
196
+ # --- Cálculo das projeções de investimento
197
+ patrimonio_studio = [capital * ((1 + valorizacao / 100) ** ano) for ano in anos]
198
+ renda_acumulada_studio = [capital * (((1 + studio_ret / 100) ** (12 * ano)) - 1) for ano in anos]
199
+ studio_total = [p + r for p, r in zip(patrimonio_studio, renda_acumulada_studio)]
200
+ patrimonio_final = patrimonio_studio[-1]
201
+
202
+ franquia = [capital + (franquia_ret * ano) for ano in anos]
203
+ acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
204
+ renda_fixa_valores = [capital * ((1 + renda_fixa / 100) ** ano) for ano in anos]
205
+
206
+ # --- Monta o DataFrame
207
+ df = pd.DataFrame({
208
+ "Ano": anos,
209
+ "Studio (Patrimônio + Renda)": studio_total,
210
+ "Franquia": franquia,
211
+ "Ações": acoes,
212
+ "Renda Fixa": renda_fixa_valores
213
+ })
214
+
215
+ # --- Dicionário final de investimentos
216
+ investimentos_finais = {
217
+ "Studio": studio_total[-1],
218
+ "Franquia": franquia[-1],
219
+ "Ações": acoes[-1],
220
+ "Renda Fixa": renda_fixa_valores[-1],
221
+ }
222
 
223
+ # --- Geração do gráfico
224
+ buf = io.BytesIO()
225
+ plt.figure(figsize=(8, 5))
226
+ plt.plot(anos, studio_total, label="Studio (Patrimônio + Renda)", marker="o")
227
+ plt.plot(anos, franquia, label="Franquia", marker="o")
228
+ plt.plot(anos, acoes, label="Ações", marker="o")
229
+ plt.plot(anos, renda_fixa_valores, label="Renda Fixa", marker="o")
230
+ plt.title("Projeção de Investimentos (5 anos)")
231
+ plt.xlabel("Ano")
232
+ plt.ylabel("Valor (R$)")
233
+ plt.legend()
234
+ plt.grid(True)
235
+ plt.tight_layout()
236
+ plt.savefig(buf, format="png")
237
+ buf.seek(0)
238
+ grafico_base64 = base64.b64encode(buf.read()).decode("utf-8")
239
+ buf.close()
240
+ plt.close()
241
+
242
+ # --- Formata a tabela
243
  df_formatado = df.copy()
244
  for col in df.columns:
245
  if col != "Ano":
246
  df_formatado[col] = df_formatado[col].apply(formatar_brl)
247
  tabela_html = df_formatado.to_html(index=False, classes="tabela", border=0)
248
 
249
+ # --- Geração da análise com IA
250
+ analise_final_ia = gerar_analise_ia(investimentos_finais, capital, patrimonio_final)
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
+ # --- Contexto para o PDF
253
  context = {
254
  "capital": capital,
255
  "grafico": grafico_base64,
 
258
  "data_hoje": datetime.now().strftime("São Paulo, %d de %B de %Y")
259
  }
260
 
261
+ # --- Renderiza e retorna o PDF
262
  pdf = render_pdf("relatorio.html", context)
263
  if pdf:
264
  return send_file(pdf, mimetype="application/pdf", as_attachment=True, download_name="relatorio_investimento.pdf")
265
  else:
 
266
  return "Erro ao gerar PDF", 500
267
 
268
+ except Exception as e:
269
+ app.logger.error("Erro na rota /gerar-pdf", exc_info=True)
270
+ return "Erro interno ao gerar o PDF", 500
271
+
272
+
273
 
274
  if __name__ == "__main__":
275
  app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)), debug=True)