- 👋 Hi, I’m @lesyan1995
- 👀 I’m interested in ...
- 🌱 I’m currently learning ...
- 💞️ I’m looking to collaborate on ...
- 📫 How to reach me ...
- 😄 Pronouns: ...
- ⚡ Fun fact: ...
import streamlit as st import pandas as pd import numpy as np from io import BytesIO import matplotlib.pyplot as plt from fpdf import FPDF
Función para cargar estados financieros
def cargar_datos(): archivo = st.file_uploader("Sube un archivo de estados financieros (CSV o Excel)", type=["csv", "xlsx"]) if archivo is not None: try: df = pd.read_csv(archivo) if archivo.name.endswith(".csv") else pd.read_excel(archivo) st.session_state["datos"] = df st.success("Archivo cargado con éxito!") except Exception as e: st.error(f"Error al cargar archivo: {e}")
Función para calcular ratios financieros
def calcular_ratios(df): try: df["Liquidez"] = df["Activo Corriente"] / df["Pasivo Corriente"] df["Endeudamiento"] = df["Pasivo Total"] / df["Activo Total"] df["Rentabilidad"] = df["Utilidad Neta"] / df["Activo Total"] df["ROE"] = df["Utilidad Neta"] / df["Patrimonio"] df["ROA"] = df["Utilidad Neta"] / df["Activo Total"] return df except Exception as e: st.error(f"Error en el cálculo de ratios: {e}") return df
Función para evaluar eficiencia, eficacia y economía
def evaluar_eficiencia_economia_eficacia(df): try: df["Eficiencia"] = np.where(df["Gastos Administrativos"] / df["Ingresos Totales"] < 0.2, "Alta", "Baja") df["Eficacia"] = np.where(df["Cumplimiento Objetivos"] >= 80, "Alta", "Baja") df["Economía"] = np.where(df["Costo de Insumos"] / df["Producción"] < 1.5, "Buena", "Deficiente") return df except Exception as e: st.error(f"Error en la evaluación de eficiencia, eficacia y economía: {e}") return df
Función para evaluar riesgos
def evaluar_riesgos(df): try: df["Riesgo Financiero"] = np.where(df["Endeudamiento"] > 0.6, "Alto", "Bajo") df["Riesgo de Liquidez"] = np.where(df["Liquidez"] < 1, "Alto", "Bajo") df["Riesgo de Rentabilidad"] = np.where(df["ROE"] < 0.1, "Alto", "Bajo") return df except Exception as e: st.error(f"Error en la evaluación de riesgos: {e}") return df
Función para generar gráficos
def generar_graficos(df): fig, ax = plt.subplots(1, 4, figsize=(20, 5)) df[["Liquidez", "Endeudamiento", "Rentabilidad", "ROE", "ROA"]].plot(kind='bar', ax=ax[0]) df["Riesgo Financiero"].value_counts().plot(kind='pie', autopct='%1.1f%%', ax=ax[1], title="Riesgo Financiero") df["Eficiencia"].value_counts().plot(kind='pie', autopct='%1.1f%%', ax=ax[2], title="Eficiencia") df["Eficacia"].value_counts().plot(kind='pie', autopct='%1.1f%%', ax=ax[3], title="Eficacia") st.pyplot(fig)
Función para generar informe en PDF
def generar_informe_pdf(df): pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.cell(200, 10, txt="Informe de Auditoría Financiera", ln=True, align='C') pdf.ln(10) for col in df.columns: pdf.cell(40, 10, col, 1) pdf.ln() for i in range(len(df)): for col in df.columns: pdf.cell(40, 10, str(df.iloc[i][col]), 1) pdf.ln() pdf_output = BytesIO() pdf.output(pdf_output) return pdf_output
Interfaz de usuario
st.title("Prototipo de Auditoría Virtual") cargar_datos()
if "datos" in st.session_state: df = st.session_state["datos"] st.subheader("Vista previa de los datos cargados") st.write(df.head())
if st.button("Calcular Ratios Financieros y Evaluaciones"):
df = calcular_ratios(df)
df = evaluar_riesgos(df)
df = evaluar_eficiencia_economia_eficacia(df)
st.session_state["resultados"] = df
if "resultados" in st.session_state:
st.subheader("Ratios Financieros, Evaluaciones y Riesgos")
st.write(st.session_state["resultados"])
generar_graficos(st.session_state["resultados"])
pdf_output = generar_informe_pdf(st.session_state["resultados"])
st.download_button(
label="Descargar Informe en PDF",
data=pdf_output.getvalue(),
file_name="Informe_Auditoria.pdf",
mime="application/pdf"
)