Method: scheduling.solveShiftScheduling

Giải quyết vấn đề khắc phục vấn đề về việc lên lịch ca làm việc từ SolveShiftSchedulingRequest đã cho bằng cách phân công nhân viên vào các ca làm việc sao cho lựa chọn ưu tiên về việc lên lịch của nhân viên được tối đa hoá và giảm thiểu các trường hợp vi phạm giới hạn về việc lên lịch.

Yêu cầu HTTP

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

URL sử dụng cú pháp Chuyển mã gRPC.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng 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)
    }
  ]
}
Trường
requestId

string

Mã yêu cầu hoặc sự cố có vấn đề.

solveParameters

object (SolveParameters)

Các tham số để kiểm soát một bài toán duy nhất.

employees[]

object (Employee)

Tất cả nhân viên hiện có sẽ được lên lịch.

shifts[]

object (Shift)

Tất cả các ca làm việc để lập lịch biểu.

coverageRequirements[]

object (CoverageRequirement)

Yêu cầu về mức độ phù hợp cho toàn bộ phạm vi lập kế hoạch. Quy tắc này chỉ định số lượng nhân viên phải thực hiện từng vai trò hoặc có kỹ năng trong khoảng thời gian hoặc danh sách mã ca làm việc. Tất cả các yêu cầu về mức độ sử dụng phải được chỉ định cùng với khung thời gian hoặc danh sách mã ca làm việc (nhưng không được chỉ định cả hai). Khoảng thời gian (nếu có) cho các yêu cầu về phạm vi bao phủ không được trùng lặp ở từng vị trí cụ thể. Mức độ ưu tiên mặc định cho từng điều kiện ràng buộc này là PRIORITY_MANDATORY đối với yêu cầu về vai trò và PRIORITY_LOW đối với yêu cầu về kỹ năng. Hãy xem enum Priority để biết thêm thông tin chi tiết.

roleIds[]

string

Danh sách tất cả vai trò có thể có trong lực lượng lao động. Mỗi nhân viên phải có ít nhất một vai trò mà họ có thể được chỉ định cho một ca làm việc. Vai trò là một công việc cụ thể được phân công trong ca làm việc (chẳng hạn như y tá đã đăng ký kinh doanh, đầu bếp điều hành, phục vụ bàn, v.v.). Khi một nhân viên được phân công ca làm việc, họ cũng được chỉ định một vai trò cụ thể.

skillIds[]

string

Danh sách tất cả các kỹ năng có thể có trong lực lượng lao động. Kỹ năng là bất kỳ bằng cấp nào mà một nhân viên có thể có mà không liên quan đến một công việc được giao cụ thể (ví dụ: chứng chỉ, ngôn ngữ nói, v.v.). Danh sách này có thể trống. Khi một nhân viên được phân công vào ca làm việc, họ phải hoàn thành mọi kỹ năng cần thiết cho ca làm việc đó.

locationIds[]

string

Danh sách tất cả vị trí có thể thực hiện các ca thay đổi trong lịch biểu. Danh sách này có thể trống. Việc chỉ định các vị trí khác nhau có thể hữu ích khi người quản lý y tá muốn lên lịch cho nhiều y tá ở nhiều bộ phận tại một bệnh viện hoặc một ví dụ khác là người quản lý khách sạn muốn lên lịch cho nhân viên ở nhiều khách sạn.

budgetRequirements[]

object (BudgetRequirement)

Đặc tả ngân sách cho vấn đề về việc lập lịch. Mức độ ưu tiên mặc định cho từng yêu cầu này là PRIORITY_LOW. Hãy xem enum Priority để biết thêm thông tin chi tiết.

assignmentsHint[]

object (ShiftAssignment)

Thay đổi các bài tập để sử dụng làm giải pháp dự kiến (còn gọi là gợi ý giải pháp) cho bài toán về việc lên lịch. Gợi ý chỉ định sẽ bị bỏ qua nếu việc chỉ định mâu thuẫn với một ca làm việc không thể chỉ định hoặc một yêu cầu lên lịch.

Nội dung phản hồi

Phản hồi cho API lên lịch cho lực lượng lao động. Đối với mỗi phản hồi, shiftAssignments sẽ trống nếu solutionStatus trả về là NOT_SOLVED_DEADLINE_EXCEEDED hoặc INFEASIBLE. Nếu solutionStatus được trả về là OPTIMAL hoặc FEASIBLE, thì một lượt chỉ định ca làm việc hợp lệ sẽ được trả về trong shiftAssignments. Để chỉ định ca làm việc hợp lệ, các thuộc tính sau sẽ giữ nguyên:

  1. Mỗi mã nhân viên nằm trong nhóm nhân viên được cung cấp trong yêu cầu.
  2. Mỗi mã vai trò được chỉ định cho nhân viên đó sẽ có trong tập hợp mã vai trò của nhân viên đó.
  3. Mỗi mã ca làm việc nằm trong tập hợp các ca làm việc được đưa ra trong yêu cầu.
  4. Mỗi mã ca làm việc không phải là một trong các mã ca làm việc không thể chỉ định cho một nhân viên cụ thể.
  5. Một nhân viên sẽ không bao giờ được phân vào hai ca làm việc chồng chéo nhau.
  6. Đối với lịch biểu đã cho, không có điều kiện ràng buộc hoặc yêu cầu nào có mức độ ưu tiên PRIORITY_MANDATORY bị vi phạm.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Trường
requestId

string

Mã của yêu cầu liên kết với phản hồi này.

solutionStatus

enum (SolutionStatus)

Trạng thái của giải pháp được trả về. Nếu giải pháp không FEASIBLE hoặc OPTIMAL, các trường khác trong proto này có thể trống. Nếu trạng thái là NOT_SOLVED_DEADLINE_EXCEEDED, tức là đã đạt đến giới hạn thời gian mà không tìm thấy giải pháp khả thi hoặc không xác định được giải pháp khả thi hay không. Yêu cầu có thể không khả thi nếu không đáp ứng được tất cả các ràng buộc của mức độ ưu tiên BẮT BUỘC.

shiftAssignments[]

object (ShiftAssignment)

Danh sách tất cả bài tập. Mỗi ShiftAssignment chỉ định một nhân viên, ca làm việc mà họ được chỉ định và vai trò mà họ được chỉ định để thực hiện trong ca làm việc đó.

statusMessage

string

Nếu solutionStatus không phải là tối ưu, thì trường này có thể chứa thông tin bổ sung về trình giải toán.

SolveParameters

Các tham số kiểm soát một giải pháp duy nhất của vấn đề lên lịch ca làm việc.

Biểu diễn dưới dạng JSON
{
  "timeLimit": string
}
Trường
timeLimit

string (Duration format)

Thời gian tối đa mà trình giải toán cần dành cho bài toán. Nếu bạn không đặt chính sách này, chế độ cài đặt mặc định sẽ là 1 phút.

Giá trị này không phải là giới hạn cố định và không tính đến chi phí truyền thông. Độ trễ dự kiến để giải quyết vấn đề có thể vượt quá giá trị này một chút.

Thời lượng tính bằng giây với tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

Nhân viên

Một nhân viên trong lực lượng lao động được lên lịch làm việc.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
Trường
id

string

Mã nhận dạng duy nhất được gán cho nhân viên này.

roleIds[]

string

Mã vai trò mà nhân viên này có thể thực hiện. Bạn phải chỉ định ít nhất một vai trò. Khi một nhân viên được phân công ca làm việc, họ cũng được chỉ định một vai trò duy nhất trong danh sách này. Nhân viên này có thể được chỉ định vai trò khác nhau trong khung thời gian lên lịch.

skillIds[]

string

Mã kỹ năng mà nhân viên này sở hữu. Danh sách này có thể trống. Khi một nhân viên được phân công ca làm việc, họ sẽ sử dụng bất kỳ kỹ năng nào trong danh sách ở đây để đáp ứng các yêu cầu về kỹ năng trong suốt ca làm việc được giao.

shiftPreferences[]

object (ShiftPreference)

Lựa chọn ưu tiên về ca làm việc của nhân viên này. Các ca làm việc được chỉ định ở đây thể hiện những ca làm việc mà nhân viên muốn được chỉ định trong khung thời gian lên lịch. Mã chuyển đổi được chỉ định trong shiftPreferences phải là duy nhất. Trình giải toán sẽ cố gắng tăng tối đa tổng giá trị ShiftPreference.preference trên tất cả shiftPreferences được thoả mãn.

schedulingConstraints[]

object (SchedulingConstraint)

Danh sách các quy tắc ràng buộc khi lên lịch cho nhân viên này. Mức độ ưu tiên mặc định cho từng điều kiện ràng buộc này là PRIORITY_MEDIUM. Hãy xem enum Priority để biết thêm thông tin chi tiết.

resourceConstraints[]

object (ResourceConstraint)

Bạn có thể thêm mọi quy tắc ràng buộc khác về việc lập lịch chưa được chỉ định trong schedulingConstraints tại đây vào resourceConstraints. ResourceConstraint là một cách biểu thị trừu tượng hơn để giới hạn tài nguyên cho một nhân viên. Mức độ ưu tiên mặc định cho từng điều kiện ràng buộc này là PRIORITY_MEDIUM. Hãy xem enum Priority để biết thêm thông tin chi tiết.

shiftRequests[]

object (ShiftRequest)

Danh sách yêu cầu ca làm việc của nhân viên. Yêu cầu đó có thể là cho phép hoặc không phân công một nhân viên vào các ca làm việc cụ thể. Mọi hoạt động phân công theo lịch cố định cho nhân viên đều có thể được biểu thị bằng ShiftRequest với mức độ ưu tiên PRIORITY_MANDATORY. Mã ca làm việc có thể xuất hiện trong tối đa một yêu cầu lên lịch cho nhân viên này. Mức độ ưu tiên mặc định cho từng yêu cầu này là PRIORITY_LOW. Hãy xem enum Priority để biết thêm thông tin chi tiết.

hourlyContract

object (HourlyContract)

Hợp đồng quy định mức giá làm việc theo giờ thường và làm thêm giờ cho nhân viên.

ShiftPreference

Lựa chọn ưu tiên dạng số cho một mã thay đổi cụ thể.

Biểu diễn dưới dạng JSON
{
  "shiftId": string,
  "preference": integer
}
Trường
shiftId

string

Mã thay đổi mà tuỳ chọn được chỉ định.

preference

integer

Giá trị ưu tiên lớn hơn biểu thị sự thay đổi mong muốn hơn.

SchedulingConstraint

Quy tắc ràng buộc cụ thể về việc lập lịch biểu cho một nhân viên cụ thể. Giới hạn đã chỉ định chỉ được áp dụng trong khoảng thời gian [startDateTime, endDateTime) nhất định.

Biểu diễn dưới dạng 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.
}
Trường
priority

enum (Priority)

Mức độ ưu tiên cho quy tắc ràng buộc về việc lập lịch này. Mức độ ưu tiên mặc định cho tất cả các quy tắc ràng buộc về việc lập lịch là PRIORITY_MEDIUM.

startDateTime

object (DateTime)

Thời gian bắt đầu khi áp dụng quy tắc ràng buộc về việc lập lịch này (bao gồm).

endDateTime

object (DateTime)

Thời gian kết thúc khi áp dụng quy tắc ràng buộc về lịch này (loại trừ).

Trường hợp type. Loại quy tắc ràng buộc đang được chỉ định. Mỗi quy tắc ràng buộc chỉ được áp dụng trong khoảng thời gian được chỉ định ở trên. type chỉ có thể là một trong những trạng thái sau:
minimumMinutes

integer

Số phút tối thiểu nhân viên có thể làm việc. Nếu nhân viên được phân công vào một ca làm việc trùng lặp (toàn bộ hoặc một phần) khoảng thời gian, thì số phút mà ca làm việc trùng lặp với khoảng thời gian này sẽ được tính vào số phút này.

maximumMinutes

integer

Số phút tối đa mà nhân viên có thể làm việc trong khung thời gian. Nếu nhân viên được phân công vào một ca làm việc trùng lặp (toàn bộ hoặc một phần) khoảng thời gian, thì số phút mà ca làm việc trùng lặp với khoảng thời gian này sẽ được tính vào số phút này.

minimumConsecutiveWorkDays

integer

Số ngày liên tục tối thiểu mà nhân viên có thể làm việc. Một nhân viên làm việc vào một ngày cụ thể nếu họ được phân công làm việc vào một ngày cụ thể bắt đầu vào ngày đó. Mọi ca làm việc mà nhân viên được phân công bắt đầu trong khoảng thời gian này đều được tính vào số liệu này.

maximumConsecutiveWorkDays

integer

Số ngày liên tục tối đa mà nhân viên có thể làm việc. Một nhân viên làm việc vào một ngày cụ thể nếu họ được phân công làm việc vào một ngày cụ thể bắt đầu vào ngày đó. Mọi ca làm việc mà nhân viên được phân công bắt đầu trong khoảng thời gian này đều được tính vào số liệu này.

minimumShiftCount

integer

Số ca làm việc tối thiểu mà nhân viên có thể làm việc. Mọi ca làm việc mà nhân viên được phân công trùng lặp hoàn toàn với khoảng thời gian đều được tính vào số liệu này.

maximumShiftCount

integer

Số ca làm việc tối đa mà nhân viên có thể làm việc. Mọi ca làm việc mà nhân viên được phân công trùng lặp hoàn toàn với khoảng thời gian đều được tính vào số liệu này.

minimumRestMinutes

integer

Số phút tối thiểu mà nhân viên phải nghỉ sau khi kết thúc một ca làm việc trước khi được chỉ định sang ca làm việc khác. Quy tắc ràng buộc này áp dụng cho mọi cặp lượt chuyển được đưa vào đầy đủ [startDateTime, endDateTime].

Mức độ ưu tiên

Mức ưu tiên đối với mọi quy tắc ràng buộc đối với lịch làm việc của nhân viên hoặc các yêu cầu về mức độ phù hợp. Các lựa chọn này bao gồm SchedulingConstraint, ResourceConstraint, ShiftRequestCoverageRequirement. Vì có thể có các quy tắc ràng buộc xung đột, nên không phải lúc nào bạn cũng có thể đáp ứng mọi quy tắc ràng buộc. Do đó, mỗi loại quy tắc ràng buộc có một mức độ ưu tiên (do người dùng hoặc giá trị mặc định đưa ra) để thông báo cho trình giải toán về tầm quan trọng tương đối của tất cả quy tắc ràng buộc được cung cấp cho một lịch biểu hoàn chỉnh.

Enum
PRIORITY_UNSPECIFIED Mức độ ưu tiên không xác định.
PRIORITY_LOW Mức độ ưu tiên thấp nhất. Các quy tắc ràng buộc có mức độ ưu tiên này ít quan trọng hơn so với các quy tắc ràng buộc khác. Đây là những lỗi vi phạm đầu tiên được xem xét vi phạm nếu không tìm thấy giải pháp khả thi.
PRIORITY_MEDIUM Mức độ ưu tiên trung bình. Các quy tắc ràng buộc có mức độ ưu tiên này quan trọng hơn các quy tắc ràng buộc có mức độ ưu tiên PRIORITY_LOW nhưng ít quan trọng hơn các quy tắc ràng buộc có mức độ ưu tiên PRIORITY_HIGH. Nếu không tìm thấy giải pháp khả thi sau khi nới lỏng tất cả các quy tắc ràng buộc với mức độ ưu tiên PRIORITY_LOW, thì các điều kiện ràng buộc có mức độ ưu tiên PRIORITY_MEDIUM sẽ được xem xét lần tiếp theo đối với lỗi vi phạm.
PRIORITY_HIGH Mức độ ưu tiên cao nhất. Các hạn chế có mức độ ưu tiên này là quan trọng nhất. Đây là những lỗi vi phạm cuối cùng nếu hệ thống không tìm thấy giải pháp khả thi sau khi nới lỏng các quy tắc hạn chế của mức độ ưu tiên thấp hơn.
PRIORITY_MANDATORY Mức độ ưu tiên thể hiện nội dung mà trình giải quyết không thể vi phạm. Nếu trình giải toán đang trả về SolutionStatus.INFEASIBLE, thì điều này có thể là do có quá nhiều điều kiện ràng buộc với PRIORITY_MANDATORY.

ResourceConstraint

Một quy tắc ràng buộc chung giới hạn số lượng "tài nguyên" nhất định mà một nhân viên sử dụng. Đây là phiên bản trừu tượng của SchedulingConstraint cụ thể hơn, linh hoạt hơn cho người dùng. Bạn có thể chỉ định nhiều quy tắc ràng buộc về việc lập lịch không thể chỉ định trong SchedulingConstraint.type bằng thông báo này.

Biểu diễn dưới dạng JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Trường
priority

enum (Priority)

Mức độ ưu tiên của quy tắc ràng buộc tài nguyên này. Mức độ ưu tiên mặc định cho tất cả các điều kiện ràng buộc về tài nguyên là PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Lượng tài nguyên được sử dụng theo ca làm việc. Ví dụ: nếu giới hạn này áp dụng cho số giờ làm việc tối thiểu và tối đa mà một nhân viên làm việc trong một tuần cụ thể, thì bản đồ này sẽ chứa các ca làm việc trong tuần đó và thời lượng của mỗi ca làm việc tính theo giờ.

Đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Mức sử dụng tài nguyên tối thiểu để đáp ứng quy tắc ràng buộc về tài nguyên.

maximumResourceUsage

number

Mức sử dụng tài nguyên tối đa để đáp ứng quy tắc ràng buộc về tài nguyên.

ShiftRequest

Yêu cầu phân công hoặc không phân công các ca làm việc cụ thể của nhân viên.

Biểu diễn dưới dạng JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Trường
priority

enum (Priority)

Mức độ ưu tiên của yêu cầu lên lịch này. Mức độ ưu tiên mặc định cho tất cả các yêu cầu lên lịch là PRIORITY_LOW.

shiftIds[]

string

Mã ca làm việc của yêu cầu lên lịch.

type

enum (WorkStatus)

Loại yêu cầu, ví dụ: yêu cầu có được chỉ định hay không được chỉ định cho nhóm ca làm việc.

WorkStatus

Nhân viên có đang làm việc hay không.

Enum
WORK_STATUS_UNSPECIFIED Trạng thái công việc không xác định.
STATUS_WORK Trạng thái đại diện cho một nhân viên đang làm việc.
STATUS_NOT_WORK Trạng thái đại diện cho một nhân viên không làm việc.

HourlyContract

Chỉ định mức lương theo giờ cơ bản, hệ số chênh lệch giá và hệ số làm thêm giờ để xác định khoản thù lao cho một nhân viên. Xin lưu ý rằng các quy định ở mỗi nơi có thể yêu cầu cách tính tiền thù lao làm thêm giờ theo cách khác. Trình giải toán ước tính khoản bù giờ làm thêm để giảm thiểu tổng chi phí hoặc đáp ứng ngân sách (xem BudgetRequirement). Đây không phải là công cụ tính toán bảng lương.

Biểu diễn dưới dạng JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Trường
baseHourlyRate

number

Tiền thù lao cho việc làm thêm giờ. Nếu nhân viên áp dụng nhiều mức giá, thì mức chênh lệch giá sẽ được áp dụng tương ứng với mức giá cơ bản theo giờ này. Ngoài ra, nếu có nhiều mức giá, thì mức giá cơ bản theo giờ phải là mức tối thiểu trong các mức giá này.

hourlyRateShiftDifferentials

map (key: string, value: number)

Mức chênh lệch theo giờ, được thanh toán bằng baseHourlyRate. Ví dụ: nếu mức giá cơ bản theo giờ là 30 USD/giờ, thì "shift_1" được trả với mức phí là 40 USD/giờ và "shift_2" được trả với mức phí là 45 USD/giờ, thì giá trị biểu thị proto là: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Danh sách tất cả các khoảng thời gian phải tính thời gian bù giờ. Các khoảng thời gian này không được trùng lặp.

OvertimePeriod

Một khoảng thời gian cố định và định kỳ thường xuyên (thường là 168 giờ hoặc 7 khoảng thời gian 24 giờ liên tiếp) được dùng để xác định số tiền bồi thường ngoài giờ. Mỗi giai đoạn sẽ có một hệ số làm thêm thời gian (ví dụ: 1.5) tương ứng với baseHourlyRate và giới hạn về số giờ được coi là làm việc thông thường (không làm thêm giờ). Mọi lượt chuyển đổi trùng lặp với khoảng thời gian startDateTime (bao gồm) và endDateTime (không bao gồm) sẽ được tính vào tổng số giờ làm việc trong khoảng thời gian đó. Nếu sự trùng lặp là một phần, chỉ những giờ trùng lặp mới được tính.

Biểu diễn dưới dạng JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Trường
overtimeMultiplier

number

Hệ số để tính tỷ lệ làm thêm giờ (phải lớn hơn hoặc bằng 1). Mức phí theo giờ làm thêm thường sẽ được tính là baseHourlyRate * overtimeMultiplier. Nếu có nhiều mức giá được cung cấp qua hourlyRateShiftDifferentials, trình giải quyết sẽ lấy giá trị gần đúng theo giờ làm thêm giờ với mức trung bình đơn giản của các mức giá áp dụng trong khoảng thời gian làm thêm giờ. Lưu ý: quy định ở mỗi nơi có thể yêu cầu cách tính tiền lương làm thêm giờ theo cách khác. Trình giải toán ước tính khoản bồi thường ngoài giờ để giảm thiểu tổng chi phí hoặc đáp ứng ngân sách. Tuy nhiên, công cụ này không nhằm mục đích tính toán bảng lương.

startDateTime

object (DateTime)

Thời gian bắt đầu của hiệp phụ. Nếu một ca làm việc trùng lặp vào lần này, thì số giờ của ca làm việc đó sẽ được tính từ startDateTime.

endDateTime

object (DateTime)

Thời gian kết thúc của hiệp phụ. Nếu một ca làm việc trùng lặp vào lần này, thì số giờ của một ca làm việc như vậy sẽ được tính tối đa là endDateTime.

maximumRegularHours

number

Số giờ làm việc tối đa được trả theo tỷ lệ thông thường (không làm thêm giờ). Số lượng này phải là số dương.

Shift

Ca làm việc chỉ định một khoảng thời gian cố định mà nhân viên có thể làm việc.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Trường
id

string

Mã nhận dạng duy nhất được chỉ định cho ca làm việc này.

locationId

string

Mã vị trí có yêu cầu thay đổi này diễn ra. Bạn có thể để trống trường này.

startDateTime

object (DateTime)

Thời gian bắt đầu ca làm việc (bao gồm cả thời gian này).

endDateTime

object (DateTime)

Thời gian kết thúc ca làm việc (không bao gồm). Hiện tại, trình giải quyết chỉ cho phép những ca làm việc có thời lượng dưới 24 giờ.

breakRules[]

object (BreakRule)

Danh sách các quy tắc chèn xuất hiện trong quá trình chuyển. Nhân viên thực hiện ca làm việc này được chỉ định một khoảng nghỉ mỗi break_rule. Trong thời gian này, họ không đáp ứng được nhu cầu cho vai trò mà họ đang thực hiện. Mỗi khoảng thời gian BreakRule phải được bao gồm đầy đủ trong khoảng thời gian của ca làm việc này.

BreakRule

Quy tắc xác định thời điểm nghỉ giải lao có thể bắt đầu trong một ca làm việc và khoảng thời gian của giai đoạn này. Danh sách tất cả các điểm chèn có thể được xem xét được xác định theo gia số ruleIncrementMinutes. Ví dụ: nếu quy tắc ngắt đang lập mô hình thời gian nghỉ 30 phút có thể bắt đầu trong khoảng thời gian từ 10:00 đến 11:00 và khoảng thời gian của quy tắc là 20 phút thì danh sách các điểm chèn được xem xét là: [10:00, 10:30], [10:20, 10:50], [10:10:1,1]

Biểu diễn dưới dạng JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Trường
earliestStartTime

object (DateTime)

Thời gian bắt đầu sớm nhất của điểm chèn quảng cáo (bao gồm cả thời gian này). Bạn chỉ có thể đặt hoursminutes.

latestStartTime

object (DateTime)

Thời gian bắt đầu gần nhất của điểm chèn quảng cáo (bao gồm cả thời gian này). Bạn chỉ có thể đặt hoursminutes.

durationMinutes

integer

Thời lượng của điểm chèn tính bằng phút.

ruleIncrementMinutes

integer

[Không bắt buộc] Mức tăng thời gian tính theo phút cho tất cả các điểm chèn có thể được xem xét trong quy tắc điểm chèn này. Nếu bạn không đặt chính sách này, chế độ cài đặt mặc định sẽ là durationMinutes.

CoverageRequirement

Yêu cầu về phạm vi bao phủ chỉ định số lượng nhân viên cần thiết cho một nhóm vai trò và/hoặc kỹ năng trong một khoảng thời gian cụ thể và tại một vị trí nhất định. Các khoảng thời gian ngày giờ tại một vị trí cụ thể không được trùng lặp. Ngoài ra, bạn có thể cung cấp danh sách mã ca làm việc thay vì khoảng thời gian và vị trí. Chỉ những nhân viên có thể được chỉ định vai trò cụ thể (hoặc có kỹ năng cụ thể) mới có thể đáp ứng yêu cầu này.

Đối với một vai trò và/hoặc kỹ năng nhất định, yêu cầu về phạm vi bảo hiểm được đáp ứng khi có ít nhất targetEmployeeCount nhân viên đang làm việc tại mỗi thời điểm trong khung thời gian (hoặc mỗi ca làm việc trong shiftIds). Ngược lại, yêu cầu về phạm vi bảo hiểm bị vi phạm nếu tại bất kỳ thời điểm nào trong khung thời gian (hoặc đối với bất kỳ ca làm việc nào trong shiftIds), có ít hơn targetEmployeeCount nhân viên làm việc trong khung thời gian đó. Số lượng nhân viên làm việc nhiều hơn targetEmployeeCount vẫn đáp ứng yêu cầu, nhưng trình giải quyết sẽ giảm thiểu tình trạng quá nhiều nhân sự.

Biểu diễn dưới dạng JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
Trường
startDateTime

object (DateTime)

Thời gian bắt đầu đáp ứng yêu cầu về mức độ phù hợp (bao gồm cả thời gian này). Nếu đặt, shiftIds phải để trống.

endDateTime

object (DateTime)

Thời gian kết thúc đối với yêu cầu về mức độ phù hợp (không bao gồm). Nếu đặt, shiftIds phải để trống.

locationId

string

Địa điểm cần nhân viên. shiftIds không trống, trường này phải để trống.

shiftIds[]

string

Nếu bạn đặt chính sách này, thì các yêu cầu về vai trò và kỹ năng sẽ được áp dụng riêng cho mỗi mã ca làm việc trong danh sách này. Nếu shiftId không trống, thì startDateTime, endDateTimelocationId phải trống.

roleRequirements[]

object (RoleRequirement)

Số lượng nhân viên cần thiết được chỉ định cho các vai trò đã chỉ định trong khoảng thời gian này. Bạn phải cung cấp tối đa một role_requirement cho mỗi mã vai trò. Mức độ ưu tiên mặc định cho từng yêu cầu là PRIORITY_MANDATORY. Những điều kiện ràng buộc này bị vi phạm nếu số lượng nhân viên được chỉ định cho các vai trò đã chỉ định ít hơn targetEmployeeCount tại thời điểm bất kỳ trong khoảng thời gian đó.

skillRequirements[]

object (SkillRequirement)

Số lượng nhân viên cần thiết có các kỹ năng cụ thể được chỉ định làm ca trong khoảng thời gian này. Bạn phải cung cấp tối đa một skill_requirement cho mỗi mã kỹ năng. Mức độ ưu tiên mặc định cho từng yêu cầu là PRIORITY_LOW. Những điều kiện ràng buộc này bị vi phạm nếu có ít hơn targetEmployeeCount nhân viên có những kỹ năng nhất định tại bất kỳ thời điểm nào trong khoảng thời gian.

RoleRequirement

Số lượng nhân viên cần thiết được chỉ định vai trò đã chỉ định trong khoảng thời gian này.

Biểu diễn dưới dạng JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Trường
roleId

string

Mã vai trò đáp ứng yêu cầu.

targetEmployeeCount

integer

Số lượng nhân viên mong muốn được chỉ định vai trò này trong khung thời gian.

priority

enum (Priority)

Mức độ ưu tiên cho quy tắc ràng buộc về yêu cầu này. Mức độ ưu tiên mặc định cho tất cả các điều kiện ràng buộc về tài nguyên là PRIORITY_MANDATORY.

SkillRequirement

Số lượng nhân viên bắt buộc đang làm việc trong khung thời gian và có kỹ năng quy định.

Biểu diễn dưới dạng JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Trường
skillId

string

Mã kỹ năng cho yêu cầu.

targetEmployeeCount

integer

Số nhân viên mong muốn có kỹ năng đã cho và đang làm việc trong khoảng thời gian quy định.

priority

enum (Priority)

Mức độ ưu tiên cho quy tắc ràng buộc về yêu cầu này. Mức độ ưu tiên mặc định cho tất cả các điều kiện ràng buộc về tài nguyên là PRIORITY_LOW.

BudgetRequirement

Các yêu cầu về ngân sách cho một khoảng thời gian nhất định.

Biểu diễn dưới dạng JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Trường
totalBudget

number

Tổng ngân sách cho khoảng thời gian nhất định. Bạn phải đặt tổng ngân sách nếu mức độ ưu tiên là PRIORITY_MANDATORY.

Nếu bạn không đặt totalBudget, thì tổng chi phí của lịch biểu sẽ được giảm thiểu theo priority đã chỉ định. Ví dụ: nếu priority cho ngân sách là PRIORITY_MEDIUM, thì trình giải quyết sẽ giảm thiểu chi phí trước khi giảm bất kỳ lỗi vi phạm ràng buộc nào với mức độ ưu tiên PRIORITY_LOW.

startDateTime

object (DateTime)

Thời điểm bắt đầu khi ngân sách này được áp dụng. Nếu bạn không chỉ định thời gian bắt đầu, thì thời gian này sẽ được đặt là thời gian bắt đầu sớm nhất của tất cả các ca làm việc nhất định.

endDateTime

object (DateTime)

Thời gian kết thúc khi ngân sách này áp dụng. Nếu bạn không chỉ định thời gian kết thúc, thì thời gian kết thúc sẽ được đặt là thời gian kết thúc muộn nhất của tất cả các ca làm việc nhất định.

priority

enum (Priority)

Mức độ ưu tiên để đáp ứng yêu cầu về ngân sách trong khoảng thời gian được chỉ định. Mức độ ưu tiên mặc định là PRIORITY_LOW. Nếu mức độ ưu tiên là PRIORITY_MANDATORY thì bạn phải đặt totalBudget.

Xin lưu ý rằng nếu mức độ ưu tiên này cao hơn các mức độ ưu tiên ràng buộc khác và nếu totalBudget chặt chẽ, thì lịch biểu thu được có thể vi phạm đáng kể cả các điều kiện ràng buộc của nhân viên hoặc yêu cầu về mức độ sử dụng.

ShiftAssignment

Một nhân viên làm việc theo ca làm việc.

Biểu diễn dưới dạng JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Trường
employeeId

string

Mã nhân viên đang được chỉ định.

shiftId

string

Mã ca làm việc đã chỉ định cho nhân viên.

roleId

string

Mã vai trò mà nhân viên được chỉ định cho ca làm việc.

breaks[]

object (Break)

Danh sách các thời gian nghỉ của ca làm việc này.

Nghỉ giải lao

Khoảng thời gian một nhân viên làm gián đoạn công việc trong ca làm việc.

Biểu diễn dưới dạng JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Trường
startDateTime

object (DateTime)

Thời gian bắt đầu của đoạn nghỉ giải lao.

durationMinutes

integer

Thời lượng của điểm chèn tính bằng phút.

SolutionStatus

Trạng thái giải pháp (tức là lịch biểu) được cung cấp trong phản hồi của một trình giải toán.

Enum
SOLUTION_STATUS_UNSPECIFIED Trạng thái phản hồi chưa xác định.
FEASIBLE Lịch biểu được trả về khả thi, nhưng có thể không tối ưu.
OPTIMAL Lịch biểu trả về là tối ưu.
INFEASIBLE Không có lịch biểu khả thi nào cho những điều kiện ràng buộc đã cho. Trình giải toán có thể trả về giá trị này nếu không thoả mãn được bất kỳ quy tắc ràng buộc nào có mức độ ưu tiên PRIORITY_MANDATORY.
NOT_SOLVED Không tìm thấy lịch biểu nào.
NOT_SOLVED_DEADLINE_EXCEEDED Không tìm thấy lịch biểu nào trong giới hạn thời gian đã cho.