פותר בעיה של תזמון משמרות קבועות מ-SolveShiftSchedulingRequest
הנתון על ידי הקצאת עובדים למשמרות כך שהעדפות התזמון של העובדים יהיו מקסימליות והפרות של אילוצי התזמון יצטמצמו.
בקשת HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling
בכתובת ה-URL נעשה שימוש בתחביר המרת קידוד של gRPC.
גוף הבקשה
גוף הבקשה מכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "requestId": string, "solveParameters": { object ( |
שדות | |
---|---|
requestId |
מזהה הבעיה או הבקשה. |
solveParameters |
פרמטרים לשליטה בפתרון בודד של הבעיה. |
employees[] |
תזמון כל העובדים הזמינים. |
shifts[] |
כל המשמרות כדי ליצור את לוח הזמנים. |
coverageRequirements[] |
דרישות כיסוי לכל טווח התכנון. הסעיפים האלה מציינים את מספר העובדים שחייבים לבצע כל תפקיד, או להיות בעלי מיומנות, במהלך חלון זמן או רשימה של מזהי משמרת. יש לציין את כל דרישות הכיסוי באמצעות חלונות זמן או רשימה של מזהי משמרות (אבל לא בשניהם). חלונות הזמן (אם צוין) של דרישות הכיסוי לא יכולים להיות חופפים לכל מיקום נתון. רמת העדיפות של ברירת המחדל בכל אחד מהמגבלות האלה היא |
roleIds[] |
רשימה של כל התפקידים האפשריים בכוח העבודה. לכל עובד חייב להיות תפקיד אחד לפחות שאפשר להקצות לו במשמרת. 'תפקיד' מתייחס למטלה ספציפית שמוקצית למשמרת (כלומר אח/ות מוסמך/ת, שף מנהל/ת, מלצר/ת וכו'). כשמקצה לעובד משמרת, גם מקצים לו תפקיד ספציפי אחד. |
skillIds[] |
רשימה של כל המיומנויות האפשריות במסגרת העבודה. 'מיומנות' מתייחסת להסמכות נוספות שיכולות להיות לעובד שלא קשורות לעבודה ספציפית שאפשר להקצות (כלומר הסמכות, שפות מדוברות וכו'). הרשימה הזו יכולה להיות ריקה. כשמשמרת לעובדים במשמרת, עליהם לממש את כל המיומנויות שנדרשות לאותה משמרת. |
locationIds[] |
רשימת כל המיקומים האפשריים לקבוצת המשמרות בלוח הזמנים. הרשימה הזו יכולה להיות ריקה. ציון מיקומים שונים יכול להיות שימושי במקרים שבהם, לדוגמה, מנהל/ת אחות רוצה לקבוע תורים למספר אחיות ביחידות שונות בבית חולים, או, לדוגמה, כשמנהל/ת מלון רוצה להזמין עובדים בכמה בתי מלון. |
budgetRequirements[] |
מפרט תקציב לבעיה בתזמון. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהדרישות האלה היא |
assignmentsHint[] |
שנו את המטלות כדי להשתמש בהן כפתרון לא סופי (כלומר, רמז לפתרון) לבעיית התזמון. המערכת מתעלמת מרמזים למטלות אם המטלה סותרת משמרת שלא ניתן להקצות או בקשה לתזמון. |
גוף התשובה
תגובה ל-API לתזמון כוח עבודה. עבור כל תגובה, shiftAssignments
יהיה ריק אם הערך של solutionStatus
שיוחזר הוא NOT_SOLVED_DEADLINE_EXCEEDED
או INFEASIBLE
. אם הערך של solutionStatus
שמוחזר הוא OPTIMAL
או FEASIBLE
, תוחזר הקצאת משמרת חוקית בshiftAssignments
. עבור הקצאת משמרת חוקית, המאפיינים הבאים מחזיקים:
- כל מזהה עובד נכלל בקבוצת העובדים שצוינה בבקשה.
- כל מזהה תפקיד שהוקצה לעובד נכלל בקבוצת מזהי התפקידים של העובד הנתון.
- כל מזהה משמרת נכלל בקבוצת השינויים שצוינה בבקשה.
- כל מזהה משמרת אינו אחד ממזהי המשמרות שלא ניתן להקצות לעובד הנתון.
- עובד לא יוקצה אף פעם לשתי משמרות חופפות.
- לגבי לוח הזמנים הנתון, אף אחת מהמגבלות או הבקשות עם רמת העדיפות
PRIORITY_MANDATORY
לא מופרת.
אם הפעולה בוצעה ללא שגיאות, גוף התשובה מכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "requestId": string, "solutionStatus": enum ( |
שדות | |
---|---|
requestId |
מזהה הבקשה שאליה משויכת התגובה הזו. |
solutionStatus |
הסטטוס של הפתרון שהוחזר. אם הפתרון אינו FEASIB או אופטימלי, השדות האחרים בקובץ הזה עלולים להיות ריקים. אם הסטטוס הוא NOT_SOLVED_DEADLINE_EXCEEDED, הגעת למגבלת הזמן בלי למצוא פתרון ישים או לקבוע אם קיים פתרון בר-ביצוע. בקשות עשויות להיות לא אפשריות אם לא תמלאו את כל האילוצים של רמת העדיפות MANDATORY. |
shiftAssignments[] |
רשימה של כל המטלות. כל |
statusMessage |
אם |
SolveParameters
פרמטרים ששולטים בפתרון יחיד של בעיית תזמון משמרת.
ייצוג JSON |
---|
{ "timeLimit": string } |
שדות | |
---|---|
timeLimit |
משך הזמן המקסימלי שהפותר צריך להקדיש לבעיה. אם המדיניות לא מוגדרת, ברירת המחדל היא דקה אחת. הערך הזה הוא לא מגבלה קשיחה, והוא לא כולל את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי לחרוג מעט מהערך הזה. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
עובד
קביעת מועד לפגישה של עובד מסוים מכוח העבודה.
ייצוג JSON |
---|
{ "id": string, "roleIds": [ string ], "skillIds": [ string ], "shiftPreferences": [ { object ( |
שדות | |
---|---|
id |
המזהה הייחודי שהוקצה לעובד הזה. |
roleIds[] |
מזהי תפקידים שהעובד הזה יכול לבצע. יש לציין לפחות תפקיד אחד. כשעובד מוקצה למשמרת, גם הוא מוקצה לתפקיד אחד מהרשימה הזו. אפשר להקצות לעובד תפקידים שונים במהלך חלון הזמנים לקביעת פגישות. |
skillIds[] |
מזהי המיומנויות שיש לעובד הזה. הרשימה הזו יכולה להיות ריקה. כשעובד מוקצה למשמרת, הוא משתמש בכל אחת מהמיומנויות שמצוינות כאן כדי לענות על דרישות מיומנות לכל אורך המשמרת שניתנה לו. |
shiftPreferences[] |
שינוי ההעדפות של העובד הזה. המשמרות שמצוינות כאן מייצגות משמרות שהעובד יעדיף להקצות אליהן במהלך החלון של קביעת הפגישה. מזהי Shift שצוינו ב- |
schedulingConstraints[] |
רשימת מגבלות ללוח הזמנים של העובד הזה. רמת העדיפות שמוגדרת כברירת מחדל בכל אחד מהמגבלות האלה היא |
resourceConstraints[] |
אם יש אילוצי תזמון נוספים שלא צוינו ב- |
shiftRequests[] |
רשימת בקשות למשמרת עבור העובד. זו יכולה להיות בקשה שיוקצה עובד למשמרות ספציפיות, או שלא תוקצה אליו. אפשר לייצג הקצאות קבועות של תזמון עבור העובד באמצעות |
hourlyContract |
חוזה שמצוינים בו תעריפים רגילים ותעריפים שעתיים לעובד. |
ShiftPreference
העדפה מספרית למזהה שינוי מסוים.
ייצוג 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 |
מספר הדקות המינימלי של העובד שצריך לנוח לאחר סיום משמרת אחת לפני שיוקצה למשמרת אחרת. האילוץ הזה חל על כל צמד של התאמות שנכללות באופן מלא ב-[ |
עדיפות
רמת העדיפות של כל מגבלה על לוח הזמנים של העובדים או על דרישות הכיסוי. אלה כוללים את SchedulingConstraint
, ResourceConstraint
, ShiftRequest
ו-CoverageRequirement
. מכיוון שעשויות להיות אילוצים סותרים, לא תמיד אפשר לעמוד בכל האילוצים. לכן, לכל סוג של אילוץ יש עדיפות (שניתנת למשתמש או כברירת מחדל) לגבי החשיבות היחסית של כל המגבלות שמוצגות בלוח זמנים מלא.
טיפוסים בני מנייה (enums) | |
---|---|
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 |
כמות המשאב שנעשה בה שימוש ב-Shift. לדוגמה, אם האילוץ הזה חל על מספר השעות המינימלי והמקסימלי של עובד בשבוע מסוים, המפה הזו תכלול את המשמרות שהתרחשו באותו שבוע ואת משך המשמרת בשעות. אובייקט שמכיל רשימה של |
minimumResourceUsage |
השימוש המינימלי במשאבים שצריך לעמוד באילוץ של משאב. |
maximumResourceUsage |
השימוש המקסימלי במשאבים שצריך לעמוד באילוץ של משאב. |
ShiftRequest
בקשה של עובד לקבל הקצאה או לא לקבל הקצאה למשמרות ספציפיות.
ייצוג JSON |
---|
{ "priority": enum ( |
שדות | |
---|---|
priority |
רמת העדיפות של בקשת התזמון הזו. עדיפות ברירת המחדל לכל הבקשות לתזמון היא |
shiftIds[] |
מזהי השינויים של הבקשה לתזמון. |
type |
סוג הבקשה, למשל האם הבקשה מוקצית או לא מוקצית לקבוצת ההתאמות. |
WorkStatus
האם העובד עובד או לא.
טיפוסים בני מנייה (enums) | |
---|---|
WORK_STATUS_UNSPECIFIED |
סטטוס העבודה לא ידוע. |
STATUS_WORK |
סטטוס שמייצג עובד עובד. |
STATUS_NOT_WORK |
סטטוס שמייצג עובד שאינו עובד. |
HourlyContract
ציון תעריף בסיסי לשעה, הפרשי שערים ומכפילים בשעות נוספות כדי לקבוע את התגמול לעובד. חשוב לשים לב לתקנות במקומות שונים שעשויים לחייב חישוב שונה של תגמול על שעות נוספות. הפותר חישב את הפיצוי על הזמן הנוסף כדי למזער proxy של העלות הכוללת או כדי לעמוד בתקציב (מידע נוסף מופיע כאן: BudgetRequirement
). הוא לא מיועד להיות כלי לחישוב שכר.
ייצוג JSON |
---|
{
"baseHourlyRate": number,
"hourlyRateShiftDifferentials": {
string: number,
...
},
"overtimePeriods": [
{
object ( |
שדות | |
---|---|
baseHourlyRate |
התגמול על עבודה שלא בשעות נוספות. אם לעובד יש כמה תעריפים, הפרשי התעריפים יחולו ביחס לתעריף הבסיסי לשעה. בנוסף, אם יש מספר תעריפים, התעריף הבסיסי לשעה צריך להיות המינימום של התעריפים האלה. |
hourlyRateShiftDifferentials |
הפרש התעריפים השעתיים, ששולם בנוסף ל- אובייקט שמכיל רשימה של |
overtimePeriods[] |
רשימה של כל התקופות שעבורן יש לחשב את השעות הנוספות. התקופות האלה לא יכולות להיות חופפות. |
OvertimePeriod
תקופה קבועה שחוזרת על עצמה באופן קבוע (בדרך כלל 168 שעות או 7 תקופות עוקבות של 24 שעות) שמשמשת לקביעת סכום הפיצוי על שעות נוספות. לכל תקופה יש מכפיל של זמן נוסף (למשל 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:10, 10: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
סטטוס הפתרון (כלומר, לוח זמנים) שסופק בתגובת הפותר.
טיפוסים בני מנייה (enums) | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
לא צוין סטטוס לתגובה. |
FEASIBLE |
לוח הזמנים שמוחזר הוא אפשרי, אבל ייתכן שהוא לא יהיה אופטימלי. |
OPTIMAL |
התזמון שמוחזר הוא אופטימלי. |
INFEASIBLE |
לא קיים לוח זמנים בר-ביצוע עבור המגבלות הנתונים. הפותר עשוי להחזיר את הערך הזה אם לא ניתן למלא קבוצת משנה של האילוצים עם רמת העדיפות PRIORITY_MANDATORY . |
NOT_SOLVED |
לא נמצא לוח זמנים. |
NOT_SOLVED_DEADLINE_EXCEEDED |
לא נמצא לוח זמנים במסגרת מגבלת הזמן שצוינה. |