import streamlit as st import numpy as np import pandas as pd import matplotlib.pyplot as plt # Función para calcular el valor presente def calcular_vp(flujos_de_efectivo, tasa): vp = sum(cf / (1 + tasa) ** i for i, cf in enumerate(flujos_de_efectivo)) return vp # Diseño de la aplicación en Streamlit st.title('Calculadora de Valor Presente de Flujos de Efectivo') # Entrada para la tasa de descuento tasa = st.number_input('Tasa de Descuento (%)', min_value=0.0, max_value=100.0, value=15.0, step=0.1)/100 # Entrada para el número de años n = st.number_input("¿Cuántos años?", min_value=0, step=1) # Entrada para los flujos de efectivo flujos_efectivo_lista = [0] * (n+1) flujos_efectivo_dict = pd.DataFrame({"flujos_efectivo": flujos_efectivo_lista}).astype(int) flujos_efectivo_df = st.dataframe(flujos_efectivo_dict.T) flujos_de_efectivo = np.array(flujos_efectivo_df.values[0]) # Botón para calcular el VP if st.button('Calcular Valor Presente'): vp = calcular_vp(flujos_de_efectivo, tasa) st.write(f'El Valor Presente es: ${vp:,.2f}') # Preparar datos para el gráfico colores = ['green' if cf > 0 else 'red' for cf in flujos_de_efectivo] plt.scatter(range(n+1), flujos_de_efectivo, c=colores) plt.title('Diagrama de Flujos de Efectivo') plt.xlabel('Periodo') plt.ylabel('Flujo de Efectivo') for i, cf in enumerate(flujos_de_efectivo): plt.annotate(f'{cf:,.2f}', (i, cf), textcoords="offset points", xytext=(0,n), ha='center') st.pyplot(plt)