Un sistema completo de control de asistencia diseñado para gestionar el registro de entrada y salida de empleados, administración de usuarios y auditoría de actividades en tiempo real.
- Características
- Tecnologías
- Prerrequisitos
- Instalación
- Configuración
- Uso del Sistema
- API Endpoints
- Estructura del Proyecto
- Capturas de Pantalla
- Contribución
- Licencia
- Login seguro con validación de credenciales
- Gestión de sesiones
- Roles diferenciados (Administrador/Empleado)
- CRUD completo de usuarios
- Asignación y modificación de roles
- Validación de permisos por rol
- Búsqueda y paginación de usuarios
- Estados de usuario (Activo/Inactivo/Suspendido)
- Registro de entrada y salida por ID de documento
- Auto-detección de tipo de evento (entrada vs salida)
- Captura automática de timestamp
- Validación de usuario existente y activo
- Control de sesiones activas
- Dashboard con métricas en tiempo real
- Vista de sesiones activas (usuarios sin salida registrada)
- Historial completo de asistencia con filtros
- Registro manual de entrada/salida por administradores
- Auditoría completa del sistema
- Logging automático de todos los cambios
- Trazabilidad completa de acciones administrativas
- Registro de IP y timestamps
- Historial de modificaciones de usuarios
Backend:
Frontend:
Infraestructura:
- Docker y Docker Compose instalados
- Git para clonar el repositorio
- Navegador web moderno (Chrome, Firefox, Safari, Edge)
git clone https://github.com/Miguel12-ares/ClockIn.git
cd ClockIn
git checkout test2
cd Docker
Limpiar contenedores existentes (opcional)
docker-compose down -v
Construir y levantar servicios
docker-compose up --build
Verificar que las tablas se crearon correctamente
docker-compose exec app python debug_db.py
- Aplicación Principal: http://localhost:5000
- phpMyAdmin: http://localhost:8080
- Base de Datos: localhost:3307
Usuario Admin:
ID Documento: 12345678
Contraseña: admin123
Base de Datos (phpMyAdmin):
Usuario: root
Contraseña: rootpass
Las principales configuraciones están en docker-compose.yml:
MYSQL_DATABASE: db_name
MYSQL_USER: user
MYSQL_PASSWORD: user_password
FLASK_DEBUG: 1
- Ir a http://localhost:5000
- Iniciar sesión con las credenciales de admin
- Acceder al dashboard administrativo
- Crear usuarios:
/admin/usuarios/nuevo - Editar usuarios: Botón "Editar" en la lista de usuarios
- Eliminar usuarios: Botón "Eliminar" (con confirmación)
- Buscar usuarios: Usar el filtro de búsqueda
- Ver sesiones activas:
/admin/sesiones-activas - Historial completo:
/admin/historial-asistencia - Registro manual: Botones en el dashboard
- Ver logs:
/admin/auditoria - Filtrar por fechas, usuarios y tipos de acción
curl -X POST http://localhost:5000/attendance/checkin -H "Content-Type: application/json" -d '{"idDocumento": "12345678"}'
curl -X POST http://localhost:5000/attendance/checkout -H "Content-Type: application/json" -d '{"idDocumento": "12345678"}'
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /auth/login |
Iniciar sesión |
| GET | /auth/logout |
Cerrar sesión |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /admin/usuarios |
Listar usuarios |
| GET | /admin/usuarios/nuevo |
Formulario nuevo usuario |
| POST | /admin/usuarios/nuevo |
Crear usuario |
| GET | /admin/usuarios/<id>/editar |
Formulario editar |
| POST | /admin/usuarios/<id>/editar |
Actualizar usuario |
| POST | /admin/usuarios/<id>/eliminar |
Eliminar usuario |
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /attendance/checkin |
Registrar entrada |
| POST | /attendance/checkout |
Registrar salida |
| GET | /admin/sesiones-activas |
Ver sesiones activas |
| GET | /admin/historial-asistencia |
Historial completo |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /admin/auditoria |
Ver logs de auditoría |
ClockIn/ ├── app/ │ ├── controllers/ # Controladores Flask │ │ ├── admin.py # Gestión administrativa │ │ ├── attendance.py # Control de asistencia │ │ ├── auth.py # Autenticación │ │ └── main.py # Rutas principales │ ├── models/ # Modelos de base de datos │ │ ├── access_log.py # Logs de acceso │ │ ├── active_session.py # Sesiones activas │ │ ├── admin_zona.py # Administradores por zona │ │ ├── anomaly.py # Detección de anomalías │ │ ├── estado.py # Estados de usuario │ │ ├── system_audit.py # Auditoría del sistema │ │ ├── user.py # Usuarios │ │ ├── user_type.py # Tipos de usuario │ │ └── zona.py # Zonas/Sedes │ ├── templates/ # Plantillas HTML │ │ ├── admin/ # Vistas administrativas │ │ └── auth/ # Vistas de autenticación │ ├── utils/ # Utilidades │ │ ├── decorators.py # Decoradores personalizados │ │ └── init_data.py # Datos iniciales │ └── init.py # Inicialización de la app ├── Docker/ │ └── docker-compose.yml # Configuración Docker ├── dockerfile # Imagen de la aplicación ├── requirements.txt # Dependencias Python ├── run.py # Punto de entrada └── debug_db.py # Utilidad de debugging
El dashboard principal muestra:
- Panel de gestión de usuarios
- Control de sesiones activas
- Acceso a auditoría del sistema
- Botones para registro manual
- Lista paginada de usuarios
- Filtros de búsqueda
- Formularios de creación/edición
- Asignación de roles y estados
- Vista en tiempo real de sesiones activas
- Historial completo con filtros por fecha y usuario
- Indicadores de tiempo transcurrido
1. Las tablas no se crean:
docker-compose down -v
docker-compose up --build
2. Error de conexión a MySQL: Verificar que MySQL esté ejecutándose
docker-compose logs db
3. Verificar estado de la base de datos:
docker-compose exec app python debug_db.py
Ver logs de la aplicación
docker-compose logs app
Ver logs de MySQL
docker-compose logs db
Ver logs en tiempo real
docker-compose logs -f
- Fork el repositorio
- Crear una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crear un Pull Request
- Seguir las convenciones de código existentes
- Agregar tests para nuevas funcionalidades
- Actualizar documentación si es necesario
- Usar mensajes de commit descriptivos
Reiniciar solo la aplicación
docker-compose restart app
Ejecutar comandos dentro del contenedor
docker-compose exec app python debug_db.py
Ver estructura de tablas
docker-compose exec app python -c "from app import create_app, db; app = create_app(); app.app_context().push(); print(list(db.Model.metadata.tables.keys()))"
- dashboard de usuarios
- Mejoras de frontend
- Integración con lectores biométricos
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Miguel Arévalo
- GitHub: @Miguel12-ares
- Proyecto: ClockIn
- Tecnología SENA por el marco de desarrollo
- Comunidad Flask por la excelente documentación
- Bootstrap por los componentes UI
- Docker por facilitar el deployment
¿Encontraste útil este proyecto? ¡Dale una ⭐ en GitHub!