Soluciona um problema de geração de turnos com o SolveShiftGenerationRequest
especificado, gerando turnos com base em modelos de turnos fornecidos para atender à demanda de funcionários.
Solicitação HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
O URL usa a sintaxe de transcodificação gRPC.
Corpo da solicitação
O corpo da solicitação contém dados com a seguinte estrutura:
Representação JSON |
---|
{ "solverConfig": { object ( |
Campos | |
---|---|
solverConfig |
Opcional. Parâmetros para o solucionador. |
shiftTemplates[] |
Obrigatório. Conjunto de modelos de turno que especificam regras para gerar turnos. |
employeeDemands[] |
Obrigatório. Demanda total dos funcionários que os turnos gerados por |
Corpo da resposta
Resposta para o problema de geração de turno. Se o solutionStatus
retornado for SOLVED
, um conjunto de mudanças válidas geradas pelo solucionador será retornado em employeeSchedules
. Para uma programação de turnos válida, as seguintes propriedades são mantidas:
- Cada mudança gerada em
employeeSchedules
segue as regras especificadas noShiftTemplate
correspondente. - Cada evento selecionado em cada turno segue as regras especificadas no
ShiftTemplate.Event
correspondente. - O número total de funcionários atribuídos ao conjunto de turnos gerados com o mesmo ShiftTemplate não excede
maximumEmployeeCount
desse modelo. - O conjunto de funcionários atribuídos abrange a demanda em todos os intervalos.
Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:
Representação JSON |
---|
{ "solutionStatus": enum ( |
Campos | |
---|---|
solutionStatus |
Status da solução retornada. Se |
employeeSchedules[] |
Conjunto de turnos gerados pelo solucionador com o número de funcionários atribuídos a cada programação. |
demandCoverageViolations[] |
Violações de cobertura da demanda com base no |
SolverConfig
Especifica parâmetros adicionais para resolver o problema de geração de Shift.
Representação JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Campos | |
---|---|
timeLimit |
O tempo máximo que o solucionador deve gastar no problema. Se não for definido, o padrão será um minuto. A escolha de um limite de tempo depende do tamanho do problema. Como exemplo, ao resolver uma instância de 7 dias com 2 Esse valor não é um limite fixo e não considera a sobrecarga de comunicação. A latência esperada para resolver o problema pode exceder um pouco esse valor. Duração em segundos com até nove dígitos fracionários, terminando em " |
multiDaySchedule |
Se verdadeiro, o solucionador gera |
shiftEventsCanChange |
Se verdadeiro, os |
ShiftTemplate
Modelo que especifica regras para gerar turnos. Um turno é uma unidade de trabalho que especifica um horário de início e de término e pode conter eventos (como almoço, intervalos etc). Um turno será atribuído a uma data específica na resposta.
Representação JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Campos | |
---|---|
id |
ID exclusivo desse modelo. |
earliestStartTime |
Primeiro horário do dia em que um turno pode começar. Esse valor é especificado com horas e minutos. segundos e nanos são ignorados. |
latestStartTime |
É o último horário do dia em que uma mudança pode começar. Esse valor é especificado com horas e minutos. segundos e nanos são ignorados. Se esse valor for menor que |
durationMinutes |
Duração fixa de um turno gerado por este modelo. |
startTimeIncrementMinutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início entre |
daysOffCountPerWeek |
Número fixo de dias de folga por semana. Um funcionário tem um determinado dia de folga se não for designado para um turno que comece nesse dia. Uma semana dura sete dias e começa no domingo. |
eventTemplates[] |
Regras para gerar eventos para cada turno. Exatamente um evento será incluído em cada turno para cada evento especificado. |
minimumIntereventGapMinutes |
Mínimo de minutos entre o fim de um evento e o início de outro. |
maximumEmployeeCount |
Número máximo de funcionários que podem ser atribuídos a todos os turnos gerados por este modelo. |
TimeOfDay
Representa um horário do dia. A data e o fuso horário não são relevantes ou são especificados em outro lugar. Uma API pode permitir segundos bissextos. Os tipos relacionados são google.type.Date
e google.protobuf.Timestamp
.
Representação JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Campos | |
---|---|
hours |
Horas do dia no formato de 24 horas. Precisa ser de 0 a 23. Uma API pode permitir o valor "24:00:00" para o horário de fechamento da empresa, por exemplo. |
minutes |
Minutos da hora do dia. Precisa ser de 0 a 59. |
seconds |
Segundos do minutos do horário. Normalmente precisa ser de 0 a 59. Uma API pode permitir o valor 60 se permitir segundos bissextos. |
nanos |
Frações de segundos em nanossegundos. Precisa ser de 0 a 999.999.999. |
EventTemplate
Modelo que especifica regras para gerar um único evento que ocorre durante um turno. Um evento pode representar uma reunião, intervalo, almoço etc.
Representação JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Campos | |
---|---|
id |
ID exclusivo desse modelo. |
minimumMinutesAfterShiftStart |
Número mínimo de minutos após o início de um turno para que este evento possa começar. |
maximumMinutesAfterShiftStart |
Número máximo de minutos após o início de um turno que este evento pode iniciar. |
durationMinutes |
Duração corrigida em minutos deste evento. |
startTimeIncrementMinutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início do evento entre |
EmployeeDemand
Especifica o número de funcionários necessários para cobrir a demanda em um determinado intervalo DateTime.
Representação JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Início do intervalo de tempo da demanda especificada (inclusive). Esses valores são lidos até os minutos; segundos, e todas as unidades menores serão ignoradas. |
endDateTime |
Fim do intervalo de tempo da demanda em questão (exclusivo). Esses valores são lidos até os minutos; segundos, e todas as unidades menores serão ignoradas. |
employeeCount |
Número de funcionários necessários para cobrir a demanda desse intervalo. |
ShiftGenerationSolutionStatus
Status da solução fornecido na resposta de um solucionador.
Enums | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Status não especificado para a resposta. |
SHIFT_GENERATION_SOLVED |
O solucionador encontrou uma solução no limite de tempo fornecido. |
SHIFT_GENERATION_NOT_SOLVED |
Um problema impediu que o solucionador gerasse mudanças. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Não foi possível gerar os turnos para cobrir a demanda dentro do limite de tempo. |
EmployeeSchedule
Uma lista ordenada de turnos correspondente a uma única ShiftTemplate
que será atribuída a vários funcionários.
Representação JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Campos | |
---|---|
shiftTemplateId |
ID do modelo usado para gerar esse conjunto de turnos. |
shifts[] |
Lista de turnos a que |
employeeCount |
Número de funcionários que devem ser atribuídos a esse conjunto de turnos para cobrir a demanda. |
ShiftWithEvents
Especifica as datas de início e término com uma lista de eventos fixos de uma mudança gerada pelo solucionador.
Representação JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Data e hora de início do turno. Esse valor é especificado até o minuto. segundos e unidades menores não são fornecidas. |
endDateTime |
Data e hora de término do turno. Esse valor é especificado até o minuto. segundos e unidades menores não são fornecidas. |
events[] |
Lista de eventos incluídos nesse turno, mapeados exatamente para e na mesma ordem que os |
Evento
Especifica o DateTime de início e término de um evento específico em uma mudança gerada pelo solucionador.
Representação JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Campos | |
---|---|
eventTemplateId |
ID do modelo usado para gerar esse evento. |
startDateTime |
Data e hora de início do evento. Esse valor é especificado até o minuto. segundos e unidades menores não são fornecidas. |
endDateTime |
Data e hora de término do evento. Esse valor é especificado até o minuto. segundos e unidades menores não são fornecidas. |
DemandCoverageViolation
Especifica a violação de cobertura da demanda para o intervalo especificado. A demanda de funcionários é a mesma durante todo o intervalo especificado.
Representação JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Data e hora de início do intervalo de demanda (inclusivo). Esse valor é especificado até o minuto. |
endDateTime |
Data e hora de término do intervalo de demanda (não incluso). Esse valor é especificado até o minuto. |
coverageViolation |
Violação de cobertura durante o intervalo especificado. Um valor positivo indica que a demanda foi supercoberta e um valor negativo indica que ela está supercoberta. |