Crear turnos
Cómo crear los turnos de Asistencia desde tu sistema de RR. HH. o de planificación, fijos o rotativos, con sus descansos y tolerancias.
Si tu organización usa Asistencia en Crehana y los horarios viven en otro sistema, podés crear los turnos por API en vez de cargarlos a mano. Un turno creado por API es igual a uno creado desde Crehana: se puede asignar, las marcas de la gente se comparan contra su horario y la puntualidad se clasifica con sus tolerancias.
La referencia completa está en Create 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. - Elegí el tipo de turno. Un turno fijo (
NON_ROTATING) repite el mismo horario todas las semanas: lunes a viernes de 9 a 18, por ejemplo. Un turno rotativo (ROTATING) repite un patrón de bloques de trabajo y descanso sin mirar el día de la semana: 4 días de trabajo y 2 de descanso, por ejemplo. - Un nombre por turno. El nombre es único entre los turnos activos de la
organización. Si ya existe, la respuesta es
409con el id del turno que lo tiene. - Guardá los ids de la respuesta. El
iddel turno es elshift_idque pide Asignar turnos; en un rotativo, elidde cada ciclo es elstart_cycle_id.
Un turno fijo de punta a punta
El 201 confirma que el turno existe. data.id es el shift_id para
asignarlo. Los días que no mandaste (sábado y domingo) vuelven como días de
descanso, y worked_minutes lo calculó Crehana a partir del horario.
Un turno rotativo
El patrón se repite en ese orden: 4 días de trabajo, 2 de descanso, 4 de
trabajo… Al asignar el turno, start_cycle_id dice con qué ciclo arranca la
persona el día start_date. Guardá el id de cada ciclo.
Los campos
shift_type
NON_ROTATING o ROTATING. Decide qué más va en el cuerpo: un turno fijo
lleva weekly_schedule; uno rotativo lleva cycles. Mandar el otro campo es
422.
name y description
name hasta 150 caracteres, único entre los turnos activos de la organización.
description es opcional, hasta 250. Los dos se guardan sin espacios al
principio ni al final.
weekly_schedule (turno fijo)
Una entrada por día de la semana, con day (MONDAY a SUNDAY), entry_time
y exit_time. Mandá solo los días laborables: los que faltan quedan como días
de descanso. Un día repetido es 422; ningún día laborable es 400.
Si preferís listar los 7, un día de descanso se manda con
"is_working_day": false y sin horario.
Con apply_same_schedule_to_all_working_days: true todos los días laborables
tienen que llevar el mismo horario y el mismo descanso; después, Crehana los
mantiene iguales cuando se edita uno.
cycles (turno rotativo)
Los bloques del patrón, en orden. Cada uno lleva cycle_type (WORK o REST)
y duration_days (al menos 1). Un bloque WORK lleva entry_time y
exit_time; un bloque REST no lleva horario. Hacen falta al menos un WORK
y un REST.
Las horas
Siempre en HH:MM de 24 horas: 09:00, 18:30, 23:00. Una salida menor que
la entrada es un turno nocturno: 22:00 a 06:00 termina al día
siguiente. Si un turno nocturno pisa la entrada del día siguiente (sale a las
06:00 del martes y el martes entra a las 05:00), la respuesta es 400.
Descansos: break_config
Sin break_config el turno no tiene descanso y ningún día ni ciclo puede
llevar datos de descanso. Con break_config se define cómo es el descanso a
nivel del turno, y en cada día o ciclo laboral va el descanso en sí:
deduction_method dice cómo se descuenta del tiempo trabajado: REAL
descuenta el descanso que la persona marcó; FIXED descuenta siempre el
configurado. Con break_counts_as_worked: true el descanso cuenta como
trabajado y no se descuenta.
Tolerancias: tolerance_config
Minutos de gracia antes y después del horario, cada uno con los eventos a los
que aplica (ENTRY, EXIT, BREAK). Una entrada dentro de la tolerancia
posterior no cuenta como tardanza.
BREAK solo se puede usar con un break_config. Los minutos no pueden ser
negativos y cada lado necesita al menos un evento.
worked_minutes y edit_worked_minutes
Por defecto Crehana calcula los minutos trabajados de cada día o ciclo: la
franja entre entrada y salida menos el descanso configurado (o la franja
completa con break_counts_as_worked). Si mandás worked_minutes (o
worked_minutes_per_day en un ciclo) sin edit_worked_minutes: true, se
ignora.
Con edit_worked_minutes: true vos fijás el valor y pasa a ser obligatorio en
cada día o ciclo laboral.
mark_association_window_hours
Cuántas horas antes de la entrada y después de la salida una marca todavía pertenece a este turno. Entre 1 y 12; por defecto 2. Subilo si tu gente suele marcar con mucha anticipación.
color
El color del turno en el calendario de Crehana: GRAY (por defecto),
PURPLE, BLUE, GREEN, BEIGE, ORANGE, PINK o YELLOW_GREEN.
Reintentos: el nombre protege contra duplicados
Si se corta la conexión y no sabés si el turno se creó, reenviá la misma
creación. Si ya existe un turno activo con ese nombre, la respuesta es 409
con detail.code: SHIFT_NAME_ALREADY_EXISTS y detail.shift_id con el id del
turno existente: guardalo y seguí con la asignación. No se crea un duplicado.
Ojo: el 409 dice que el nombre está tomado, no que el turno existente tenga
el mismo horario. Si cambiaste el horario, editalo desde Crehana o creá el
turno con otro nombre.
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. Guardá los ids de la respuesta.
- No edita, desactiva ni elimina turnos: eso se hace desde Crehana.
Lista de verificación
- Las credenciales son de un ADMIN de la organización.
-
shift_typeesNON_ROTATINGconweekly_schedule, oROTATINGconcycles. - Las horas van en
HH:MMy sabés que una salida menor que la entrada es un turno nocturno. - Si hay descanso, está
break_configy cada día o ciclo laboral trae su tramo o su duración. - Guardás
data.idy, en un rotativo, elidde cada ciclo para asignar el turno. - Tu integración trata el
409como “ya existe” y usadetail.shift_id. - Los
500y los cortes de red se reintentan. Los4xxse registran y no se reintentan.
