File size: 4,446 Bytes
d0afd87
 
 
6b3a3d4
838468c
6265dca
838468c
6b3a3d4
 
 
838468c
231e3b8
 
cebf85b
6b3a3d4
cebf85b
838468c
 
 
7080960
 
6b3a3d4
231e3b8
6b3a3d4
 
 
 
 
 
231e3b8
6b3a3d4
 
7080960
6b3a3d4
 
 
 
 
 
 
 
 
231e3b8
cebf85b
 
 
838468c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fcf889c
838468c
 
 
 
 
 
 
 
 
6b3a3d4
 
 
 
 
 
 
 
838468c
 
 
 
 
 
fcf889c
cebf85b
 
 
 
838468c
 
fcf889c
cebf85b
838468c
fcf889c
cebf85b
6265dca
6b3a3d4
cebf85b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import os
os.environ['FONTCONFIG_PATH'] = '/tmp/fontconfig'
os.makedirs('/tmp/fontconfig', exist_ok=True)

import os
import io
import base64
import pandas as pd
import matplotlib.pyplot as plt
from flask import Flask, render_template, request
from matplotlib.ticker import FuncFormatter
import openai

app = Flask(__name__)
openai.api_key = os.getenv("OPENAI_API_KEY")

def formatar_brl(valor):
    return f"R$ {valor:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")

def gerar_analise_ia(investimentos_finais, capital, patrimonio_studio_final):
    prompt = f"""
    Faça uma análise profissional e detalhada em linguagem clara e acessível sobre os seguintes dados financeiros:

    - Capital inicial: R$ {capital:,.2f}
    - Valor patrimonial final do Studio: R$ {patrimonio_studio_final:,.2f}
    - Investimentos finais após 5 anos:
    """
    for nome, valor in investimentos_finais.items():
        prompt += f"    - {nome}: R$ {valor:,.2f}\n"

    prompt += """
    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.
    """

    resposta = openai.ChatCompletion.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": "Você é um analista financeiro experiente."},
            {"role": "user", "content": prompt}
        ]
    )
    return resposta.choices[0].message.content

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        capital = float(request.form["capital"])
        studio_ret = float(request.form["studio_ret"])
        valorizacao = float(request.form["valorizacao"])
        franquia_ret = float(request.form["franquia_ret"])
        acoes_ret = float(request.form["acoes_ret"])
        renda_fixa = float(request.form["renda_fixa"])
        inflacao = float(request.form["inflacao"])

        anos = list(range(1, 6))

        patrimonio_studio = [capital * ((1 + valorizacao / 100) ** ano) for ano in anos]
        renda_acumulada_studio = [capital * (((1 + studio_ret / 100) ** (12 * ano)) - 1) for ano in anos]
        studio_total = [p + r for p, r in zip(patrimonio_studio, renda_acumulada_studio)]

        franquia = [capital + (franquia_ret * ano) for ano in anos]
        acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
        renda_fixa_valores = [capital * ((1 + renda_fixa / 100) ** ano) for ano in anos]

        investimentos_finais = {
            "Studio": studio_total[-1],
            "Franquia": franquia[-1],
            "Ações": acoes[-1],
            "Renda Fixa": renda_fixa_valores[-1],
        }

        plt.figure(figsize=(8, 5))
        plt.plot(anos, studio_total, label="Studio (Patrimônio + Renda)", marker="o")
        plt.plot(anos, franquia, label="Franquia", marker="o")
        plt.plot(anos, acoes, label="Ações", marker="o")
        plt.plot(anos, renda_fixa_valores, label="Renda Fixa", marker="o")
        plt.title("Projeção de Investimentos (5 anos)")
        plt.xlabel("Ano")
        plt.ylabel("Valor (R$)")
        plt.legend()
        plt.grid(True)
        plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x, _: f"R${x:,.0f}".replace(",", ".")))
        plt.tight_layout()

        buf = io.BytesIO()
        plt.savefig(buf, format="png")
        buf.seek(0)
        grafico_base64 = base64.b64encode(buf.getvalue()).decode("utf-8")
        buf.close()
        plt.close()

        df = pd.DataFrame({
            "Ano": anos,
            "Studio (Patrimônio + Renda)": studio_total,
            "Franquia": franquia,
            "Ações": acoes,
            "Renda Fixa": renda_fixa_valores
        })

        df_formatado = df.copy()
        for col in df.columns:
            if col != "Ano":
                df_formatado[col] = df_formatado[col].apply(formatar_brl)
        tabela = df_formatado.to_html(index=False, classes="table table-striped table-sm", border=0)

        analise_final = gerar_analise_ia(investimentos_finais, capital, patrimonio_studio[-1])

        return render_template(
            "index.html",
            capital=capital,
            tabela=tabela,
            grafico=grafico_base64,
            analise_final=analise_final
        )

    return render_template("index.html")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)))