Sistema completo de gestión de asistencia diaria al comedor escolar, desarrollado en Flask con interfaz responsive y soporte para importación/exportación en formato PARTEGEN.
- ✅ Gestión de Estudiantes - CRUD completo con validación
- ✅ Gestión de Clases - Organización por grupos
- ✅ Gestión de Profesores - Control de acceso y permisos
- ✅ Control de Asistencia Diaria - Registro en tiempo real
- ✅ Tipos de Comensales
- FIJO (continuo)
- FIJO_DISCONTINUO (días específicos)
- EXTRA (ocasional)
- ✅ Validación de Asistencia - Sistema de confirmación presente/ausente
- ✅ Validación en Bloque - Validar clase completa con un clic
- ✅ Desbloqueo de Validación - Modificar registros ya validados
- ✅ Formato PARTEGEN - Compatible con formato estándar
- ✅ Formato PARTEI4A - Soporte para archivos por clase
- ✅ Exportación Idéntica - Mantiene formato original exacto
- ✅ Validación 100% - Exportación solo con datos validados
- ✅ Dashboard en Tiempo Real - Estadísticas actualizadas
- ✅ Reportes de Confirmados - Lista de presentes
- ✅ Reportes de Ausentes - Control de faltas
- ✅ Reportes de Pendientes - Alumnos sin validar
- ✅ Estadísticas por Clase - Métricas detalladas
- ✅ Autenticación de Profesores - Sistema de login seguro
- ✅ Sesiones Cifradas - Manejo seguro de sesiones
- ✅ Asignación de Clases - Permisos por profesor
- ✅ Validación de Datos - Integridad garantizada
- ✅ Diseño Responsive - Compatible móvil y desktop
- ✅ Modo Oscuro - Interfaz moderna con Bootstrap
- ✅ Notificaciones Toast - Feedback visual inmediato
- ✅ Iconos Font Awesome - Interfaz intuitiva
# 1. Clonar repositorio
git clone https://github.com/tu-usuario/ComedorEscolar.git
cd ComedorEscolar
# 2. Configurar variables de entorno
cp .env.example .env
nano .env # Editar SESSION_SECRET
# 3. Iniciar con Docker Compose
docker-compose up -d
# 4. Acceder
# http://localhost:5000Ver: DOCKER-QUICKSTART.md para guía completa.
# 1. Clonar repositorio
git clone https://github.com/tu-usuario/ComedorEscolar.git
cd ComedorEscolar
# 2. Instalar dependencias
pip install -r docker-requirements.txt
# 3. Configurar variables de entorno
export SESSION_SECRET="tu-clave-secreta-aqui"
export FLASK_ENV="development"
# 4. Iniciar aplicación
python main.py
# 5. Acceder
# http://localhost:5000Ver guía completa: DOCKPLOY-DEPLOYMENT.md
Pasos rápidos:
- Crear servicio Docker Compose
- Pegar contenido de
docker-compose.yml - Configurar
SESSION_SECRETen variables de entorno - Deploy
Ver guía completa: README-DOCKER.md
SESSION_SECRET=<clave-aleatoria-64-caracteres>FLASK_ENV=production # development o production
DATABASE_PATH=/app/data/cafeteria.db # Ruta de base de datos
TZ=Europe/Madrid # Zona horaria
WORKERS=4 # Workers de Gunicorn
TIMEOUT=120 # Timeout en segundos
PORT=5000 # Puerto de la aplicaciónGenerar SESSION_SECRET:
python3 -c "import secrets; print(secrets.token_hex(32))"- Acceder a la aplicación -
http://localhost:5000 - Importar datos iniciales - Subir archivo CSV PARTEGEN
- Crear profesor - Desde gestión de profesores
- Iniciar sesión - Login con credenciales
- Login - Ingresar con usuario profesor
- Dashboard - Ver resumen del día
- Seleccionar Clase - Click en "Ver Detalle"
- Marcar Asistencia - Toggle "Viene Hoy" para cada alumno
- Validar - Confirmar presentes/ausentes
- Exportar - Descargar CSV cuando 100% validado
Formato PARTEGEN:
FECHA;CURSO;CODIGO;NOMBRE DEL ALUMNO;FAL;COM;EXT
040925;INF4 A;12345;GARCÍA LÓPEZ, MARÍA;;C;
040925;INF4 A;12346;MARTÍNEZ RUIZ, JUAN;;D;
040925;INF4 A;12347;LÓPEZ SÁNCHEZ, ANA;;;E
Columnas:
FECHA- Formato DDMMYY (ej: 040925 = 04/09/2025)CURSO- Código de claseCODIGO- ID del estudianteNOMBRE DEL ALUMNO- Formato: APELLIDOS NOMBREFAL- Ausente ("F") o vacíoCOM- "C" (continuo), "D" (discontinuo) o vacíoEXT- "E" (extra) o vacío
- CSV Estándar - Para análisis en Excel
- Formato Original - Idéntico al importado (requiere 100% validado)
- Framework: Flask 3.0
- Base de Datos: SQLite (migrable a PostgreSQL)
- ORM: SQL directo con dataclasses
- Servidor: Gunicorn (producción)
- Template Engine: Jinja2
- CSS Framework: Bootstrap 5 (tema oscuro)
- Iconos: Font Awesome 6
- JavaScript: Vanilla JS + Fetch API
ComedorEscolar/
├── app.py # Configuración Flask
├── database.py # Lógica de base de datos
├── routes.py # Rutas y endpoints
├── models.py # Modelos de datos
├── main.py # Punto de entrada
├── templates/ # Plantillas HTML
│ ├── base.html
│ ├── dashboard.html
│ ├── class_detail.html
│ ├── confirmados.html
│ ├── ausentes.html
│ ├── pendientes.html
│ ├── students.html
│ ├── teachers.html
│ └── classes.html
├── static/ # Archivos estáticos
│ └── css/
│ └── styles.css
├── Dockerfile # Imagen Docker
├── docker-compose.yml # Orquestación
├── start.sh # Script de inicio
└── README.md # Este archivo
- ✅ Contraseñas hasheadas con Werkzeug
- ✅ Sesiones cifradas con SECRET_KEY
- ✅ Protección CSRF
- ✅ SQL injection prevention (consultas parametrizadas)
- ✅ Validación de entrada de datos
- ✅ Headers de seguridad con ProxyFix
# Ejecutar tests (cuando estén implementados)
pytest tests/
# Verificar base de datos
python -c "from database import verify_database_integrity; verify_database_integrity()"- CPU: 0.5 cores
- RAM: 512 MB
- Disco: 2 GB
- Python: 3.11+
- CPU: 1-2 cores
- RAM: 1 GB
- Disco: 5 GB
- Python: 3.11+
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crear una rama (
git checkout -b feature/nueva-funcionalidad) - Commit cambios (
git commit -m 'Añadir nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abrir Pull Request
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE para más detalles.
- Documentación: Ver carpeta
docs/ - Issues: GitHub Issues
- Guías:
- Tests unitarios y de integración
- API REST completa
- Exportación a PDF
- Notificaciones por email
- Dashboard con gráficos
- Soporte multi-idioma
- Modo offline (PWA)
- Integración con sistemas escolares
Desarrollado para la gestión eficiente de comedores escolares.
- Bootstrap Team por el framework CSS
- Font Awesome por los iconos
- Flask Team por el framework web
- Comunidad de código abierto
Hecho con ❤️ para mejorar la gestión de comedores escolares