Understanding the solicitud (request) lifecycle and approval process
The Portal Self-Service Backend implements a comprehensive request (solicitud) management system that handles various types of employee requests with a structured approval workflow.
The approval process varies by request type. Vacation requests require additional validation:
// From solicitudController.js:509-536switch (tipoSolicitud) { case TIPOS_SOLICITUD.VACACIONES: const empleadoSolicitante = await empleadoService.getEmpleadoById(solicitud.id_empleado); const diasSolicitados = solicitud.dias_solicitados || 0; const diasDisponibles = empleadoSolicitante.vacaciones[0]?.dias_disponibles || 0 // Validate employee has sufficient vacation days if (diasSolicitados > diasDisponibles) { return res.status(400).json({ message: `Días insuficientes. El empleado solicita ${diasSolicitados} y dispone de ${diasDisponibles}.`, dias_solicitados: diasSolicitados, dias_disponibles: diasDisponibles }); } resultadoTransaccion = await solicitudService.aprobarVacacionesTransaction({ id_solicitud: solicitud.id_solicitud, id_empleado: solicitud.id_empleado, dias_solicitados: solicitud.dias_solicitados, id_aprobador: id_aprobador, retroalimentacion: retroalimentacion || null }); break;}
Vacation requests validate that the employee has sufficient available days before approval. If insufficient, the request is rejected with an error message.
The system enforces role-based access control (RBAC):
// From solicitudController.js:110-120const rol = empleadoLogueado.rol?.descripcion;// Employee can only view their own requestsconst esDuenio = solicitud.id_empleado === empleadoLogueado.id_empleado;// Admin/Super Admin can view any requestconst tienePermisoAdmin = rol === ROLES.ADMIN || rol === ROLES.SUPER_ADMIN;if (!esDuenio && !tienePermisoAdmin) { return res.status(403).json({ message: 'No tienes permiso para ver esta solicitud.' });}
Employees can only view and cancel their own requests. Administrators can view, approve, and reject any request.