|
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): |
|
|
|
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: |
|
|
|
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) |
|
|
|
|
|
dados['Franquia_Lucro_Anual'].append(franquia_ret) |
|
|
|
|
|
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) |
|
|
|
|
|
|