Resuelve un problema de generación de cambios de una SolveShiftGenerationRequest
determinada mediante la generación de cambios a partir de plantillas de turnos determinadas para cubrir la demanda de los empleados.
Solicitud HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
La URL usa la sintaxis de la transcodificación gRPC.
Cuerpo de la solicitud
El cuerpo de la solicitud contiene datos con la siguiente estructura:
Representación JSON |
---|
{ "solverConfig": { object ( |
Campos | |
---|---|
solverConfig |
Opcional. Son los parámetros del solucionador. |
shiftTemplates[] |
Obligatorio. Conjunto de plantillas de turnos que especifican reglas para generar cambios. |
employeeDemands[] |
Obligatorio. Demanda total de los empleados que deben cubrir los turnos generados por |
Cuerpo de la respuesta
Respuesta al problema de generación de turnos. Si la solutionStatus
que se muestra es SOLVED
, entonces se muestra un conjunto de cambios válidos generados por la resolución en employeeSchedules
. Para un programa de turnos válido, se cumplen las siguientes propiedades:
- Cada cambio generado en
employeeSchedules
cumple con las reglas especificadas en elShiftTemplate
correspondiente. - Cada evento seleccionado en cada turno cumple con las reglas especificadas en el
ShiftTemplate.Event
correspondiente. - La cantidad total de empleados asignados al conjunto de turnos generados desde la misma ShiftTemplate no supera el
maximumEmployeeCount
de esa plantilla. - El conjunto de empleados asignados cubre la demanda en cada intervalo determinado.
Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:
Representación JSON |
---|
{ "solutionStatus": enum ( |
Campos | |
---|---|
solutionStatus |
Estado de la solución devuelta. Si |
employeeSchedules[] |
Conjunto de turnos generados por la resolución junto con la cantidad de empleados asignados a cada programa. |
SolverConfig
Especifica parámetros adicionales para resolver el problema de generación de turnos.
Representación JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Campos | |
---|---|
timeLimit |
Tiempo máximo que el solucionador debe dedicar al problema Si no está configurado, la configuración predeterminada es de 1 minuto. La elección de un límite de tiempo debe depender del tamaño del problema. Por ejemplo, cuando se resuelve una instancia de 7 días con 2 Este valor no es un límite estricto y no considera la sobrecarga de comunicación. La latencia esperada para resolver el problema puede superar ligeramente este valor. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
multiDaySchedule |
Si es verdadero, el solucionador genera |
shiftEventsCanChange |
Si es verdadero, los elementos |
ShiftTemplate
Plantilla que especifica las reglas para generar cambios. Un turno es una unidad de trabajo que especifica una hora de inicio y finalización, y puede contener eventos (p.ej., almuerzo, descansos, etcétera). Se asignará un cambio a una fecha específica en la respuesta.
Representación JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Campos | |
---|---|
id |
Es el ID único de esta plantilla. |
earliestStartTime |
Hora más temprana del día en que puede comenzar un cambio. Este valor se especifica con horas y minutos; se ignoran los segundos y los nanos. |
latestStartTime |
Hora más reciente del día en que puede comenzar un turno. Este valor se especifica con horas y minutos; se ignoran los segundos y los nanos. Si este valor es inferior a |
durationMinutes |
La duración fija de un cambio que genera esta plantilla. |
startTimeIncrementMinutes |
El incremento de tiempo (en minutos) que se usa para generar el conjunto de posibles horas de inicio entre la(s) |
daysOffCountPerWeek |
Cantidad fija de días libres por semana. Un empleado tiene un día libre determinado si no está asignado a un turno que comience ese día. Una semana es de 7 días y comienza el domingo. |
eventTemplates[] |
Reglas para generar eventos en cada turno. Se incluirá exactamente un evento en cada turno para cada Evento especificado. |
minimumIntereventGapMinutes |
Cantidad mínima de minutos entre el final de un evento y el inicio del siguiente. |
maximumEmployeeCount |
Cantidad máxima de empleados que pueden asignarse a todos los turnos generados por esta plantilla. |
TimeOfDay
Representa una hora del día. La fecha y la zona horaria no son significativas o se especifican en otro lugar. Una API puede optar por permitir segundos bisiestos. Los tipos relacionados son google.type.Date
y google.protobuf.Timestamp
.
Representación JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Campos | |
---|---|
hours |
Horas del día en formato de 24 horas. Debe ser del 0 al 23. Una API puede permitir el valor “24:00:00” para casos como el horario de cierre de empresas. |
minutes |
Minutos de horas del día. Debe ser un valor entre 0 y 59. |
seconds |
Segundos de minutos de la hora. Por lo general, debe ser un valor entre 0 y 59. Una API puede permitir el valor 60 si permite segundos bisiestos. |
nanos |
Fracciones de segundos en nanosegundos. Debe ser un valor entre 0 y 999,999,999. |
EventTemplate
Plantilla que especifica reglas para generar un solo evento que ocurre durante un cambio. Un evento puede representar una reunión, un descanso, un almuerzo, etcétera.
Representación JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Campos | |
---|---|
id |
Es el ID único de esta plantilla. |
minimumMinutesAfterShiftStart |
Cantidad mínima de minutos después del comienzo de un turno en los que puede comenzar este evento. |
maximumMinutesAfterShiftStart |
Cantidad máxima de minutos después del comienzo de un turno en los que puede comenzar este evento. |
durationMinutes |
La duración fija de este evento en minutos. |
startTimeIncrementMinutes |
El incremento de tiempo (en minutos) que se usa para generar el conjunto de posibles horas de inicio del evento entre la(s) |
EmployeeDemand
Especifica la cantidad de empleados necesarios para cubrir la demanda en el intervalo DateTime determinado.
Representación JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Inicio del intervalo para la demanda determinada (inclusive). Estos valores se leen hasta el minuto. Se ignoran los segundos y todas las unidades más pequeñas. |
endDateTime |
Final del intervalo de tiempo para la demanda determinada (excluido). Estos valores se leen hasta el minuto. Se ignoran los segundos y todas las unidades más pequeñas. |
employeeCount |
Cantidad de empleados necesarios para cubrir la demanda de este intervalo. |
ShiftGenerationSolutionStatus
Estado de la solución proporcionado en la respuesta de un solucionador.
Enumeradores | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Estado no especificado para la respuesta. |
SHIFT_GENERATION_SOLVED |
El solucionador encontró una solución en el límite de tiempo proporcionado. |
SHIFT_GENERATION_NOT_SOLVED |
Un problema impidió que la herramienta de resolución generara cambios. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
No se pudieron generar cambios para cubrir la demanda dentro del límite de tiempo determinado. |
EmployeeSchedule
Es una lista ordenada de turnos que corresponde a un único ShiftTemplate
que se asignará a un número de empleados.
Representación JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Campos | |
---|---|
shiftTemplateId |
ID de la plantilla que se usó para generar este conjunto de cambios. |
shifts[] |
Lista de turnos a los que se asigna la cantidad de |
employeeCount |
Cantidad de empleados que se deben asignar a este conjunto de turnos para cubrir la demanda. |
ShiftWithEvents
Especifica la fecha de inicio y finalización, junto con una lista de eventos fijos de un cambio generado por la resolución.
Representación JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Fecha y hora de inicio del cambio. Este valor se especifica en minutos; no se proporcionan los segundos ni las unidades más pequeñas. |
endDateTime |
Fecha y hora de finalización del cambio. Este valor se especifica en minutos; no se proporcionan los segundos ni las unidades más pequeñas. |
events[] |
Lista de eventos incluidos en este cambio, asignados exactamente a los |
Evento
Especifica la fecha y hora de inicio y finalización de un evento específico en un cambio generado por la resolución.
Representación JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Campos | |
---|---|
eventTemplateId |
ID de la plantilla que se usó para generar este evento. |
startDateTime |
Fecha y hora de inicio del evento Este valor se especifica en minutos; no se proporcionan los segundos ni las unidades más pequeñas. |
endDateTime |
Fecha y hora de finalización del evento Este valor se especifica en minutos; no se proporcionan los segundos ni las unidades más pequeñas. |