Method: scheduling.solveShiftScheduling

Soluciona um problema de programação de turnos fixo do SolveShiftSchedulingRequest fornecido, atribuindo funcionários a turnos de modo que os as preferências de programação são maximizadas e as violações de restrições de agendamento são minimizadas.

Solicitação HTTP

POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling

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
{
  "requestId": string,
  "solveParameters": {
    object (SolveParameters)
  },
  "employees": [
    {
      object (Employee)
    }
  ],
  "shifts": [
    {
      object (Shift)
    }
  ],
  "coverageRequirements": [
    {
      object (CoverageRequirement)
    }
  ],
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "locationIds": [
    string
  ],
  "budgetRequirements": [
    {
      object (BudgetRequirement)
    }
  ],
  "assignmentsHint": [
    {
      object (ShiftAssignment)
    }
  ]
}
Campos
requestId

string

ID do problema ou da solicitação.

solveParameters

object (SolveParameters)

Parâmetros para controlar uma única solução do problema.

employees[]

object (Employee)

Todos os funcionários disponíveis a serem programados.

shifts[]

object (Shift)

Todos os turnos para formar o cronograma.

coverageRequirements[]

object (CoverageRequirement)

Requisitos de cobertura para todo o horizonte de planejamento. Elas especificam o número de funcionários que devem desempenhar cada função ou ter uma habilidade durante um período ou uma lista de IDs de turno. Todos os requisitos de cobertura precisam ser especificados com períodos ou uma lista de IDs de turnos, mas não com ambos. Os períodos (se informados) dos requisitos de cobertura não podem se sobrepor para cada local. O nível de prioridade padrão para cada uma dessas restrições é PRIORITY_MANDATORY para os requisitos da função e PRIORITY_LOW para os requisitos de habilidade. Confira o tipo enumerado Priority para saber mais.

roleIds[]

string

Lista de todas as funções possíveis dos funcionários. Cada funcionário precisa ter pelo menos uma função que possa ser atribuída a ele em um turno. Uma função se refere a uma atribuição de trabalho específica durante um turno (ou seja, enfermeiro, chefe executivo, garçom etc.). Quando um funcionário é atribuído a um turno, ele também recebe uma única função específica.

skillIds[]

string

Lista de todas as habilidades possíveis na força de trabalho. Uma habilidade se refere a qualquer qualificação extra que um funcionário possa ter que não esteja relacionada a um trabalho específico atribuído a ela (ou seja, certificações, idiomas falados etc.). Esta lista pode estar vazia. Quando um funcionário é designado para um turno, ele deve ter todas as habilidades necessárias para esse turno.

locationIds[]

string

Lista de todos os locais possíveis para o conjunto de turnos na programação. Esta lista pode estar vazia. Especificar locais diferentes pode ser útil quando, por exemplo, um gerente de enfermagem quer agendar muitos enfermeiros de diferentes unidades de um hospital ou, por outro exemplo, um gerente de hotel quer agendar funcionários em vários hotéis.

budgetRequirements[]

object (BudgetRequirement)

Especificação de orçamento para o problema de agendamento. O nível de prioridade padrão para cada um desses requisitos é PRIORITY_LOW. Confira o tipo enumerado Priority para saber mais.

assignmentsHint[]

object (ShiftAssignment)

Mude as atribuições para usar como uma solução provisória (também conhecida como dica de solução) para o problema de agendamento. As dicas de atribuição serão ignoradas se a atribuição contradizer um turno não atribuível ou uma solicitação de programação.

Corpo da resposta

Resposta da API de programação da força de trabalho. Para cada resposta, o shiftAssignments vai estar vazio se o solutionStatus retornado for NOT_SOLVED_DEADLINE_EXCEEDED ou INFEASIBLE. Se o solutionStatus retornado for OPTIMAL ou FEASIBLE, uma atribuição de turno válida será retornada em shiftAssignments. Para uma atribuição de turno válida, as seguintes propriedades são mantidas:

  1. Cada ID de funcionário está contido no conjunto de funcionários fornecido na solicitação.
  2. Cada ID de função atribuído ao funcionário está contido no conjunto de IDs de função do funcionário em questão.
  3. Cada ID de turno está contido no conjunto de turnos fornecido na solicitação.
  4. Cada ID de turno não é um dos IDs de turno não atribuíveis do funcionário em questão.
  5. Um funcionário nunca será atribuído a dois turnos sobrepostos.
  6. Na programação especificada, nenhuma das restrições ou solicitações com nível de prioridade PRIORITY_MANDATORY foi violada.

Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:

Representação JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Campos
requestId

string

O ID da solicitação à qual esta resposta está associada.

solutionStatus

enum (SolutionStatus)

Status da solução retornada. Se a solução não for viável ou otimizada, outros campos no proto poderão ficar vazios. Se o status for NOT_SOLVED_DEADLINE_EXCEEDED, significa que o limite de tempo foi atingido sem que houvesse uma solução viável ou determinasse se existe uma solução viável. As solicitações podem ser inviáveis se as restrições do nível de prioridade MANDATORY não puderem ser atendidas.

shiftAssignments[]

object (ShiftAssignment)

Lista de todas as atribuições. Cada ShiftAssignment especifica um funcionário, o turno a que ele é atribuído e a função que ele deve desempenhar nesse turno.

statusMessage

string

Se solutionStatus não for o ideal, este campo poderá conter mais informações sobre o solucionador.

SolveParameters

Parâmetros que controlam uma única solução do problema da programação de turnos.

Representação JSON
{
  "timeLimit": string
}
Campos
timeLimit

string (Duration format)

O tempo máximo que o solucionador deve gastar no problema. Se não for definido, o padrão será um minuto.

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 "s". Exemplo: "3.5s".

Funcionário

Um funcionário da força de trabalho a ser agendado.

Representação JSON
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
Campos
id

string

ID exclusivo atribuído a este funcionário.

roleIds[]

string

IDs de funções que este funcionário pode realizar. É preciso especificar pelo menos um papel. Quando um funcionário é atribuído a um turno, ele também recebe uma única função dessa lista. O funcionário pode receber diferentes funções durante a janela de agendamento.

skillIds[]

string

IDs de habilidade desse funcionário. Esta lista pode estar vazia. Quando um funcionário é designado para um turno, ele usa qualquer subconjunto das habilidades listadas aqui para cobrir os requisitos de habilidade durante todo o turno atribuído.

shiftPreferences[]

object (ShiftPreference)

Mudar as preferências desse funcionário. Os turnos especificados aqui representam aqueles a que o funcionário gostaria de ser designado durante a janela de agendamento. Os IDs de turno especificados em shiftPreferences precisam ser exclusivos. O solucionador vai tentar maximizar a soma dos valores de ShiftPreference.preference em todas as shiftPreferences que forem atendidas.

schedulingConstraints[]

object (SchedulingConstraint)

Lista de restrições de agendamento para esse funcionário. O nível de prioridade padrão para cada uma dessas restrições é PRIORITY_MEDIUM. Confira o tipo enumerado Priority para saber mais.

resourceConstraints[]

object (ResourceConstraint)

Outras restrições de programação não especificadas em schedulingConstraints podem ser adicionadas aqui a resourceConstraints. Um ResourceConstraint é uma representação mais abstrata para limitar os recursos de um funcionário. O nível de prioridade padrão para cada uma dessas restrições é PRIORITY_MEDIUM. Confira o tipo enumerado Priority para saber mais.

shiftRequests[]

object (ShiftRequest)

Lista de solicitações de turno do funcionário. A solicitação pode ser para que um funcionário seja atribuído ou não a turnos específicos. Qualquer atribuição de agendamento fixo para o funcionário pode ser representada por uma ShiftRequest com prioridade PRIORITY_MANDATORY. Um ID de turno pode aparecer em, no máximo, uma solicitação de agendamento para esse funcionário. O nível de prioridade padrão para cada uma dessas solicitações é PRIORITY_LOW. Confira o tipo enumerado Priority para saber mais.

hourlyContract

object (HourlyContract)

Contrato que especifica taxas horárias regulares e extras para o funcionário.

ShiftPreference

Uma preferência numérica por um ID de turno específico.

Representação JSON
{
  "shiftId": string,
  "preference": integer
}
Campos
shiftId

string

ID do turno para o qual a preferência é especificada.

preference

integer

Valores maiores de preferência indicam uma mudança mais desejável.

SchedulingConstraint

Restrição de programação específica para determinado funcionário. A restrição especificada é aplicada apenas durante o intervalo [startDateTime, endDateTime) determinado.

Representação JSON
{
  "priority": enum (Priority),
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },

  // Union field type can be only one of the following:
  "minimumMinutes": integer,
  "maximumMinutes": integer,
  "minimumConsecutiveWorkDays": integer,
  "maximumConsecutiveWorkDays": integer,
  "minimumShiftCount": integer,
  "maximumShiftCount": integer,
  "minimumRestMinutes": integer
  // End of list of possible types for union field type.
}
Campos
priority

enum (Priority)

Nível de prioridade para esta restrição de programação. A prioridade padrão para todas as restrições de programação é PRIORITY_MEDIUM.

startDateTime

object (DateTime)

O horário de início em que essa restrição de programação se aplica (inclusivo).

endDateTime

object (DateTime)

O horário de término em que esta restrição de programação se aplica (exclusivo).

Campo de união type. O tipo de restrição especificada. Cada restrição é aplicada somente dentro do período especificado acima. type pode ser apenas de um dos tipos a seguir:
minimumMinutes

integer

Número mínimo de minutos que o funcionário pode trabalhar. Se o funcionário for atribuído a um turno que se sobrepõe (total ou parcialmente) à janela de tempo, o número de minutos que o turno se sobrepõe à janela de tempo será incluído nessa contagem.

maximumMinutes

integer

Número máximo de minutos que o funcionário pode trabalhar na janela de tempo. Se o funcionário for atribuído a um turno que se sobrepõe (total ou parcialmente) à janela de tempo, o número de minutos que o turno se sobrepõe à janela de tempo será incluído nessa contagem.

minimumConsecutiveWorkDays

integer

Número mínimo de dias consecutivos em que o funcionário pode trabalhar. Um funcionário trabalha em um dia específico se receber um turno que começa nesse mesmo dia. Todos os turnos atribuídos ao funcionário que começam na janela de tempo são incluídos nessa contagem.

maximumConsecutiveWorkDays

integer

Número máximo de dias consecutivos em que o funcionário pode trabalhar. Um funcionário trabalha em um dia específico se receber um turno que começa nesse mesmo dia. Todos os turnos atribuídos ao funcionário que começam na janela de tempo são incluídos nessa contagem.

minimumShiftCount

integer

Número mínimo de turnos em que o funcionário pode trabalhar. Qualquer turno atribuído ao funcionário e que se sobreponha totalmente à janela de tempo é incluído nessa contagem.

maximumShiftCount

integer

Número máximo de turnos em que o funcionário pode trabalhar. Qualquer turno atribuído ao funcionário e que se sobreponha totalmente à janela de tempo é incluído nessa contagem.

minimumRestMinutes

integer

Número mínimo de minutos que o funcionário precisa descansar após o final de um turno antes de ser atribuído a outro. Essa restrição se aplica a todos os pares de turnos totalmente incluídos em [startDateTime, endDateTime].

Prioridade

O nível de prioridade para qualquer restrição no cronograma de um funcionário ou os requisitos de cobertura. Isso inclui SchedulingConstraint, ResourceConstraint, ShiftRequest e CoverageRequirement. Como pode haver restrições conflitantes, nem sempre é possível satisfazer todas as restrições. Assim, cada tipo de restrição tem uma prioridade (dada pelo usuário ou por um padrão) que informa ao solucionador a importância relativa de todas as restrições dadas a uma programação completa.

Enums
PRIORITY_UNSPECIFIED Nível de prioridade desconhecido.
PRIORITY_LOW O nível de prioridade mais baixo. As restrições com essa prioridade são menos importantes que as outras. Elas são as primeiras a serem consideradas por violação se não for possível encontrar uma solução viável.
PRIORITY_MEDIUM Nível de prioridade médio. As restrições com essa prioridade são mais importantes do que aquelas com prioridade PRIORITY_LOW, mas menos importantes que as com prioridade PRIORITY_HIGH. Se não for possível encontrar uma solução viável depois de relaxar todas as restrições com prioridade PRIORITY_LOW, as restrições com prioridade PRIORITY_MEDIUM serão consideradas em seguida para violação.
PRIORITY_HIGH O nível de prioridade mais alto. As restrições com esse nível de prioridade são as mais importantes. Elas são as últimas a serem consideradas para violação se não for possível encontrar uma solução viável após a flexibilização das restrições dos níveis de prioridade mais baixos.
PRIORITY_MANDATORY O nível de prioridade que representa algo que não pode ser violado pelo solucionador. Se o solucionador estiver retornando SolutionStatus.INFEASIBLE, isso pode ser devido a muitas restrições de PRIORITY_MANDATORY.

ResourceConstraint

Restrição geral que limita a quantidade de um determinado "recurso" usada por um funcionário. Essa é uma versão abstrata da SchedulingConstraint mais específica e mais flexível para o usuário. Muitas restrições de programação que não podem ser especificadas no SchedulingConstraint.type podem ser definidas com essa mensagem.

Representação JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Campos
priority

enum (Priority)

Nível de prioridade dessa restrição de recurso. A prioridade padrão para todas as restrições de recursos é PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Quantidade de recursos usados por turnos. Por exemplo, se essa restrição se aplicar às horas mínima e máxima trabalhadas por um funcionário em uma semana específica, o mapa conterá as mudanças que ocorrerem nessa semana e a duração de cada turno em horas.

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Uso mínimo de recursos para atender a uma restrição de recursos.

maximumResourceUsage

number

Uso máximo de recursos para atender a uma restrição de recursos.

ShiftRequest

A solicitação de um funcionário para ser atribuído ou não a turnos específicos.

Representação JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Campos
priority

enum (Priority)

Nível de prioridade dessa solicitação de programação. A prioridade padrão para todas as solicitações de programação é PRIORITY_LOW.

shiftIds[]

string

Os IDs de turno da solicitação de programação.

type

enum (WorkStatus)

Tipo de solicitação, por exemplo, se a solicitação é atribuída ou não ao conjunto de turnos.

WorkStatus

Se um funcionário está trabalhando ou não.

Enums
WORK_STATUS_UNSPECIFIED Status do trabalho desconhecido.
STATUS_WORK Status que representa um funcionário que trabalha.
STATUS_NOT_WORK Status que representa um funcionário desempregado.

HourlyContract

Especifica uma taxa por hora básica, diferenciais de taxas e multiplicadores de horas extras para determinar a remuneração de um funcionário. Observe que os regulamentos em locais diferentes podem exigir um cálculo diferente de compensação por horas extras. O solucionador faz uma aproximação da compensação por tempo extra para minimizar uma representação do custo total ou atender a um orçamento (consulte BudgetRequirement). Ele não é uma ferramenta para calcular a folha de pagamento.

Representação JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Campos
baseHourlyRate

number

A compensação pelo trabalho em uma hora que não seja horas extras. Se várias taxas forem aplicadas ao funcionário, os diferenciais de taxas serão aplicados em relação a essa taxa por hora básica. Além disso, se houver várias taxas, a taxa básica por hora precisará ser a mínima dessas taxas.

hourlyRateShiftDifferentials

map (key: string, value: number)

É o diferencial da taxa por hora, pago sobre baseHourlyRate. Por exemplo, se a taxa por hora básica for US $30/hora, "shift_1" é paga a uma taxa de US $40/hora e "shift_2" for pago a uma taxa de US $45/hora, a representação do protótipo será: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Uma lista de todos os períodos em que as horas extras precisam ser computadas. Esses períodos não podem se sobrepor.

OvertimePeriod

Um período fixo e regularmente recorrente (normalmente 168 horas ou sete períodos consecutivos de 24 horas) que é usado para determinar o valor da compensação de horas extras. Cada período tem um multiplicador de horas extras (por exemplo, 1.5) em relação ao baseHourlyRate e um limite para o número de horas que são consideradas trabalho normal (sem horas extras). Qualquer mudança que se sobreponha à janela de tempo de startDateTime (inclusiva) e endDateTime (exclusiva) é contabilizada no total de horas trabalhadas no período. Se a sobreposição for parcial, somente as horas sobrepostas serão contabilizadas.

Representação JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Campos
overtimeMultiplier

number

Multiplicador para calcular a taxa por hora de horas extras (precisa ser maior ou igual a 1,0). A taxa por hora de horas extras normalmente é calculada como baseHourlyRate * overtimeMultiplier. Se várias taxas forem fornecidas pelo hourlyRateShiftDifferentials, o solucionador se aproximará da taxa por hora da hora extra com uma média simples das taxas aplicáveis durante o período da prorrogação. Observação: regulamentos em locais diferentes podem exigir um cálculo diferente de compensação por horas extras. O solucionador aproxima a compensação de horas extras para minimizar uma representação do custo total ou atender a um orçamento, mas não pretende ser uma ferramenta para calcular a folha de pagamento.

startDateTime

object (DateTime)

Horário de início do período da prorrogação. Se um turno se sobrepuser a esse período, as horas dessa mudança serão contadas a partir de startDateTime.

endDateTime

object (DateTime)

Hora de término da prorrogação. Se um turno se sobrepuser a esse período, as horas dessa mudança serão contadas até endDateTime.

maximumRegularHours

number

Número máximo de horas de trabalho pagas a uma taxa normal (sem horas extras). Essa quantidade precisa ser positiva.

Shift

Um turno especifica uma janela de tempo fixa em que os funcionários podem trabalhar.

Representação JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Campos
id

string

ID exclusivo atribuído a este turno.

locationId

string

ID do local em que essa mudança é trabalhada. Pode ficar vazio.

startDateTime

object (DateTime)

O horário de início do turno (inclusivo).

endDateTime

object (DateTime)

O horário de término do turno (não incluso). No momento, o solucionador só permite mudanças com menos de 24 horas de duração.

breakRules[]

object (BreakRule)

Uma lista de regras de violação que ocorrem durante o turno. Os funcionários que trabalham nesse turno recebem um intervalo por break_rule, em que não cobrem a demanda pela função que estão cumprindo. Cada janela de tempo BreakRule precisa ser totalmente incluída na janela dessa mudança.

BreakRule

uma regra que determina quando um intervalo pode começar dentro de um turno e a duração dele. A lista de todas as possíveis quebras consideradas é determinada em incrementos de ruleIncrementMinutes. Por exemplo, se uma regra de intervalo estiver modelando um intervalo de 30 minutos que pode começar entre 10h00 e 11h00, e o incremento da regra for de 20 minutos, a lista de intervalos considerados será: [10:00, 10:30], [10:20, 10:50], [10:40, 11,3]

Representação JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Campos
earliestStartTime

object (DateTime)

O primeiro horário de início do intervalo (inclusive). Apenas hours e minutes podem ser definidos.

latestStartTime

object (DateTime)

O último horário de início do intervalo (inclusive). Apenas hours e minutes podem ser definidos.

durationMinutes

integer

Duração do intervalo em minutos.

ruleIncrementMinutes

integer

[Opcional] É o acréscimo de minutos em minutos para todos os intervalos que podem ser considerados nesta regra de intervalo. Se não for definido, o padrão será durationMinutes.

CoverageRequirement

Um requisito de cobertura especifica o número de funcionários necessários para um conjunto de funções e/ou habilidades durante um determinado período e em um determinado local. Os intervalos DateTime em um local específico não podem se sobrepor. Como alternativa, é possível fornecer uma lista de códigos de turno em vez de uma janela de tempo e um local. Somente os funcionários que podem ser atribuídos à função específica (ou que possuem a habilidade específica) podem atender a esse requisito.

Para uma determinada função e/ou habilidade, o requisito de cobertura é atendido quando pelo menos targetEmployeeCount de funcionários estão trabalhando a cada momento da janela de tempo (ou a cada turno em shiftIds). Por outro lado, o requisito de cobertura será violado se, em algum momento do período (ou para qualquer um dos turnos em shiftIds), houver menos de targetEmployeeCount de funcionários trabalhando nesse período. Mais funcionários que trabalham do que targetEmployeeCount ainda cumpre o requisito, mas o solucionador minimiza o excesso de funcionários.

Representação JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
Campos
startDateTime

object (DateTime)

O horário de início do requisito de cobertura (inclusivo). Se definido, shiftIds precisa estar vazio.

endDateTime

object (DateTime)

O horário de término do requisito de cobertura (não incluso). Se definido, shiftIds precisa estar vazio.

locationId

string

Local onde os funcionários são necessários. shiftIds não está vazio, este campo precisa estar vazio.

shiftIds[]

string

Se definidos, os requisitos de função e habilidade serão aplicados individualmente a cada ID de turno na lista. Se shiftIds não estiverem vazios, startDateTime, endDateTime e locationId precisarão estar vazios.

roleRequirements[]

object (RoleRequirement)

Número obrigatório de funcionários atribuídos aos papéis especificados durante o período. No máximo, um role_requirement precisa ser fornecido para cada ID de papel. O nível de prioridade padrão para cada um dos requisitos é PRIORITY_MANDATORY. Essas restrições serão violadas se menos de targetEmployeeCount funcionários forem atribuídos às funções especificadas em qualquer momento do período.

skillRequirements[]

object (SkillRequirement)

Número obrigatório de funcionários com as habilidades específicas atribuídas aos turnos durante a janela de tempo. É necessário fornecer no máximo um skill_requirement para cada ID de habilidade. O nível de prioridade padrão para cada um dos requisitos é PRIORITY_LOW. Essas restrições serão violadas se menos de targetEmployeeCount funcionários tiverem as habilidades fornecidas em qualquer momento do período.

RoleRequirement

Número obrigatório de funcionários atribuídos à função especificada durante o período.

Representação JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Campos
roleId

string

ID do papel para o requisito.

targetEmployeeCount

integer

Número desejado de funcionários atribuídos à função durante o período.

priority

enum (Priority)

Nível de prioridade para essa restrição de requisito. A prioridade padrão para todas as restrições de recursos é PRIORITY_MANDATORY.

SkillRequirement

Número obrigatório de funcionários que estão trabalhando durante o período e possuem a habilidade especificada.

Representação JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Campos
skillId

string

ID da habilidade para o requisito.

targetEmployeeCount

integer

Número desejado de funcionários com a habilidade determinada que estão trabalhando durante o período.

priority

enum (Priority)

Nível de prioridade para essa restrição de requisito. A prioridade padrão para todas as restrições de recursos é PRIORITY_LOW.

BudgetRequirement

Requisitos de orçamento para um determinado intervalo.

Representação JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Campos
totalBudget

number

Orçamento total para o intervalo especificado. Será necessário fornecer um orçamento total se a prioridade for PRIORITY_MANDATORY.

Se totalBudget não for definido, o custo total da programação será minimizado de acordo com o priority especificado. Por exemplo, se o priority do orçamento for PRIORITY_MEDIUM, o solucionador minimizará o custo antes de reduzir qualquer violação de restrição com a prioridade PRIORITY_LOW.

startDateTime

object (DateTime)

Horário de início de aplicação desse orçamento. Se o horário de início não for especificado, ele será o primeiro de todos os turnos especificados.

endDateTime

object (DateTime)

Horário de término de aplicação do orçamento. Se um horário de término não for especificado, ele será definido como o horário de término mais recente de todos os turnos especificados.

priority

enum (Priority)

Nível de prioridade para atender ao requisito de orçamento durante o período especificado. A prioridade padrão é PRIORITY_LOW. Se a prioridade for definida como PRIORITY_MANDATORY, será necessário definir totalBudget.

Se essa prioridade for maior do que outras prioridades de restrição e se totalBudget for apertada, o cronograma resultante poderá violar significativamente as restrições de funcionários ou os requisitos de cobertura.

ShiftAssignment

Um funcionário para atribuir um turno de funções.

Representação JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Campos
employeeId

string

O ID do funcionário que está sendo atribuído.

shiftId

string

ID de turno atribuído ao funcionário.

roleId

string

ID da função atribuída ao funcionário no turno.

breaks[]

object (Break)

Lista de intervalos para esta atribuição de turno.

Intervalo

Período em que um funcionário interrompe o trabalho durante um turno.

Representação JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Campos
startDateTime

object (DateTime)

O horário de início de uma pausa.

durationMinutes

integer

Duração do intervalo em minutos.

SolutionStatus

Status da solução (ou seja, uma programação) fornecido na resposta de um solucionador.

Enums
SOLUTION_STATUS_UNSPECIFIED Status não especificado para a resposta.
FEASIBLE A programação de retorno é viável, mas pode não ser a ideal.
OPTIMAL A programação de devolução é a ideal.
INFEASIBLE Não há uma programação viável para as restrições fornecidas. O solucionador pode retornar esse valor se algum subconjunto das restrições com nível de prioridade PRIORITY_MANDATORY não puder ser atendido.
NOT_SOLVED Nenhuma programação foi encontrada.
NOT_SOLVED_DEADLINE_EXCEEDED Nenhuma programação foi encontrada dentro do limite de tempo.