import os os.environ['MPLCONFIGDIR'] = '/tmp/matplotlib-config' from flask import Flask, render_template, request import matplotlib.pyplot as plt import io import base64 import pandas as pd app = Flask(__name__) def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao): # Simulação de 10 anos anos = list(range(11)) studio_valor = [] franquia_valor = [] acoes_valor = [] renda_fixa_valor = [] cap_studio = capital cap_franquia = capital cap_acoes = capital cap_rf = capital for ano in anos: # Studio (rendimento mensal *12 + valorização anual) rent_studio = cap_studio * (studio_ret/100) * 12 val_studio = cap_studio * (valorizacao/100) cap_studio += rent_studio + val_studio # Franquia (lucro fixo anual) cap_franquia += franquia_ret # Ações (rendimento anual percentual) cap_acoes += cap_acoes * (acoes_ret/100) # Renda fixa (rendimento anual percentual) cap_rf += cap_rf * (renda_fixa/100) # Ajuste pela inflação cap_studio /= (1 + inflacao/100) cap_franquia /= (1 + inflacao/100) cap_acoes /= (1 + inflacao/100) cap_rf /= (1 + inflacao/100) # Armazena valores ajustados studio_valor.append(cap_studio) franquia_valor.append(cap_franquia) acoes_valor.append(cap_acoes) renda_fixa_valor.append(cap_rf) # Monta DataFrame para excel e gráfico df = pd.DataFrame({ 'Ano': anos, 'Studio (R$)': [round(v,2) for v in studio_valor], 'Franquia (R$)': [round(v,2) for v in franquia_valor], 'Ações (R$)': [round(v,2) for v in acoes_valor], 'Renda Fixa (R$)': [round(v,2) for v in renda_fixa_valor], }) return df def criar_grafico(df): plt.style.use('seaborn-darkgrid') fig, ax = plt.subplots(figsize=(10,6)) ax.plot(df['Ano'], df['Studio (R$)'], label='Studio') ax.plot(df['Ano'], df['Franquia (R$)'], label='Franquia') ax.plot(df['Ano'], df['Ações (R$)'], label='Ações') ax.plot(df['Ano'], df['Renda Fixa (R$)'], label='Renda Fixa') ax.set_title('Simulação de Investimentos - Valor Ajustado pela Inflação') ax.set_xlabel('Ano') ax.set_ylabel('Valor acumulado (R$)') ax.legend() plt.tight_layout() buf = io.BytesIO() plt.savefig(buf, format='png') plt.close(fig) buf.seek(0) img_png = base64.b64encode(buf.getvalue()).decode('utf-8') return img_png @app.route('/', methods=['GET', 'POST']) def index(): grafico = None df = None 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']) df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao) grafico = criar_grafico(df) return render_template('index.html', grafico=grafico, capital=request.form.get('capital', ''), studio_ret=request.form.get('studio_ret', ''), valorizacao=request.form.get('valorizacao', ''), franquia_ret=request.form.get('franquia_ret', ''), acoes_ret=request.form.get('acoes_ret', ''), renda_fixa=request.form.get('renda_fixa', ''), inflacao=request.form.get('inflacao', '')) @app.route('/download_excel', methods=['POST']) def download_excel(): from flask import send_file 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']) df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret,