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)

דרישות כיסוי לכל טווח התכנון. הסעיפים האלה מציינים את מספר העובדים שחייבים לבצע כל תפקיד, או להיות בעלי מיומנות, במהלך חלון זמן או רשימה של מזהי משמרת. יש לציין את כל דרישות הכיסוי באמצעות חלונות זמן או רשימה של מזהי משמרות (אבל לא בשניהם). חלונות הזמן (אם צוין) של דרישות הכיסוי לא יכולים להיות חופפים לכל מיקום נתון. רמת העדיפות של ברירת המחדל בכל אחד מהמגבלות האלה היא PRIORITY_MANDATORY לדרישות התפקיד ו-PRIORITY_LOW לדרישות המיומנות. אפשר לקרוא פרטים נוספים ב'טיפוסים בני מנייה (enum) של Priority'.

roleIds[]

string

רשימה של כל התפקידים האפשריים בכוח העבודה. לכל עובד חייב להיות תפקיד אחד לפחות שאפשר להקצות לו במשמרת. 'תפקיד' מתייחס למטלה ספציפית שמוקצית למשמרת (כלומר אח/ות מוסמך/ת, שף מנהל/ת, מלצר/ת וכו'). כשמקצה לעובד משמרת, גם מקצים לו תפקיד ספציפי אחד.

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, תוחזר הקצאת משמרת חוקית בshiftAssignments. עבור הקצאת משמרת חוקית, המאפיינים הבאים מחזיקים:

  1. כל מזהה עובד נכלל בקבוצת העובדים שצוינה בבקשה.
  2. כל מזהה תפקיד שהוקצה לעובד נכלל בקבוצת מזהי התפקידים של העובד הנתון.
  3. כל מזהה משמרת נכלל בקבוצת השינויים שצוינה בבקשה.
  4. כל מזהה משמרת אינו אחד ממזהי המשמרות שלא ניתן להקצות לעובד הנתון.
  5. עובד לא יוקצה אף פעם לשתי משמרות חופפות.
  6. לגבי לוח הזמנים הנתון, אף אחת מהמגבלות או הבקשות עם רמת העדיפות PRIORITY_MANDATORY לא מופרת.

אם הפעולה בוצעה ללא שגיאות, גוף התשובה מכיל נתונים במבנה הבא:

ייצוג JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
שדות
requestId

string

מזהה הבקשה שאליה משויכת התגובה הזו.

solutionStatus

enum (SolutionStatus)

הסטטוס של הפתרון שהוחזר. אם הפתרון אינו FEASIB או אופטימלי, השדות האחרים בקובץ הזה עלולים להיות ריקים. אם הסטטוס הוא NOT_SOLVED_DEADLINE_EXCEEDED, הגעת למגבלת הזמן בלי למצוא פתרון ישים או לקבוע אם קיים פתרון בר-ביצוע. בקשות עשויות להיות לא אפשריות אם לא תמלאו את כל האילוצים של רמת העדיפות MANDATORY.

shiftAssignments[]

object (ShiftAssignment)

רשימה של כל המטלות. כל ShiftAssignment מציין עובד, המשמרת שאליה הוא מוקצה והתפקיד שהוא מוקצה לבצע עבור המשמרת הזו.

statusMessage

string

אם solutionStatus לא אופטימלי, השדה הזה עשוי להכיל מידע נוסף על הפותר.

SolveParameters

פרמטרים ששולטים בפתרון יחיד של בעיית תזמון משמרת.

ייצוג JSON
{
  "timeLimit": string
}
שדות
timeLimit

string (Duration format)

משך הזמן המקסימלי שהפותר צריך להקדיש לבעיה. אם המדיניות לא מוגדרת, ברירת המחדל היא דקה אחת.

הערך הזה הוא לא מגבלה קשיחה, והוא לא כולל את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי לחרוג מעט מהערך הזה.

משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-'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

מזהי תפקידים שהעובד הזה יכול לבצע. יש לציין לפחות תפקיד אחד. כשעובד מוקצה למשמרת, גם הוא מוקצה לתפקיד אחד מהרשימה הזו. אפשר להקצות לעובד תפקידים שונים במהלך חלון הזמנים לקביעת פגישות.

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. מזהה משמרת יכול להופיע בבקשת תזמון אחת לכל היותר עבור העובד הזה. רמת העדיפות המוגדרת כברירת מחדל לכל אחת מהבקשות האלה היא PRIORITY_LOW. אפשר לקרוא פרטים נוספים ב'טיפוסים בני מנייה (enum) של Priority'.

hourlyContract

object (HourlyContract)

חוזה שמצוינים בו תעריפים רגילים ותעריפים שעתיים לעובד.

ShiftPreference

העדפה מספרית למזהה שינוי מסוים.

ייצוג 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. מכיוון שעשויות להיות אילוצים סותרים, לא תמיד אפשר לעמוד בכל האילוצים. לכן, לכל סוג של אילוץ יש עדיפות (שניתנת למשתמש או כברירת מחדל) לגבי החשיבות היחסית של כל המגבלות שמוצגות בלוח זמנים מלא.

טיפוסים בני מנייה (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": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
שדות
priority

enum (Priority)

רמת העדיפות של אילוץ המשאב הזה. עדיפות ברירת המחדל לכל מגבלות המשאבים היא PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

כמות המשאב שנעשה בה שימוש ב-Shift. לדוגמה, אם האילוץ הזה חל על מספר השעות המינימלי והמקסימלי של עובד בשבוע מסוים, המפה הזו תכלול את המשמרות שהתרחשו באותו שבוע ואת משך המשמרת בשעות.

אובייקט שמכיל רשימה של "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

האם העובד עובד או לא.

טיפוסים בני מנייה (enums)
WORK_STATUS_UNSPECIFIED סטטוס העבודה לא ידוע.
STATUS_WORK סטטוס שמייצג עובד עובד.
STATUS_NOT_WORK סטטוס שמייצג עובד שאינו עובד.

HourlyContract

ציון תעריף בסיסי לשעה, הפרשי שערים ומכפילים בשעות נוספות כדי לקבוע את התגמול לעובד. חשוב לשים לב לתקנות במקומות שונים שעשויים לחייב חישוב שונה של תגמול על שעות נוספות. הפותר חישב את הפיצוי על הזמן הנוסף כדי למזער proxy של העלות הכוללת או כדי לעמוד בתקציב (מידע נוסף מופיע כאן: 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 לשעה, ייצוג האב הוא: 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 שעות או 7 תקופות עוקבות של 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:10, 10: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 אחד לכל היותר. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהדרישות היא PRIORITY_MANDATORY. האילוצים האלה מפרים את האילוצים האלה אם בכל שלב בחלון הזמן שנבחר מוקצים מספר עובדים אחד (targetEmployeeCount) לתפקידים שצוינו.

skillRequirements[]

object (SkillRequirement)

מספר העובדים הנדרשים עם הכישורים שצוינו ומוקצים למשמרות במהלך חלון הזמן. יש לספק skill_requirement אחד לכל היותר לכל מזהה מיומנות. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהדרישות היא 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

סטטוס הפתרון (כלומר, לוח זמנים) שסופק בתגובת הפותר.

טיפוסים בני מנייה (enums)
SOLUTION_STATUS_UNSPECIFIED לא צוין סטטוס לתגובה.
FEASIBLE לוח הזמנים שמוחזר הוא אפשרי, אבל ייתכן שהוא לא יהיה אופטימלי.
OPTIMAL התזמון שמוחזר הוא אופטימלי.
INFEASIBLE לא קיים לוח זמנים בר-ביצוע עבור המגבלות הנתונים. הפותר עשוי להחזיר את הערך הזה אם לא ניתן למלא קבוצת משנה של האילוצים עם רמת העדיפות PRIORITY_MANDATORY.
NOT_SOLVED לא נמצא לוח זמנים.
NOT_SOLVED_DEADLINE_EXCEEDED לא נמצא לוח זמנים במסגרת מגבלת הזמן שצוינה.