Aplicación creada para la gestión, optimización de horarios y salas para el festival de cortos CLACK.
La organización del festival de cortos CLACK enfrenta el desafío logístico de asignar a cientos de grupos de estudiantes, provenientes de múltiples colegios y localidades, a un número limitado de salas de cine con diferentes capacidades a lo largo de varios días. Este proceso debe realizarse de la manera más eficiente posible, minimizando el desperdeicio de asientos y respetando un conjunto complejo de restricciones y preferencias.
Clack Lineup automatiza este proceso, proveyendo una herramienta robusta para la entrada de datos y algoritmos de optimización que generan un horario coherente y eficiente.
La aplicación está dividida en varias secciones de gestión de datos y módulos de planificación.
Dashboard de Analíticas: Una pantalla principal que ofrece una vista general del estado del festival con:
KPIs (Indicadores Clave): Total de asistentes, grupos, colegios y cortometrajes.
Gráficos Interactivos: Ocupación general de salas, asistentes por día y distribución de grupos por localidad.
Módulos de Gestión de Datos: CRUD completos para Salas, Localidades, Colegios, Docentes, Grupos, Videos de la Organización y Cortometrajes, con filtros y búsqueda en tiempo real.
Importación y Exportación de Datos: Gestión masiva de datos a través de archivos CSV para las entidades principales: Grupos, Localidades, Colegios y Docentes.
Importación y Exportación de Base de Datos Completa: Exportar archivo para utilizar la misma base de datos en diferentes plataformas (ejemplo carga de datos en desktop y exportar base de datos a tablet para carga de asistentes al festival..
Importación Inteligente: Previene la creación de duplicados. Para la importación de grupos, soporta un formato de columnas flexible y permite al usuario elegir entre dos estrategias: "Añadir y Actualizar" o "Reemplazar Todo".
Exportación para Plantillas: Permite exportar los datos existentes, generando un archivo que sirve como plantilla perfecta para futuras importaciones.
Módulos de Planificación:
Generador de Horarios de Asistencia y Parrillas de Proyección con algoritmos de optimización.
Edición manual tanto de horarios como del orden de los cortos.
Configuración de tiempos de proyección personalizados.
Exportación a PDF de todos los horarios y parrillas.
Configuración General: Permite personalizar el tema de la aplicación (Claro/Oscuro/Sistema) y los valores por defecto del festival (nombre, año, margen de sobrecupo, etc exportar/importar BD.).
El algoritmo prioriza las reglas en dos grandes grupos:
1. Prioridad 1: Restricciones Duras (Inquebrantables)
Separación de Niveles: No se mezclan grupos de Primaria y Secundaria en la misma sala y turno.
Restricciones de Primaria: Los grupos de primaria solo pueden ser asignados a turnos de media jornada (Turno 1 o 2), nunca a jornada completa.
Día y/o Sala Fija: Se respetan las asignaciones fijas que el usuario haya definido.
Grupos "Bizarros": Se asegura que estos grupos especiales siempre vayan juntos en la misma sala y día.
2. Prioridad 2: Objetivos de Optimización (Reglas Suaves)
Maximizar Ocupación: El objetivo principal es minimizar los asientos vacíos. El algoritmo puede usar un margen de sobrecupo configurable como último recurso, penalizando esta opción para priorizar siempre un ajuste perfecto.
Flexibilidad de Turnos: Soporta "Jornada Completa", turnos fijos ("Turno 1", "Turno 2") y la opción flexible de "Media Jornada", donde el algoritmo elige el mejor turno disponible para optimizar el horario.
Co-ubicación de Docentes: Se prioriza juntar en la misma sala a los grupos que comparten docentes para facilitar su logística.
3. Generador de Parrilla de Proyecciones
Genera la lista de vídeos para cada bloque de proyección basándose en las siguientes reglas:
Duración Personalizada: Utiliza los tiempos de proyección definidos por el usuario para cada bloque.
Prioridad del Anfitrión: Se incluye siempre el/los cortometrajes pertenecientes al grupo que asiste en ese bloque.
Selección por Calidad: El algoritmo prioriza los cortometrajes con la puntuación más alta para rellenar el tiempo restante.
Restricción de Nivel: En las proyecciones para grupos de primaria, solo se pueden incluir cortos marcados como "aptos para primaria".
Relleno de Tanda: El tiempo sobrante final en cada bloque se completa con los "Videos de la Organización".
Genera la lista de vídeos para cada bloque de proyección basándose en las siguientes reglas:
Duración Personalizada: Utiliza los tiempos de proyección definidos por el usuario para cada bloque.
Prioridad del Anfitrión: Se incluye siempre el/los cortometrajes pertenecientes al grupo que asiste en ese bloque.
Selección por Calidad: El algoritmo prioriza los cortometrajes con la puntuación más alta para rellenar el tiempo restante.
Restricción de Nivel: En las proyecciones para grupos de primaria, solo se pueden incluir cortos marcados como "aptos para primaria".
Relleno de Tanda: El tiempo sobrante final en cada bloque se completa con los "Vídeos de la Organización".
El algoritmo busca colaborar en la organización, pero puede dejar colegios sin asignar debido a las restricciones del mismo algoritmo, esta en el usuario corroborar que los horarios sean satisfactorios. Siempre se informa de grupos no asignados a alguna sala, o de sobrecupo en diferentes espacios esta en la organización mejorar el resultado, partiendo de una aproximación que plantea el programa.
Para buscar más información, sobre los probremas que intenta resolver la app, puedes buscar Problema del Empaquetado de Bins (Bin Packing Problem) que es el utilizado en la asignacion de salas, turnos y dias de los grupos de personas y Problema de la Planificación de Horarios (Timetabling Problem) que es la asignacion de los horarios de proyecciones
Framework: Flutter 3.x
Arquitectura: Clean Architecture (por Features)
Gestión de Estado: Riverpod (usando Notifier y AsyncNotifier)
Base de Datos: Drift (sobre SQLite) para persistencia de datos local.
Inyección de Dependencias: Manual a través de los providers de Riverpod.
Visualización de Datos: fl_chart para la creación de gráficos.
Fue testeado en inuxmint 22.01 y en una maquina virtual de windows en linuxmint.
recuerda que debes instalar las librerías redistribuibles de C++ de Microsoft desde su pagina oficial o de forma directa de VC_redist.x86.exe