|
from flask import Flask, render_template, request |
|
import matplotlib.pyplot as plt |
|
import io |
|
import base64 |
|
import csv |
|
from flask import send_file |
|
|
|
app = Flask(__name__) |
|
|
|
def calcular_retornos(capital, studio_valor_anual, studio_valoriza, franquia_valor_anual, acoes_retorno, renda_fixa_retorno): |
|
anos = [2025, 2026, 2027, 2028, 2029] |
|
resultados = { |
|
'studio': [], |
|
'franquia': [], |
|
'acoes': [], |
|
'renda_fixa': [] |
|
} |
|
|
|
valor_studio = capital |
|
valor_franquia = capital |
|
valor_acoes = capital |
|
valor_rf = capital |
|
|
|
for _ in anos: |
|
valor_studio += studio_valor_anual |
|
valor_studio *= (1 + studio_valoriza / 100) |
|
resultados['studio'].append(round(valor_studio, 2)) |
|
|
|
valor_franquia += franquia_valor_anual |
|
resultados['franquia'].append(round(valor_franquia, 2)) |
|
|
|
valor_acoes *= (1 + acoes_retorno / 100) |
|
resultados['acoes'].append(round(valor_acoes, 2)) |
|
|
|
valor_rf *= (1 + renda_fixa_retorno / 100) |
|
resultados['renda_fixa'].append(round(valor_rf, 2)) |
|
|
|
return anos, resultados |
|
|
|
@app.route('/', methods=['GET', 'POST']) |
|
def index(): |
|
grafico = None |
|
resultados = {} |
|
anos = [] |
|
params = { |
|
'capital': 400000, |
|
'studio_valor_anual': 49440, |
|
'studio_valoriza': 6, |
|
'franquia_valor_anual': 20000, |
|
'acoes_retorno': 10, |
|
'renda_fixa_retorno': 9, |
|
} |
|
if request.method == 'POST': |
|
params['capital'] = float(request.form.get('capital', params['capital'])) |
|
params['studio_valor_anual'] = float(request.form.get('studio_valor_anual', params['studio_valor_anual'])) |
|
params['studio_valoriza'] = float(request.form.get('studio_valoriza', params['studio_valoriza'])) |
|
params['franquia_valor_anual'] = float(request.form.get('franquia_valor_anual', params['franquia_valor_anual'])) |
|
params['acoes_retorno'] = float(request.form.get('acoes_retorno', params['acoes_retorno'])) |
|
params['renda_fixa_retorno'] = float(request.form.get('renda_fixa_retorno', params['renda_fixa_retorno'])) |
|
|
|
anos, resultados = calcular_retornos( |
|
params['capital'], |
|
params['studio_valor_anual'], |
|
params['studio_valoriza'], |
|
params['franquia_valor_anual'], |
|
params['acoes_retorno'], |
|
params['renda_fixa_retorno'] |
|
) |
|
|
|
plt.figure(figsize=(8, 5)) |
|
for tipo, valores in resultados.items(): |
|
plt.plot(anos, valores, marker='o', label=tipo.title()) |
|
|
|
plt.title("Comparativo de Investimentos (2025-2029)", fontsize=14) |
|
plt.xlabel("Ano") |
|
plt.ylabel("Valor acumulado (R$)") |
|
plt.grid(True, linestyle='--', alpha=0.7) |
|
plt.legend() |
|
|
|
buf = io.BytesIO() |
|
plt.savefig(buf, format='png') |
|
buf.seek(0) |
|
grafico = base64.b64encode(buf.getvalue()).decode('utf8') |
|
plt.close() |
|
|
|
return render_template('index.html', grafico=grafico, resultados=resultados, anos=anos, params=params) |
|
|
|
def gerar_csv(resultados, anos): |
|
buf = io.StringIO() |
|
writer = csv.writer(buf) |
|
header = ["Ano"] + list(resultados.keys()) |
|
writer.writerow(header) |
|
for i in range(len(anos)): |
|
row = [anos[i]] + [resultados[tipo][i] for tipo in resultados] |
|
writer.writerow(row) |
|
buf.seek(0) |
|
return io.BytesIO(buf.read().encode('utf-8')) |
|
|
|
@app.route('/download_csv', methods=['POST']) |
|
def download_csv(): |
|
params = { |
|
'capital': float(request.form.get('capital', 400000)), |
|
'studio_valor_anual': float(request.form.get('studio_valor_anual', 49440)), |
|
'studio_valoriza': float(request.form.get('studio_valoriza', 6)), |
|
'franquia_valor_anual': float(request.form.get('franquia_valor_anual', 20000)), |
|
'acoes_retorno': float(request.form.get('acoes_retorno', 10)), |
|
'renda_fixa_retorno': float(request.form.get('renda_fixa_retorno', 9)), |
|
} |
|
|
|
anos, resultados = calcular_retornos( |
|
params['capital'], |
|
params['studio_valor_anual'], |
|
params['studio_valoriza'], |
|
params['franquia_valor_anual'], |
|
params['acoes_retorno'], |
|
params['renda_fixa_retorno'] |
|
) |
|
|
|
csv_file = gerar_csv(resultados, anos) |
|
return send_file(csv_file, mimetype='text/csv', as_attachment=True, download_name='simulacao_investimentos.csv') |
|
|
|
if __name__ == '__main__': |
|
app.run(debug=True) |
|
|