|
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): |
|
|
|
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: |
|
|
|
rent_studio = cap_studio * (studio_ret/100) * 12 |
|
val_studio = cap_studio * (valorizacao/100) |
|
cap_studio += rent_studio + val_studio |
|
|
|
|
|
cap_franquia += franquia_ret |
|
|
|
|
|
cap_acoes += cap_acoes * (acoes_ret/100) |
|
|
|
|
|
cap_rf += cap_rf * (renda_fixa/100) |
|
|
|
|
|
cap_studio /= (1 + inflacao/100) |
|
cap_franquia /= (1 + inflacao/100) |
|
cap_acoes /= (1 + inflacao/100) |
|
cap_rf /= (1 + inflacao/100) |
|
|
|
|
|
studio_valor.append(cap_studio) |
|
franquia_valor.append(cap_franquia) |
|
acoes_valor.append(cap_acoes) |
|
renda_fixa_valor.append(cap_rf) |
|
|
|
|
|
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, |
|
|
|
|
|
|
|
|