lesyan1995 - Overview

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