File size: 4,476 Bytes
0586bcf c009ac1 0586bcf c5a9b0c c009ac1 c5a9b0c 0586bcf c5a9b0c 0586bcf c5a9b0c 0586bcf c5a9b0c 0586bcf c5a9b0c 0586bcf c5a9b0c c009ac1 c5a9b0c 0586bcf c5a9b0c 0586bcf c5a9b0c 0586bcf e8c591c a4c7e98 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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)
|