flowise1 / app.py
Persano's picture
Update app.py
c5a9b0c verified
raw
history blame
4.28 kB
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,