索引
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
为增量来确定考虑的所有可能的插播时间点。例如,如果一条广告插播规则模拟一个从 10:00 到 11:00 之间开始的 30 分钟的广告插播时间点,并且规则增量为 20 分钟,则考虑的广告插播时间点列表包括:[10:00, 10:30]、[10:20, 10:50]、[1:40]、
字段 | |
---|---|
earliest_start_time |
广告插播的最早开始时间(含此时间)。只能设置 |
latest_start_time |
广告插播的最晚开始时间(含此时间)。只能设置 |
duration_minutes |
广告插播时长(以分钟为单位)。 |
rule_increment_minutes |
[可选] 可纳入此广告插播规则中的所有广告插播时间点的时间增量(以分钟为单位)。如果未设置,则默认为 |
BudgetRequirement
给定时间间隔内的预算要求。
字段 | |
---|---|
total_budget |
指定时间间隔内的总预算。如果优先级为 如果未设置 |
start_date_time |
此预算适用的开始时间。如果未指定开始时间,则将其设置为所有给定班次的最早开始时间。 |
end_date_time |
此预算适用的结束时间。如果未指定结束时间,则将其设置为所有给定班次的最晚结束时间。 |
priority |
在指定时间范围内满足预算要求的优先级。默认优先级为 请注意,如果此优先级高于其他限制条件优先级,并且 |
CoverageRequirement
保险范围要求规定了在特定时间段和指定地点担任一组角色和/或技能所需的员工人数。特定位置的日期时间间隔不能重叠。或者,您也可以提供班次 ID 列表,而不是时间范围和地点。只有可分配到特定角色(或拥有特定技能)的员工才能满足此要求。
就给定角色和/或技能而言,当时间范围内每时每刻的员工人数至少达到 target_employee_count
人(或 shift_ids
的每班轮班时),即满足保险范围要求。与此相对,如果在时间范围内的任何时间(或shift_ids
的任何轮班时间)内工作人数少于 target_employee_count
人,则不符合覆盖率要求。即使员工人数多于 target_employee_count
,仍满足要求,但求解器可以最大限度地减少人手过多。
字段 | |
---|---|
start_date_time |
覆盖范围要求的开始时间(含此时间)。如果设置, |
end_date_time |
保修要求的结束时间(不含)。如果设置, |
location_id |
需要员工的工作地点。“ |
shift_ids[] |
如果已设置,角色和技能要求会单独应用于此列表中的每个班次 ID。如果 shift_ids 不为空,则 |
role_requirements[] |
在时间范围内分配给指定角色的员工人数要求。对于每个角色 ID,最多只能提供一个 |
skill_requirements[] |
在相应时间范围内轮班的具有指定技能的员工人数要求。每个技能 ID 最多只能提供一个 |
RoleRequirement
在时间范围内分配给指定角色的员工人数要求。
字段 | |
---|---|
role_id |
要求的角色 ID。 |
target_employee_count |
在时间范围内分配给相应角色的员工人数。 |
priority |
此要求限制条件的优先级。所有资源限制条件的默认优先级为 |
SkillRequirement
在这段时间内工作且具备指定技能的员工人数要求。
字段 | |
---|---|
skill_id |
要求的技能 ID。 |
target_employee_count |
在时间范围内工作且具有指定技能的期望员工人数。 |
priority |
此要求限制条件的优先级。所有资源限制条件的默认优先级为 |
DemandCoverageViolation
指定给定时间间隔内的需求覆盖率违规情况。在整个指定的时间间隔内,员工需求是相同的。
字段 | |
---|---|
start_date_time |
需求间隔的开始日期和时间(含)。此值精确到分钟。 |
end_date_time |
需求间隔的结束日期(不含)。此值精确到分钟。 |
coverage_violation |
指定时间间隔内的覆盖范围违规。正值表示需求被覆盖,负值表示需求被低估。 |
员工
要安排的员工中的员工。
字段 | |
---|---|
id |
分配给此员工的唯一 ID。 |
role_ids[] |
此员工可以执行的角色 ID。必须至少指定一个角色。如果为某个员工分配了某个轮班,该员工也会分配到此列表中的一个角色。在时间安排的时间范围内,员工可能会被分配不同的角色。 |
skill_ids[] |
此员工拥有的技能 ID。此列表可以为空。为某个员工分配轮班时,该员工会使用此处所列的任意技能来满足在整个轮班期间的技能要求。 |
shift_preferences[] |
调整此员工的偏好设置。此处指定的班次表示员工希望在预约时限内分配的班次。 |
scheduling_constraints[] |
此员工的时间安排限制列表。其中每个限制条件的默认优先级均为 |
resource_constraints[] |
可在此处向 |
shift_requests[] |
员工的排班请求列表。该请求可以是为员工分配或不分配给特定班次的请求。员工的所有固定调度分配都可以用优先级为 |
hourly_contract |
规定员工的常规每小时费率和加班费率的合同。 |
EmployeeDemand
指定在给定日期时间间隔内满足需求所需的员工数。
字段 | |
---|---|
start_date_time |
指定需求(含)的开始时间。这些值读到分钟;秒和所有较小的单位会被忽略。 |
end_date_time |
指定需求的时间段结束时间(不含)。这些值读到分钟;秒和所有较小的单位会被忽略。 |
employee_count |
满足此时间间隔内需求所需的员工数。 |
EmployeeSchedule
与要分配给多位员工的单个 ShiftTemplate
对应的轮班的有序列表。
字段 | |
---|---|
shift_template_id |
用于生成此组班次的模板的 ID。 |
shifts[] |
分配给 |
employee_count |
为满足需求而应分配给这组轮班的员工数。 |
ShiftWithEvents
用于指定开始日期和结束日期,以及求解器生成的移位的一系列固定事件。
字段 | |
---|---|
start_date_time |
班次的开始日期和时间。该值精确到分钟,未指定秒数和更小的单位。 |
end_date_time |
班次结束的日期和时间。该值精确到分钟,未指定秒数和更小的单位。 |
events[] |
此偏移所含事件的列表,与 |
事件
指定求解器生成的偏移中特定事件的开始和结束日期时间。
字段 | |
---|---|
event_template_id |
用于生成此事件的模板的 ID。 |
start_date_time |
活动开始日期和时间。该值精确到分钟,未指定秒数和更小的单位。 |
end_date_time |
活动的结束日期和时间。该值精确到分钟,未指定秒数和更小的单位。 |
EventTemplate
模板,用于指定生成在班次期间发生的单个事件的规则。事件可以表示会议、休息、午餐等。
字段 | |
---|---|
id |
此模板的唯一 ID。 |
minimum_minutes_after_shift_start |
在轮班开始后,可开始此事件的最短分钟数。 |
maximum_minutes_after_shift_start |
最多可在轮班开始后开始此事件的分钟数。 |
duration_minutes |
此事件的固定时长(以分钟为单位)。 |
start_time_increment_minutes |
时间增量(以分钟为单位),用于生成一组可能的事件开始时间(介于 |
HourlyContract
指定基本时薪、差价和加班乘数,以确定员工的薪酬。请注意,不同地区的法规对加班薪酬的计算方式可能有所不同。求解器会估算加班薪酬,以尽可能降低总费用或满足预算要求(请参阅 BudgetRequirement
)。它并非用于计算工资的工具。
字段 | |
---|---|
base_hourly_rate |
非加班时间的薪酬。如果员工适用多个费率,则会根据此基本小时费率应用差价。此外,如果有多种费率,则基本每小时费率应为这些费率的最小值。 |
hourly_rate_shift_differentials |
在 |
overtime_periods[] |
必须计算加时值的所有时间段的列表。这些时段不得重叠。 |
OvertimePeriod
固定和有规律的周期(通常为 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 约束条件过多。 |
ResourceConstraint
一般限制条件,用于限制员工使用的特定“资源”的数量。这是更具体的 SchedulingConstraint
的抽象版本,对用户来说更加灵活。您可以改用此消息指定无法在 SchedulingConstraint.type
中指定的许多调度约束。
字段 | |
---|---|
priority |
此资源限制条件的优先级。所有资源限制条件的默认优先级为 |
resource_usages |
轮班使用的资源量。例如,如果此约束条件应用于某员工在特定周的最短和最长工作时间,则此映射将包含该周的班次以及每次班次的时长(以小时为单位)。 |
minimum_resource_usage |
要满足资源限制条件的最低资源使用量。 |
maximum_resource_usage |
要满足资源限制条件的最大资源使用量。 |
SchedulingConstraint
特定员工的特定调度限制条件。指定的限制条件仅在给定的时间间隔 [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 |
一个班次结束后,员工必须休息的最短分钟数,才能被分配到另一个班次。此限制条件适用于完全包含在 [ |
Shift
轮班会指定员工可以工作的固定时间段。
字段 | |
---|---|
id |
分配给此班次的唯一 ID。 |
location_id |
执行此偏移的地理位置 ID。此字段可以为空。 |
start_date_time |
班次的开始时间(含此时间)。 |
end_date_time |
班次的结束时间(不含)。目前,该求解器仅支持时长不超过 24 小时的移位。 |
break_rules[] |
转移期间发生的违反规则的列表。执行此轮班的员工每 |
ShiftAssignment
负责轮班的员工。
字段 | |
---|---|
employee_id |
正在分配的员工 ID。 |
shift_id |
分配给员工的排班 ID。 |
role_id |
轮班为员工分配的角色 ID。 |
breaks[] |
此轮班分配的休息列表。 |
ShiftGenerationSolutionStatus
求解器的回答中提供的求解状态。
枚举 | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
未指定的响应状态。 |
SHIFT_GENERATION_SOLVED |
求解器在提供的时间内找到了解法。 |
SHIFT_GENERATION_NOT_SOLVED |
出现了问题,导致求解器无法生成移位。 |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
无法生成班次以在给定的时限内满足需求。 |
ShiftPreference
特定班次 ID 的数字偏好设置。
字段 | |
---|---|
shift_id |
已指定偏好设置的 Shift ID。 |
preference |
偏好值越大,表示变化更可取。 |
ShiftRequest
员工希望被分配或不会被分配到特定班次的请求。
字段 | |
---|---|
priority |
此安排请求的优先级。所有调度请求的默认优先级为 |
shift_ids[] |
时间安排请求的班次 ID。 |
type |
请求类型,例如是否将请求分配给一组轮班。 |
ShiftTemplate
用于指定偏移生成规则的模板。班次是一种工作单位,指定了开始时间和结束时间,其中可能包含活动(例如午餐、休息等)。系统会在回复中的特定日期指定班次。
字段 | |
---|---|
id |
此模板的唯一 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 |
可分配给此模板生成的所有轮班的员工数上限。 |
SolutionStatus
求解器的响应中提供的求解(即时间表)状态。
枚举 | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
未指定的响应状态。 |
FEASIBLE |
返回的时间表是可行的,但可能不是最佳。 |
OPTIMAL |
返回的时间表是最佳的。 |
INFEASIBLE |
对于给定的约束条件,不存在可行的时间表。如果无法满足优先级为 PRIORITY_MANDATORY 的约束条件的任何子集,求解器可能会返回此值。 |
NOT_SOLVED |
未找到任何时间表。 |
NOT_SOLVED_DEADLINE_EXCEEDED |
在指定的时限内未找到任何时间表。 |
SolveParameters
用于控制轮班调度问题的一次解决的参数。
字段 | |
---|---|
time_limit |
求解器应该在解题上花费的时间上限。如果未设置,则默认为 1 分钟。 该值不是硬性限制,并且不考虑通信开销。解决此问题的预期延迟时间可能会略微超过此值。 |
SolverConfig
指定用于解决 Shift 生成问题的其他参数。
字段 | |
---|---|
time_limit |
求解器应该在解题上花费的时间上限。如果未设置,则默认为 1 分钟。时间限制的选择应取决于问题的规模。举个例子,在解决一个包含 2 个 该值不是硬性限制,并且不考虑通信开销。解决此问题的预期延迟时间可能会略微超过此值。 |
multi_day_schedule |
如果为 true,求解器会生成包含多次偏移的 |
shift_events_can_change |
如果为 true,多日 |
WorkStatus
员工是否在工作。
枚举 | |
---|---|
WORK_STATUS_UNSPECIFIED |
未知工作状态。 |
STATUS_WORK |
代表在职员工的身份。 |
STATUS_NOT_WORK |
代表非在职员工的身份。 |