- 👋 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
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}")
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
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
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
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)
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
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"
)