Asignar turnos
Cómo asignar a tu gente sus turnos de Asistencia desde tu sistema de RR. HH. o de planificación.
Si tu organización usa Asistencia en Crehana y la planificación de turnos vive en otro sistema, podés mandar las asignaciones por API en vez de cargarlas a mano. Una asignación hecha por API es igual a una hecha desde Crehana: a partir de esas fechas las marcas de la persona se comparan contra ese turno, la puntualidad se clasifica con sus tolerancias y la gestión diaria se recalcula.
La referencia completa está en Assign Shift.
Antes de empezar
- Credenciales de administrador. Las credenciales de la API tienen que ser
de una cuenta ADMIN de la organización. Con otras, la respuesta es
403. - El turno ya existe en Crehana. Cada turno tiene un id (
shift_id) y, si es rotativo, sus ciclos también tienen id (start_cycle_id). Si el turno lo creás por API con Crear turnos, la respuesta trae los dos ids: guardalos en tu sistema. Si el turno se creó desde Crehana, hoy la API no lo lista: pedile los ids a tu contacto de Crehana. - El id de cada persona.
user_idslleva ids centralizados: eluser.iddeGET /org/{organization_slug}/users/user-organizations/. No es el id de learning (learning_user_id). Todas las personas tienen que pertenecer a la organización: si alguna no, la respuesta es404con los ids que fallaron y no se asigna a nadie.
Una asignación de punta a punta
El 201 confirma que las personas de assignments ya tienen el turno en esas
fechas.
Los campos
shift_id
El id del turno, tal como existe en Asistencia. Tiene que ser de tu
organización y estar activo; si no, la respuesta es 404.
user_ids
Entre 1 y 100 personas por llamada, sin repetir. Para más gente, hacé varias llamadas.
La llamada es todo o nada: si una sola persona no pertenece a la organización, o no puede tomar el turno (ver Si la persona ya tiene un turno), no se asigna a nadie y la respuesta dice quién falló. Para que una persona no frene al resto, mandá una llamada por persona.
start_date y end_date
Días calendario en formato YYYY-MM-DD, los dos inclusive. end_date es
opcional: sin él, la asignación queda abierta hasta que se cambie desde
Crehana o se asigne otro turno.
Una asignación puede empezar en el pasado. En ese caso Crehana vuelve a calcular la asistencia de esos días (hasta 30 días hacia atrás) contra el turno nuevo.
start_cycle_id
Solo para turnos rotativos: el id del ciclo con el que arranca la rotación
el día start_date. Por ejemplo, en un turno “4 días de trabajo, 2 de
descanso”, decide si la persona empieza trabajando o descansando.
- Turno rotativo sin
start_cycle_id→400. - Turno fijo con
start_cycle_id→400.
Si la persona ya tiene un turno
Hoy una persona tiene un turno por día. Si ya tenía un turno que se solapa con el nuevo en esas fechas, la asignación anterior se desactiva completa (también los días que quedaban fuera del período nuevo) y el turno nuevo la reemplaza. Por eso, para mover a alguien de turno a partir de una fecha alcanza con mandar la asignación nueva desde esa fecha; y si querés conservar parte del turno anterior, mandá después una asignación con ese turno para los días que quedaron sin cubrir.
Crehana va a permitir que una persona tenga más de un turno en el mismo día.
Cuando eso esté activo, un turno que se solape en horario con otro que la
persona ya tiene no se reemplaza: la asignación se rechaza con 409 y
nadie recibe el turno. Preparate para ese 409 desde ahora; su forma ya está
definida.
Un choque se informa con un detalle por persona:
Ante un 409, resolvé el choque desde Crehana (quitando o acortando el turno
anterior) y volvé a mandar la asignación.
Reintentos: mandar dos veces es seguro
Si se corta la conexión y no sabés si la asignación llegó, reenviala igual. Las
personas que ya tenían exactamente ese turno en ese período no se duplican:
vienen en already_assigned_user_ids y no en assignments. Si no había nada
nuevo para nadie, la respuesta es 200 con code: attendance-004.
Evitá reenviar en paralelo: si dos copias llegan exactamente a la vez, una se
guarda y la otra puede responder 409 (INTEGRITY_ERROR).
Respuestas
Los textos de errors son para un log o para una persona: programá contra el
status y, si hace falta, contra detail.code. Más en
Errores.
Lo que la API no hace (todavía)
- No lista los turnos ni sus ciclos. Los ids te los da Crehana.
- No quita ni acorta asignaciones: eso se hace desde Crehana.
- No crea ni edita turnos.
Lista de verificación
- Las credenciales son de un ADMIN de la organización.
- Tenés el
shift_iddel turno y, si es rotativo, elstart_cycle_id. - Cada persona pertenece a la organización y tenés su
user_idcentralizado. - Las fechas van en
YYYY-MM-DDyend_dateno es anterior astart_date. - Si alguien ya tenía turno en esas fechas, sabés que el anterior se desactiva completo.
- Tu integración ya contempla el
409por choque de turnos. - Los
500y los cortes de red se reintentan. Los4xxse registran y no se reintentan.
