Índice
Break
(mensagem)BreakRule
(mensagem)BudgetRequirement
(mensagem)CoverageRequirement
(mensagem)CoverageRequirement.RoleRequirement
(mensagem)CoverageRequirement.SkillRequirement
(mensagem)DemandCoverageViolation
(mensagem)Employee
(mensagem)EmployeeDemand
(mensagem)EmployeeSchedule
(mensagem)EmployeeSchedule.ShiftWithEvents
(mensagem)EmployeeSchedule.ShiftWithEvents.Event
(mensagem)EventTemplate
(mensagem)HourlyContract
(mensagem)HourlyContract.OvertimePeriod
(mensagem)Priority
(enum)ResourceConstraint
(mensagem)SchedulingConstraint
(mensagem)Shift
(mensagem)ShiftAssignment
(mensagem)ShiftGenerationSolutionStatus
(enum)ShiftPreference
(mensagem)ShiftRequest
(mensagem)ShiftTemplate
(mensagem)SolutionStatus
(enum)SolveParameters
(mensagem)SolverConfig
(mensagem)WorkStatus
(tipo enumerado)
Intervalo
Período em que um funcionário interrompe o trabalho durante um turno.
Campos | |
---|---|
start_date_time |
O horário de início de uma pausa. |
duration_minutes |
Duração do intervalo em minutos. |
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 rule_increment_minutes
. 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]
Campos | |
---|---|
earliest_start_time |
O primeiro horário de início do intervalo (inclusive). Apenas |
latest_start_time |
O último horário de início do intervalo (inclusive). Apenas |
duration_minutes |
Duração do intervalo em minutos. |
rule_increment_minutes |
[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á |
BudgetRequirement
Requisitos de orçamento para um determinado intervalo.
Campos | |
---|---|
total_budget |
Orçamento total para o intervalo especificado. Será necessário fornecer um orçamento total se a prioridade for Se |
start_date_time |
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 horário de início de todos os turnos especificados. |
end_date_time |
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 |
Nível de prioridade para atender ao requisito de orçamento durante o período especificado. A prioridade padrão é Se essa prioridade for maior do que outras prioridades de restrição e se |
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 será atendido quando pelo menos target_employee_count
de funcionários estiverem trabalhando a cada momento da janela de tempo (ou a cada turno em shift_ids
). Por outro lado, o requisito de cobertura será violado se em algum momento do período (ou para qualquer um dos turnos de shift_ids
) houver menos de target_employee_count
funcionários trabalhando nesse período. Mais funcionários que trabalham do que target_employee_count
ainda cumpre o requisito, mas o solucionador minimiza o excesso de funcionários.
Campos | |
---|---|
start_date_time |
O horário de início do requisito de cobertura (inclusivo). Se definido, |
end_date_time |
O horário de término do requisito de cobertura (não incluso). Se definido, |
location_id |
Local onde os funcionários são necessários. |
shift_ids[] |
Se definidos, os requisitos de função e habilidade serão aplicados individualmente a cada ID de turno na lista. Se shift_ids não estiverem vazios, |
role_requirements[] |
Número obrigatório de funcionários atribuídos aos papéis especificados durante o período. No máximo, um |
skill_requirements[] |
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 |
RoleRequirement
Número obrigatório de funcionários atribuídos à função especificada durante o período.
Campos | |
---|---|
role_id |
ID do papel para o requisito. |
target_employee_count |
Número desejado de funcionários atribuídos à função durante o período. |
priority |
Nível de prioridade para essa restrição de requisito. A prioridade padrão para todas as restrições de recursos é |
SkillRequirement
Número obrigatório de funcionários que estão trabalhando durante o período e possuem a habilidade especificada.
Campos | |
---|---|
skill_id |
ID da habilidade para o requisito. |
target_employee_count |
Número desejado de funcionários com a habilidade determinada que estão trabalhando durante o período. |
priority |
Nível de prioridade para essa restrição de requisito. A prioridade padrão para todas as restrições de recursos é |
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.
Campos | |
---|---|
start_date_time |
Data e hora de início do intervalo de demanda (inclusivo). Esse valor é especificado até o minuto. |
end_date_time |
Data e hora de término do intervalo de demanda (não incluso). Esse valor é especificado até o minuto. |
coverage_violation |
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. |
Funcionário
Um funcionário da força de trabalho a ser agendado.
Campos | |
---|---|
id |
ID exclusivo atribuído a este funcionário. |
role_ids[] |
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. |
skill_ids[] |
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. |
shift_preferences[] |
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 |
scheduling_constraints[] |
Lista de restrições de agendamento para esse funcionário. O nível de prioridade padrão para cada uma dessas restrições é |
resource_constraints[] |
Outras restrições de programação não especificadas em |
shift_requests[] |
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 |
hourly_contract |
Contrato que especifica taxas horárias regulares e extras para o funcionário. |
EmployeeDemand
Especifica o número de funcionários necessários para cobrir a demanda em um determinado intervalo DateTime.
Campos | |
---|---|
start_date_time |
Início do intervalo de tempo da demanda especificada (inclusive). Esses valores são lidos até os minutos; os segundos e todas as unidades menores são ignorados. |
end_date_time |
Fim do intervalo de tempo da demanda em questão (exclusivo). Esses valores são lidos até os minutos; os segundos e todas as unidades menores são ignorados. |
employee_count |
Número de funcionários necessários para cobrir a demanda desse intervalo. |
EmployeeSchedule
Uma lista ordenada de turnos correspondente a uma única ShiftTemplate
que será atribuída a vários funcionários.
Campos | |
---|---|
shift_template_id |
ID do modelo usado para gerar esse conjunto de turnos. |
shifts[] |
Lista de turnos a que |
employee_count |
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.
Campos | |
---|---|
start_date_time |
Data e hora de início do turno. Esse valor é especificado até o minuto. Segundos e unidades menores não são fornecidos. |
end_date_time |
Data e hora de término do turno. Esse valor é especificado até o minuto. Segundos e unidades menores não são fornecidos. |
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.
Campos | |
---|---|
event_template_id |
ID do modelo usado para gerar esse evento. |
start_date_time |
Data e hora de início do evento. Esse valor é especificado até o minuto. Segundos e unidades menores não são fornecidos. |
end_date_time |
Data e hora de término do evento. Esse valor é especificado até o minuto. Segundos e unidades menores não são fornecidos. |
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.
Campos | |
---|---|
id |
ID exclusivo desse modelo. |
minimum_minutes_after_shift_start |
Número mínimo de minutos após o início de um turno para que este evento possa começar. |
maximum_minutes_after_shift_start |
Número máximo de minutos após o início de um turno que este evento pode iniciar. |
duration_minutes |
Duração corrigida em minutos deste evento. |
start_time_increment_minutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início do evento entre |
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 de horas extras para minimizar uma representação do custo total ou alcançar um orçamento (consulte BudgetRequirement
). Ele não é uma ferramenta para calcular a folha de pagamento.
Campos | |
---|---|
base_hourly_rate |
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. |
hourly_rate_shift_differentials |
É o diferencial de taxa por hora, pago sobre |
overtime_periods[] |
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 base_hourly_rate
e um limite para o número de horas que são consideradas trabalho regular (sem horas extras). Qualquer mudança que se sobreponha à janela de tempo de start_date_time
(inclusiva) e end_date_time
(exclusiva) é contabilizada no total de horas trabalhadas no período. Se a sobreposição for parcial, somente as horas sobrepostas serão contabilizadas.
Campos | |
---|---|
overtime_multiplier |
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 |
start_date_time |
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 |
end_date_time |
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é |
maximum_regular_hours |
Número máximo de horas de trabalho pagas a uma taxa normal (sem horas extras). Essa quantidade precisa ser positiva. |
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.
Tipos enumerados | |
---|---|
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
Uma restrição geral que limita a quantidade de determinado "recurso" usado 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.
Campos | |
---|---|
priority |
Nível de prioridade dessa restrição de recurso. A prioridade padrão para todas as restrições de recursos é |
resource_usages |
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. |
minimum_resource_usage |
Uso mínimo de recursos para atender a uma restrição de recursos. |
maximum_resource_usage |
Uso máximo de recursos para atender a uma restrição de recursos. |
SchedulingConstraint
Restrição de programação específica para determinado funcionário. A restrição especificada é aplicada apenas durante o intervalo [start_date_time,
end_date_time)
determinado.
Campos | |
---|---|
priority |
Nível de prioridade para esta restrição de programação. A prioridade padrão para todas as restrições de programação é |
start_date_time |
O horário de início em que essa restrição de programação se aplica (inclusivo). |
end_date_time |
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 só pode ser de um dos seguintes tipos: |
|
minimum_minutes |
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. |
maximum_minutes |
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. |
minimum_consecutive_work_days |
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. |
maximum_consecutive_work_days |
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. |
minimum_shift_count |
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. |
maximum_shift_count |
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. |
minimum_rest_minutes |
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 [ |
Turno
Um turno especifica uma janela de tempo fixa em que os funcionários podem trabalhar.
Campos | |
---|---|
id |
ID exclusivo atribuído a este turno. |
location_id |
ID do local em que essa mudança é trabalhada. Pode ficar vazio. |
start_date_time |
O horário de início do turno (inclusivo). |
end_date_time |
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. |
break_rules[] |
Uma lista de regras de violação que ocorrem durante o turno. Os funcionários que trabalham nesse turno recebem um intervalo por |
ShiftAssignment
Um funcionário para atribuir um turno de funções.
Campos | |
---|---|
employee_id |
O ID do funcionário que está sendo atribuído. |
shift_id |
ID de turno atribuído ao funcionário. |
role_id |
ID da função atribuída ao funcionário no turno. |
breaks[] |
Lista de intervalos para esta atribuição de turno. |
ShiftGenerationSolutionStatus
Status da solução fornecido na resposta de um solucionador.
Tipos enumerados | |
---|---|
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. |
ShiftPreference
Uma preferência numérica por um ID de turno específico.
Campos | |
---|---|
shift_id |
ID do turno para o qual a preferência é especificada. |
preference |
Valores maiores de preferência indicam uma mudança mais desejável. |
ShiftRequest
A solicitação de um funcionário para ser atribuído ou não a turnos específicos.
Campos | |
---|---|
priority |
Nível de prioridade dessa solicitação de programação. A prioridade padrão para todas as solicitações de programação é |
shift_ids[] |
Os IDs de turno da solicitação de programação. |
type |
Tipo de solicitação, por exemplo, se a solicitação é atribuída ou não ao conjunto de turnos. |
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.
Campos | |
---|---|
id |
ID exclusivo desse modelo. |
earliest_start_time |
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. |
latest_start_time |
É o último horário no 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 |
duration_minutes |
Duração fixa de um turno gerado por este modelo. |
start_time_increment_minutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início entre |
days_off_count_per_week |
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. |
event_templates[] |
Regras para gerar eventos para cada turno. Exatamente um evento será incluído em cada turno para cada evento especificado. |
minimum_interevent_gap_minutes |
Mínimo de minutos entre o fim de um evento e o início de outro. |
maximum_employee_count |
Número máximo de funcionários que podem ser atribuídos a todos os turnos gerados por este modelo. |
SolutionStatus
Status da solução (ou seja, uma programação) fornecido na resposta de um solucionador.
Tipos enumerados | |
---|---|
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. |
SolveParameters
Parâmetros que controlam uma única solução do problema da programação de turnos.
Campos | |
---|---|
time_limit |
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. |
SolverConfig
Especifica parâmetros adicionais para resolver o problema de geração de Shift.
Campos | |
---|---|
time_limit |
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. |
multi_day_schedule |
Se verdadeiro, o solucionador gera |
shift_events_can_change |
Se verdadeiro, os |
WorkStatus
Se um funcionário está trabalhando ou não.
Tipos enumerados | |
---|---|
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. |