Method: scheduling.solveShiftScheduling

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

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ố.

solveParameters

object (SolveParameters)

Các tham số để kiểm soát một lượt giải duy nhất của bài toán.

employees[]

object (Employee)

Tất cả nhân viên đang rảnh đều cần được lên lịch.

shifts[]

object (Shift)

Tất cả các ca làm việc để tạo thành lịch biểu.

coverageRequirements[]

object (CoverageRequirement)

Yêu cầu về mức độ phù hợp trong toàn bộ thời gian lập kế hoạch. Tiêu chí này chỉ định số lượng nhân viên phải thực hiện từng vai trò hoặc sở hữu một kỹ năng trong một khoảng thời gian hoặc trong một danh sách mã ca làm việc. Bạn phải chỉ định tất cả các yêu cầu về mức độ phù hợp bằng khoảng thời gian hoặc danh sách mã ca làm việc (nhưng không được dùng cả hai). Khung thời gian (nếu có) cho các yêu cầu về phạm vi phủ sóng không được trùng lặp cho từng vị trí cụ thể. Mức độ ưu tiên mặc định cho mỗi quy tắc ràng buộc trong số này là PRIORITY_MANDATORY đối với các yêu cầu về vai trò và PRIORITY_LOW đối với các 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ả các vai trò có thể có trong toàn bộ nhân viên. Mỗi nhân viên phải có ít nhất một vai trò có thể được chỉ định cho một ca làm việc. Vai trò là một nhiệm vụ cụ thể trong ca làm việc (ví dụ: y tá đã đăng ký, đầu bếp điều hành, nhân viên phục vụ, v.v.). Khi một nhân viên được phân vào ca, họ cũng được chỉ định vào một vai trò cụ thể duy nhất.

skillIds[]

string

Danh sách tất cả các kỹ năng có thể có trong toàn bộ nhân viên. Kỹ năng là bất kỳ bằng cấp bổ sung 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ụ thể được giao (ví dụ: chứng chỉ, ngôn ngữ nói, v.v.). Danh sách này có thể trống. Khi được phân công vào ca, một nhân viên phải hoàn thành tất cả các kỹ năng cần thiết cho ca làm việc đó.

locationIds[]

string

Danh sách tất cả các vị trí có thể thực hiện các ca làm việc 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, chẳng hạn như khi người quản lý điều dưỡng muốn lên lịch cho nhiều y tá cho các phòng khám khác nhau tại một bệnh viện hoặc khi một 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 đề lập lịch. Mức độ ưu tiên mặc định cho từng yêu cầu trong số này là PRIORITY_LOW. Hãy xem enum Priority để biết thêm thông tin chi tiết.

assignmentsHint[]

object (ShiftAssignment)

Chuyển các phép gán để sử dụng như một giải pháp dự kiến (còn gọi là gợi ý giải pháp) cho vấn đề về lịch biểu. Gợi ý bài tập sẽ bị bỏ qua nếu bài tập xung đột với ca làm việc không thể giao hoặc 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 được 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ệnh gán ca hợp lệ sẽ được trả về trong shiftAssignments. Để gán ca làm việc hợp lệ, các thuộc tính sau sẽ được giữ lại:

  1. Mỗi mã nhân viên đều 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 đó đều có trong bộ 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 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 nhân viên cụ thể.
  5. Một nhân viên sẽ không bao giờ được chỉ định vào 2 ca làm việc chồng chéo.
  6. Đối với lịch biểu đã cho, không có quy tắc 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 mà phản hồi này được liên kết.

solutionStatus

enum (SolutionStatus)

Trạng thái của giải pháp được trả về. Nếu giải pháp không khả thi hoặc TỐI ƯU HOÁ, các trường khác trong giao thức này có thể bị trống. Nếu trạng thái là NOT_SOLVED_DEADLINE_EXCEEDED, đã đạt đến giới hạn thời gian mà không tìm ra giải pháp khả thi hoặc xác định xem giải pháp khả thi có tồn tại hay không. Các yêu cầu có thể không khả thi nếu các ràng buộc về mức độ ưu tiên BẮT BUỘC không thể được đáp ứng.

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à trường tối ưu, trường này có thể chứa thông tin bổ sung về trình giải.

SolveParameters

Các thông số kiểm soát việc giải quyết duy nhất cho 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à người giải toán nên dành cho bài toán đó. Nếu bạn không đặt chính sách này, thì thời gian 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í liên lạc. Độ trễ dự kiến để giải quyết vấn đề có thể hơi vượt quá giá trị này.

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

Nhân viên

Một nhân viên thuộc lực lượng lao động cần được lên lịch.

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

ID duy nhất được chỉ định 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. Phải có ít nhất một vai trò được chỉ định. Khi một nhân viên được chỉ định vào 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 có thể được chỉ định cho các 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 vào ca làm việc, họ sẽ sử dụng bất kỳ kỹ năng nào được liệt kê ở đây để đáp ứng các yêu cầu về kỹ năng trong suốt thời gian làm ca làm việc đó.

shiftPreferences[]

object (ShiftPreference)

Thay đổi lựa chọn ưu tiên của nhân viên này. Những 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ã ca làm việc được chỉ định trong shiftPreferences phải là duy nhất. Trình giải này sẽ cố gắng tối đa hoá tổng giá trị ShiftPreference.preference trên tất cả shiftPreferences được thoả mãn.

schedulingConstraints[]

object (SchedulingConstraint)

Danh sách các điều kiện ràng buộc về việc lên lịch đối với nhân viên này. Mức độ ưu tiên mặc định cho mỗi quy tắc ràng buộc trong số 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 điều kiện ràng buộc khác về việc lập lịch biểu không được chỉ định trong schedulingConstraints tại đây vào resourceConstraints. ResourceConstraint là một bản trình bày 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 mỗi quy tắc ràng buộc trong số 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 các yêu cầu chuyển ca cho nhân viên. Yêu cầu có thể là để chỉ định hoặc không chỉ định cho một nhân viên vào các ca làm việc cụ thể. Mọi hoạt động chỉ định lịch biểu cố định cho nhân viên đều có thể được biểu thị bằng ShiftRequest có 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 của nhân viên này. Mức độ ưu tiên mặc định cho mỗi yêu cầu trong số 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 xác định mức lương chính xác 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ã ca làm việc cụ thể.

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

string

ID ca làm việc mà lựa chọn ưu tiên được chỉ định.

preference

integer

Giá trị ưu tiên lớn hơn biểu thị sự dịch chuyển mong muốn hơn.

SchedulingConstraint

Ràng buộc cụ thể về việc lên lịch cho một nhân viên cụ thể. Quy tắc ràng buộc đã 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ả 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 điều kiện ràng buộc về lịch biểu này được áp dụng (bao gồm cả thời gian này).

endDateTime

object (DateTime)

Thời gian kết thúc khi áp dụng giới hạn lập lịch này (loại trừ).

Trường kết 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 đã chỉ định ở trên. type chỉ có thể là một trong những trạng thái sau đây:
minimumMinutes

integer

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

minimumConsecutiveWorkDays

integer

Số ngày tối thiểu liên tục 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 giao ca làm việc bắt đầu vào chính ngày đó. Mọi ca làm việc mà nhân viên được chỉ định bắt đầu trong khung thời gian đều được tính vào tổng số này.

maximumConsecutiveWorkDays

integer

Số ngày liên tiếp 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 giao ca làm việc bắt đầu vào chính ngày đó. Mọi ca làm việc mà nhân viên được chỉ định bắt đầu trong khung thời gian đều được tính vào tổng số này.

minimumShiftCount

integer

Số ca 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 chỉ định trùng lặp hoàn toàn với khung thời gian đều được tính vào giá trị 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 chỉ định trùng lặp hoàn toàn với khung thời gian đều được tính vào giá trị này.

minimumRestMinutes

integer

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

Mức độ ưu tiên

Mức độ ưu tiên cho mọi ràng buộc trong lịch làm việc của nhân viên hoặc các yêu cầu về bảo hiểm. Các thuộc tính này bao gồm SchedulingConstraint, ResourceConstraint, ShiftRequestCoverageRequirement. Do có thể có các điều kiện ràng buộc xung đột, nên không phải lúc nào cũng có thể đáp ứng mọi điều kiện ràng buộc. Do đó, mỗi loại quy tắc ràng buộc đều có một mức độ ưu tiên (do người dùng đặt hoặc theo mặc định) để thông báo cho người giải quyết về tầm quan trọng tương đối của mọi quy tắc ràng buộc được đưa ra trong 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 không quan trọng bằng các quy tắc ràng buộc khác. Các mô-đun này là những người đầ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. Quy tắc ràng buộc có mức độ ưu tiên này quan trọng hơn quy tắc ràng buộc có mức độ ưu tiên PRIORITY_LOW, nhưng không quan trọng bằng 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ả quy tắc ràng buộc với mức độ ưu tiên PRIORITY_LOW, thì các quy tắc ràng buộc có mức độ ưu tiên PRIORITY_MEDIUM sẽ được xem xét tiếp theo nếu vi phạm.
PRIORITY_HIGH Mức độ ưu tiên cao nhất. Các hạn chế với mức độ ưu tiên này là quan trọng nhất. Đây là lỗi vi phạm cuối cùng nếu không tìm thấy giải pháp khả thi sau khi nới lỏng các hạn chế đối với mức độ ưu tiên thấp hơn.
PRIORITY_MANDATORY Mức độ ưu tiên thể hiện những nội dung mà trình giải toán không thể vi phạm. Nếu trình giải trả về SolutionStatus.INFEASIBLE, thì có thể là do có quá nhiều quy tắc hạn chế đối với PRIORITY_MANDATORY.

ResourceConstraint

Quy tắc ràng buộc chung giới hạn số lượng của một "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 và linh hoạt hơn cho người dùng. Thay vào đó, bạn có thể chỉ định nhiều quy tắc ràng buộc về việc lập lịch 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 mọi quy tắc ràng buộc về tài nguyên là PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Lượng tài nguyên mà các ca sử dụng. Ví dụ: nếu ràng buộc này áp dụng cho số giờ 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 theo giờ.

Một đố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 một quy tắc ràng buộc tài nguyên.

maximumResourceUsage

number

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

ShiftRequest

Yêu cầu của nhân viên được chỉ định hoặc không được chỉ định vào các ca làm việc cụ thể.

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ã chuyển của yêu cầu lên lịch.

type

enum (WorkStatus)

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

WorkStatus

Liệu một 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 cơ bản theo giờ, chênh lệch giữa các mức giá và hệ số làm thêm giờ để xác định mức thù lao cho 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ờ khác. Trình giải quyết ước tính tiền công làm thêm giờ để giảm thiểu một proxy của tổng chi phí hoặc đáp ứng ngân sách (xem BudgetRequirement). Tính năng này không được dùng làm công cụ tính 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 lương khi làm việc không làm thêm giờ. Nếu nhân viên đó có nhiều mức giá, thì sự chênh lệch về mức phí sẽ được áp dụng tương ứng với mức giá cơ sở theo giờ này. Ngoài ra, nếu có nhiều mức giá, mức giá cơ bản theo giờ phải là mức tối thiểu của các mức giá này.

hourlyRateShiftDifferentials

map (key: string, value: number)

Mức chênh lệch giá theo giờ, được thanh toán ở đầu baseHourlyRate. Ví dụ: nếu mức giá theo giờ cơ bản là 30 đô la Mỹ/giờ, thì "shift_1" được trả ở mức 40 USD/giờ và "shift_2" được trả mức phí 45 USD/giờ, thì giá trị đại diện cho proto sẽ là: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Một đố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 cần tính thời gian làm thêm giờ. Các khoảng thời gian này không được trùng lặp.

OvertimePeriod

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) dùng để xác định số tiền thù lao làm thêm giờ. Mỗi giai đoạn có một hệ số làm thêm giờ (ví dụ: 1.5) so với baseHourlyRate và giới hạn về số giờ được coi là công việc thông thường (không làm thêm giờ). Mọi ca làm việc 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 giai đoạn đó. Nếu sự trùng lặp là một phần, thì chỉ những giờ chồng chéo đượ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ờ theo giờ (phải lớn hơn hoặc bằng 1). Mức làm thêm giờ theo giờ thường được tính là baseHourlyRate * overtimeMultiplier. Nếu có nhiều mức giá được đưa ra thông qua hourlyRateShiftDifferentials, trình giải sẽ ước tính mức làm thêm giờ bằng mức trung bình đơn giản được á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 thù lao làm thêm giờ khác. Trình giải toán ước tính mức thù lao làm thêm giờ để giảm thiểu đại diện của tổng chi phí hoặc đáp ứng ngân sách. Tuy nhiên, đây không phải là công cụ để tính bảng lương.

startDateTime

object (DateTime)

Thời gian bắt đầu cho hiệp phụ. Nếu một ca làm việc trùng với thời gian 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 trong thời gian thêm giờ. Nếu một ca làm việc trùng với thời gian này, thì số giờ của ca làm việc đó sẽ được tính tối đa endDateTime.

maximumRegularHours

number

Số giờ làm việc tối đa được trả theo mức phí 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í nơi thực hiện thay đổi này. 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ả ngày 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ỉ chấp nhận những bài làm có thời lượng dưới 24 giờ.

breakRules[]

object (BreakRule)

Danh sách các quy tắc chèn xảy ra trong quá trình chuyển. Nhân viên làm việc này được chỉ định nghỉ giải lao theo break_rule, trong khoảng thời gian này, họ không được yêu cầu hoàn thành vai trò mà họ đang thực hiện. Bạn phải đưa đầy đủ mỗi khoảng thời gian BreakRule vào khoảng thời gian của lượt chuyển 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à thời lượng của nó. Danh sách tất cả điểm chèn quảng cáo có thể xảy ra đượ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 cho giờ nghỉ 30 phút có thể bắt đầu từ 10:00 đến 11:00 và khoảng nghỉ quy tắc là 20 phút, thì danh sách các khoảng nghỉ được xem xét là: [10:00, 10:30], [10:20, 10:50], [10:40:0, 11], [10:40, 11].

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ả hai thời điểm này). Bạn chỉ có thể thiết lập hoursminutes.

latestStartTime

object (DateTime)

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

durationMinutes

integer

Thời lượng ngắt tính bằng phút.

ruleIncrementMinutes

integer

[Không bắt buộc] Độ dài thời gian tính bằng phút cho tất cả các điểm chèn quảng cáo có thể xem xét trong quy tắc chèn quảng cáo này. Nếu bạn không đặt chính sách này, giá trị mặc định sẽ là durationMinutes.

CoverageRequirement

Yêu cầu về mức độ phù hợp xác đị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 địa điểm nhất định. Khoảng thời gian ngày 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 chỉ định cho 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 cụ thể, yêu cầu về mức độ phù hợp được đáp ứng khi có ít nhất targetEmployeeCount số lượng nhân viên làm việc tại mọi thời điểm trong khoảng thời gian (hoặc mỗi ca làm việc trong shiftIds). Ngược lại, yêu cầu về mức độ phù hợp sẽ bị vi phạm nếu tại bất kỳ thời điểm nào trong khoảng thời gian (hoặc bất kỳ ca chuyển nào trong shiftIds) có ít hơn targetEmployeeCount số nhân viên làm việc trong khoảng 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 người giải quyết đã giảm thiểu được tình trạng nhân sự quá nhiều.

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 đối với yêu cầu về mức độ phù hợp (bao gồm). Nếu được đặt, shiftIds phải để trống.

endDateTime

object (DateTime)

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

locationId

string

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

shiftIds[]

string

Nếu được đặt, 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ì bạn phải để trống startDateTime, endDateTimelocationId.

roleRequirements[]

object (RoleRequirement)

Số lượng nhân viên bắt buộc được chỉ định cho các vai trò đã chỉ định trong khoảng thời gian. 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 mỗi yêu cầu là PRIORITY_MANDATORY. Bạn sẽ vi phạm những quy tắc ràng buộc này nếu số lượng nhân viên được chỉ định cho các vai trò đã chỉ định thấp hơn targetEmployeeCount tại bất kỳ thời điểm nào 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 đã chỉ định được chỉ định làm việc theo ca trong khoảng thời gian làm việc. 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 mỗi yêu cầu là PRIORITY_LOW. Những hạn chế này sẽ bị vi phạm nếu có dưới targetEmployeeCount số nhân viên sở hữu các kỹ năng đã cho 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 bắt buộc được chỉ định cho vai trò đã chỉ định trong khoảng thời gian.

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

string

Mã vai trò cho yêu cầu.

targetEmployeeCount

integer

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

priority

enum (Priority)

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

SkillRequirement

Số lượng nhân viên cần thiết làm việc trong khoảng thời gian làm việc và có kỹ năng được chỉ đị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ố lượng nhân viên mong muốn có kỹ năng nhất định đang làm việc trong khoảng thời gian.

priority

enum (Priority)

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

BudgetRequirement

Yêu cầu về ngân sách trong 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 trong khoảng thời gian đã cho. Bạn phải cung cấp 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 được 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 mọi lỗi vi phạm ràng buộc bằng mức độ ưu tiên PRIORITY_LOW.

startDateTime

object (DateTime)

Thời gian bắt đầu áp dụng ngân sách này. Nếu bạn không chỉ định thời gian bắt đầu, thì thời gian bắt đầu sẽ được đặt thành 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 áp dụng ngân sách này. 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 thành 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ụ thể. Mức độ ưu tiên mặc định là PRIORITY_LOW. Nếu đặt 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 khác của quy tắc ràng buộc và nếu totalBudget quá chặt, thì lịch biểu thu được có thể vi phạm đáng kể cả yêu cầu về phạm vi áp dụng lẫn quy tắc ràng buộc đối với nhân viên.

ShiftAssignment

Một nhân viên để chuyển đổi vai trò chỉ định.

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 đượ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 giờ nghỉ giải lao cho việc chỉ định 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 của mình 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 giờ nghỉ.

durationMinutes

integer

Thời lượng ngắt tính bằng phút.

SolutionStatus

Trạng thái của lời giải (tức là một lịch biểu) được đưa ra trong câu trả lời của trình giải.

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