Cómo guardar un servicio con roles y empleados
Crea o actualiza un servicio de calendario junto con sus roles requeridos y empleados asignados. En Marea Gran Via, el flujo permite mantener el Servicio de comidas Gran Via guardando evento, requisitos y horarios de personal como una única operación.
En este artículo
El formulario de servicio reúne la información del servicio, los roles requeridos, los empleados asignados y la recurrencia. Al guardar, Antylogic envía todo como un bundle para que la planificación quede sincronizada.
Este flujo es útil para responsables de sala y operaciones que necesitan ajustar cobertura antes de un servicio: mínimos por rol, recomendados y horarios de empleados se revisan desde el mismo punto operativo.
Antes de empezar
- Tener una organización y ubicación activas, por ejemplo Grupo Marea Demo y Marea Gran Via.
- Contar con `service:view` y `staff-schedule:view` para abrir un servicio existente y cargar su bundle.
- Contar con `service:manage` para guardar cambios en el servicio.
- Contar con `staff-schedule:manage` cuando el bundle contiene o sincroniza horarios de personal.
- Para editar, abrir un `calendar_event` de tipo `service` perteneciente a la ubicación activa.
- Para un servicio público, disponer de plano y carta, por ejemplo Plano demo 1 y Carta Gran Via.
- Para añadir cobertura, tener roles como Sala, Cocina y Barra y empleados como Marta Ruiz, Lucia Navarro, Diego Serrano y Alba Castro.
Instrucciones
- 1.
Abrir el servicio
Entra en el calendario de servicios y abre un servicio existente o crea uno nuevo. Para editar una ocurrencia concreta de un servicio recurrente, la ruta incluye `occurrenceStart`.
- 2.
Completar la información
En la pestaña Info, revisa título, inicio, fin y visibilidad. Si el servicio es público, selecciona plano y carta; si es interno, esos recursos no son obligatorios.
- 3.
Definir roles requeridos
En Roles requeridos, añade una fila por rol que deba cubrir el servicio. Cada rol tiene mínimo y recomendado; la interfaz evita repetir roles.
- 4.
Asignar empleados
En Empleados, añade horarios seleccionando empleado, rol y modo horario. El modo relativo guarda offsets respecto al inicio y fin del servicio; el modo absoluto usa fechas propias.
- 5.
Guardar el bundle
Pulsa Guardar. La app valida el borrador y envía `event`, `staff_requirements` y `staff_schedules` en una única operación: creación con `POST /api/app/{orgId}/{locationId}/calendar-events/service-bundle` o edición directa con `PUT /api/app/{orgId}/{locationId}/calendar-events/{eventId}/service-bundle`.
- 6.
Elegir alcance si es recurrente
Si el servicio pertenece a una recurrencia, el guardado abre el modal de alcance. El operador elige si aplicar el cambio solo a esta ocurrencia o a los servicios futuros mediante el flujo de split.
- 7.
Revisar el resultado
Tras guardar, la UI muestra éxito, enseña `operation_warnings` si llegan y vuelve al calendario de origen con la planificación refrescada.
Validaciones y límites
- El formulario solo aplica a eventos con `kind=service`; no se puede cambiar el tipo del evento.
- No se pueden editar servicios ya iniciados; la UI bloquea el formulario y backend puede devolver `error.calendar.service.started_locked`.
- `starts_at` y `ends_at` deben existir y `starts_at < ends_at`.
- La visibilidad solo puede ser `public` o `internal`; para `public`, backend requiere `layout_id` y `catalog_id` como UUID válidos.
- Cada requisito necesita `staff_role_id`; backend rechaza roles duplicados con `rol duplicado`.
- La UI exige `min_count` y `recommended_count` enteros de al menos 1 antes de construir el payload.
- Cada horario necesita `staff_id` y `payload.role_id`; `payload.parent_event_id` debe apuntar al servicio padre.
- `time_mode` solo acepta `absolute` o `relative`; en modo relativo los offsets deben ser enteros y en modo absoluto no se aceptan offsets.
- Al eliminar una fila del formulario y guardar, la sincronización borra el requisito u horario omitido.
- Backend puede devolver `problems` si la cobertura queda por debajo del mínimo y `warnings` si queda por debajo del recomendado.
Resultado esperado
El servicio queda guardado como una unidad transaccional: evento, roles requeridos y horarios de empleados se actualizan juntos, con avisos de cobertura visibles para el operador y calendario refrescado al volver.