Sistema completo para la gestión de personal y nómina de instituciones educativas, desarrollado en Python con interfaz gráfica CustomTkinter.
Este sistema proporciona una solución integral para la administración de recursos humanos en instituciones educativas, permitiendo gestionar empleados, documentos, incidencias, permisos y nóminas de manera eficiente y organizada.
- Registro completo de empleados (Docentes, Administrativos, Mantenimiento)
- Ficha de datos personales, físicos y de contacto
- Gestión de fotos de perfil
- Clasificación por tipo, cargo y departamento
- Búsqueda y filtrado avanzado
- Carga y almacenamiento de documentos digitalizados
- Soporte para PDFs e imágenes
- Clasificación por tipo de documento
- Control de vencimientos (reporte PDF con vencidos y por vencer)
- Gestión de documentos por empleado
- Exportación del listado a Excel/CSV
- Registro de reposos médicos, ausencias y permisos
- Sistema de aprobación/rechazo
- Gestión de documentos de soporte
- Cálculo automático de días
- Control de incidencias vigentes
- Reporte PDF y exportación a Excel/CSV (por empleado o general)
- Generación automática de nóminas por periodo
- Cálculo de deducciones (seguro, pensión, impuesto)
- Gestión de bonificaciones y horas extra
- Generación de recibos de pago en PDF
- Control de pagos pendientes y realizados
- Constancias de trabajo y de estudios
- Ficha completa del empleado (datos personales, laborales, bancarios, salud y familia)
- Recibos de pago
- Reportes de empleados
- Planilla de nómina por periodo con totales (ISSS, AFP, ISR, neto)
- Reporte de incidencias y control de vencimientos de documentos
- Exportación de listados a Excel (.xlsx) y CSV (UTF-8 compatible con Excel)
- Autenticación de usuarios con contraseñas cifradas (PBKDF2)
- Roles y permisos por módulo (Administrador, Gestor, Usuario, Solo lectura)
- Cambio de contraseña del usuario logueado
- Visor de auditoría (solo administradores) con filtro por tipo y exportación
- Bloqueo de cuenta por intentos fallidos
- Tema oscuro/claro configurable y persistente (botón ☀️/🌙 en la cabecera)
- Atajos de teclado para navegar y operar más rápido
- Panel de control (Dashboard) con tarjetas estadísticas navegables
- Ventanas integradas de Ayuda (guía rápida) y Acerca de
- Barra de estado con reloj y mensajes de la aplicación
- Soporte de alta resolución (DPI) en Windows
- Actualizador incluido en el instalador y programado automáticamente cada 2 días (Programador de tareas de Windows, 09:00)
- Ventana de estado que muestra todo el proceso: comprobando, descargando (con porcentaje y tamaño), instalando y resultado final
- Ícono en la bandeja del sistema (barra inferior derecha) con menú: buscar ahora, mostrar ventana o salir
- Descarga e instala en silencio la última versión publicada en GitHub
- Python 3.10 o superior
- Windows 10/11
- 4GB RAM mínimo
- 500MB espacio en disco
El sistema sigue una arquitectura en capas separando la lógica de negocio, acceso a datos e interfaz de usuario:
- Capa de Modelos: Define la estructura de datos usando SQLAlchemy ORM
- Capa de Repositorios: Maneja el acceso a la base de datos
- Capa de Servicios: Contiene la lógica de negocio
- Capa de GUI: Interfaz gráfica con CustomTkinter
- Capa de Utilidades: Funciones auxiliares y helpers
El workflow .github/workflows/build.yml automatiza todo el ciclo:
- Pruebas: ejecuta la suite completa de pytest (aislada) en cada push.
- Compilación Windows: en
windows-latest, empaqueta la app con PyInstaller (directorioonedir+ icono + metadatos de versión). - Actualizador automático: compila
SDEP_CPP5_AutoUpdater.exe(PyInstaller onefile, sin consola) con la ventana de estado y el ícono de bandeja del sistema. - Instalador: genera
SistemaGestionPersonal-Setup-<versión>.execon Inno Setup (asistente en español/inglés, accesos directos, desinstalador); incluye el actualizador dentro del instalador y lo programa en el Programador de tareas cada 2 días. - Compilación Linux: compila el mismo
spec/app.specdentro de un contenedor Ubuntu 22.04 (glibc 2.35) y empaqueta la versión portable de Linux en untar.gz. El binario funciona en Ubuntu 22.04, Debian 12 y Debian 13; se autoverifica con--selftestbajoxvfb-runen Ubuntu 22.04 y se prueba dentro de contenedoresdebian:12ydebian:13. - Artefactos: sube Setup.exe, ZIP portable (Windows), tar.gz (Linux)
y
SDEP_CPP5_AutoUpdater.execomo artefactos del run. - Release continua: cada push a
mainpublica automáticamente un Release de GitHub con el instalador y las versiones portables de Windows y Linux (sin necesidad de crear etiquetas). Un push con etiquetavX.Y.Zgenera una release versionada con ese nombre.
Cada cambio publicado genera su Release automáticamente:
git push origin mainPara una release versionada (opcional):
git tag v2.79
git push origin v2.79Descargue SistemaGestionPersonal-Setup-<versión>.exe desde el Release o
los artefactos del workflow y ejecútelo. Los datos de la aplicación
(base de datos, documentos, respaldos) se guardan en
%LOCALAPPDATA%\SistemaGestionPersonal, independientes de la instalación.
El instalador incluye el actualizador automático (
SDEP_CPP5_AutoUpdater.exe): al terminar la instalación queda programado para comprobar novedades cada 2 días y se ejecuta con ventana de estado e ícono en la bandeja del sistema.
Descargue SistemaGestionPersonal-Linux-<versión>.tar.gz desde el Release,
descomprímalo y ejecute el binario:
tar -xzf SistemaGestionPersonal-Linux-<versión>.tar.gz
cd SistemaGestionPersonal
./SistemaGestionPersonalLos datos de la aplicación se guardan junto al ejecutable.
- Clonar el repositorio:
git clone <repository-url>
cd SDEP_CPP5- Crear entorno virtual:
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac- Instalar dependencias:
pip install -r requirements.txt- Ejecutar la aplicación:
python src/main.py- Instalar dependencias de construcción:
pip install pyinstaller
# Instale además Inno Setup 6: https://jrsoftware.org/isdl.php
# o con Chocolatey: choco install innosetup -y- Ejecutar el script de construcción:
python build.py # ejecutable + actualizador + instalador
python build.py --exe # solo el ejecutable
python build.py --updater # solo el actualizador automático- Resultados:
- Ejecutable:
dist/SistemaGestionPersonal/ - Actualizador:
dist_updater/SDEP_CPP5_AutoUpdater.exe - Instalador:
dist_installer/SistemaGestionPersonal-Setup-<versión>.exe
- Ejecutable:
La versión se lee del archivo
VERSION(fuente única).
SDEP_CPP5/
├── src/ # Código fuente principal
│ ├── gui/ # Interfaz gráfica de usuario
│ │ ├── main_window.py # Ventana principal
│ │ └── frames.py # Frames de cada módulo
│ ├── models/ # Modelos de datos (ORM)
│ │ ├── base.py # Modelo base
│ │ ├── enums.py # Enumeraciones
│ │ ├── empleado.py # Modelo de empleado
│ │ ├── documento.py # Modelo de documento
│ │ ├── incidencia.py # Modelo de incidencia
│ │ ├── pago.py # Modelo de pago
│ │ └── configuracion.py # Modelo de configuración
│ ├── repositories/ # Acceso a datos
│ │ ├── base_repository.py # Repositorio base
│ │ ├── empleado_repository.py
│ │ ├── documento_repository.py
│ │ ├── incidencia_repository.py
│ │ ├── pago_repository.py
│ │ └── configuracion_repository.py
│ ├── services/ # Lógica de negocio
│ │ ├── empleado_service.py
│ │ ├── documento_service.py
│ │ ├── incidencia_service.py
│ │ ├── pago_service.py
│ │ └── configuracion_service.py
│ ├── utils/ # Utilidades y helpers
│ │ ├── helpers.py # Funciones auxiliares
│ │ ├── validators.py # Validadores
│ │ ├── document_manager.py # Gestión de documentos
│ │ └── pdf_generator.py # Generación de PDFs
│ ├── config/ # Configuración
│ │ ├── settings.py # Configuración general
│ │ └── database.py # Configuración de base de datos
│ └── main.py # Punto de entrada
├── tests/ # Pruebas unitarias
├── requirements.txt # Dependencias del proyecto
├── requirements-dev.txt # Dependencias de desarrollo
├── pyproject.toml # Configuración del proyecto
├── build.py # Script de construcción
├── updater/ # Actualizador automático
│ ├── auto_updater.py # Lógica principal (GitHub, descarga, tareas)
│ ├── updater_gui.py # Ventana de estado (tkinter)
│ ├── tray_icon.py # Ícono de bandeja del sistema (ctypes)
│ └── updater.spec # Spec de PyInstaller
└── .env.example # Ejemplo de variables de entorno
El sistema utiliza SQLite como base de datos local. La base de datos se crea automáticamente al iniciar la aplicación y se encuentra en el archivo personal_management.db.
- empleados: Información completa de empleados
- documentos: Documentos digitalizados de empleados
- incidencias: Permisos, reposos y ausencias
- pagos: Registro de nóminas y pagos
- configuraciones: Configuración del sistema
| Atajo | Acción |
|---|---|
Ctrl+1 … Ctrl+6 |
Ir al módulo 1 (Dashboard) … 6 (Configuración) |
Ctrl+N |
Nuevo registro en el módulo activo |
Ctrl+F |
Buscar / enfocar el filtro del módulo activo |
Ctrl+S |
Guardar cambios (Configuración) |
F5 |
Actualizar la lista del módulo activo |
Esc |
Cerrar diálogos o limpiar la selección de la tabla |
-
Configuración Inicial:
- Configure los datos de la institución en la sección "Configuración"
- Establezca los porcentajes de deducciones para nómina
-
Registro de Empleados:
- Vaya a la sección "Empleados"
- Haga clic en "Nuevo Empleado"
- Complete los datos personales, laborales y de contacto
-
Gestión Documental:
- Seleccione un empleado
- Vaya a "Documentos"
- Cargue documentos digitalizados (cedulas, títulos, etc.)
-
Incidencias:
- Seleccione un empleado
- Vaya a "Incidencias"
- Registre permisos, reposos o ausencias
- Apruebe o rechace solicitudes
-
Nómina:
- Vaya a "Nómina"
- Seleccione el periodo
- Genere la nómina automáticamente
- Genere recibos de pago en PDF
- Los datos se almacenan localmente en SQLite
- La aplicación funciona sin conexión a internet (solo el actualizador automático la consulta, de forma opcional)
- Los documentos se almacenan en el sistema de archivos local
- Se recomienda realizar copias de seguridad periódicas
pytest tests/black src/
isort src/flake8 src/
pylint src/- Configuración Inicial: Al iniciar el sistema por primera vez, configure los datos de la institución
- Registro de Empleados: Agregue los empleados con sus datos personales y laborales
- Gestión Documental: Cargue los documentos requeridos para cada empleado
- Control de Incidencias: Registre permisos, reposos y ausencias
- Procesamiento de Nómina: Genere nóminas periódicas y emita recibos de pago
Copie .env.example a .env y configure las variables:
DATABASE_URL=sqlite:///personal_management.db
APP_NAME=Sistema de Gestión de Personal
DEBUG=FalseLa configuración se puede modificar desde la sección "Configuración" de la aplicación:
- General: Nombre de la institución, dirección, contacto
- Nómina: Porcentajes de deducciones, salario mínimo
- Recursos Humanos: Días de vacaciones, horas laborales
- Verifique que Python 3.10+ esté instalado
- Instale las dependencias:
pip install -r requirements.txt - Verifique que los directorios
documents,photos,exportsexistan
- Elimine el archivo
personal_management.db - Reinicie la aplicación para recrear la base de datos
- Asegúrese de tener PyInstaller instalado:
pip install pyinstaller - Verifique que el archivo
spec/app.specexista - Ejecute el script
build.py
Este proyecto está bajo licencia MIT.
Desarrollado para gestión de personal en instituciones educativas.
Para soporte o consultas, contacte al equipo de desarrollo.
Versión: 2.79
Última actualización: 2026