แก้ไขปัญหาการจัดตารางเวลาแบบกะทันหันจาก SolveShiftSchedulingRequest
ที่ระบุด้วยการกำหนดพนักงานเป็นกะแบบเดียวกับที่พนักงาน ค่ากำหนดการตั้งเวลาจะเพิ่มขึ้นมากที่สุด และลดการละเมิดข้อจำกัดทางกำหนดเวลาให้เหลือน้อยที่สุด
คำขอ HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling
URL ใช้ไวยากรณ์การแปลง gRPC
เนื้อหาของคำขอ
เนื้อหาของคำขอมีข้อมูลที่มีโครงสร้างต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "solveParameters": { object ( |
ช่อง | |
---|---|
requestId |
ปัญหาหรือ ID คำขอ |
solveParameters |
พารามิเตอร์สำหรับควบคุมการแก้โจทย์ปัญหาเดียว |
employees[] |
พนักงานทุกคนว่างจะต้องกำหนดเวลา |
shifts[] |
กะทั้งหมดเพื่อสร้างกำหนดเวลา |
coverageRequirements[] |
ข้อกําหนดด้านความครอบคลุมสําหรับขอบเขตการวางแผนทั้งหมด ซึ่งระบุจำนวนพนักงานที่ต้องปฏิบัติแต่ละบทบาทหรือมีทักษะในระหว่างกรอบเวลาหรือรายการรหัสกะ ต้องระบุข้อกำหนดการครอบคลุมทั้งหมดด้วยกรอบเวลาหรือรายการรหัสกะ (ไม่ใช่ทั้ง 2 รหัส) กรอบเวลา (หากให้ไว้) สำหรับข้อกำหนดความครอบคลุมต้องไม่ทับซ้อนกันสำหรับแต่ละสถานที่ตั้งที่ระบุ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ |
roleIds[] |
รายการบทบาทที่เป็นไปได้ทั้งหมดของพนักงาน พนักงานแต่ละคนต้องมีอย่างน้อย 1 บทบาทที่สามารถมอบหมายให้กะได้ บทบาทหมายถึงงานที่มอบหมายระหว่างกะ (เช่น พยาบาลวิชาชีพ เชฟ บริกร ฯลฯ) เมื่อพนักงานได้รับมอบหมายเป็นกะ พนักงานเหล่านั้นจะได้รับมอบหมายให้มีบทบาทใดบทบาทหนึ่งโดยเฉพาะ |
skillIds[] |
รายการทักษะที่เป็นไปได้ทั้งหมดของพนักงาน ทักษะหมายถึงคุณสมบัติเพิ่มเติมที่พนักงานอาจมีซึ่งไม่เกี่ยวข้องกับงานที่ได้รับมอบหมายที่เฉพาะเจาะจง (เช่น การรับรอง ภาษาที่พูด ฯลฯ) รายการนี้อาจว่างเปล่า เมื่อพนักงานได้รับมอบหมายให้ทำงาน พนักงานจะต้องปฏิบัติตามทักษะทั้งหมดที่จำเป็นสำหรับกะงานนั้น |
locationIds[] |
รายการสถานที่ที่เป็นไปได้ทั้งหมดสำหรับชุดกะงานในกำหนดการ รายการนี้อาจว่างเปล่า การระบุสถานที่ที่ต่างกันอาจมีประโยชน์ในกรณีต่างๆ เช่น ผู้จัดการพยาบาลต้องการกําหนดเวลาให้พยาบาลหลายคนในหน่วยงานต่างๆ ของโรงพยาบาล หรืออีกตัวอย่างหนึ่งคือ ผู้จัดการโรงแรมต้องการกําหนดเวลาให้พนักงานในโรงแรมหลายแห่ง |
budgetRequirements[] |
ข้อกำหนดเกี่ยวกับงบประมาณสำหรับปัญหาการกำหนดเวลา ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดเหล่านี้คือ |
assignmentsHint[] |
เปลี่ยนงานที่จะใช้เป็นวิธีแก้ปัญหาชั่วคราว (หรือที่เรียกอีกอย่างว่า "คำแนะนำโซลูชัน") ให้กับโจทย์กำหนดเวลา ระบบจะไม่สนใจคําแนะนําเกี่ยวกับงาน หากงานขัดแย้งกับกะงานที่มอบหมายไม่ได้หรือคําขอการกำหนดเวลา |
เนื้อหาการตอบกลับ
การตอบกลับสำหรับ API การกำหนดเวลาทำงาน สำหรับคำตอบแต่ละรายการ shiftAssignments
จะว่างเปล่าหาก solutionStatus
ที่แสดงผลเป็น NOT_SOLVED_DEADLINE_EXCEEDED
หรือ INFEASIBLE
หาก solutionStatus
แสดงผลเป็น OPTIMAL
หรือ FEASIBLE
ระบบจะส่งคืนงาน Shift ที่ถูกต้องใน shiftAssignments
สำหรับการกำหนดกะที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะมีการเก็บรักษา
- รหัสพนักงานแต่ละรหัสจะอยู่ในกลุ่มพนักงานที่ระบุไว้ในคำขอ
- รหัสบทบาทแต่ละรายการที่มอบหมายให้กับพนักงานจะอยู่ในชุดรหัสบทบาทของพนักงานนั้นๆ
- รหัส Shift แต่ละรายการจะอยู่ในชุดกะที่ระบุไว้ในคําขอ
- รหัสกะการทำงานแต่ละรายการไม่ใช่รหัสกะการทำงานที่พนักงานมอบหมายไม่ได้ 1 รหัส
- พนักงานจะไม่ถูกกำหนดให้ทำงาน 2 กะที่ทับซ้อนกัน
- สำหรับกำหนดการที่ระบุ ไม่ละเมิดข้อจำกัดหรือคำขอที่มีลำดับความสำคัญ
PRIORITY_MANDATORY
หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "solutionStatus": enum ( |
ช่อง | |
---|---|
requestId |
รหัสของคำขอที่เชื่อมโยงกับคำตอบนี้ |
solutionStatus |
สถานะของโซลูชันที่ส่งคืน หากโซลูชันไม่ "เป็นไปได้" หรือ "เหมาะสมที่สุด" ฟิลด์อื่นๆ ในโปรโตนี้อาจว่างเปล่า ถ้าสถานะเป็น NOT_SOLVED_DEADLINE_EXCEEDED แสดงว่าหมดเวลาแล้วโดยที่ไม่ค้นพบวิธีแก้ปัญหาที่เป็นไปได้หรือไม่ได้พิจารณาว่ามีโซลูชันที่เป็นไปได้หรือไม่ คำขออาจไม่สามารถทำได้หากไม่สามารถทำตามข้อจำกัดของระดับความสำคัญ "MANDATORY" ได้ทั้งหมด |
shiftAssignments[] |
รายการงานทั้งหมด |
statusMessage |
หาก |
SolveParameters
พารามิเตอร์ที่ควบคุมการแก้โจทย์ปัญหาการจัดตารางเวลาสำหรับกะการทำงานเพียงวิธีเดียว
การแสดง JSON |
---|
{ "timeLimit": string } |
ช่อง | |
---|---|
timeLimit |
ระยะเวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้กับโจทย์ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น 1 นาที ค่านี้ไม่ใช่ค่าจำกัดแบบเข้มงวด และไม่ได้พิจารณาค่าใช้จ่ายในการสื่อสาร เวลาในการตอบสนองที่คาดไว้ในการแก้ปัญหาอาจเกินค่านี้เล็กน้อย ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
พนักงาน
พนักงานจากพนักงานที่ต้องทำงาน
การแสดง JSON |
---|
{ "id": string, "roleIds": [ string ], "skillIds": [ string ], "shiftPreferences": [ { object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้พนักงานคนนี้ |
roleIds[] |
รหัสบทบาทที่พนักงานรายนี้ทำได้ ต้องระบุอย่างน้อย 1 บทบาท เมื่อมีการมอบหมายพนักงานเป็นกะ พนักงานคนดังกล่าวจะได้รับมอบหมายบทบาทเดียวจากรายการนี้ด้วย พนักงานอาจได้รับมอบหมายหน้าที่อื่นในช่วงกรอบเวลานัดหมาย |
skillIds[] |
รหัสทักษะที่พนักงานรายนี้มี รายการนี้อาจว่างเปล่า เมื่อมีการมอบหมายกะ พนักงานจะใช้ทักษะย่อยใดๆ ที่ระบุไว้ที่นี่เพื่อให้ครอบคลุมความต้องการทักษะตลอดระยะเวลาของกะงานที่มอบหมาย |
shiftPreferences[] |
เปลี่ยนค่ากำหนดของพนักงานคนนี้ กะงานที่ระบุไว้ที่นี่แสดงถึงกะที่พนักงานต้องการกำหนดให้อยู่ในกรอบเวลาการนัดหมาย รหัส Shift ที่ระบุใน |
schedulingConstraints[] |
รายการข้อจำกัดในการตั้งเวลาสำหรับพนักงานคนนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ |
resourceConstraints[] |
คุณจะเพิ่มข้อจำกัดการตั้งเวลาเพิ่มเติมใดๆ ที่ไม่ได้ระบุไว้ใน |
shiftRequests[] |
รายการคำขอกะของพนักงาน โดยอาจเป็นการกำหนดให้พนักงานได้รับมอบหมายหรือไม่ได้กำหนดให้ทำงานในบางกะก็ได้ งานที่จัดตารางเวลาแบบตายตัวสำหรับพนักงานจะแสดงด้วย |
hourlyContract |
สัญญาที่ระบุอัตราค่าจ้างเป็นรายชั่วโมงเป็นประจำและแบบค่าล่วงเวลาสำหรับพนักงาน |
ShiftPreference
ค่ากำหนดที่เป็นตัวเลขสำหรับรหัส Shift ที่เฉพาะเจาะจง
การแสดง JSON |
---|
{ "shiftId": string, "preference": integer } |
ช่อง | |
---|---|
shiftId |
รหัส Shift ที่ระบุค่ากำหนด |
preference |
ค่านิยมที่มากกว่าแสดงถึงการเปลี่ยนแปลงที่ต้องการมากกว่า |
SchedulingConstraint
ข้อจำกัดทางกำหนดเวลาที่เจาะจงสำหรับพนักงานคนหนึ่ง ข้อจำกัดที่ระบุจะใช้ระหว่างช่วงเวลาที่ระบุ [startDateTime,
endDateTime)
เท่านั้น
การแสดง JSON |
---|
{ "priority": enum ( |
ช่อง | |
---|---|
priority |
ระดับลำดับความสำคัญสำหรับข้อจำกัดการตั้งเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดการตั้งเวลาทั้งหมดคือ |
startDateTime |
เวลาเริ่มต้นเมื่อข้อจำกัดการจัดตารางเวลานี้มีผล (รวมด้วย) |
endDateTime |
เวลาสิ้นสุดเมื่อข้อจำกัดการตั้งเวลานี้มีผล (ไม่รวม) |
ช่องการรวม type ประเภทของข้อจำกัดที่ระบุ ข้อจำกัดแต่ละข้อจะนำมาใช้ภายในกรอบเวลาที่ระบุข้างต้นเท่านั้น type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้ |
|
minimumMinutes |
จำนวนนาทีขั้นต่ำที่พนักงานทำงานได้ หากพนักงานได้รับมอบหมายให้อยู่ในกะที่ทับซ้อน (ทั้งหมดหรือบางส่วน) กับกรอบเวลา จำนวนนาทีที่กะนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
maximumMinutes |
จำนวนนาทีสูงสุดที่พนักงานทำงานได้ในกรอบเวลาที่กำหนด หากพนักงานได้รับมอบหมายให้อยู่ในกะที่ทับซ้อน (ทั้งหมดหรือบางส่วน) กับกรอบเวลา จำนวนนาทีที่กะนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
minimumConsecutiveWorkDays |
จำนวนวันขั้นต่ำติดต่อกันที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่ใดวันหนึ่ง หากมีเวลาเป็นกะที่เริ่มต้นในวันนั้น กะงานที่มีการมอบหมายพนักงานซึ่งเริ่มต้นในกรอบเวลาดังกล่าวจะรวมอยู่ในจำนวนนี้ |
maximumConsecutiveWorkDays |
จำนวนวันสูงสุดติดต่อกันที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่ใดวันหนึ่ง หากมีเวลาเป็นกะที่เริ่มต้นในวันนั้น กะงานที่มีการมอบหมายพนักงานซึ่งเริ่มต้นในกรอบเวลาดังกล่าวจะรวมอยู่ในจำนวนนี้ |
minimumShiftCount |
จำนวนกะขั้นต่ำที่พนักงานสามารถทำได้ กะการทำงานที่พนักงานได้รับมอบหมายและคาบเกี่ยวกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้ |
maximumShiftCount |
จำนวนกะสูงสุดที่พนักงานจะทำงานได้ กะการทำงานที่พนักงานได้รับมอบหมายและคาบเกี่ยวกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้ |
minimumRestMinutes |
จำนวนนาทีขั้นต่ำที่พนักงานต้องพักหลังจากสิ้นสุดกะการทำงานหนึ่งก่อนที่จะได้รับมอบหมายให้ทำงานอื่น ข้อจำกัดนี้มีผลกับ Shift ทุกคู่ที่รวมอยู่ใน [ |
ลำดับความสำคัญ
ระดับความสำคัญสำหรับข้อจำกัดใดๆ ในกำหนดเวลาของพนักงานหรือข้อกำหนดด้านความครอบคลุม ซึ่งรวมถึง 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 |
จำนวนทรัพยากรที่ใช้โดยกะ ตัวอย่างเช่น หากข้อจำกัดนี้มีผลกับจำนวนชั่วโมงต่ำสุดและสูงสุดที่ทำงานโดยพนักงานในสัปดาห์หนึ่งๆ แผนที่นี้จะมีกะงานที่เกิดขึ้นในสัปดาห์นั้น และความยาวของกะการทำงานแต่ละครั้งเป็นชั่วโมง ออบเจ็กต์ที่มีรายการคู่ |
minimumResourceUsage |
การใช้ทรัพยากรขั้นต่ำเพื่อให้เป็นไปตามข้อจำกัดด้านทรัพยากร |
maximumResourceUsage |
การใช้งานทรัพยากรสูงสุดเพื่อให้เป็นไปตามข้อจำกัดของทรัพยากร |
ShiftRequest
คำขอของพนักงานที่จะมอบหมายหรือไม่มอบหมายงานให้เข้างาน
การแสดง JSON |
---|
{ "priority": enum ( |
ช่อง | |
---|---|
priority |
ระดับความสำคัญของคำขอกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับคำขอการตั้งเวลาทั้งหมดคือ |
shiftIds[] |
รหัสการเปลี่ยนแปลงของคำขอกำหนดเวลา |
type |
ประเภทคำขอ เช่น ระบุว่ามีการมอบหมายงานให้หรือไม่ได้มอบหมายคำขอให้กับชุดกะ |
WorkStatus
พนักงานทำงานอยู่หรือไม่
Enum | |
---|---|
WORK_STATUS_UNSPECIFIED |
สถานะงานที่ไม่รู้จัก |
STATUS_WORK |
สถานะที่แสดงถึงพนักงานทำงานอยู่ |
STATUS_NOT_WORK |
สถานะที่แสดงถึงพนักงานที่ไม่ได้ทำงาน |
HourlyContract
ระบุอัตรารายชั่วโมงพื้นฐาน ส่วนต่างของอัตรา และตัวคูณการทำงานล่วงเวลา เพื่อกำหนดค่าตอบแทนสำหรับพนักงาน โปรดทราบว่ากฎระเบียบในที่ต่างๆ อาจต้องมีการคำนวณค่าชดเชยการทำงานล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์จะประมาณค่าตอบแทนการทำงานล่วงเวลาเพื่อลดค่าใช้จ่ายรวมหรือเพื่อให้เป็นไปตามงบประมาณ (ดู BudgetRequirement
) ไม่ได้มีจุดประสงค์เพื่อเป็นเครื่องมือในการคำนวณเงินเดือน
การแสดง JSON |
---|
{
"baseHourlyRate": number,
"hourlyRateShiftDifferentials": {
string: number,
...
},
"overtimePeriods": [
{
object ( |
ช่อง | |
---|---|
baseHourlyRate |
ค่าตอบแทนสำหรับการทำงานนอกเวลาทำการ หากพนักงานใช้หลายอัตรา ระบบจะคำนวณส่วนต่างของอัตราจะสัมพันธ์กับอัตราฐานรายชั่วโมงนี้ นอกจากนี้ หากมีหลายอัตรา อัตรารายชั่วโมงฐานควรเป็นอัตราขั้นต่ำของอัตราดังกล่าว |
hourlyRateShiftDifferentials |
ส่วนต่างราคาต่อชั่วโมง ซึ่งจ่ายเพิ่มเติมจาก ออบเจ็กต์ที่มีรายการคู่ |
overtimePeriods[] |
รายการของระยะเวลาทั้งหมดที่ต้องมีการคำนวณต่อเวลา ช่วงเวลาเหล่านี้ต้องไม่ทับซ้อนกัน |
OvertimePeriod
ระยะเวลาคงที่และเกิดซ้ำเป็นประจำ (โดยทั่วไปคือ 168 ชั่วโมงหรือ 24 ชั่วโมงต่อเนื่องกัน 7 ชั่วโมง) ที่ใช้กำหนดจำนวนเงินค่าชดเชยการทำงานล่วงเวลา โดยแต่ละระยะเวลาจะมีตัวคูณในช่วงระยะเวลาหนึ่ง (เช่น 1.5) สัมพันธ์กับ baseHourlyRate
และขีดจำกัดจำนวนชั่วโมงที่ถือว่าทำงานปกติ (ไม่ใช่การทำงานล่วงเวลา) การเปลี่ยนแปลงใดๆ ที่ทับซ้อนกับกรอบเวลา startDateTime
(รวม) และ endDateTime
(ไม่รวม) จะนับรวมอยู่ในจำนวนชั่วโมงการทำงานทั้งหมดในระยะเวลานั้นๆ หากส่วนที่ซ้อนทับกันบางส่วน ระบบจะนับเฉพาะชั่วโมงที่ทับซ้อนกันเท่านั้น
การแสดง JSON |
---|
{ "overtimeMultiplier": number, "startDateTime": { object ( |
ช่อง | |
---|---|
overtimeMultiplier |
ตัวคูณเพื่อคำนวณอัตราการทำงานล่วงเวลาต่อชั่วโมง (ต้องมากกว่าหรือเท่ากับ 1.0) โดยทั่วไปแล้ว อัตราค่าดำเนินการต่อเวลารายชั่วโมงจะคำนวณเป็น |
startDateTime |
เวลาเริ่มต้นสำหรับช่วงต่อช่วง หากกะเหลื่อมซ้อนกันในครั้งนี้ ระบบจะนับชั่วโมงของการเปลี่ยนแปลงดังกล่าวจากเวลา |
endDateTime |
เวลาสิ้นสุดสำหรับช่วงต่อช่วง หากช่วงเวลาดังกล่าวทับซ้อนกันในครั้งนี้ ระบบจะนับจำนวนชั่วโมงของการเปลี่ยนแปลงดังกล่าวสูงสุดถึง |
maximumRegularHours |
จำนวนเวลาทำงานสูงสุดที่จ่ายในอัตราปกติ (ไม่ใช่การทำงานล่วงเวลา) จำนวนนี้ต้องเป็นจำนวนบวก |
Shift
กะงานเป็นการกำหนดกรอบเวลาที่ตายตัวที่พนักงานสามารถทำงานได้
การแสดง JSON |
---|
{ "id": string, "locationId": string, "startDateTime": { object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้สำหรับการเปลี่ยนแปลงนี้ |
locationId |
รหัสตำแหน่งที่การเปลี่ยนแปลงนี้ทำงาน เว้นว่างไว้ได้ |
startDateTime |
เวลาเริ่มต้นของการเปลี่ยนแปลง (รวมด้วย) |
endDateTime |
เวลาสิ้นสุดของกะ (ไม่รวม) ปัจจุบันเครื่องมือแก้โจทย์อนุญาตให้สำหรับกะที่มีความยาวไม่เกิน 24 ชม. เท่านั้น |
breakRules[] |
รายการกฎการละเมิดที่เกิดขึ้นระหว่างการเปลี่ยนแปลง พนักงานที่ทำกะนี้จะได้รับการกำหนดช่วงพักทุก |
BreakRule
กฎที่กำหนดว่าช่วงพักสามารถเริ่มต้นภายในกะและระยะเวลาของช่วงพักได้ รายการช่วงพักทั้งหมดที่เป็นไปได้ซึ่งนำมาพิจารณาจะพิจารณาเพิ่มขึ้นทีละ ruleIncrementMinutes
เช่น ถ้ากฎช่วงพักโฆษณาสร้างแบบจำลองช่วงพัก 30 นาทีที่สามารถเริ่มต้นระหว่าง 10:00 ถึง 11:00 น. และกฎเพิ่มขึ้น 20 นาที รายการช่วงพักที่นำมาพิจารณาได้แก่ [10:00, 10:30], [10:20, 10:50], [10:40], 1:40]
การแสดง JSON |
---|
{ "earliestStartTime": { object ( |
ช่อง | |
---|---|
earliestStartTime |
เวลาเริ่มต้นเร็วที่สุดของช่วงพัก (รวม) ตั้งค่าได้เฉพาะ |
latestStartTime |
เวลาเริ่มต้นล่าสุดของช่วงพัก (รวม) ตั้งค่าได้เฉพาะ |
durationMinutes |
ระยะเวลาของช่วงพักเป็นนาที |
ruleIncrementMinutes |
[ไม่บังคับ] เวลาที่เพิ่มขึ้นเป็นนาทีสำหรับช่วงพักทั้งหมดที่จะพิจารณาในกฎช่วงพักโฆษณานี้ได้ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น |
CoverageRequirement
ข้อกำหนดความคุ้มครองจะระบุจำนวนพนักงานที่จำเป็นสำหรับชุดของบทบาทและ/หรือทักษะในช่วงเวลาที่กำหนดและในสถานที่หนึ่งๆ ช่วงเวลา DateTime ที่ตำแหน่งใดตำแหน่งหนึ่งต้องไม่ทับซ้อนกัน หรือจะระบุรายการรหัสกะแทนกรอบเวลาและสถานที่ก็ได้ โดยพนักงานที่ได้รับการกำหนดบทบาทหนึ่งๆ (หรือทักษะเฉพาะดังกล่าว) เท่านั้นที่จะปฏิบัติตามข้อกำหนดนี้ได้
สำหรับบทบาทและ/หรือทักษะหนึ่งๆ จะมีการปฏิบัติตามข้อกำหนดด้านการครอบคลุมเมื่อพนักงานอย่างน้อย targetEmployeeCount
จำนวนทำงานในทุกช่วงเวลาของกรอบเวลา (หรือทุกกะใน shiftIds
) ในทางตรงกันข้าม จะมีการละเมิดข้อกำหนดการครอบคลุมหากช่วงเวลาใดก็ตาม (หรือการเปลี่ยนแปลงใดก็ตามใน shiftIds
) มีพนักงานน้อยกว่า targetEmployeeCount
คนที่ทํางานในกรอบเวลาดังกล่าว จำนวนพนักงานที่ทำงานในจำนวนที่มากกว่า targetEmployeeCount
ยังคงเป็นไปตามข้อกำหนด แต่เครื่องมือแก้โจทย์จะทำให้จำนวนพนักงานที่มีจำนวนมากเกินไป
การแสดง JSON |
---|
{ "startDateTime": { object ( |
ช่อง | |
---|---|
startDateTime |
เวลาเริ่มต้นสำหรับข้อกำหนดการครอบคลุม (รวม) หากมีการตั้งค่า |
endDateTime |
เวลาสิ้นสุดสำหรับข้อกำหนดความครอบคลุม (ไม่รวม) หากมีการตั้งค่า |
locationId |
สถานที่ที่ต้องการพนักงาน |
shiftIds[] |
หากตั้งค่าไว้ ระบบจะใช้ข้อกำหนดด้านบทบาทและทักษะแยกกันกับรหัสกะทุกรหัสในรายการนี้ หาก shiftId ไม่ว่างเปล่า ในกรณีนี้ |
roleRequirements[] |
จำนวนพนักงานที่กำหนดไว้สำหรับบทบาทที่ระบุในกรอบเวลา ต้องระบุ |
skillRequirements[] |
จำนวนพนักงานที่มีทักษะตามที่ระบุและได้รับการกำหนดให้กะการทำงานในช่วงเวลาที่กำหนด ต้องระบุ |
RoleRequirement
จำนวนพนักงานที่กำหนดไว้สำหรับบทบาทที่ระบุในกรอบเวลา
การแสดง JSON |
---|
{
"roleId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
ช่อง | |
---|---|
roleId |
รหัสบทบาทสำหรับข้อกำหนด |
targetEmployeeCount |
จำนวนพนักงานที่ต้องการได้รับมอบหมายบทบาทนั้นๆ ในกรอบเวลาที่กำหนด |
priority |
ระดับลำดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดของทรัพยากรทั้งหมดคือ |
SkillRequirement
จำนวนพนักงานที่กำหนดซึ่งทำงานอยู่ในช่วงกรอบเวลา และมีทักษะตามที่กำหนด
การแสดง JSON |
---|
{
"skillId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
ช่อง | |
---|---|
skillId |
รหัสทักษะสำหรับข้อกำหนด |
targetEmployeeCount |
จำนวนพนักงานที่ต้องการซึ่งมีทักษะและพร้อมทำงานในช่วงเวลาที่เหมาะสม |
priority |
ระดับลำดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดของทรัพยากรทั้งหมดคือ |
BudgetRequirement
ข้อกำหนดด้านงบประมาณสำหรับช่วงเวลาที่ระบุ
การแสดง JSON |
---|
{ "totalBudget": number, "startDateTime": { object ( |
ช่อง | |
---|---|
totalBudget |
งบประมาณทั้งหมดสำหรับช่วงเวลาที่ระบุ ต้องระบุงบประมาณรวมหากลำดับความสำคัญคือ หากไม่ได้ตั้งค่า |
startDateTime |
เวลาเริ่มต้นที่งบประมาณนี้จะใช้ หากไม่ได้ระบุเวลาเริ่มต้น ระบบจะกำหนดให้เวลาเริ่มต้นเร็วที่สุดของกะทั้งหมด |
endDateTime |
เวลาสิ้นสุดที่งบประมาณนี้จะใช้ หากไม่ได้ระบุเวลาสิ้นสุด ระบบจะตั้งค่าเป็นเวลาสิ้นสุดล่าสุดของกะทั้งหมดที่ระบุ |
priority |
ระดับความสำคัญเพื่อให้เป็นไปตามข้อกำหนดด้านงบประมาณในกรอบเวลาที่ระบุ ลำดับความสำคัญเริ่มต้นคือ โปรดทราบว่าหากลำดับความสำคัญนี้สูงกว่าลำดับความสำคัญตามข้อจำกัดอื่นๆ และหาก |
ShiftAssignment
พนักงานที่จะเปลี่ยนบทบาท
การแสดง JSON |
---|
{
"employeeId": string,
"shiftId": string,
"roleId": string,
"breaks": [
{
object ( |
ช่อง | |
---|---|
employeeId |
รหัสพนักงานที่กำหนด |
shiftId |
รหัส Shift ที่กำหนดให้พนักงาน |
roleId |
รหัสบทบาทที่พนักงานได้รับมอบหมายสำหรับกะนี้ |
breaks[] |
รายการช่วงพักสำหรับงานกะนี้ |
พัก
ระยะเวลาที่พนักงานขัดจังหวะการทำงานระหว่างกะ
การแสดง JSON |
---|
{
"startDateTime": {
object ( |
ช่อง | |
---|---|
startDateTime |
เวลาเริ่มต้นของช่วงพัก |
durationMinutes |
ระยะเวลาของช่วงพักเป็นนาที |
SolutionStatus
สถานะวิธีแก้โจทย์ (ซึ่งก็คือกำหนดการ) ที่ให้ไว้ในการตอบสนองของเครื่องมือแก้โจทย์
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
สถานะที่ไม่ได้ระบุสำหรับคำตอบ |
FEASIBLE |
กำหนดเวลาที่ส่งกลับสามารถทำได้ แต่อาจไม่ดีที่สุด |
OPTIMAL |
กำหนดเวลาที่ส่งคืนเหมาะสมที่สุดแล้ว |
INFEASIBLE |
ไม่มีกำหนดเวลาที่เป็นไปได้สำหรับข้อจำกัดที่ระบุ เครื่องมือแก้โจทย์อาจแสดงผลค่านี้หากไม่เป็นไปตามข้อจำกัดย่อยใดๆ ที่มีลำดับความสำคัญระดับ PRIORITY_MANDATORY |
NOT_SOLVED |
ไม่พบกำหนดการ |
NOT_SOLVED_DEADLINE_EXCEEDED |
ไม่พบกำหนดการภายในระยะเวลาที่กำหนด |