Индекс
-
Break
(сообщение) -
BreakRule
(сообщение) -
BudgetRequirement
(сообщение) -
CoverageRequirement
(сообщение) -
CoverageRequirement.RoleRequirement
(сообщение) -
CoverageRequirement.SkillRequirement
(сообщение) -
DemandCoverageViolation
(сообщение) -
Employee
(сообщение) -
EmployeeDemand
(сообщение) -
EmployeeSchedule
(сообщение) -
EmployeeSchedule.ShiftWithEvents
(сообщение) -
EmployeeSchedule.ShiftWithEvents.Event
(сообщение) -
EventTemplate
(сообщение) -
HourlyContract
(сообщение) -
HourlyContract.OvertimePeriod
(сообщение) -
Priority
(перечисление) -
ResourceConstraint
(сообщение) -
SchedulingConstraint
(сообщение) -
Shift
(сообщение) -
ShiftAssignment
(сообщение) -
ShiftGenerationSolutionStatus
(перечисление) -
ShiftPreference
(сообщение) -
ShiftRequest
(сообщение) -
ShiftTemplate
(сообщение) -
SolutionStatus
(перечисление) -
SolveParameters
(сообщение) -
SolverConfig
(сообщение) -
WorkStatus
(перечисление)
Перерыв
Период времени, в течение которого сотрудник прерывает свою работу во время смены.
Поля | |
---|---|
start_date_time | Время начала перерыва. |
duration_minutes | Продолжительность перерыва в минутах. |
BreakRule
Правило, определяющее время начала перерыва в смене и его продолжительность. Список всех возможных перерывов, которые учитываются, определяется с шагом rule_increment_minutes
. Например, если правило перерыва моделирует 30-минутный перерыв, который может начаться с 10:00 до 11:00, а приращение правила составляет 20 минут, учитываются следующие списки перерывов: [10:00, 10 :30], [10:20, 10:50], [10:40, 11:10], [11:00, 11:30].
Поля | |
---|---|
earliest_start_time | Самое раннее время начала перерыва (включительно). Можно установить только |
latest_start_time | Самое позднее время начала перерыва (включительно). Можно установить только |
duration_minutes | Продолжительность перерыва в минутах. |
rule_increment_minutes | [Необязательно] Приращение времени в минутах для всех перерывов, которые могут учитываться в этом правиле перерывов. Если не установлено, по умолчанию используется |
Требование к бюджету
Бюджетные требования на заданный интервал.
Поля | |
---|---|
total_budget | Общий бюджет за заданный интервал. Общий бюджет должен быть указан, если приоритет равен Если |
start_date_time | Время начала применения этого бюджета. Если время начала не указано, оно устанавливается как самое раннее время начала всех заданных смен. |
end_date_time | Время окончания применения этого бюджета. Если время окончания не указано, оно устанавливается как самое позднее время окончания всех заданных смен. |
priority | Уровень приоритета для удовлетворения бюджетных требований в течение указанного временного окна. Приоритет по умолчанию — Обратите внимание: если этот приоритет выше, чем другие приоритеты ограничений, и если |
Требование к покрытию
Требование покрытия определяет количество сотрудников, необходимых для выполнения набора ролей и/или навыков в течение определенного периода времени и в данном месте. Интервалы DateTime в определенном месте не могут перекрываться. Альтернативно, вместо временного окна и местоположения может быть предоставлен список идентификаторов смен. Этому требованию могут соответствовать только сотрудники, которым может быть назначена конкретная роль (или которые обладают определенными навыками).
Для данной роли и/или навыка требование покрытия выполняется, когда по крайней мере количество сотрудников target_employee_count
работает в каждый момент временного окна (или для каждой смены в shift_ids
). Напротив, требование покрытия нарушается, если в любой момент временного окна (или для любой из смен в shift_ids
) количество сотрудников, работающих в течение временного окна, меньше target_employee_count
. Большее количество работающих сотрудников, чем target_employee_count
по-прежнему удовлетворяет требованию, но решающая программа сводит к минимуму чрезмерную численность персонала.
Поля | |
---|---|
start_date_time | Время начала требования к покрытию (включительно). Если установлено, |
end_date_time | Время окончания требования к страховому покрытию (эксклюзивное). Если установлено, |
location_id | Место, где требуются сотрудники. |
shift_ids[] | Если этот параметр установлен, требования к роли и навыкам применяются индивидуально к каждому идентификатору смены в этом списке. Еслиshift_ids непусто, то |
role_requirements[] | Требуемое количество сотрудников, которые будут назначены на указанные роли в течение временного окна. Для каждого идентификатора роли должно быть указано не более одного |
skill_requirements[] | Требуемое количество сотрудников с указанными навыками, назначенных на смены в течение временного окна. Для каждого идентификатора навыка должно быть указано не более одного |
РольТребование
Требуемое количество сотрудников, которые будут назначены на указанную роль в течение временного окна.
Поля | |
---|---|
role_id | Идентификатор роли для требования. |
target_employee_count | Желаемое количество сотрудников, назначенных на эту роль в течение временного окна. |
priority | Уровень приоритета для этого ограничения требования. Приоритет по умолчанию для всех ограничений ресурсов — |
Требование к навыку
Необходимое количество сотрудников, работающих в течение определенного временного окна и обладающих указанными навыками.
Поля | |
---|---|
skill_id | Идентификатор навыка для требования. |
target_employee_count | Желаемое количество сотрудников с заданной квалификацией, работающих в течение определенного временного окна. |
priority | Уровень приоритета для этого ограничения требования. Приоритет по умолчанию для всех ограничений ресурсов — |
Нарушение покрытия спроса
Указывает нарушение покрытия спроса для данного интервала. Спрос на работника одинаков на протяжении всего заданного интервала.
Поля | |
---|---|
start_date_time | Дата и время начала интервала спроса (включительно). Это значение указывается с точностью до минуты. |
end_date_time | Дата и время окончания интервала спроса (эксклюзивно). Это значение указывается с точностью до минуты. |
coverage_violation | Нарушение покрытия в течение указанного интервала. Положительное значение указывает на то, что спрос перекрыт, а отрицательное значение указывает на то, что спрос недостаточно покрыт. |
Сотрудник
Сотрудник из числа сотрудников, подлежащих планированию.
Поля | |
---|---|
id | Уникальный идентификатор, присвоенный этому сотруднику. |
role_ids[] | Идентификаторы ролей, которые может выполнять этот сотрудник. Должна быть указана хотя бы одна роль. При назначении сотрудника на смену ему также назначается одна роль из этого списка. Сотруднику могут быть назначены различные роли во время окна планирования. |
skill_ids[] | Идентификаторы навыков, которыми обладает этот сотрудник. Этот список может быть пустым. Когда сотрудника назначают на смену, он использует любое подмножество навыков, перечисленных здесь, для удовлетворения требований к навыкам на протяжении всей назначенной смены. |
shift_preferences[] | Изменить предпочтения этого сотрудника. Указанные здесь смены представляют собой смены, на которые сотрудник предпочел бы быть назначен во время окна планирования. Идентификаторы смен, указанные в |
scheduling_constraints[] | Список ограничений планирования для этого сотрудника. Уровень приоритета по умолчанию для каждого из этих ограничений — |
resource_constraints[] | Любые дополнительные ограничения планирования, не указанные в |
shift_requests[] | Список заявок на смену для сотрудника. Запрос может заключаться в назначении или не назначении сотрудника на определенные смены. Любые фиксированные назначения планирования для сотрудника могут быть представлены с помощью |
hourly_contract | Контракт, в котором указаны регулярные и сверхурочные почасовые ставки для сотрудника. |
Спрос на сотрудников
Указывает количество сотрудников, необходимое для покрытия спроса в заданном интервале DateTime.
Поля | |
---|---|
start_date_time | Начало временного интервала для данной заявки (включительно). Эти значения считываются с точностью до минуты; секунды, а все меньшие единицы игнорируются. |
end_date_time | Конец временного интервала для данного спроса (эксклюзивного). Эти значения считываются с точностью до минуты; секунды, а все меньшие единицы игнорируются. |
employee_count | Количество сотрудников, необходимое для покрытия спроса за этот интервал. |
График работы сотрудников
Упорядоченный список смен, соответствующий одному ShiftTemplate
, который должен быть назначен нескольким сотрудникам.
Поля | |
---|---|
shift_template_id | Идентификатор шаблона, который использовался для создания этого набора смен. |
shifts[] | Список смен, которым назначено количество |
employee_count | Количество сотрудников, которые должны быть назначены на этот набор смен для покрытия спроса. |
ShiftWithEvents
Указывает дату начала и окончания, а также список фиксированных событий смены, созданный решателем.
Поля | |
---|---|
start_date_time | Дата и время начала смены. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
end_date_time | Дата и время окончания смены. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
events[] | Список событий, включенных в этот сдвиг, сопоставленных точно и в том же порядке, что и |
Событие
Указывает начальную и конечную дату и время определенного события в смене, созданной решателем.
Поля | |
---|---|
event_template_id | Идентификатор шаблона, который использовался для создания этого события. |
start_date_time | Дата и время начала мероприятия. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
end_date_time | Дата и время окончания мероприятия. Это значение указывается с точностью до минуты; секунды и более мелкие единицы не приводятся. |
Шаблон события
Шаблон, определяющий правила для создания одного события, происходящего во время смены. Событие может представлять собой встречу, перерыв, обед и т. д.
Поля | |
---|---|
id | Уникальный идентификатор этого шаблона. |
minimum_minutes_after_shift_start | Минимальное количество минут после начала смены, после которого может начаться это событие. |
maximum_minutes_after_shift_start | Максимальное количество минут после начала смены, в течение которого может начаться это событие. |
duration_minutes | Фиксированная продолжительность этого события в минутах. |
start_time_increment_minutes | Приращение времени (в минутах), используемое для создания набора возможных времен начала события между |
Почасовой контракт
Указывает базовую почасовую ставку, разницу в ставках и множители сверхурочной работы для определения компенсации сотруднику. Обратите внимание, что правила в разных местах могут требовать разных расчетов компенсации за сверхурочную работу. Решающая программа аппроксимирует компенсацию за сверхурочную работу, чтобы либо минимизировать приблизительную общую стоимость, либо уложиться в бюджет (см. BudgetRequirement
). Он не предназначен в качестве инструмента для расчета заработной платы.
Поля | |
---|---|
base_hourly_rate | Компенсация за сверхурочную работу. Если к сотруднику применяются несколько ставок, разница в ставках применяется относительно этой базовой почасовой ставки. Кроме того, если существует несколько ставок, базовая почасовая ставка должна быть минимальной из этих ставок. |
hourly_rate_shift_differentials | Разница в почасовой ставке, выплачиваемая сверх |
overtime_periods[] | Список всех периодов, для которых необходимо рассчитать сверхурочную работу. Эти периоды не должны пересекаться. |
Сверхурочная работаПериод
Фиксированный и регулярно повторяющийся период (обычно 168 часов или семь последовательных 24-часовых периодов), который используется для определения суммы компенсации за сверхурочную работу. Каждый период имеет множитель сверхурочной работы (например, 1,5) относительно base_hourly_rate
и ограничение на количество часов, которые считаются обычной (не сверхурочной) работой. Любая смена, которая перекрывается с временным окном start_date_time
(включительно) и end_date_time
(исключительно), засчитывается в общее количество часов, отработанных за период. Если перекрытие частичное, учитываются только перекрывающиеся часы.
Поля | |
---|---|
overtime_multiplier | Множитель для расчета почасовой ставки за сверхурочную работу (должен быть больше или равен 1,0). Почасовая ставка сверхурочной работы обычно рассчитывается как |
start_date_time | Время начала дополнительного периода. Если смена перекрывает это время, часы такой смены отсчитываются от |
end_date_time | Время окончания сверхурочного периода. Если смена перекрывает это время, часы такой смены отсчитываются до |
maximum_regular_hours | Максимальное количество рабочих часов, оплачиваемых по обычной ставке (без сверхурочной работы). Эта величина должна быть положительной. |
Приоритет
Уровень приоритета для любого ограничения графика сотрудника или требований к покрытию. К ним относятся SchedulingConstraint
, ResourceConstraint
, ShiftRequest
и CoverageRequirement
. Поскольку могут существовать противоречивые ограничения, не всегда возможно удовлетворить каждое ограничение. Таким образом, каждый тип ограничения имеет приоритет (задаваемый пользователем или значение по умолчанию), который информирует решатель об относительной важности всех ограничений, заданных для полного расписания.
Перечисления | |
---|---|
PRIORITY_UNSPECIFIED | Неизвестный уровень приоритета. |
PRIORITY_LOW | Самый низкий уровень приоритета. Ограничения с этим приоритетом менее важны, чем другие ограничения. Они в первую очередь рассматриваются на предмет нарушения, если невозможно найти осуществимое решение. |
PRIORITY_MEDIUM | Уровень приоритета средний. Ограничения с этим приоритетом более важны, чем ограничения с приоритетом PRIORITY_LOW , но менее важны, чем ограничения с приоритетом PRIORITY_HIGH . Если допустимое решение не может быть найдено после ослабления всех ограничений с приоритетом PRIORITY_LOW , то следующими на предмет нарушения считаются ограничения с приоритетом PRIORITY_MEDIUM . |
PRIORITY_HIGH | Самый высокий уровень приоритета. Ограничения с этим уровнем приоритета являются наиболее важными. Их нарушение следует рассматривать в последнюю очередь, если допустимое решение не может быть найдено после ослабления ограничений более низких уровней приоритета. |
PRIORITY_MANDATORY | Уровень приоритета, который представляет собой то, что не может быть нарушено решателем. Если решатель возвращает SolutionStatus.INFEASIBLE , это может быть связано со слишком большим количеством ограничений PRIORITY_MANDATORY . |
РесурсОграничение
Общее ограничение, ограничивающее количество определенного «ресурса», используемого сотрудником. Это абстрактная версия более конкретного SchedulingConstraint
, более гибкая для пользователя. Многие ограничения планирования, которые нельзя указать в SchedulingConstraint.type
можно вместо этого указать с помощью этого сообщения.
Поля | |
---|---|
priority | Уровень приоритета этого ограничения ресурса. Приоритет по умолчанию для всех ограничений ресурсов — |
resource_usages | Количество ресурсов, используемых сменами. Например, если это ограничение применяется к минимальному и максимальному количеству часов, отработанных сотрудником на определенной неделе, то эта карта будет содержать смены, происходящие на этой неделе, и продолжительность каждой смены в часах. |
minimum_resource_usage | Минимальное использование ресурсов для удовлетворения ограничения ресурсов. |
maximum_resource_usage | Максимальное использование ресурсов для удовлетворения ограничения ресурсов. |
Ограничение планирования
Конкретное ограничение планирования для конкретного сотрудника. Указанное ограничение применяется только в течение заданного интервала [start_date_time, end_date_time)
.
Поля | |
---|---|
priority | Уровень приоритета для этого ограничения планирования. Приоритет по умолчанию для всех ограничений планирования — |
start_date_time | Время начала применения этого ограничения планирования (включительно). |
end_date_time | Время окончания применения этого ограничения планирования (эксклюзивное). |
type поля объединения. Указанный тип ограничения. Каждое ограничение применяется только в течение указанного выше временного окна. type может быть только одним из следующих: | |
minimum_minutes | Минимальное количество минут, в течение которых сотрудник может работать. Если сотрудник назначен на смену, которая перекрывает (полностью или частично) временное окно, в этот подсчет включается количество минут, в течение которых смена перекрывает временное окно. |
maximum_minutes | Максимальное количество минут, в течение которых сотрудник может работать во временном окне. Если сотрудник назначен на смену, которая перекрывает (полностью или частично) временное окно, в этот подсчет включается количество минут, в течение которых смена перекрывает временное окно. |
minimum_consecutive_work_days | Минимальное количество дней подряд, в течение которых сотрудник может работать. Сотрудник работает в определенный день, если ему назначена смена, которая начинается в этот день. Любая смена, на которую назначен сотрудник и которая начинается во временном окне, включается в этот подсчет. |
maximum_consecutive_work_days | Максимальное количество дней подряд, в течение которых сотрудник может работать. Сотрудник работает в определенный день, если ему назначена смена, которая начинается в этот день. Любая смена, на которую назначен сотрудник и которая начинается во временном окне, включается в этот подсчет. |
minimum_shift_count | Минимальное количество смен, в течение которых может работать сотрудник. В этот подсчет включается любая смена, на которую назначен сотрудник и которая полностью совпадает с временным окном. |
maximum_shift_count | Максимальное количество смен, в течение которых может работать сотрудник. В этот подсчет включается любая смена, на которую назначен сотрудник и которая полностью совпадает с временным окном. |
minimum_rest_minutes | Минимальное количество минут, в течение которых сотрудник должен отдыхать после окончания одной смены, прежде чем его переведут на другую смену. Это ограничение применяется к каждой паре смен, которые полностью включены в [ |
Сдвиг
Смена определяет фиксированный временной интервал, в течение которого сотрудники могут работать.
Поля | |
---|---|
id | Уникальный идентификатор, присвоенный этой смене. |
location_id | Идентификатор локации, в которой работает данная смена. Это может быть пусто. |
start_date_time | Время начала смены (включительно). |
end_date_time | Время окончания смены (эксклюзивное). В настоящее время решатель допускает только смены продолжительностью менее 24 часов. |
break_rules[] | Список нарушений правил, возникающих во время смены. Сотрудникам, выполняющим эту смену, назначается перерыв по |
Назначение смены
Сотрудник, которому предстоит сменить роль.
Поля | |
---|---|
employee_id | Назначаемый идентификатор сотрудника. |
shift_id | Идентификатор смены, присвоенный сотруднику. |
role_id | Идентификатор роли, которую назначается сотруднику на смену. |
breaks[] | Список перерывов для этой смены. |
Статус ShiftGenerationSolutionStatus
Статус решения указывается в ответе решателя.
Перечисления | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED | Неопределенный статус ответа. |
SHIFT_GENERATION_SOLVED | Решатель нашел решение за отведенное время. |
SHIFT_GENERATION_NOT_SOLVED | Проблема не позволяла решателю генерировать сдвиги. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED | Не удалось создать смены для покрытия спроса в установленный срок. |
Сдвиг предпочтений
Числовое предпочтение для определенного идентификатора смены.
Поля | |
---|---|
shift_id | Идентификатор смены, для которой указано предпочтение. |
preference | Более высокие значения предпочтения означают более желательный сдвиг. |
ShiftRequest
Просьба сотрудника о назначении или не назначении на определенные смены.
Поля | |
---|---|
priority | Уровень приоритета этого запроса планирования. Приоритет по умолчанию для всех запросов планирования — |
shift_ids[] | Идентификаторы смены запроса на планирование. |
type | Тип запроса, например, может ли запрос быть назначен или не назначен набору смен. |
ShiftШаблон
Шаблон, определяющий правила формирования смен. Смена — это единица работы, которая определяет время начала и окончания и может содержать события (например, обед, перерывы и т. д.). В ответе смена будет назначена на конкретную дату.
Поля | |
---|---|
id | Уникальный идентификатор этого шаблона. |
earliest_start_time | Самое раннее время дня, когда может начаться смена. Это значение указывается в часах и минутах; секунды и нано игнорируются. |
latest_start_time | Самое позднее время в течение дня, когда может начаться смена. Это значение указывается в часах и минутах; секунды и нано игнорируются. Если это значение меньше значения |
duration_minutes | Фиксированная продолжительность смены, созданная этим шаблоном. |
start_time_increment_minutes | Приращение времени (в минутах), используемое для создания набора возможных времен начала между |
days_off_count_per_week | Фиксированное количество выходных в неделю. Сотруднику предоставляется выходной, если он не назначен на смену, начинающуюся в этот день. Неделя состоит из 7 дней и начинается в воскресенье. |
event_templates[] | Правила генерации событий для каждой смены. В каждую смену для каждого указанного события будет включено ровно одно событие. |
minimum_interevent_gap_minutes | Минимальное количество минут между окончанием одного события и началом следующего. |
maximum_employee_count | Максимальное количество сотрудников, которых можно назначить на все смены, созданные с помощью этого шаблона. |
Статус решения
Статус решения (т. е. расписания) указывается в ответе решателя.
Перечисления | |
---|---|
SOLUTION_STATUS_UNSPECIFIED | Неопределенный статус ответа. |
FEASIBLE | Возвращенное расписание возможно, но может быть неоптимальным. |
OPTIMAL | Возвращенный график является оптимальным. |
INFEASIBLE | Для данных ограничений не существует приемлемого расписания. Решающая программа может вернуть это значение, если какое-либо подмножество ограничений с уровнем приоритета PRIORITY_MANDATORY не может быть удовлетворено. |
NOT_SOLVED | Расписание не найдено. |
NOT_SOLVED_DEADLINE_EXCEEDED | В указанный срок расписание не найдено. |
РешитьПараметры
Параметры, управляющие единственным решением задачи планирования смен.
Поля | |
---|---|
time_limit | Максимальное время, которое решатель должен потратить на решение задачи. Если не установлено, по умолчанию — 1 минута. Это значение не является жестким пределом и не учитывает накладные расходы на связь. Ожидаемая задержка решения проблемы может немного превышать это значение. |
SolverConfig
Задает дополнительные параметры для решения проблемы создания смен.
Поля | |
---|---|
time_limit | Максимальное время, которое решатель должен потратить на решение задачи. Если не установлено, по умолчанию 1 минута. Выбор срока должен зависеть от масштаба проблемы. Например, при решении 7-дневного экземпляра с двумя Это значение не является жестким пределом и не учитывает накладные расходы на связь. Ожидаемая задержка решения проблемы может немного превышать это значение. |
multi_day_schedule | Если принимает значение true, решатель генерирует |
shift_events_can_change | Если задано значение true, многодневные |
Рабочий статус
Независимо от того, работает сотрудник или нет.
Перечисления | |
---|---|
WORK_STATUS_UNSPECIFIED | Неизвестный статус работы. |
STATUS_WORK | Статус, представляющий работающего сотрудника. |
STATUS_NOT_WORK | Статус, представляющий неработающего сотрудника. |