flowise1 / app.py
Persano's picture
Update app.py
0586bcf verified
raw
history blame
4.48 kB
from flask import Flask, render_template, request, send_file
import io
import base64
import matplotlib.pyplot as plt
import pandas as pd
app = Flask(__name__)
def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao):
# Cria DataFrame com dados simulados para 10 anos
anos = list(range(1, 11))
dados = {
'Ano': anos,
'Studio_Rentabilidade_Bruta': [],
'Studio_Valorizacao': [],
'Franquia_Lucro_Anual': [],
'Acoes_Retorno': [],
'Renda_Fixa_Retorno': [],
}
capital_studio = capital
capital_acoes = capital
capital_rf = capital
for ano in anos:
# Studio: rentabilidade mensal bruta acumulada no ano + valorização
rent_mes = studio_ret / 100
rent_anual = ((1 + rent_mes) ** 12 - 1) * capital_studio
val_ano = (valorizacao / 100) * capital_studio
dados['Studio_Rentabilidade_Bruta'].append(rent_anual)
dados['Studio_Valorizacao'].append(val_ano)
# Franquia: valor fixo anual informado (pode ser ajustado depois)
dados['Franquia_Lucro_Anual'].append(franquia_ret)
# Ações e RF: acumulam juros compostos
capital_acoes = capital_acoes * (1 + (acoes_ret / 100))
capital_rf = capital_rf * (1 + (renda_fixa / 100))
dados['Acoes_Retorno'].append(capital_acoes - capital)
dados['Renda_Fixa_Retorno'].append(capital_rf - capital)
df = pd.DataFrame(dados)
return df
def gerar_grafico(df):
plt.figure(figsize=(10,6))
plt.plot(df['Ano'], df['Studio_Rentabilidade_Bruta'], label='Studio - Renda Bruta')
plt.plot(df['Ano'], df['Studio_Valorizacao'], label='Studio - Valorização')
plt.plot(df['Ano'], df['Franquia_Lucro_Anual'], label='Franquia - Lucro Anual')
plt.plot(df['Ano'], df['Acoes_Retorno'], label='Ações - Retorno Acumulado')
plt.plot(df['Ano'], df['Renda_Fixa_Retorno'], label='Renda Fixa - Retorno Acumulado')
plt.xlabel('Ano')
plt.ylabel('Retorno (R$)')
plt.title('Simulação de Retorno de Investimentos')
plt.legend()
plt.grid(True)
buf = io.BytesIO()
plt.savefig(buf, format='png', bbox_inches='tight')
plt.close()
buf.seek(0)
img_base64 = base64.b64encode(buf.read()).decode('utf-8')
return img_base64
@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'])
df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
grafico = gerar_grafico(df)
return render_template(
'index.html',
grafico=grafico,
capital=capital,
studio_ret=studio_ret,
valorizacao=valorizacao,
franquia_ret=franquia_ret,
acoes_ret=acoes_ret,
renda_fixa=renda_fixa,
inflacao=inflacao
)
else:
return render_template('index.html')
@app.route('/download_excel', methods=['POST'])
def download_excel():
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
)
output = io.BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df.to_excel(writer, index=False, sheet_name='Simulação')
writer.save()
output.seek(0)
return send_file(
output,
download_name="simulacao_investimentos.xlsx",
as_attachment=True,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)