File size: 3,743 Bytes
e8c591c
c009ac1
 
 
 
 
 
e8c591c
c009ac1
e8c591c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c009ac1
e8c591c
c009ac1
e8c591c
c009ac1
e8c591c
 
 
 
 
 
 
 
 
 
a4c7e98
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
from flask import Flask, request, jsonify
import matplotlib.pyplot as plt
import io
import base64

app = Flask(__name__)

@app.route('/')
def index():
    return "Backend para o simulador está rodando."

@app.route('/simular', methods=['POST'])
def simular():
    try:
        # Recebe os dados do formulário
        capital = float(request.form.get('capital', 0))
        studio_ret = float(request.form.get('studio_ret', 0)) / 100
        valorizacao = float(request.form.get('valorizacao', 0)) / 100
        franquia_ret = float(request.form.get('franquia_ret', 0))
        acoes_ret = float(request.form.get('acoes_ret', 0)) / 100
        renda_fixa = float(request.form.get('renda_fixa', 0)) / 100
        inflacao = float(request.form.get('inflacao', 0)) / 100

        anos = 10

        # Simulação simples: calcular valor acumulado após 10 anos para cada investimento

        # Studio: retorno mensal aplicado com juros compostos
        studio_acumulado = capital * ((1 + studio_ret) ** (12 * anos))

        # Imóvel: valorização anual composta + franquia lucro fixo anual
        valor_imovel = capital * ((1 + valorizacao) ** anos)
        lucro_franquia_total = franquia_ret * anos
        imovel_acumulado = valor_imovel + lucro_franquia_total

        # Ações: retorno anual composto
        acoes_acumulado = capital * ((1 + acoes_ret) ** anos)

        # Renda fixa: retorno anual composto
        renda_fixa_acumulado = capital * ((1 + renda_fixa) ** anos)

        # Inflação acumulada
        inflacao_acumulada = (1 + inflacao) ** anos

        # Ajustando valores pela inflação (poder de compra atual)
        studio_real = studio_acumulado / inflacao_acumulada
        imovel_real = imovel_acumulado / inflacao_acumulada
        acoes_real = acoes_acumulado / inflacao_acumulada
        renda_fixa_real = renda_fixa_acumulado / inflacao_acumulada

        # Texto explicativo
        texto = f"""
        Simulação para {anos} anos com capital inicial de R$ {capital:,.2f}:

        - Studio (retorno mensal de {studio_ret*100:.2f}%): R$ {studio_real:,.2f} (valor corrigido pela inflação)
        - Imóvel (valorização anual de {valorizacao*100:.2f}% + lucro franquia anual R$ {franquia_ret:,.2f}): R$ {imovel_real:,.2f}
        - Ações (retorno anual de {acoes_ret*100:.2f}%): R$ {acoes_real:,.2f}
        - Renda Fixa (retorno anual de {renda_fixa*100:.2f}%): R$ {renda_fixa_real:,.2f}

        Nota: Todos os valores estão ajustados pela inflação média anual de {inflacao*100:.2f}%.
        """

        # Gerar gráfico comparativo
        labels = ['Studio', 'Imóvel', 'Ações', 'Renda Fixa']
        valores = [studio_real, imovel_real, acoes_real, renda_fixa_real]

        fig, ax = plt.subplots(figsize=(8,5))
        bars = ax.bar(labels, valores, color=['#00c9a7', '#007cf0', '#ffa500', '#dd1144'])
        ax.set_title(f'Valor acumulado corrigido pela inflação em {anos} anos', fontsize=14, pad=15)
        ax.set_ylabel('Valor (R$)')
        ax.grid(axis='y', linestyle='--', alpha=0.6)

        # Mostrar valores em cima das barras
        for bar in bars:
            yval = bar.get_height()
            ax.text(bar.get_x() + bar.get_width()/2, yval + max(valores)*0.02, f'R$ {yval:,.0f}', ha='center', fontsize=11)

        # Salvar gráfico em PNG na memória
        buf = io.BytesIO()
        plt.tight_layout()
        plt.savefig(buf, format='png')
        plt.close(fig)
        buf.seek(0)
        img_base64 = base64.b64encode(buf.read()).decode('utf-8')

        return jsonify({'texto': texto.strip(), 'graficoBase64': img_base64})

    except Exception as e:
        return jsonify({'error': str(e)}), 400

if __name__ == "__main__":
    app.run(debug=True)