Update app.py
Browse files
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"
|
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 |
-
#
|
59 |
-
pisa_status = pisa.CreatePDF(
|
60 |
-
if
|
61 |
-
|
62 |
-
return
|
63 |
-
|
|
|
64 |
|
65 |
@app.route("/", methods=["GET", "POST"])
|
66 |
def index():
|
67 |
if request.method == "POST":
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
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="
|
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 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
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
|
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 |
|