File size: 4,412 Bytes
c009ac1 |
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 |
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)
|