Asignaciones de Turnos
Las asignaciones permiten definir qué turnos cumplen los empleados durante un período determinado. Cada asignación tiene una fecha de inicio y se mantiene vigente hasta que comienza una nueva asignación.
Obtener todas las asignaciones
Obtiene la lista completa de asignaciones de turnos ordenadas por fecha de vigencia descendente. El listado no incluye el detalle de turnos y empleados (employeeShifts viene en null); para eso usá GET /shift-assignments/:assignment_id.
Método: GET /shift-assignments
Respuesta exitosa (200)
[
{
"id": 101,
"createdAt": "2026-07-01T10:00:00.000Z",
"updatedAt": "2026-07-01T10:00:00.000Z",
"deletedAt": null,
"validFrom": "2026-07-01T00:00:00-03:00",
"employeeShifts": null
}
]Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Exitoso |
| 500 | Error interno del servidor |
Obtener una asignación específica
Obtiene el detalle completo de una asignación por ID. Los turnos fijos se agrupan en fixedShifts por nombre de grupo, y los rotativos en rotationShifts, con un grupo por cada fecha de inicio de rotación.
Método: GET /shift-assignments/:assignment_id
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
assignment_id | string | ID de la asignación |
Respuesta exitosa (200)
{
"id": 101,
"createdAt": "2026-07-01T10:00:00.000Z",
"updatedAt": "2026-07-01T10:00:00.000Z",
"deletedAt": null,
"validFrom": "2026-07-01T00:00:00-03:00",
"fixedShifts": {
"grupo-a": {
"employees": [
{
"id": 161,
"createdAt": "2026-04-14T19:07:49.049Z",
"updatedAt": "2026-06-26T14:14:25.243Z",
"deletedAt": null,
"name": "Juan Sanchez",
"mobileID": null,
"mobileEnabled": false,
"faceRecognition": null,
"internalID": 12,
"dni": 11223322,
"email": null,
"phoneNumber": null,
"category": {
"id": 78,
"createdAt": "2026-04-14T19:07:48.957Z",
"updatedAt": "2026-04-14T19:07:48.957Z",
"deletedAt": null,
"name": "SECRETARIA",
"areaID": 42,
"area": {
"id": 42,
"createdAt": "2026-04-14T19:07:48.946Z",
"updatedAt": "2026-04-14T19:07:48.946Z",
"deletedAt": null,
"name": "ADMINISTRACION",
"colorCode": "#D4E3C7"
}
},
"archived": false
}
],
"shifts": [
{
"id": 44,
"createdAt": "2026-07-10T09:00:00.000Z",
"updatedAt": "2026-07-10T09:00:00.000Z",
"deletedAt": null,
"name": "Turno Manana",
"startsAt": 480,
"endsAt": 1020,
"availableDays": 62
}
]
}
},
"rotationShifts": [
{
"shift": {
"id": 12,
"createdAt": "2026-07-01T08:00:00.000Z",
"updatedAt": "2026-07-01T08:00:00.000Z",
"deletedAt": null,
"name": "Rotativo 4x2",
"steps": [
{
"id": 201,
"createdAt": "2026-07-01T08:00:00.000Z",
"updatedAt": "2026-07-01T08:00:00.000Z",
"deletedAt": null,
"order": 1,
"name": "Dia",
"dayOff": false,
"startsAt": 480,
"endsAt": 960,
"duration": 4
}
]
},
"groups": [
{
"rotationStartDate": "2026-06-25T00:00:00-03:00",
"employees": []
}
]
}
]
}En groups[].employees los empleados tienen el mismo formato que en fixedShifts.
Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Exitoso |
| 404 | Asignación no encontrada |
| 500 | Error interno del servidor |
Obtener la última asignación
Obtiene la última asignación por validFrom, con el mismo formato que GET /shift-assignments/:assignment_id. Puede filtrarse por asignaciones activas.
Método: GET /shift-assignments/last
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
active | string | ❌ | Si es true, devuelve solo asignaciones con validFrom <= ahora |
Respuesta exitosa (200)
{
"id": 102,
"createdAt": "2026-07-15T10:00:00.000Z",
"updatedAt": "2026-07-15T10:00:00.000Z",
"deletedAt": null,
"validFrom": "2026-07-15T00:00:00-03:00",
"fixedShifts": {},
"rotationShifts": []
}Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Exitoso |
| 404 | No hay asignaciones que cumplan |
| 500 | Error interno del servidor |
Crear una nueva asignación
Crea una asignación de turnos fijos y/o rotativos para empleados a partir de una fecha. La asignación siempre empieza a las 00:00 (en la zona horaria de la organización) del día indicado en validFrom.
fixedShiftses un objeto cuyas claves son nombres de grupo. Cada grupo asigna todos los turnos defixedShiftIDsa todos los empleados deemployeeIDs.rotationShiftsasigna turnos rotativos. Cada grupo indica desde qué fecha empieza la rotación (rotationStartDate, que no puede ser posterior avalidFrom) y qué empleados la cumplen.- Un empleado no puede tener turnos fijos y rotativos a la vez, ni más de un turno rotativo, ni el mismo turno fijo repetido.
- No se pueden asignar empleados archivados.
validFromno puede ser anterior a seis meses antes de la fecha de creación de la organización.- No se puede crear una asignación si ya existe otra que empieza en un día posterior.
Método: POST /shift-assignments
Body requerido
{
"validFrom": "2026-08-01T00:00:00-03:00",
"fixedShifts": {
"grupo-a": {
"employeeIDs": [161, 162],
"fixedShiftIDs": [44]
}
},
"rotationShifts": [
{
"rotationShiftID": 12,
"groups": [
{
"rotationStartDate": "2026-07-25T00:00:00-03:00",
"employeeIDs": [170, 171]
}
]
}
]
}Respuesta exitosa (200)
Retorna el ID de la asignación creada.
{
"assignmentID": 120
}Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Asignación creada exitosamente |
| 400 | Solicitud inválida, fecha demasiado antigua, empleado archivado, empleado asignado dos veces o rotationStartDate posterior a validFrom |
| 404 | Empleado o turno no encontrado |
| 409 | Ya existe una asignación que empieza en un día posterior |
| 500 | Error interno del servidor |
Actualizar una asignación
Actualiza una asignación existente por ID. La actualización reemplaza todos los valores actuales con los nuevos que se envíen, por eso mismo se deben enviar todos los datos.
Si createNewVersion es true y validFrom cambia, en lugar de modificar la asignación se crea una nueva a partir de esa fecha, y la respuesta devuelve el ID de la nueva.
Método: PUT /shift-assignments/:assignment_id
Body
{
"createNewVersion": false,
"validFrom": "2026-08-05T00:00:00-03:00",
"fixedShifts": {
"grupo-a": {
"employeeIDs": [161],
"fixedShiftIDs": [45]
}
},
"rotationShifts": []
}Respuesta exitosa (200)
{
"assignmentID": 120
}Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Actualizado exitosamente |
| 400 | Solicitud inválida, fecha demasiado antigua o empleado con turnos fijos y rotativos a la vez |
| 404 | Asignación, empleado o turno no encontrado |
| 409 | Ya hay otra asignación ese día, la nueva fecha cruza otra asignación o ya existe una asignación futura pendiente |
| 500 | Error interno del servidor |
Eliminar una asignación
Elimina una asignación de turnos por ID. Solo se puede eliminar la última asignación (la de validFrom más reciente).
Método: DELETE /shift-assignments/:assignment_id
Respuesta exitosa (200)
{
"message": "deleted successfuly",
"deleted": true
}Códigos de respuesta
| Código | Descripción |
|---|---|
| 200 | Eliminado exitosamente |
| 400 | La asignación no es la última |
| 404 | Asignación no encontrada |
| 500 | Error interno del servidor |

