# -*- coding: utf-8 -*- """Untitled19.ipynb Automatically generated by Colab. Original file is located at https://colab.research.google.com/drive/12FC8IfauEBNv8yXDkOWez5aZ0F6sD5q1 """ import gradio as gr import csv import re from datetime import datetime from hashlib import sha256 import os from PIL import Image import requests from io import BytesIO # Configuración CSV_FILE = "registros_incidencias.csv" PASSWORD_HASH = "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" # Hash de "admin" PRESTACIONES = [ "1. PROFESIONALIZACIÓN", "2. ESTIMULOS DE PRODUCTIVIDAD", "3. UNIFORMES", "4. DESCUENTOS INJUSTIFICADOS", "5. SEGURO DE VIDA", "6. AHORRO SOLIDARIO", "7. OTROS" ] REGEX_CURP = re.compile(r'^[A-Z]{4}[0-9]{6}[HM][A-Z]{5}[A-Z0-9]{2}$') def validar_curp(curp): return bool(REGEX_CURP.match(curp.upper())) def inicializar_csv(): if not os.path.exists(CSV_FILE): with open(CSV_FILE, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow([ "Fecha_Registro", "Entidad", "Nombre", "CURP", "Prestacion", "Quincena" ]) def guardar_registro(entidad, nombre, curp, prestacion, quincena): if not all([entidad, nombre, curp, prestacion, quincena]): return "⚠️ Todos los campos son obligatorios" if not validar_curp(curp): return "⚠️ CURP inválido" try: with open(CSV_FILE, 'a', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow([ datetime.now().strftime("%Y-%m-%d %H:%M:%S"), entidad.strip().upper(), nombre.strip().title(), curp.upper(), prestacion, quincena ]) return "✅ Registro exitoso" except Exception as e: return f"❌ Error: {str(e)}" def verificar_credenciales(username, password): return username == "admin" and sha256(password.encode()).hexdigest() == PASSWORD_HASH # Interfaz principal with gr.Blocks(title="Sistema de Captura") as app: # Estado de la aplicación logged_in = gr.State(False) # Interfaz de login with gr.Column(visible=True) as login_col: # Agrega la imagen aquí (puede ser desde URL o archivo local) try: # Ejemplo con imagen desde URL response = requests.open("d5bb4c4a-f9e5-4c70-a53c-23b7dc3872a1.jpg") img = Image.open(BytesIO(response.content)) login_img = gr.Image(img, label="", interactive=False, show_label=False) except: # Si falla la carga, puedes usar una imagen local # Coloca tu imagen en el mismo directorio que el script login_img = gr.Image("d5bb4c4a-f9e5-4c70-a53c-23b7dc3872a1.jpg", label="", interactive=False, show_label=False) gr.Markdown("# Sistema de Captura de Incidencias") username = gr.Textbox(label="Usuario") password = gr.Textbox(label="Contraseña", type="password") login_btn = gr.Button("Ingresar") login_msg = gr.Textbox(label="Mensaje", interactive=False) # Interfaz de captura with gr.Column(visible=False) as captura_col: gr.Markdown("## Captura de Datos") with gr.Row(): with gr.Column(): entidad = gr.Textbox(label="Entidad Federativa") nombre = gr.Textbox(label="Nombre completo") curp = gr.Textbox(label="CURP") prestacion = gr.Dropdown(PRESTACIONES, label="Prestación afectada") quincena = gr.Textbox(label="Quincena (AAAA-MM-DD)") submit_btn = gr.Button("Guardar") resultado = gr.Textbox(label="Resultado") logout_btn = gr.Button("Cerrar sesión") # Funciones de control def autenticar(user, pwd): if verificar_credenciales(user, pwd): return { login_col: gr.update(visible=False), captura_col: gr.update(visible=True), login_msg: "" } return { login_msg: "⚠️ Credenciales incorrectas" } def cerrar_sesion(): return { login_col: gr.update(visible=True), captura_col: gr.update(visible=False), login_msg: "" } # Eventos login_btn.click( autenticar, inputs=[username, password], outputs=[login_col, captura_col, login_msg] ) logout_btn.click( cerrar_sesion, outputs=[login_col, captura_col, login_msg] ) submit_btn.click( guardar_registro, inputs=[entidad, nombre, curp, prestacion, quincena], outputs=resultado ) # Inicializar inicializar_csv() app.launch()