Method: scheduling.solveShiftScheduling

แก้ไขปัญหาการกำหนดเวลากะงานที่แก้ไขแล้วของ SolveShiftSchedulingRequest ที่ระบุโดยกำหนดกะการทำงานให้กับพนักงาน เพื่อให้สามารถเพิ่มประสิทธิภาพกำหนดการของพนักงานให้ได้มากที่สุด และช่วยลดการละเมิดข้อจำกัดการกำหนดเวลา

คำขอ HTTP

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

URL ใช้ไวยากรณ์การแปลง gRPC

เนื้อหาของคำขอ

เนื้อหาของคำขอมีข้อมูลซึ่งมีโครงสร้างต่อไปนี้

การแสดง 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)
    }
  ]
}
ช่อง
requestId

string

ปัญหาหรือรหัสคำขอ

solveParameters

object (SolveParameters)

พารามิเตอร์สำหรับควบคุมวิธีแก้โจทย์รายการเดียว

employees[]

object (Employee)

พนักงานทั้งหมดว่างที่จะนัดหมาย

shifts[]

object (Shift)

เปลี่ยนทุกการเคลื่อนไหวเพื่อสร้างตารางเวลา

coverageRequirements[]

object (CoverageRequirement)

ข้อกําหนดการครอบคลุมสําหรับขอบเขตการวางแผนทั้งหมด ข้อมูลเหล่านี้จะระบุจำนวนพนักงานที่ต้องทำแต่ละบทบาทหรือมีทักษะ ในระหว่างกรอบเวลาหรือรายการรหัสกะการทำงาน ข้อกำหนดการครอบคลุมทั้งหมดต้องระบุกรอบเวลาหรือรายการรหัส Shift (แต่ไม่ใช่ทั้ง 2 อย่าง) กรอบเวลา (หากมี) ของข้อกําหนดด้านการครอบคลุมของสถานที่ตั้งแต่ละแห่งต้องไม่เหลื่อมซ้อนกัน ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ PRIORITY_MANDATORY สำหรับข้อกำหนดด้านบทบาท และ PRIORITY_LOW สำหรับข้อกำหนดด้านทักษะ ดูรายละเอียดเพิ่มเติมได้ที่ enum ของ Priority

roleIds[]

string

รายการบทบาทที่เป็นไปได้ทั้งหมดในทีม พนักงานแต่ละคนต้องมีอย่างน้อย 1 บทบาทที่สามารถได้รับมอบหมายสำหรับกะ บทบาทหมายถึงการมอบหมายงานเฉพาะในระหว่างกะ (เช่น พยาบาลวิชาชีพ เชฟผู้บริหาร บริกร ฯลฯ) เมื่อมีการกำหนดให้พนักงานเข้ากะ พนักงานเหล่านั้นจะได้รับการมอบหมายเฉพาะบทบาทเดียวด้วย

skillIds[]

string

รายการทักษะที่เป็นไปได้ทั้งหมดของบุคลากร ทักษะหมายถึงคุณสมบัติพิเศษใดๆ ที่พนักงานอาจมี ซึ่งไม่เกี่ยวข้องกับงานที่ได้รับมอบหมายเฉพาะ (เช่น ใบรับรอง ภาษาที่พูด เป็นต้น) รายการนี้ว่างเปล่าได้ เมื่อมีการกำหนดให้พนักงานเข้ากะ พนักงานเหล่านั้นจะต้องพัฒนาทักษะทั้งหมดที่จำเป็นสำหรับกะนั้น

locationIds[]

string

รายการตำแหน่งที่เป็นไปได้ทั้งหมดสำหรับชุดการเปลี่ยนแปลงในกำหนดการ รายการนี้ว่างเปล่าได้ การระบุสถานที่ตั้งที่แตกต่างกันอาจมีประโยชน์ เช่น ในกรณีที่ผู้จัดการพยาบาลต้องการจัดตารางเวลาสำหรับพยาบาลหลายคนในหน่วยงานต่างๆ ของโรงพยาบาล หรืออีกตัวอย่างหนึ่งในกรณีที่ผู้จัดการโรงแรมต้องการกำหนดเวลาให้พนักงานทำงานในหลายโรงแรม

budgetRequirements[]

object (BudgetRequirement)

ข้อมูลจำเพาะของงบประมาณสำหรับปัญหาในการกำหนดเวลา ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดเหล่านี้คือ PRIORITY_LOW ดูรายละเอียดเพิ่มเติมได้ที่ enum ของ Priority

assignmentsHint[]

object (ShiftAssignment)

การมอบหมายกะการทำงานที่จะใช้เป็นวิธีแก้ปัญหาเบื้องต้น (หรือที่เรียกว่าคำแนะนำโซลูชัน) สำหรับโจทย์การกำหนดเวลา ระบบจะไม่สนใจคำแนะนำของงาน หากงานนั้นขัดแย้งกับกะการทำงานที่มอบหมายไม่ได้หรือคำขอกำหนดเวลา

เนื้อหาการตอบกลับ

การตอบกลับสำหรับ API การกำหนดเวลาพนักงาน สำหรับคำตอบแต่ละรายการ shiftAssignments จะว่างเปล่า หาก solutionStatus ที่แสดงผลเป็น NOT_SOLVED_DEADLINE_EXCEEDED หรือ INFEASIBLE หาก solutionStatus ที่ส่งคืนคือ OPTIMAL หรือ FEASIBLE ระบบจะส่งงาน Shift ที่ถูกต้องใน shiftAssignments ในการกำหนดกะการทำงานที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะยังคงมีผล

  1. รหัสพนักงานแต่ละรหัสจะอยู่ในกลุ่มพนักงานที่ระบุไว้ในคำขอ
  2. รหัสบทบาทแต่ละรหัสที่กำหนดให้กับพนักงานจะอยู่ในชุดรหัสบทบาทของพนักงานรายนั้นๆ
  3. รหัส Shift แต่ละรายการจะอยู่ในชุดของกะที่ระบุในคำขอ
  4. รหัสกะการทำงานแต่ละรายการไม่ใช่รหัสของกะการทำงานที่ไม่สามารถมอบหมายได้ของพนักงานที่กำหนด
  5. พนักงานจะไม่ได้รับมอบหมายให้ทำงาน 2 กะที่ทับซ้อนกัน
  6. สำหรับกำหนดเวลาที่ระบุ จะไม่มีการละเมิดข้อกำหนดหรือคำขอที่มีระดับความสำคัญเป็น PRIORITY_MANDATORY

หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้

การแสดง JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
ช่อง
requestId

string

รหัสของคำขอที่เชื่อมโยงกับการตอบกลับนี้

solutionStatus

enum (SolutionStatus)

สถานะของโซลูชันที่แสดงผล หากคำตอบไม่ใช่ "ง่าย" หรือ "เหมาะสมที่สุด" ช่องอื่นๆ ใน Proto นี้อาจว่างเปล่า หากสถานะเป็น NOT_SOLVED_DEADLINE_EXCEEDED แสดงว่าถึงขีดจำกัดเวลาแล้วโดยไม่พบวิธีแก้ปัญหาที่เป็นไปได้หรือพิจารณาว่ามีวิธีแก้ปัญหาที่เป็นไปได้หรือไม่ คำขออาจไม่สามารถทำตามได้หากไม่เป็นไปตามข้อจำกัดของระดับความสำคัญ

shiftAssignments[]

object (ShiftAssignment)

รายการงานทั้งหมด ShiftAssignment แต่ละรายการจะระบุพนักงาน กะที่พนักงานได้รับมอบหมาย และบทบาทที่ได้รับมอบหมายให้ดำเนินการในกะนั้น

statusMessage

string

หาก solutionStatus ไม่เหมาะสม ช่องนี้อาจมีข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือแก้โจทย์คณ

SolveParameters

พารามิเตอร์ที่ควบคุมการแก้ปัญหาการกำหนดเวลากะการทำงานเพียงวิธีเดียว

การแสดง JSON
{
  "timeLimit": string
}
ช่อง
timeLimit

string (Duration format)

เวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้ในการแก้โจทย์ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น 1 นาที

ค่านี้ไม่ใช่ค่าจำกัดแบบเข้มงวด และไม่ได้คำนึงถึงค่าใช้จ่ายในการสื่อสาร เวลาในการตอบสนองที่คาดไว้ในการแก้ปัญหาอาจสูงกว่าค่านี้เล็กน้อย

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

พนักงาน

พนักงานจากคณะทำงานที่จะมีกำหนดการ

การแสดง JSON
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้พนักงานรายนี้

roleIds[]

string

รหัสบทบาทที่พนักงานรายนี้ใช้ได้ ต้องระบุอย่างน้อย 1 บทบาท เมื่อมีการมอบหมายให้พนักงานเข้ากะ พนักงานเหล่านี้ก็จะได้รับการมอบหมายบทบาทใดบทบาทหนึ่งจากรายการนี้ด้วย อาจมีการกำหนดบทบาทต่างๆ ให้กับพนักงานในระหว่างกรอบเวลาการนัดหมาย

skillIds[]

string

รหัสทักษะที่พนักงานรายนี้มี รายการนี้ว่างเปล่าได้ เมื่อมีการกำหนดให้พนักงานเข้ากะ พวกเขาจะใช้ทักษะย่อยใดๆ ที่ระบุไว้ที่นี่เพื่อให้ครอบคลุมความต้องการด้านทักษะตลอดระยะเวลาของกะการทำงานที่ได้รับมอบหมาย

shiftPreferences[]

object (ShiftPreference)

เปลี่ยนการตั้งค่าของพนักงานคนนี้ กะที่ระบุที่นี่แสดงถึงกะที่พนักงานจะต้องการทำงานในช่วงกรอบเวลาการนัดหมาย รหัส Shift ที่ระบุใน shiftPreferences ต้องไม่ซ้ำกัน เครื่องมือแก้โจทย์คณิตจะพยายามเพิ่มผลรวมของค่า ShiftPreference.preference ให้ได้มากที่สุดจากค่า shiftPreferences ทั้งหมดที่พึงพอใจ

schedulingConstraints[]

object (SchedulingConstraint)

รายการข้อจำกัดการกำหนดเวลาสำหรับพนักงานรายนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ PRIORITY_MEDIUM ดูรายละเอียดเพิ่มเติมได้ที่ enum ของ Priority

resourceConstraints[]

object (ResourceConstraint)

เพิ่มข้อจำกัดการกำหนดเวลาอื่นๆ ที่ไม่ได้ระบุใน schedulingConstraints ได้ที่นี่ใน resourceConstraints ResourceConstraint เป็นตัวแทนในการจำกัดทรัพยากรของพนักงานมากกว่า ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ PRIORITY_MEDIUM ดูรายละเอียดเพิ่มเติมได้ที่ enum ของ Priority

shiftRequests[]

object (ShiftRequest)

รายการคำขอกะการทำงานสำหรับพนักงาน คำขออาจมอบหมายให้พนักงานคนหนึ่งๆ ถูกมอบหมายหรือไม่อาจมอบหมายให้กะกะที่เจาะจงก็ได้ ส่วนงานมอบหมายที่กำหนดเวลาที่แน่นอนสำหรับพนักงานจะใช้ ShiftRequest ที่มีลำดับความสำคัญ PRIORITY_MANDATORY แทนได้ รหัสกะงานอาจปรากฏในคำขอกำหนดเวลาสูงสุด 1 รายการสำหรับพนักงานรายนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละคำขอเหล่านี้คือ PRIORITY_LOW ดูรายละเอียดเพิ่มเติมได้ที่ enum ของ Priority

hourlyContract

object (HourlyContract)

สัญญาที่ระบุอัตราค่าบริการรายชั่วโมงตามปกติและค่าล่วงเวลาสำหรับพนักงาน

ShiftPreference

ค่ากำหนดที่เป็นตัวเลขสำหรับรหัส Shift หนึ่งๆ

การแสดง JSON
{
  "shiftId": string,
  "preference": integer
}
ช่อง
shiftId

string

รหัส Shift ที่ระบุค่ากำหนด

preference

integer

ค่ากําหนดที่มากกว่าหมายถึงการเปลี่ยนแปลงที่ต้องการมากกว่า

SchedulingConstraint

ข้อจำกัดการกำหนดเวลาที่เฉพาะเจาะจงสำหรับพนักงานบางคน ข้อจำกัดที่ระบุจะใช้ในระหว่างช่วง [startDateTime, endDateTime) ที่กำหนดเท่านั้น

การแสดง 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.
}
ช่อง
priority

enum (Priority)

ระดับความสำคัญสำหรับข้อจำกัดการกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดการกำหนดเวลาทั้งหมดคือ PRIORITY_MEDIUM

startDateTime

object (DateTime)

เวลาเริ่มต้นสำหรับเวลาที่ข้อจำกัดการกำหนดเวลานี้มีผล (รวม)

endDateTime

object (DateTime)

เวลาสิ้นสุดที่ข้อจำกัดการกำหนดเวลานี้มีผล (ไม่รวม)

ฟิลด์สหภาพ type ประเภทของข้อจำกัดที่ระบุ และจะใช้ข้อจำกัดแต่ละข้อภายในกรอบเวลาที่ระบุไว้ข้างต้นเท่านั้น type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น
minimumMinutes

integer

จำนวนนาทีขั้นต่ำที่พนักงานทำงานได้ หากพนักงานได้รับมอบหมายให้ทำงานกะที่ทับซ้อนกัน (ทั้งหมดหรือบางส่วน) จำนวนนาทีที่การทำงานนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้

maximumMinutes

integer

จำนวนนาทีสูงสุดที่พนักงานจะทำงานได้ในกรอบเวลา หากพนักงานได้รับมอบหมายให้ทำงานกะที่ทับซ้อนกัน (ทั้งหมดหรือบางส่วน) จำนวนนาทีที่การทำงานนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้

minimumConsecutiveWorkDays

integer

จำนวนวันขั้นต่ำต่อเนื่องที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่กำหนดหากมีการกำหนดให้เข้ากะที่เริ่มต้นในวันนั้น กะที่พนักงานได้รับมอบหมายที่เริ่มในกรอบเวลาจะรวมอยู่ในจำนวนนี้

maximumConsecutiveWorkDays

integer

จำนวนวันสูงสุดที่พนักงานทำงานได้ติดต่อกัน พนักงานจะทำงานในวันที่กำหนดหากมีการกำหนดให้เข้ากะที่เริ่มต้นในวันนั้น กะที่พนักงานได้รับมอบหมายที่เริ่มในกรอบเวลาจะรวมอยู่ในจำนวนนี้

minimumShiftCount

integer

จำนวนกะขั้นต่ำที่พนักงานทำงานได้ กะที่พนักงานได้รับมอบหมายซึ่งทับซ้อนกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้

maximumShiftCount

integer

จำนวนกะการทำงานสูงสุดที่พนักงานทำงานได้ กะที่พนักงานได้รับมอบหมายซึ่งทับซ้อนกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้

minimumRestMinutes

integer

จำนวนนาทีขั้นต่ำที่พนักงานต้องพักหลังสิ้นสุดกะการทำงานหนึ่งก่อนที่จะมอบหมายให้ไปทำงานกะอื่น ข้อจำกัดนี้มีผลกับทุกคู่ของกะที่รวมอยู่ใน [startDateTime, endDateTime] โดยสมบูรณ์

ลำดับความสำคัญ

ระดับความสำคัญสำหรับข้อจำกัดในตารางเวลาของพนักงานหรือข้อกำหนดการครอบคลุม ซึ่งได้แก่ SchedulingConstraint, ResourceConstraint, ShiftRequest และ CoverageRequirement เนื่องจากอาจมีข้อจำกัดที่ขัดแย้งกัน จึงไม่สามารถบรรลุทุกข้อจำกัดได้เสมอไป ด้วยเหตุนี้ ข้อจำกัดแต่ละประเภทจึงมีลำดับความสำคัญ (ตามผู้ใช้หรือค่าเริ่มต้น) ซึ่งแจ้งให้เครื่องมือแก้โจทย์คณิตเกี่ยวกับความสำคัญที่เกี่ยวข้องของข้อจำกัดทั้งหมดที่กำหนดในกำหนดการที่สมบูรณ์

Enum
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 ได้โดยใช้ข้อความนี้แทน

การแสดง JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
ช่อง
priority

enum (Priority)

ระดับความสำคัญของข้อจำกัดทรัพยากรนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ PRIORITY_MEDIUM

resourceUsages

map (key: string, value: number)

จำนวนทรัพยากรที่ใช้ไปในกะ ตัวอย่างเช่น ถ้าข้อจำกัดนี้มีผลกับจำนวนชั่วโมงต่ำสุดและสูงสุดที่พนักงานทำงานในสัปดาห์หนึ่งๆ แผนที่นี้จะมีข้อมูลการเปลี่ยนแปลงที่เกิดขึ้นในสัปดาห์นั้น และระยะเวลาในแต่ละกะเป็นชั่วโมง

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

minimumResourceUsage

number

การใช้งานทรัพยากรขั้นต่ำเพื่อให้เป็นไปตามข้อจำกัดทรัพยากร

maximumResourceUsage

number

การใช้งานทรัพยากรสูงสุดสำหรับข้อจำกัดทรัพยากรที่สามารถทำได้

ShiftRequest

คำขอมอบหมายงานหรือไม่ได้รับการมอบหมายของพนักงานในกะเฉพาะ

การแสดง JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
ช่อง
priority

enum (Priority)

ระดับความสำคัญของคำขอกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับคำขอที่กำหนดเวลาไว้ทั้งหมดคือ PRIORITY_LOW

shiftIds[]

string

รหัส Shift ของคำขอกำหนดเวลา

type

enum (WorkStatus)

ประเภทคำขอ เช่น มีการกำหนดคำขอให้กับกลุ่มกะหรือไม่

WorkStatus

ดูว่าพนักงานกำลังทำงานหรือไม่

Enum
WORK_STATUS_UNSPECIFIED ไม่ทราบสถานะงาน
STATUS_WORK สถานะที่แสดงถึงพนักงานที่ทำงานอยู่
STATUS_NOT_WORK สถานะที่แสดงถึงพนักงานที่ไม่ได้ทำงาน

HourlyContract

ระบุอัตรารายชั่วโมงพื้นฐาน ส่วนต่างอัตรา และตัวคูณช่วงเวลาทำงานเพื่อกำหนดค่าตอบแทนสำหรับพนักงาน หมายเหตุ: ข้อบังคับต่างๆ อาจกำหนดให้ต้องมีการคำนวณค่าตอบแทนสำหรับค่าล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์คณิตประมาณค่าตอบแทนตลอดช่วงชีวิตเพื่อลดค่าแทนของค่าใช้จ่ายทั้งหมดหรือใช้จ่ายถึงงบประมาณ (ดู BudgetRequirement) ไม่ได้ใช้เพื่อเป็นเครื่องมือในการคำนวณเงินเดือน

การแสดง JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
ช่อง
baseHourlyRate

number

ค่าตอบแทนสำหรับการทำงานนอกเวลาทำงาน หากพนักงานมีหลายอัตรา ระบบจะใช้ส่วนต่างของราคาเทียบกับอัตรารายชั่วโมงพื้นฐานนี้ นอกจากนี้ หากมีหลายราคา อัตรารายชั่วโมงพื้นฐานควรเป็นอัตราต่ำสุดของอัตราเหล่านี้

hourlyRateShiftDifferentials

map (key: string, value: number)

ส่วนต่างของราคารายชั่วโมง ซึ่งจ่ายเพิ่มเติมจาก baseHourlyRate ตัวอย่างเช่น หากอัตรารายชั่วโมงพื้นฐานคือ $30/ชม. "shift_1" จ่ายในอัตรา $40/ชม. และ "shift_2" จ่ายในอัตรา $45/ชม. ค่าแทนค่า Proto จะเท่ากับ baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

overtimePeriods[]

object (OvertimePeriod)

รายการระยะเวลาทั้งหมดที่ต้องมีการคำนวณค่าล่วงเวลา ช่วงเวลาเหล่านี้ต้องไม่ทับซ้อนกัน

OvertimePeriod

ระยะเวลาที่กำหนดไว้เป็นประจำและเกิดซ้ำ (โดยทั่วไปคือ 168 ชั่วโมงหรือ 24 ชั่วโมงต่อเนื่องกัน 24 ชั่วโมง) ซึ่งใช้ในการกำหนดจำนวนค่าตอบแทนเมื่อเวลาผ่านไป แต่ละช่วงเวลาจะมีตัวคูณช่วงเวลาทำงาน (เช่น 1.5) เมื่อเทียบกับ baseHourlyRate และขีดจำกัดของจำนวนชั่วโมงที่ถือว่าเป็นงานปกติ (ไม่ใช่ทำงานเกินเวลา) การเปลี่ยนแปลงใดๆ ที่ซ้อนทับกับกรอบเวลา startDateTime (รวม) และ endDateTime (ไม่รวม) จะนับรวมอยู่ในจำนวนชั่วโมงทั้งหมดที่ทำงานในช่วงระยะเวลานั้น หากการทับซ้อนกันเพียงบางส่วน ระบบจะนับเฉพาะชั่วโมงที่ทับซ้อนกันเท่านั้น

การแสดง JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
ช่อง
overtimeMultiplier

number

ตัวคูณที่ใช้คำนวณอัตราต่อชั่วโมงต่อช่วงเวลา (ต้องมากกว่าหรือเท่ากับ 1.0) โดยทั่วไปอัตรารายชั่วโมงจะคำนวณเป็น baseHourlyRate * overtimeMultiplier หากระบุอัตราหลายอัตราผ่าน hourlyRateShiftDifferentials เครื่องมือแก้โจทย์คณจะประมาณอัตรารายชั่วโมงด้วยค่าเฉลี่ยอย่างง่ายของอัตราที่เกี่ยวข้องในช่วงระยะเวลาหนึ่ง หมายเหตุ: กฎระเบียบในสถานที่ต่างๆ อาจกำหนดให้คำนวณค่าตอบแทนสำหรับค่าล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์คณิตประมาณค่าตอบแทนในช่วงต่อเวลาเพื่อลดค่าแทนของค่าใช้จ่ายทั้งหมดหรือไม่เกินงบประมาณ แต่ไม่ได้มีไว้เพื่อเป็นเครื่องมือในการคำนวณเงินเดือน

startDateTime

object (DateTime)

เวลาเริ่มต้นสำหรับช่วงต่อเวลา หากการเปลี่ยนแปลงคาบเกี่ยวกันในครั้งนี้ จะนับชั่วโมงของการเปลี่ยนแปลงดังกล่าวจาก startDateTime

endDateTime

object (DateTime)

เวลาสิ้นสุดสำหรับช่วงต่อเวลา หากการเปลี่ยนแปลงคาบเกี่ยวกันในครั้งนี้ จะนับชั่วโมงของการเปลี่ยนแปลงนั้นสูงสุด endDateTime

maximumRegularHours

number

จำนวนเวลาทำงานสูงสุดที่จ่ายในอัตราปกติ (ไม่ใช่ทำงานล่วงเวลา) จำนวนนี้ต้องเป็นค่าบวก

Shift

กะการทำงานจะระบุกรอบเวลาที่คงที่ซึ่งพนักงานจะทำงานได้

การแสดง JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้การเปลี่ยนแปลงนี้

locationId

string

รหัสสถานที่ตั้งที่การเปลี่ยนแปลงนี้มีผล ช่องนี้สามารถเว้นว่างได้

startDateTime

object (DateTime)

เวลาเริ่มต้นของกะ (รวม)

endDateTime

object (DateTime)

เวลาสิ้นสุดของการเปลี่ยนแปลง (ไม่รวม) ขณะนี้เครื่องมือแก้โจทย์คณิตอนุญาตให้เล่นในกะที่สั้นกว่า 24 ชั่วโมงเท่านั้น

breakRules[]

object (BreakRule)

รายการกฎช่วงพักที่เกิดขึ้นระหว่างการเปลี่ยนแปลง พนักงานที่ทำการเปลี่ยนแปลงนี้จะได้รับการพักการทำงานทุกๆ break_rule ช่วง โดยพนักงานเหล่านี้จะไม่ครอบคลุมความต้องการตำแหน่งงานที่ตนเองกำลังปฏิบัติอยู่ กรอบเวลาของ BreakRule แต่ละช่วงต้องรวมอยู่ในกรอบเวลาของการเปลี่ยนแปลงนี้ทั้งหมด

BreakRule

กฎที่กําหนดว่าช่วงพักหนึ่งๆ จะเริ่มต้นได้ในกะและระยะเวลาของช่วงพักเมื่อใด รายการของช่วงพักที่เป็นไปได้ทั้งหมดที่ถือว่าอยู่จะคิดเพิ่มขึ้นทีละ ruleIncrementMinutes ตัวอย่างเช่น ถ้ากฎช่วงพักโฆษณากำลังจำลองช่วงพักโฆษณา 30 นาทีที่สามารถเริ่มต้นระหว่าง 10:00 ถึง 11:00 และการเพิ่มของกฎเป็น 20 นาที รายการช่วงพักที่ถือว่าได้คือ [10:00, 10:30], [10:20, 10:50], [10:40, 1.0]

การแสดง JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
ช่อง
earliestStartTime

object (DateTime)

เวลาเริ่มต้นของการพักเร็วที่สุด (รวม) ตั้งค่าได้เฉพาะ hours และ minutes

latestStartTime

object (DateTime)

เวลาเริ่มต้นล่าสุดของช่วงพัก (รวมด้วย) ตั้งค่าได้เฉพาะ hours และ minutes

durationMinutes

integer

ระยะเวลาของช่วงพักเป็นนาที

ruleIncrementMinutes

integer

[ไม่บังคับ] การเพิ่มเวลาเป็นนาทีสำหรับช่วงพักทั้งหมดที่พิจารณาได้ในกฎช่วงพักนี้ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น durationMinutes

CoverageRequirement

ข้อกำหนดด้านความคุ้มครองจะระบุจำนวนพนักงานที่จำเป็นสำหรับบทบาทและ/หรือทักษะในระยะเวลาที่กำหนดและในสถานที่หนึ่งๆ ช่วงเวลาของวันที่และเวลา ณ สถานที่ใดสถานที่หนึ่งจะทับซ้อนกันไม่ได้ หรือจะระบุรายการรหัส Shift แทนกรอบเวลาและสถานที่ก็ได้ มีเพียงพนักงานที่ได้รับมอบหมายตามบทบาทที่เฉพาะเจาะจง (หรือที่มีทักษะเฉพาะ) เท่านั้นที่จะทำตามข้อกำหนดนี้ได้

สำหรับบทบาทและ/หรือทักษะที่กำหนด ข้อกำหนดด้านความคุ้มครองจะได้รับการปฏิบัติตามเมื่อพนักงานอย่างน้อย targetEmployeeCount คนทำงานในช่วงเวลาของกรอบเวลา (หรือสำหรับทุกๆ กะของshiftIds) ในทางตรงกันข้าม ข้อกำหนดความคุ้มครองจะถูกละเมิดหากมีในระหว่างกรอบเวลา (หรือสำหรับกะใดๆ ใน shiftIds) มีพนักงานน้อยกว่า targetEmployeeCount คนที่ทำงานในกรอบเวลานั้น พนักงานที่ทำงานมากกว่า targetEmployeeCount คนยังคงปฏิบัติตามข้อกำหนดได้ แต่เครื่องมือแก้โจทย์คณิตมีจำนวนพนักงานมากเกินไป

การแสดง JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
ช่อง
startDateTime

object (DateTime)

เวลาเริ่มต้นสำหรับข้อกำหนดด้านการคุ้มครอง (รวม) หากตั้งค่า shiftIds จะต้องว่างเปล่า

endDateTime

object (DateTime)

เวลาสิ้นสุดสำหรับข้อกำหนดการครอบคลุม (ไม่รวม) หากตั้งค่า shiftIds จะต้องว่างเปล่า

locationId

string

สถานที่ที่ต้องการพนักงาน shiftIds มีข้อมูล ช่องนี้ต้องว่างเปล่า

shiftIds[]

string

หากตั้งค่าไว้ บทบาทและทักษะจะถูกนำไปใช้กับรหัส Shift ทั้งหมดในรายการนี้ กรณีที่ ShiftId ไม่ว่างเปล่า ค่า startDateTime, endDateTime และ locationId จะต้องว่างเปล่า

roleRequirements[]

object (RoleRequirement)

จำนวนพนักงานที่กำหนดซึ่งได้รับการกำหนดตามบทบาทที่ระบุในกรอบเวลา ต้องระบุ role_requirement ไม่เกิน 1 รายการสำหรับแต่ละรหัสบทบาท ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดคือ PRIORITY_MANDATORY เราจะละเมิดข้อจำกัดเหล่านี้หากมีการมอบหมายบทบาทที่ระบุให้แก่พนักงานเป็นจำนวนน้อยกว่า targetEmployeeCount คนในช่วงเวลาใดๆ ภายในกรอบเวลา

skillRequirements[]

object (SkillRequirement)

จำนวนพนักงานที่กำหนดซึ่งมีทักษะตามที่ระบุและได้รับการกำหนดให้เข้ากะในกรอบเวลา ต้องระบุ skill_requirement ไม่เกิน 1 รายการสำหรับแต่ละรหัสทักษะ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดคือ PRIORITY_LOW เราจะละเมิดข้อจำกัดเหล่านี้หากมีพนักงานน้อยกว่า targetEmployeeCount คนที่มีทักษะที่กำหนดในช่วงเวลาใดก็ได้ของกรอบเวลา

RoleRequirement

จำนวนพนักงานที่จำเป็นจะได้รับการมอบหมายบทบาทที่ระบุไว้ระหว่างกรอบเวลา

การแสดง JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
ช่อง
roleId

string

รหัสบทบาทสำหรับข้อกำหนด

targetEmployeeCount

integer

จำนวนพนักงานที่ต้องการได้รับมอบหมายบทบาทในช่วงเวลานั้น

priority

enum (Priority)

ระดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ PRIORITY_MANDATORY

SkillRequirement

จำนวนพนักงานที่กำหนดที่ทำงานในช่วงเวลาดังกล่าวและมีทักษะตามที่ระบุ

การแสดง JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
ช่อง
skillId

string

รหัสทักษะของข้อกำหนด

targetEmployeeCount

integer

จำนวนพนักงานที่ต้องการพร้อมทักษะที่กำหนดซึ่งทำงานอยู่ในกรอบเวลานั้น

priority

enum (Priority)

ระดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ PRIORITY_LOW

BudgetRequirement

ข้อกำหนดด้านงบประมาณสำหรับช่วงเวลาที่กำหนด

การแสดง JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
ช่อง
totalBudget

number

งบประมาณทั้งหมดสำหรับช่วงเวลาที่ระบุ ต้องระบุงบประมาณรวมหากลำดับความสำคัญคือ PRIORITY_MANDATORY

หากไม่ได้ตั้งค่า totalBudget ระบบจะลดค่าใช้จ่ายทั้งหมดของกำหนดเวลาตาม priority ที่ระบุ ตัวอย่างเช่น หาก priority สำหรับงบประมาณคือ PRIORITY_MEDIUM เครื่องมือแก้โจทย์คณจะลดค่าใช้จ่ายก่อนที่จะลดการละเมิดข้อจำกัดใดๆ ที่มีลำดับความสำคัญ PRIORITY_LOW

startDateTime

object (DateTime)

เวลาเริ่มต้นที่จะใช้งบประมาณนี้ หากไม่ได้ระบุเวลาเริ่มต้น ระบบจะกำหนดให้เป็นเวลาเริ่มต้นเร็วที่สุดของกะทั้งหมด

endDateTime

object (DateTime)

เวลาสิ้นสุดที่จะใช้งบประมาณนี้ หากไม่ได้ระบุเวลาสิ้นสุด ระบบจะตั้งค่าเป็นเวลาสิ้นสุดสุดท้ายของการเปลี่ยนแปลงทั้งหมด

priority

enum (Priority)

ระดับความสำคัญเพื่อให้เป็นไปตามข้อกำหนดด้านงบประมาณในกรอบเวลาที่ระบุ ลำดับความสำคัญเริ่มต้นคือ PRIORITY_LOW หากตั้งค่าลำดับความสำคัญเป็น PRIORITY_MANDATORY ก็ต้องตั้งค่า totalBudget

โปรดทราบว่าหากลำดับความสำคัญนี้สูงกว่าลำดับความสำคัญของข้อจำกัดอื่นๆ และหาก totalBudget มีความสำคัญ กำหนดเวลาที่ได้อาจฝ่าฝืนทั้งข้อจำกัดของพนักงานหรือข้อกำหนดด้านการคุ้มครองของพนักงานอย่างมาก

ShiftAssignment

พนักงานที่จะเข้ารับหน้าที่ประจำ

การแสดง JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
ช่อง
employeeId

string

รหัสพนักงานที่กำหนด

shiftId

string

รหัส Shift ที่กำหนดให้กับพนักงาน

roleId

string

รหัสบทบาทที่พนักงานได้รับมอบหมายสำหรับกะ

breaks[]

object (Break)

รายการช่วงพักสำหรับงานกะนี้

พัก

ระยะเวลาที่พนักงานขัดจังหวะการทำงานระหว่างกะ

การแสดง JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
ช่อง
startDateTime

object (DateTime)

เวลาเริ่มต้นของการพัก

durationMinutes

integer

ระยะเวลาของช่วงพักเป็นนาที

SolutionStatus

สถานะโซลูชัน (กำหนดการ) ที่ให้ไว้ในคำตอบของเครื่องมือแก้โจทย์

Enum
SOLUTION_STATUS_UNSPECIFIED สถานะที่ไม่ได้ระบุสำหรับคำตอบ
FEASIBLE กำหนดเวลาที่แสดงผลเป็นไปได้ แต่อาจไม่เหมาะสม
OPTIMAL กำหนดเวลาที่แสดงผลเหมาะสมที่สุด
INFEASIBLE ไม่มีกำหนดการที่เป็นไปได้สำหรับข้อจำกัดที่ระบุ เครื่องมือแก้โจทย์คณจะแสดงค่านี้หากไม่เป็นไปตามเงื่อนไขย่อยของข้อจำกัดที่มีระดับความสำคัญเป็น PRIORITY_MANDATORY
NOT_SOLVED ไม่พบกำหนดการ
NOT_SOLVED_DEADLINE_EXCEEDED ไม่พบกำหนดการในเวลาที่กำหนด