Validar Marcación (1) - [validar]
🧾 Descripción
Este servicio ejecuta toda la lógica de validación previa para permitir que un empleado realice una marcación (asistencia).
El servicio centraliza más de 10 validaciones críticas, verificando:
-
Campos obligatorios
-
Licencias activas
-
Restricciones por puesto
-
Validación de firma de documentos obligatorios
-
Descarga de contratos y documentos requeridos
-
Datos incompletos del empleado
-
Tipo de marcación permitido
-
Esquema de fiscalización
-
Reglas por empresa (Shalom Express vs Shalom Empresarial)
Es un servicio de control que determina si el empleado puede realizar una marcación y qué mensaje debe mostrarse al usuario.
🚀 Endpoint
POST /validar
📥 Request Body (resumen)
🔐 Seguridad
-
Requiere usuario autenticado.
-
Usa datos precargados del empleado (
$this->employee_detail). -
Internamente utiliza múltiples servicios ERP y validadores internos.
🧠 Flujo del Servicio (Resumen Real)
1️⃣ Validar campos obligatorios
Llama a verifyFields().
Si falta algún parámetro → retorna error inmediato.
2️⃣ Cargar datos principales
-
empleado
-
tipo de marcación
-
fecha de asistencia
-
datos del empleado desde sesión previa
3️⃣ Validar restricciones por puesto
Si el empleado NO es "PreActivo", llama a:validateRestrictedDesignation(designation)
4️⃣ Validar licencia activaverifyLicencia(empleado, fechaIngreso)
5️⃣ Validar nuevos ingresos
Solo para empleados activos, ingreso reciente, y NO Express:verifySignedNewAdmissionRegistrations()
6️⃣ Validar descarga de documentos obligatorios
Obtiene documentos descargados:verifyDownloadedDocumentsBd()
Y valida contrato pendiente:verifyContractDownload()
7️⃣ Validar documentos de cambio de modalidadverifyModalityChangeDocument()
8️⃣ Validar información del empleado (horarios, jornada, etc.)verifyEmployeeData()
9️⃣ Obtener últimas marcacionesgetMarkingsByEmployee()
🔟 Validación de “No sujeto a fiscalización”verifyEmployeeNotSubjectToInspection()
1️⃣1️⃣ Validación de refrigerio
Si type == llegada_refrigerio:verifyStartOfLunch()
1️⃣2️⃣ Validar coherencia del tipo de marcación
Ejemplo: que no marque salida sin marcar ingreso.verifyTypeOfMarking()
📌 Si todas las validaciones son correctas → retorna éxito.
📤 Response 200 – Ejemplo (OK)
❗ Posibles Errores devueltos por este servicio
1. Campos obligatorios faltantes
2. Puesto restringido
3. Empleado con licencia activa
4. Documentos de ingreso no firmados
5. Contrato pendiente por descargar
6. Error en la lógica de marcación (orden incorrecta)
7. No sujeto a fiscalización
🗃 Funciones internas utilizadas
| Nombre | Descripción |
|---|---|
| verifyFields | Valida campos requeridos del request |
| validateRestrictedDesignation | Controla puestos con restricciones |
| verifyLicencia | Evalúa si el empleado tiene licencia activa |
| verifySignedNewAdmissionRegistrations | Valida firmas de ingreso |
| verifyDownloadedDocumentsBd | Valida documentos descargados |
| verifyContractDownload | Revisa si falta descargar contrato |
| verifyModalityChangeDocument | Valida documentos de cambios de modalidad |
| verifyEmployeeData | Verifica datos del empleado necesarios para marcar |
| getMarkingsByEmployee | Obtiene último registro de marcación |
| verifyEmployeeNotSubjectToInspection | Revisa si está sujeto a fiscalización |
| verifyStartOfLunch | Valida inicio del refrigerio |
| verifyTypeOfMarking | Controla coherencia de marcaciones |
No hay comentarios para mostrar
No hay comentarios para mostrar