# -*- coding: utf-8 -*- # App: Información general de la tecnología (versión inicial, sin descargas) # Requisitos: pip install gradio pandas import gradio as gr import pandas as pd from datetime import datetime # --- Listas de opciones ------------------------------------------------------- FACULTADES = [ "Facultad de Ciencias Agropecuarias", "Facultad de Ciencias", "Facultad de Ciencias de la Educación", "Facultad de Ciencias Económicas y Administrativas", "Facultad de Ciencias de la Salud", "Facultad de Derecho", "Facultad de Ingeniería", "Facultad de Estudios a Distancia", "Facultad Chiquinquirá", "Facultad Duitama", "Facultad Sogamoso", ] NIVELES_FORMACION = [ "Estudiante de pregrado", "Profesional", "Especialización", "Maestria", "Doctorado", ] TIPOS_VINCULACION = [ "Estudiante de pregrado", "Estudiante de posgrado", "Joven investigador", "Docente catedratico", "Docente ocasional medio tiempo", "Docente ocasional tiempo completo", "Docente de planta", "Contrato de Prestación de Servicios", "Externo (aliado)", ] TIPOS_DOCUMENTO = ["CC", "TI", "CE"] # --- Defaults sugeridos por Facultad (de tu tabla) ---------------------------- DEFAULTS = { "Facultad de Ciencias Agropecuarias": { "nivel": "Estudiante de pregrado", "vinc": "Estudiante de pregrado", }, "Facultad de Ciencias": { "nivel": "Profesional", "vinc": "Estudiante de posgrado", }, "Facultad de Ciencias de la Educación": { "nivel": "Especialización", "vinc": "Joven investigador", }, "Facultad de Ciencias Económicas y Administrativas": { "nivel": "Maestria", "vinc": "Docente catedratico", }, "Facultad de Ciencias de la Salud": { "nivel": "Doctorado", "vinc": "Docente ocasional medio tiempo", }, "Facultad de Derecho": { "nivel": None, "vinc": "Docente ocasional tiempo completo", }, "Facultad de Ingeniería": { "nivel": None, "vinc": "Docente de planta", }, "Facultad de Estudios a Distancia": { "nivel": None, "vinc": "Contrato de Prestación de Servicios", }, # Estas tres filas también fijan Tipo de documento: "Facultad Chiquinquirá": { "nivel": None, # en tu tabla aparece "TI" aquí, pero eso es tipo de documento; se fija abajo "vinc": "Externo (aliado)", "tdoc": "TI", }, "Facultad Duitama": { "nivel": None, "vinc": None, "tdoc": "CC", }, "Facultad Sogamoso": { "nivel": None, "vinc": None, "tdoc": "CE", }, } def aplicar_defaults_facultad(facultad): """Devuelve updates para nivel, vinculación y tipo de documento al cambiar la facultad.""" cfg = DEFAULTS.get(facultad, {}) upd_nivel = gr.update() # sin cambio por defecto upd_vinc = gr.update() upd_tdoc = gr.update() if cfg.get("nivel") in NIVELES_FORMACION: upd_nivel = gr.update(value=cfg["nivel"]) if cfg.get("vinc") in TIPOS_VINCULACION: upd_vinc = gr.update(value=cfg["vinc"]) if cfg.get("tdoc") in TIPOS_DOCUMENTO: upd_tdoc = gr.update(value=cfg["tdoc"]) return upd_nivel, upd_vinc, upd_tdoc def generar_ficha( codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono ): """Devuelve una vista previa tipo tabla (sin archivos).""" fila = { "Código": codigo, "Fecha de ingreso": fecha, "Facultad": facultad, "Grupo de investigación": grupo, "Nombre de la tecnología": nombre, "Primer nombre": pn, "Segundo nombre": sn, "Primer apellido": pa, "Segundo apellido": sa, "Tipo de documento": tdoc, "Número de documento": ndoc, "Profesión": profesion, "Nivel de formación": nivel, "Tipo de vinculación": vinculacion, "Correo electrónico": correo, "Dirección": direccion, "Número de teléfono": telefono, "Generado": datetime.now().strftime("%Y-%m-%d %H:%M"), } df = pd.DataFrame([fila]) resumen = ( f"**{nombre or 'Tecnología'}** — {facultad or 'Sin facultad'}\n\n" f"Inventor/a: {pn} {sn} {pa} {sa}\n" f"Documento: {tdoc or ''} {ndoc or ''} | Nivel: {nivel or '-'} | Vinculación: {vinculacion or '-'}" ) return df, resumen with gr.Blocks(title="Información general de la tecnología") as demo: gr.Markdown("# Información general de la tecnología (versión inicial)") gr.Markdown( "Capture la ficha base. Los campos **Facultad**, **Nivel de formación** y **Tipo de vinculación** " "tienen listas de opciones; al cambiar *Facultad* se sugieren valores por defecto según su tabla." ) with gr.Row(): codigo = gr.Textbox(label="Código", value="P2024/") fecha = gr.Textbox(label="Fecha de ingreso", placeholder="YYYY-MM-DD") with gr.Row(): facultad = gr.Dropdown(choices=FACULTADES, label="Facultad") grupo = gr.Textbox(label="Grupo de investigación") nombre = gr.Textbox(label="Nombre de la tecnología") gr.Markdown("## Inventores (principal)") with gr.Row(): pn = gr.Textbox(label="Primer nombre") sn = gr.Textbox(label="Segundo nombre") with gr.Row(): pa = gr.Textbox(label="Primer apellido") sa = gr.Textbox(label="Segundo apellido") gr.Markdown("## Datos de contacto") with gr.Row(): tdoc = gr.Dropdown(choices=TIPOS_DOCUMENTO, label="Tipo de documento") ndoc = gr.Textbox(label="Número de documento") profesion = gr.Textbox(label="Profesión") with gr.Row(): nivel = gr.Dropdown(choices=NIVELES_FORMACION, label="Nivel de formación") vinculacion = gr.Dropdown(choices=TIPOS_VINCULACION, label="Tipo de vinculación") with gr.Row(): correo = gr.Textbox(label="Correo electrónico") direccion = gr.Textbox(label="Dirección") telefono = gr.Textbox(label="Número de teléfono") # Sugerir defaults al cambiar la Facultad facultad.change(aplicar_defaults_facultad, inputs=[facultad], outputs=[nivel, vinculacion, tdoc]) with gr.Row(): btn_generar = gr.Button("Generar ficha (vista previa)") btn_limpiar = gr.Button("Limpiar") tabla = gr.Dataframe(label="Vista previa", wrap=True) resumen_md = gr.Markdown() btn_generar.click( generar_ficha, inputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], outputs=[tabla, resumen_md], ) def _limpiar(): return ( "P2024/", "", None, "", "", "", "", "", "", None, "", "", None, None, "", "", "" ) btn_limpiar.click( _limpiar, inputs=None, outputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], ) if __name__ == "__main__": demo.launch()