Bolsa de Horas (Hours Bank)
Sistema para gestionar las horas realizadas y pendientes de los empleados.
📚 Documentación
| Archivo |
Audiencia |
Descripción |
| API_FRONTEND.md |
Frontend |
Documentación de endpoints y ejemplos de uso |
| ARCHITECTURE.md |
Backend |
Arquitectura v2 y decisiones técnicas |
Descripción General
La Bolsa de Horas permite:
- Registrar horas extra trabajadas (horas realizadas)
- Registrar horas que el empleado debe (horas pendientes)
- Compensación automática entre ambos tipos
- Historial de transacciones por curso escolar
Endpoints Disponibles
| Método |
Endpoint |
Descripción |
Estado |
GET |
/api/v2/hours-bank/:employeeId |
Obtener bolsa de horas |
✅ Implementado |
POST |
/api/v2/hours-bank/:employeeId/completed |
Agregar horas realizadas |
✅ Implementado |
POST |
/api/v2/hours-bank/:employeeId/pending |
Agregar horas pendientes |
✅ Implementado |
PUT |
/api/v2/hours-bank/transactions/:transactionId |
Editar transacción |
✅ Implementado |
DELETE |
/api/v2/hours-bank/transactions/:transactionId |
Eliminar transacción |
✅ Implementado |
Estructura de Archivos
src/
├── domain/
│ ├── entities/
│ │ └── HoursBank.ts # Entidad de dominio
│ └── repositories/
│ └── DomainHoursBankRepository.ts # Interface del repositorio
├── application/
│ └── use-cases/
│ └── hours-bank/
│ └── GetEmployeeHoursBankUseCase.ts # Caso de uso: obtener horas
├── infrastructure/
│ ├── adapters/
│ │ └── persistence/
│ │ └── HoursBankRepositoryImpl.ts # Implementación del repositorio
│ ├── controllers/
│ │ └── hoursBank.controller.ts # Controlador HTTP
│ └── http/
│ └── routes/
│ └── hoursBank.routes.ts # Rutas
└── models/
└── hours-bank/
├── HoursBankModel.ts # Modelo Sequelize
└── HoursTransaction.ts # Modelo de transacciones
Modelos de Base de Datos
hours_bank
| Campo |
Tipo |
Descripción |
id |
INT |
Primary key |
employeeId |
INT |
FK a employees |
schoolCourseId |
INT |
FK a schoolCourses (nullable) |
totalPendingHours |
DECIMAL |
Total horas pendientes |
totalCompletedHours |
DECIMAL |
Total horas realizadas |
hours_transactions
| Campo |
Tipo |
Descripción |
id |
INT |
Primary key |
hoursBankId |
INT |
FK a hours_bank |
schoolCourseId |
INT |
FK a schoolCourses (nullable) |
transactionDate |
DATE |
Fecha de la transacción |
type |
ENUM |
COMPLETED, PENDING, REVERSAL |
totalHours |
DECIMAL |
Horas de la operación |
pendingAffected |
DECIMAL |
Impacto en pendientes |
completedAffected |
DECIMAL |
Impacto en realizadas |
reason |
TEXT |
Motivo de la transacción |
isActive |
BOOLEAN |
Si está activa (para reversiones) |
Última actualización: 2025-12-04