Sistema de gestión de guardias para institutos educativos desarrollado con Next.js, TypeScript y Bootstrap. Esta aplicación permite gestionar las ausencias del profesorado, la asignación de guardias y su monitorización diaria.
📑 Tabla de Contenidos
- gestion-guaridas
- Aplicación para la gestión de Guardias de un instituto
- 📚 Documentación del proyecto
- 📋 Descripción General
- ⭐ Funcionalidades Principales
- 🗂️ Estructura del proyecto
- 📸 Capturas de Pantalla
- 📽️ Video Demo
- �� Requisitos Previos
- ⚙️ Instalación
- 🚀 Ejecución del Proyecto
- 💻 Scripts Disponibles
- 🛠️ Tecnologías Principales
- 📊 Estado Actual de los Datos
- 🗄️ Estructura de la Base de Datos
- 📓 Bitácora de Desarrollo
- 📖 Bibliografía y Referencias
Para facilitar el uso y comprensión del sistema, se proporciona la siguiente documentación:
- Memoria del proyecto - Documentación completa del proyecto, incluyendo análisis, diseño, implementación y conclusiones
- Manual de usuario - Guía básica para usuarios del sistema
- Manual del programador - Documentación técnica exhaustiva
- Diagramas de flujo - Diagramas detallados de los principales flujos del sistema, incluidos los ciclos de vida de ausencias y guardias, procesos de anulación y firma
- Diagramas de estados - Representación gráfica de los estados posibles de guardias, ausencias y usuarios
- Diagrama entidad-relación - Estructura completa de la base de datos
- Configuración y uso de Supabase - Guía completa de configuración y uso de Supabase
- Diseño de la interfaz de usuario - Evolución del diseño desde los prototipos iniciales hasta la implementación final
Los diagramas de flujo y estados incluyen representaciones detalladas de:
- Ciclos de vida completos de ausencias y guardias
- Procesos de anulación con manejo de ausencias asociadas
- Flujo de firma de guardias con tareas
- Relaciones entre entidades y sus transiciones de estado
- Sistema de pestañas para la gestión integral de guardias por parte de los profesores
Todo lo referido a la documentación del proyecto se encuentra en el directorio /doc
El sistema contempla dos tipos de usuarios:
- Gestión completa de usuarios (profesores)
- Asignación de horarios de guardia
- Gestión de espacios y ubicaciones
- Control y supervisión de guardias y ausencias
- Visualización de estadísticas
- Registro de ausencias
- Visualización unificada de diferentes tipos de guardias (pendientes, generadas, por firmar)
- Asignación a guardias disponibles
- Firma de guardias realizadas
- Gestión de tareas para los alumnos durante su ausencia
- Visualización de su horario semanal de guardias
- Acceso mediante correo electrónico y contraseña
- Gestión de sesiones mediante Supabase Auth
- Protección de rutas según roles de usuario
- Redirección a la pantalla de login cuando se requiere autenticación
- Crear, editar y desactivar usuarios de tipo "profesor"
- Control de acceso basado en roles (administrador/profesor)
- Validación de emails únicos al crear nuevos usuarios
- Gestión de la herencia de horarios a nivel de aplicación entre usuarios
- Asignación de tramos de guardia a profesores
- Gestión de disponibilidad por día y hora
- Vista semanal de horarios para profesores
- Vista en formato calendario para mejor visualización
- Prevención de horarios duplicados para un mismo profesor
- Registro y gestión de aulas, patios y otras áreas
- Asignación de espacios para guardias
- Sistema de asignación y firma de guardias
- Control de restricciones (1 guardia por tramo horario)
- Límite de 6 guardias por semana por profesor
- Anulación de guardias con actualización automática de estado
- Soporte para diferentes tipos de guardia (Aula, Patio, Recreo)
- Preservación de historial mediante actualización de observaciones en anulaciones
- Al anular una guardia con ausencia asociada, la ausencia vuelve a estado "Pendiente"
- Verificación automática de disponibilidad de profesores basada en horario y guardias asignadas
- Creación de guardias por lotes para múltiples fechas y tramos horarios
- Registro de ausencias por parte de profesores
- Aprobación o rechazo de ausencias por parte de administradores
- Creación automática de guardias a partir de ausencias aceptadas
- Opción "Todo el día" para seleccionar todos los tramos horarios al registrar ausencias
- Anulación de ausencias con actualización automática de guardias asociadas
- Trazabilidad completa mediante observaciones con información de cambios de estado
- Ciclo completo con estados: Pendiente → Aceptada → Pendiente (si se anula la guardia)
- Interfaz unificada con sistema de pestañas para la gestión integral de guardias:
- Pendientes: Guardias disponibles para asignar, filtradas por horario compatible del profesor
- Generadas: Guardias creadas a partir de ausencias del profesor
- Por firmar: Guardias asignadas al profesor que debe cubrir y firmar
- Navegación mediante parámetros URL que permiten mantener la pestaña activa entre recargas
- Estado de cada guardia claramente visible con un sistema de etiquetas codificadas por color
- Acciones contextuales según el tipo de guardia y su estado actual
- Visualización en tiempo real del estado de las guardias
- Filtrado por estado (Pendientes, Asignadas, Firmadas)
- Vista optimizada para pantallas grandes en salas de profesores
- Interfaz adaptable con modo claro y oscuro
- Persistencia de la preferencia del usuario
- Detección automática de preferencias del sistema
- Compatibilidad mejorada para tablas y componentes en modo oscuro
. # Estructura principal del proyecto
├── .gitignore # Archivos y directorios ignorados por git
├── README.md # Documentación principal del proyecto
├── CHANGELOG.md # Registro de cambios del proyecto
├── app # Directorio principal de Next.js App Router
│ ├── admin # Área de administración
│ │ ├── ausencias # Gestión completa de ausencias
│ │ │ └── page.tsx # Página de gestión de ausencias
│ │ ├── estadisticas # Visualización de datos y métricas
│ │ │ └── page.tsx # Página de estadísticas
│ │ ├── guardias # Gestión de guardias (vista admin)
│ │ │ └── page.tsx # Página de gestión de guardias
│ │ ├── horarios # Configuración de horarios
│ │ │ └── page.tsx # Página de gestión de horarios
│ │ ├── layout.tsx # Layout para el área de administración
│ │ ├── lugares # Gestión de espacios y ubicaciones
│ │ │ └── page.tsx # Página de gestión de lugares
│ │ ├── page.tsx # Dashboard principal de admin
│ │ └── users # Gestión de usuarios
│ │ └── page.tsx # Página de gestión de usuarios
│ ├── guardia # Gestión de guardias específicas
│ │ └── page.tsx # Página de detalles de guardia
│ ├── layout.tsx # Layout principal que envuelve toda la app
│ ├── login # Autenticación de usuarios
│ │ └── page.tsx # Página de inicio de sesión
│ ├── metadata.ts # Configuración de metadatos de la app
│ ├── page.tsx # Página principal/inicio
│ ├── profesor # Área de profesores
│ │ ├── ausencias # Gestión de ausencias del profesor
│ │ │ └── page.tsx # Página de registro de ausencias
│ │ ├── mis-guardias # Vista unificada con pestañas
│ │ │ └── page.tsx # Gestión integral de guardias
│ │ ├── horario # Visualización del horario semanal
│ │ │ └── page.tsx # Página de horario del profesor
│ │ ├── layout.tsx # Layout para el área de profesores
│ │ └── page.tsx # Dashboard del profesor
│ └── sala-guardias # Vista general de guardias activas
│ └── page.tsx # Página de sala de guardias
├── components # Componentes reutilizables
│ ├── common # Componentes comunes (navbar, sidebar, etc.)
│ │ ├── Navbar.tsx # Barra de navegación
│ │ └── Sidebar.tsx # Menú lateral
│ └── ui # Componentes de interfaz de usuario
│ └── ... # Otros componentes UI
├── doc # Documentación adicional
│ ├── DIAGRAMA-ER.md # Diagrama entidad-relación
│ ├── DIAGRAMAS-ESTADOS.md # Diagramas de estados
│ ├── DIAGRAMAS-FLUJO.md # Diagramas de flujo en formato Mermaid
│ ├── MANUAL-USUARIO.md # Manual de usuario detallado
│ ├── MANUAL-PROGRAMADOR.md # Manual técnico
│ ├── SUPABASE.md # Documentación de Supabase
│ ├── images # Imágenes para la documentación
│ └── ... # Otra documentación
├── hooks # Custom hooks de React
├── lib # Utilidades y configuraciones
│ ├── authService.ts # Servicio de autenticación
│ ├── ausenciasService.ts # Servicio de ausencias
│ ├── db-config.ts # Configuración de la base de datos
│ ├── guardiasService.ts # Servicio de guardias
│ ├── horariosService.ts # Servicio de horarios
│ ├── lugaresService.ts # Servicio de lugares
│ ├── supabaseClient.ts # Cliente de Supabase
│ ├── tareasGuardiaService.ts # Servicio de tareas de guardia
│ └── usuariosService.ts # Servicio de usuarios
├── middleware.ts # Middleware de Next.js para autenticación y rutas
├── scripts # Scripts de utilidad
│ └── create-tables.sql # Script SQL para crear tablas en Supabase
└── src # Código fuente adicional
├── App.css # Estilos principales de la aplicación
└── contexts # Contextos de React para estado global
├── AuthContext.tsx # Contexto de autenticación
├── GuardiasContext.tsx # Contexto de gestión de guardias
└── ThemeContext.tsx # Contexto para gestión del tema
Puedes ver una demostración del funcionamiento del sistema en este enlace.
- Node.js (versión 18 o superior)
- npm (viene incluido con Node.js)
- Cuenta en Supabase para la base de datos
- Clona el repositorio:
git clone https://github.com/RGiskard7/gestion-guardias.git
cd gestion-guardias- Instala las dependencias:
npm install --legacy-peer-depsNota: Utilizamos
--legacy-peer-depsdebido a algunas incompatibilidades entre las dependencias dedate-fnsyreact-day-picker. Este flag permite que la instalación se complete correctamente.
-
Configura las variables de entorno:
- Copia el archivo
example.env.locala.env.local:
cp example.env.local .env.local
- Edita el archivo
.env.localy reemplaza los valores de ejemplo con tus credenciales de Supabase
- Copia el archivo
-
Configura Supabase:
- Sigue las instrucciones en SUPABASE.md
- Asegúrate de que las variables en tu archivo
.env.localcoincidan con las credenciales de tu proyecto en Supabase
Para iniciar el servidor de desarrollo:
npm run devEl servidor se iniciará en http://localhost:3000. Puedes acceder a la aplicación abriendo esta URL en tu navegador.
Para probar la aplicación, consulta las instrucciones detalladas en INSTRUCCIONES-PRUEBA.md.
npm run dev- Inicia el servidor de desarrollonpm run build- Crea una versión optimizada para producciónnpm start- Inicia el servidor en modo producciónnpm run lint- Ejecuta el linter para verificar el códigonpm run check-db- Verifica la estructura de la base de datos
- Next.js 15.1.0
- React 19
- TypeScript
- Bootstrap 5.3.2
- Supabase (Backend y Base de datos)
- date-fns
- react-day-picker
La aplicación utiliza Supabase como backend para proporcionar:
- Persistencia de datos en una base de datos PostgreSQL
- Autenticación y autorización basada en roles
- API para comunicación cliente-servidor
- Manejo profesional de IDs y transacciones
Para más detalles sobre la implementación con Supabase, consulta SUPABASE.md.
Para una representación visual de la estructura de la base de datos y las relaciones entre tablas, consulta el Diagrama Entidad-Relación.
-
Usuarios
- id (PK)
- nombre
- apellido
- password
- rol
- activo
-
Horarios
- id (PK)
- profesor_id (FK)
- dia_semana
- tramo_horario
-
Lugares
- id (PK)
- codigo
- descripcion
- tipo_lugar
-
Ausencias
- id (PK)
- profesor_id (FK) - Profesor que se ausenta
- fecha - Día de la ausencia
- tramo_horario - Período específico de ausencia
- estado - Pendiente/Aceptada/Rechazada
- observaciones - Incluye motivos, comentarios y registros de cambios de estado
-
Guardias
- id (PK)
- fecha - Día de la guardia
- tramo_horario - Período específico de la guardia
- tipo_guardia - Aula/Patio/Recreo
- firmada - Indica si ha sido completada (true/false)
- estado - Pendiente/Asignada/Firmada/Anulada
- observaciones - Incluye información de la guardia y registros de cambios
- lugar_id (FK) - Ubicación donde se realiza la guardia
- profesor_cubridor_id (FK) - Profesor asignado para cubrir la guardia
- ausencia_id (FK) - Ausencia asociada (si proviene de una)
-
Tareas_guardia
- id (PK)
- guardia_id (FK) - Guardia a la que pertenece la tarea
- descripcion - Descripción de las tareas realizadas durante la guardia
La bitácora de desarrollo se mantiene en el archivo CHANGELOG.md. Este documento registra todos los cambios, mejoras y correcciones realizadas en el proyecto de forma cronológica.
Cada entrada en la bitácora debe seguir el siguiente formato:
## [YYYY-MM-DD] - Título descriptivo de los cambios
### Autor(es)
- Nombre del desarrollador
### Cambios realizados
- Descripción detallada del cambio 1
- Descripción detallada del cambio 2
### Archivos modificados
- `ruta/al/archivo1.tsx`: Descripción breve de la modificación
- `ruta/al/archivo2.ts`: Descripción breve de la modificación
### Problemas resueltos
- Descripción del problema 1 que se ha solucionado
- Descripción del problema 2 que se ha solucionado
### Notas adicionales
- Cualquier información relevante adicional (si aplica)Para añadir una nueva entrada, copia esta plantilla al principio del archivo CHANGELOG.md y completa la información correspondiente.
- Next.js Documentation - Framework principal
- React Documentation - Biblioteca de UI
- TypeScript Handbook - Lenguaje de programación
- Supabase Documentation - Backend y base de datos
- Bootstrap Documentation - Framework CSS
- Clean Code por Robert C. Martin
- Patterns of Enterprise Application Architecture por Martin Fowler
- React Patterns - Patrones comunes en React
- Next.js Patterns por Lee Robinson
- OWASP Top Ten - Guía de seguridad web
- Web Security Concepts - MDN Web Docs
- Auth Patterns in Next.js - Documentación oficial
- Web Vitals - Métricas de rendimiento
- React Performance - Guía oficial
- Database Indexing - PostgreSQL
- Material Design Guidelines - Principios de diseño
- Nielsen Norman Group - Investigación UX
- Refactoring UI - Mejores prácticas de diseño
- Full Stack Open - Universidad de Helsinki
- JavaScript.info - JavaScript moderno
- PostgreSQL Tutorial - Base de datos
- TypeScript Deep Dive - TypeScript avanzado
Desarrollado por Edu Díaz a.k.a RGiskard7 ❤️











