|
import streamlit as st |
|
import numpy as np |
|
import pandas as pd |
|
import matplotlib.pyplot as plt |
|
|
|
|
|
def calculate_pv(cashflows, rate): |
|
pv = sum(cf / (1 + rate) ** i for i, cf in enumerate(cashflows)) |
|
return pv |
|
|
|
|
|
st.title('Cashflow Calculadora de valor presente') |
|
|
|
|
|
rate = st.number_input('Tasa de descuento (%)', min_value=0.0, max_value=100.0, value=15.0, step=0.1)/100 |
|
|
|
|
|
n = st.number_input("Cuántos años", min_value = 0, step=1) |
|
|
|
|
|
cf_list = [0] * (n+1) |
|
cf_dict = pd.DataFrame({"cashflows": cf_list}).astype(int) |
|
cf_df = st.data_editor(cf_dict.T) |
|
|
|
cashflows = np.array(cf_df.values[0]) |
|
|
|
|
|
if st.button('Calcula el valor presente'): |
|
pv = calculate_pv(cashflows, rate) |
|
st.write(f'El valor presnte es: ${pv:,.2f}') |
|
|
|
|
|
colors = ['green' if cf > 0 else 'red' for cf in cashflows] |
|
plt.scatter(range(n+1), cashflows, c=colors) |
|
plt.title('Cashflow Diagrama') |
|
plt.xlabel('Periodo') |
|
plt.ylabel('Cashflow') |
|
for i, cf in enumerate(cashflows): |
|
plt.annotate(f'{cf:,.2f}', (i, cf), textcoords="offset points", xytext=(0,n), ha='center') |
|
st.pyplot(plt) |
|
|
|
|