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

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

solveParameters

object (SolveParameters)

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

employees[]

object (Employee)

พนักงานทุกคนว่างจะต้องกำหนดเวลา

shifts[]

object (Shift)

กะทั้งหมดเพื่อสร้างกำหนดเวลา

coverageRequirements[]

object (CoverageRequirement)

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

roleIds[]

string

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

skillIds[]

string

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

locationIds[]

string

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

budgetRequirements[]

object (BudgetRequirement)

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

assignmentsHint[]

object (ShiftAssignment)

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

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

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

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

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

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

string

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

solutionStatus

enum (SolutionStatus)

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

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 ดูรายละเอียดเพิ่มเติมได้ใน Priority enum

resourceConstraints[]

object (ResourceConstraint)

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

shiftRequests[]

object (ShiftRequest)

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

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

จำนวนนาทีขั้นต่ำที่พนักงานต้องพักหลังจากสิ้นสุดกะการทำงานหนึ่งก่อนที่จะได้รับมอบหมายให้ทำงานอื่น ข้อจำกัดนี้มีผลกับ Shift ทุกคู่ที่รวมอยู่ใน [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

รหัสการเปลี่ยนแปลงของคำขอกำหนดเวลา

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 ชั่วโมงต่อเนื่องกัน 7 ชั่วโมง) ที่ใช้กำหนดจำนวนเงินค่าชดเชยการทำงานล่วงเวลา โดยแต่ละระยะเวลาจะมีตัวคูณในช่วงระยะเวลาหนึ่ง (เช่น 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:40]

การแสดง 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

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

สำหรับบทบาทและ/หรือทักษะหนึ่งๆ จะมีการปฏิบัติตามข้อกำหนดด้านการครอบคลุมเมื่อพนักงานอย่างน้อย 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

หากตั้งค่าไว้ ระบบจะใช้ข้อกำหนดด้านบทบาทและทักษะแยกกันกับรหัสกะทุกรหัสในรายการนี้ หาก 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 ไม่พบกำหนดการภายในระยะเวลาที่กำหนด