Cómo solicitar vacaciones propias
Permite que una persona empleada pida sus propias vacaciones desde Mi perfil. Antylogic crea un `calendar_event` de tipo `staff_vacation`, de día completo, con estado `requested` y notas opcionales para que responsables con `vacation:manage` lo revisen.
En este artículo
Este flujo está pensado para empleados que necesitan pedir vacaciones sin pasar por correos o chats externos. La solicitud nace desde el perfil propio y queda conectada con el calendario de personal del local.
En el demo de España, el ejemplo operativo es Marta Ruiz en Grupo Marea Demo / Marea Gran Via. La solicitud se registra como pendiente y conserva el contexto necesario para validar saldo anual, bloqueos y permisos.
Antes de empezar
- Sesión autenticada con organización y ubicación activas; en el demo, Grupo Marea Demo y Marea Gran Via.
- Tener un empleado propio vinculado a la ubicación; en el runtime ES, Marta Ruiz con `STAFF_ID`.
- Disponer de permiso de ubicación `vacation:request` o `vacation:manage`.
- Elegir un rango válido de día completo en la zona horaria de la ubicación, `Europe/Madrid` para el demo.
- No superar `staff.vacation_days_total` ni coincidir con un bloqueo de vacaciones aplicable.
Instrucciones
- 1.
Abrir Mi perfil
Entra en `staff/profile` sin `staffId` para cargar el perfil propio. La pantalla muestra los bloques operativos del empleado, incluido `Vacaciones del año` cuando el usuario puede verlo.
- 2.
Iniciar la solicitud
En el bloque `Vacaciones del año`, pulsa `Solicitar vacaciones`. La acción aparece si existe empleado propio y el usuario tiene `vacation:request` o `vacation:manage`.
- 3.
Revisar el formulario
El formulario se abre en modo autoservicio con `kind=staff_vacation` y `preset=mine`. El empleado queda bloqueado en la persona usuaria y el estado funcional se fija como `requested`.
- 4.
Completar fechas y notas
Indica `Comienzo`, `Fin` y, si hace falta, `Notas`. Antylogic prepara un evento de día completo con inicio `00:00`, fin `23:59`, `staff_id`, zona horaria y notas guardadas como `payload.reason`.
- 5.
Enviar la solicitud
Pulsa `Solicitar vacaciones`. La app envía `POST /api/app/{orgId}/{locationId}/calendar-events` con `kind: "staff_vacation"`, `all_day: true` y `payload.status: "requested"`.
- 6.
Confirmar el resultado
Si la creación se acepta, la app muestra `Evento creado correctamente.` y vuelve a `StaffProfile`. La solicitud cuenta como vacaciones solicitadas y se notifica a responsables con `vacation:manage`.
- 7.
Usar Mi calendario si procede
Cuando `calendars/me` está disponible, el usuario también puede abrir el selector de creación y elegir `Solicitar vacaciones`; mantiene `preset=mine` y el empleado propio como destino.
Validaciones y límites
- `vacation:view` permite consultar superficies de vacaciones, pero no basta para enviar la solicitud.
- `Comienzo` y `Fin` deben parsearse como fechas válidas y la fecha de comienzo debe ser anterior a la de fin.
- Toda solicitud `staff_vacation` necesita `staffId`; si falta, la app pide seleccionar empleado.
- Con solo `vacation:request`, el backend fuerza `staff_id` al empleado asociado al usuario y `payload.status` a `requested`.
- El backend rechaza recurrencias para `staff_vacation`, claves de payload no permitidas, rangos inválidos y estados distintos de `requested`, `accepted` o `rejected`.
- La UI no envía `skip_blackout_validation`, por lo que los bloqueos de vacaciones siempre aplican.
- Las solicitudes en `requested` o `accepted` cuentan para el límite anual; `rejected` no cuenta.
- `calendars/me` puede no estar habilitado para un usuario solo request-only; la entrada fiable de autoservicio es `staff/profile`.
Resultado esperado
La solicitud queda registrada como evento de vacaciones propio en estado `requested`, visible después en el perfil y lista para revisión por responsables de vacaciones.