Repository navigation
[Proyecto] #331
Description
Activity
Verificación Automática — Proyecto I 🤖
Repositorio analizado:
https://github.com/gbrielass/proyecto-de-programacion-2026.git1. Repositorio
✅ El repositorio es accesible y fue clonado correctamente.
2. Informe (
report.md)❌ No se encontró
report.mden el repositorio.3. Proyecto Python
⚠️ Sinpyproject.toml.
⚠️ Sinrequirements.txt.Archivos Python (5, 366 líneas en total):
function_empresa.pyfunciones_restricciones.pyfuncion_delete.pyfuncion_client.pymain.py
4. Punto de Entrada
✅ Punto de entrada detectado:
main.py5. Ejecución
✅ El proyecto se ejecuta.
Traceback (most recent call last): File "/tmp/tmp2uop83qm/repo/main.py", line 1, in <module> import streamlit as st ModuleNotFoundError: No module named 'streamlit'Resumen
- ✅ Repositorio accesible
- ❌ report.md con ≥2000 palabras
- ✅ Archivos Python
- ❌ Configuración de dependencias
- ✅ Punto de entrada
- ✅ Ejecución
4/6 verificaciones pasadas.
Verificación automática — los resultados son orientativos. El profesor revisará en detalle.
🔍 Revisión de Código — Claude Code
Repositorio: https://github.com/gbrielass/proyecto-de-programacion-2026.git
Qué hace tu proyecto
Construiste un organizador de eventos en Streamlit (una app web, no de consola) que hace algo bastante ambicioso: cuando un cliente pide un evento con ciertos recursos y personal en una fecha y horario, tu programa busca una empresa que tenga todo lo que se pide y que además esté libre en ese horario sin chocar con recursos ya comprometidos. Ese emparejamiento con detección de solapamiento de horarios es el corazón del proyecto y está muy bien pensado para primer año.
Ejecución
La corrí de verdad. Como es Streamlit, la levanté en modo headless (
streamlit run main.py) y respondió HTTP 200 sin errores: la app arranca bien. ElModuleNotFoundError: streamlitde la verificación automática es solo que faltaba instalar la dependencia, no un fallo tuyo. Después ejecuté la lógica de negocio directamente con tus datos reales dedata/, recorriendo flujos válidos e inválidos. Lo mejor: tu algoritmo de emparejamiento funciona correctamente — encuentra la empresa adecuada, bloquea un horario que solapa con un evento existente que comparte el "Escenario", y deja pasar una fecha libre. Nada reventó conTraceback.Lo que está bien
- El algoritmo de matching cliente↔empresa funciona (
funcion_client.py:39-97): verifiqué que encuentra empresas válidas, detecta choques de horario con intersección de intervalos y respeta los recursos ya ocupados. Es lo más difícil del proyecto y lo resolviste bien. - Buena modularización: separaste en cinco archivos por responsabilidad (clientes, empresas, restricciones, borrado, UI). Buen instinto.
- Modelo de datos limpio: tus clases con
convertir()ystr(fecha)para serializar a JSON manejan bien los tipos que no son serializables por defecto (funcion_client.py:19). - Las validaciones de evento (ID de 8 dígitos, duración ≤12h, campos vacíos) sí funcionan y las probé una a una.
Qué mejorar
- Falta un
returnenguardar_empresa(function_empresa.py:22-30). Tus errores de validación están en unif/elifaparte del bloque que guarda, así que cuando hay un error el flujo sigue de largo y guarda la empresa igual. Lo comprobé:guardar_empresa("", "x", [], [])mostró el error de nombre y el de "guardado correctamente", y el registro basura quedó en el archivo. Solución: añade unreturndespués del bloque de errores (o mételo todo en el mismoif/elifcomo sí hiciste encrear_eventos). - Dos restricciones no hacen lo que crees por cómo Python evalúa
and/or:"Alfombra" and "Carpas" in recursos(funciones_restricciones.py:20,52) Python lo lee como"Alfombra" and ("Carpas" in recursos), y como"Alfombra"siempre es verdadero, la regla se dispara con solo poner Carpas (sin alfombra). Lo verifiqué. Escribe:"Alfombra" in recursos and "Carpas" in recursos.("cantante" or "Banda") in personal(funciones_restricciones.py:28,60) se reduce a"cantante" in personal, así que ignora a "Banda" por completo. Escribe:("cantante" in personal or "Banda" in personal).- La idea general:
insolo se aplica a lo que tiene inmediatamente al lado; cada nombre que quieras buscar necesita su propio... in ....
- Mayúsculas que no coinciden con el menú: varias reglas comparan contra
"Proyector","Tecnico de proyeccion","Encargado del stand","Iluminacion ambiental", pero tu menú los ofrece en minúscula ("proyector","tecnico de proyeccion", etc.,main.py:31). Como el texto no calza exacto, esas restricciones nunca se activan. Alinea los literales con las opciones delmultiselect. - "Eventos del dia" no hace nada: está en el menú pero no tiene su rama
elifenmain.py. O impleméntala o quítala. - Las lecturas de archivo dentro del cuerpo de la clase (
funcion_client.py:32-36) se ejecutan al importar el módulo y hacen frágil el programa (falla si el directorio de trabajo no es la raíz), y encima esas variablesceo/clientno se usan (vuelves a abrir los archivos dentro decrear_eventos). Puedes borrarlas.
Sobre el informe
No encontré
report.mden el repo, y es un requisito del proyecto. Te recomiendo escribirlo: explica qué hace la app, cómo la organizaste en archivos, y —esto suma mucho— cuenta cómo pensaste el algoritmo de emparejamiento y detección de conflictos de horario, que es tu mejor pieza.
Tienes una muy buena idea central y la parte difícil ya la resolviste bien. Cerrando esos tres detalles de validación (el
returny las dos condiciones conand/or) y añadiendo el informe, este proyecto queda redondo. ¡Buen trabajo!- El algoritmo de matching cliente↔empresa funciona (
**Nombre:Maria Gabriela Avila Leyva
**Grupo:C111
**Repositorio:https://github.com/gbrielass/proyecto-de-programacion-2026.git
Descripción
Ayuda a gestionar la organizacion de eventos