Method: scheduling.solveShiftScheduling

Es wird ein Problem mit der festen Schichtplanung aus den angegebenen SolveShiftSchedulingRequest gelöst, indem Mitarbeiter den Schichten zugewiesen werden, sodass die Planungseinstellungen der Mitarbeitenden maximiert und Verstöße gegen Planungseinschränkungen minimiert werden.

HTTP-Anfrage

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

Die URL verwendet die Syntax der gRPC-Transcodierung.

Anfragetext

Der Anfragetext enthält Daten mit folgender Struktur:

JSON-Darstellung
{
  "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)
    }
  ]
}
Felder
requestId

string

Problem oder Anfrage-ID

solveParameters

object (SolveParameters)

Parameter zur Steuerung einer einzelnen Lösung des Problems.

employees[]

object (Employee)

Für alle verfügbaren Mitarbeiter müssen Termine geplant werden.

shifts[]

object (Shift)

Alle Schichten bilden den Zeitplan.

coverageRequirements[]

object (CoverageRequirement)

Abdeckungsanforderungen für den gesamten Planungszeitraum. Diese geben die Anzahl der Mitarbeitenden an, die entweder während eines Zeitfensters oder einer Liste von Schicht-IDs die jeweilige Rolle ausüben oder eine bestimmte Fähigkeit besitzen müssen. Alle Abdeckungsanforderungen müssen entweder mit Zeitfenstern oder einer Liste mit Schicht-IDs angegeben werden (nicht mit beidem). Die Zeitfenster (falls angegeben) für die Abdeckungsanforderungen dürfen sich nicht für jeden Standort überschneiden. Die standardmäßige Prioritätsstufe für jede dieser Einschränkungen ist PRIORITY_MANDATORY für die Rollenanforderungen und PRIORITY_LOW für die Kompetenzanforderungen. Weitere Informationen finden Sie in der Priority-Enum.

roleIds[]

string

Liste aller möglichen Rollen in der Belegschaft. Jedem Mitarbeiter muss mindestens eine Rolle zugewiesen werden, die ihm für eine Schicht zugewiesen werden kann. Eine Rolle bezieht sich auf einen bestimmten Arbeitsauftrag während einer Schicht (d. h. registrierte Pflegefachkraft, Chefkoch, Kellner usw.). Wenn ein Mitarbeiter einer Schicht zugewiesen wird, erhält er auch eine bestimmte Rolle.

skillIds[]

string

Liste aller möglichen Fähigkeiten in der Belegschaft. Eine Kompetenz bezieht sich auf alle zusätzlichen Qualifikationen, die ein Mitarbeiter möglicherweise hat, die nicht zu einer bestimmten zuweisbaren Stelle gehören (z. B. Zertifizierungen, gesprochene Sprachen usw.). Diese Liste kann leer sein. Wenn eine mitarbeitende Person einer Schicht zugewiesen wird, muss sie alle für diese Schicht erforderlichen Fähigkeiten erfüllen.

locationIds[]

string

Liste aller möglichen Standorte für die Schichten im Zeitplan. Diese Liste kann leer sein. Die Angabe verschiedener Standorte kann nützlich sein, wenn beispielsweise eine Pflegekraft für mehrere Pflegekräfte in einem Krankenhaus mehrere Pflegekräfte in einem Krankenhaus einplanen möchte oder wenn beispielsweise eine Hotelleitung Mitarbeitende in mehreren Hotels einplanen möchte.

budgetRequirements[]

object (BudgetRequirement)

Budgetspezifikation für das Planungsproblem. Die standardmäßige Prioritätsstufe für jede dieser Anforderungen ist PRIORITY_LOW. Weitere Informationen finden Sie in der Priority-Enum.

assignmentsHint[]

object (ShiftAssignment)

Schichten Sie Aufgaben auf, um sie als vorläufige Lösung (Lösungshinweis) für das Planungsproblem zu verwenden. Zuweisungshinweise werden ignoriert, wenn die Zuweisung einer nicht zuweisbaren Schicht oder einer Planungsanfrage widerspricht.

Antworttext

Antwort für die Mitarbeiterplanungs-API. Für jede Antwort ist shiftAssignments leer, wenn der zurückgegebene solutionStatus NOT_SOLVED_DEADLINE_EXCEEDED oder INFEASIBLE ist. Wenn solutionStatus OPTIMAL oder FEASIBLE ist, wird in shiftAssignments eine gültige Schichtzuweisung zurückgegeben. Für eine gültige Schichtzuweisung gelten die folgenden Eigenschaften:

  1. Jede Mitarbeiter-ID ist in der Gruppe von Mitarbeitern enthalten, die in der Anfrage angegeben sind.
  2. Jede dem Mitarbeiter zugewiesene Rollen-ID ist in den Rollen-IDs des jeweiligen Mitarbeiters enthalten.
  3. Jede Schicht-ID ist in der Gruppe von Verschiebungen enthalten, die in der Anfrage angegeben sind.
  4. Jede Schicht-ID gehört nicht zu den nicht zuweisbaren Schicht-IDs des jeweiligen Mitarbeiters.
  5. Ein Mitarbeiter wird niemals zwei überlappenden Schichten zugewiesen.
  6. Für den angegebenen Zeitplan wird keine der Einschränkungen oder Anfragen mit der Prioritätsstufe PRIORITY_MANDATORY verletzt.

Wenn der Vorgang erfolgreich ist, enthält der Antworttext Daten mit folgender Struktur:

JSON-Darstellung
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Felder
requestId

string

Die ID der Anfrage, mit der diese Antwort verknüpft ist.

solutionStatus

enum (SolutionStatus)

Status der zurückgegebenen Lösung. Wenn die Lösung nicht FALSCH oder OPTIMAL ist, sind andere Felder in diesem Protokoll möglicherweise leer. Wenn der Status NOT_SOLVED_DEADLINE_EXCEEDED lautet, wurde das Zeitlimit erreicht, ohne dass eine praktikable Lösung gefunden oder festgestellt werden konnte, ob eine praktikable Lösung existiert. Anfragen sind möglicherweise nicht realisierbar, wenn nicht alle Einschränkungen der Prioritätsebene MANDATORY erfüllt werden können.

shiftAssignments[]

object (ShiftAssignment)

Liste aller Zuweisungen. Jede ShiftAssignment gibt einen Mitarbeiter, die Schicht, die ihm zugewiesen ist, und die Rolle an, die ihm in dieser Schicht zugewiesen wird.

statusMessage

string

Wenn solutionStatus nicht optimal ist, enthält dieses Feld möglicherweise zusätzliche Informationen zum Matherechner.

SolveParameters

Parameter, die eine Lösung für das Schichtplanungsproblem einleiten.

JSON-Darstellung
{
  "timeLimit": string
}
Felder
timeLimit

string (Duration format)

Die maximale Zeit, die der Matherechner für das Problem aufwenden sollte. Wenn nichts festgelegt ist, wird standardmäßig 1 Minute verwendet.

Dieser Wert ist kein festes Limit und berücksichtigt nicht den Kommunikationsaufwand. Die erwartete Latenz zur Lösung des Problems kann diesen Wert leicht überschreiten.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

Mitarbeiter

Eine mitarbeitende Person, die eingeplant werden soll.

JSON-Darstellung
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
Felder
id

string

Eindeutige ID, die diesem Mitarbeiter zugewiesen ist.

roleIds[]

string

Rollen-IDs, die dieser Mitarbeiter ausführen kann. Es muss mindestens eine Rolle angegeben sein. Wenn ein Mitarbeiter einer Schicht zugewiesen wird, erhält er auch nur eine Rolle aus dieser Liste. Dem Mitarbeiter können während des Planungszeitraums verschiedene Rollen zugewiesen werden.

skillIds[]

string

Skill-IDs, die dieser Mitarbeiter besitzt. Diese Liste kann leer sein. Wenn eine Mitarbeitende einer Schicht zugewiesen wird, verwendet sie eine Teilmenge der hier aufgeführten Fähigkeiten, um den Kompetenzbedarf während der zugewiesenen Schicht abzudecken.

shiftPreferences[]

object (ShiftPreference)

Schichteinstellungen dieses Mitarbeiters. Die hier angegebenen Schichten stellen Schichten dar, denen die Mitarbeitenden vorzugsweise während des Planungszeitraums zugewiesen werden würden. Die in shiftPreferences angegebenen Schicht-IDs müssen eindeutig sein. Der Solver versucht, die Summe der ShiftPreference.preference-Werte aller erfüllten shiftPreferences-Werte zu maximieren.

schedulingConstraints[]

object (SchedulingConstraint)

Liste mit Terminbeschränkungen für diesen Mitarbeiter. Die Standardprioritätsstufe für jede dieser Einschränkungen ist PRIORITY_MEDIUM. Weitere Informationen finden Sie in der Priority-Enum.

resourceConstraints[]

object (ResourceConstraint)

Zusätzliche Planungseinschränkungen, die in schedulingConstraints nicht angegeben sind, können hier zu resourceConstraints hinzugefügt werden. Ein ResourceConstraint ist eine abstraktere Darstellung für das Begrenzen von Ressourcen für einen Mitarbeiter. Die Standardprioritätsstufe für jede dieser Einschränkungen ist PRIORITY_MEDIUM. Weitere Informationen finden Sie in der Priority-Enum.

shiftRequests[]

object (ShiftRequest)

Liste der Schichtanfragen für den Mitarbeitenden. Es kann sein, dass ein Mitarbeiter bestimmten Schichten zugewiesen wird oder nicht. Alle festen Planungszuweisungen für den Mitarbeiter können durch eine ShiftRequest mit der Priorität PRIORITY_MANDATORY dargestellt werden. Eine Schicht-ID darf höchstens in einer Planungsanfrage für diesen Mitarbeiter enthalten sein. Die Standardprioritätsstufe für jede dieser Anfragen ist PRIORITY_LOW. Weitere Informationen finden Sie in der Priority-Enum.

hourlyContract

object (HourlyContract)

Vertrag, der regelmäßige Stundensätze und Überstunden für die Mitarbeitenden festlegt.

ShiftPreference

Eine numerische Einstellung für eine bestimmte Schicht-ID.

JSON-Darstellung
{
  "shiftId": string,
  "preference": integer
}
Felder
shiftId

string

Schicht-ID, für die die Präferenz angegeben ist.

preference

integer

Höhere Präferenzwerte deuten auf eine bessere Verschiebung hin.

SchedulingConstraint

Spezifische Terminbeschränkung für einen bestimmten Mitarbeiter. Die angegebene Einschränkung wird nur während des angegebenen Intervalls [startDateTime, endDateTime) angewendet.

JSON-Darstellung
{
  "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.
}
Felder
priority

enum (Priority)

Prioritätsebene für diese Planungseinschränkung. Die Standardpriorität für alle Planungseinschränkungen ist PRIORITY_MEDIUM.

startDateTime

object (DateTime)

Die Startzeit, ab der diese Planungseinschränkung gilt (einschließlich).

endDateTime

object (DateTime)

Die Endzeit, ab der diese Planungseinschränkung gilt (ausgenommen).

Union-Feld type. Die Art der angegebenen Einschränkung. Jede Einschränkung wird nur innerhalb des oben angegebenen Zeitfensters angewendet. Für type ist nur einer der folgenden Werte zulässig:
minimumMinutes

integer

Die Mindestanzahl der Minuten, die der Mitarbeiter arbeiten kann. Wenn der Mitarbeitenden einer Schicht zugewiesen ist, die sich (vollständig oder teilweise) mit dem Zeitfenster überschneidet, wird die Anzahl der Minuten, in denen sich die Schicht mit dem Zeitfenster überschneidet, in diesen Zählwert einbezogen.

maximumMinutes

integer

Maximale Anzahl der Minuten, die der Mitarbeiter in diesem Zeitfenster arbeiten kann. Wenn der Mitarbeitenden einer Schicht zugewiesen ist, die sich (vollständig oder teilweise) mit dem Zeitfenster überschneidet, wird die Anzahl der Minuten, in denen sich die Schicht mit dem Zeitfenster überschneidet, in diesen Zählwert einbezogen.

minimumConsecutiveWorkDays

integer

Die Mindestanzahl an aufeinanderfolgenden Tagen, die der Mitarbeiter arbeiten kann. Eine mitarbeitende Person arbeitet an einem bestimmten Tag, wenn sie einer Schicht zugewiesen ist, die an diesem Tag beginnt. Alle Schichten, denen die Mitarbeitenden zugewiesen sind und die innerhalb des Zeitfensters beginnen, werden dabei berücksichtigt.

maximumConsecutiveWorkDays

integer

Maximale Anzahl aufeinanderfolgender Tage, an denen der Mitarbeiter arbeiten kann. Eine mitarbeitende Person arbeitet an einem bestimmten Tag, wenn sie einer Schicht zugewiesen ist, die an diesem Tag beginnt. Alle Schichten, denen die Mitarbeitenden zugewiesen sind und die innerhalb des Zeitfensters beginnen, werden dabei berücksichtigt.

minimumShiftCount

integer

Die Mindestanzahl der Schichten, die der Mitarbeiter bearbeiten kann. Alle Schichten, die der Mitarbeitenden zugewiesen sind und die sich vollständig mit dem Zeitfenster überlappen, werden dabei berücksichtigt.

maximumShiftCount

integer

Maximale Anzahl von Schichten, die der Mitarbeiter bearbeiten kann. Alle Schichten, die der Mitarbeitenden zugewiesen sind und die sich vollständig mit dem Zeitfenster überlappen, werden dabei berücksichtigt.

minimumRestMinutes

integer

Mindestanzahl der Minuten, die die Mitarbeitende nach dem Ende einer Schicht ausruhen müssen, bevor sie einer anderen Schicht zugewiesen wird. Diese Einschränkung gilt für jedes Schichtpaar, das vollständig in [startDateTime, endDateTime] enthalten ist.

Priorität

Die Prioritätsstufe für jede Einschränkung im Zeitplan eines Mitarbeiters oder die Abdeckungsanforderungen. Dazu gehören SchedulingConstraint, ResourceConstraint, ShiftRequest und CoverageRequirement. Da widersprüchliche Einschränkungen bestehen können, ist es nicht immer möglich, alle Einschränkungen zu erfüllen. Daher hat jede Art von Einschränkung eine Priorität (vom Nutzer oder einem Standardwert vorgegeben), die den Solver über die relative Bedeutung aller Einschränkungen informiert, die einem vollständigen Zeitplan zugewiesen sind.

Enums
PRIORITY_UNSPECIFIED Unbekannte Prioritätsstufe.
PRIORITY_LOW Die niedrigste Prioritätsstufe. Einschränkungen mit dieser Priorität sind weniger wichtig als die anderen Einschränkungen. Sie sind die ersten, die gegen die Richtlinien verstoßen, wenn keine durchführbare Lösung gefunden werden kann.
PRIORITY_MEDIUM Prioritätsebene „Medium“. Einschränkungen mit dieser Priorität sind wichtiger als Einschränkungen mit der Priorität PRIORITY_LOW, aber weniger wichtig als Einschränkungen mit der Priorität PRIORITY_HIGH. Wenn nach der Lockerung aller Einschränkungen mit der Priorität PRIORITY_LOW keine durchführbare Lösung gefunden wird, werden Einschränkungen mit der Priorität PRIORITY_MEDIUM als Nächstes auf den Verstoß geprüft.
PRIORITY_HIGH Die höchste Prioritätsstufe. Einschränkungen mit dieser Prioritätsebene sind am wichtigsten. Sie sind die letzten, für die Verstöße in Betracht gezogen werden, wenn nach der Lockerung der Einschränkungen der niedrigeren Prioritätsstufen keine praktikable Lösung gefunden werden kann.
PRIORITY_MANDATORY Prioritätsebene, die etwas darstellt, das vom Solver nicht verletzt werden kann. Wenn der Solver SolutionStatus.INFEASIBLE zurückgibt, kann dies an zu vielen PRIORITY_MANDATORY-Einschränkungen liegen.

ResourceConstraint

Eine allgemeine Einschränkung, die die Menge einer bestimmten von einem Mitarbeiter verwendeten „Ressource“ begrenzt. Dies ist eine abstrakte Version des spezifischeren SchedulingConstraint-Objekts, das für Nutzer flexibler ist. Viele Planungseinschränkungen, die nicht in der SchedulingConstraint.type festgelegt werden können, können stattdessen mit dieser Nachricht angegeben werden.

JSON-Darstellung
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Felder
priority

enum (Priority)

Prioritätsebene dieser Ressourceneinschränkung. Die Standardpriorität für alle Ressourceneinschränkungen ist PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Menge der von den Schichten genutzten Ressourcen. Wenn sich diese Einschränkung beispielsweise auf die minimalen und maximalen Arbeitsstunden eines Mitarbeiters in einer bestimmten Woche bezieht, dann enthält diese Karte die in dieser Woche stattfindenden Schichten sowie die Dauer jeder Schicht in Stunden.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Minimale Ressourcennutzung, damit eine Ressourceneinschränkung erfüllt werden kann.

maximumResourceUsage

number

Maximale Ressourcennutzung für eine zu erfüllende Ressourceneinschränkung.

ShiftRequest

Der Antrag eines Mitarbeiters, einer bestimmten Schicht zugewiesen zu werden oder nicht.

JSON-Darstellung
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Felder
priority

enum (Priority)

Prioritätsstufe dieser Planungsanfrage. Die Standardpriorität für alle Planungsanfragen ist PRIORITY_LOW.

shiftIds[]

string

Die Schicht-IDs der Planungsanfrage.

type

enum (WorkStatus)

Anfragetyp, z.B. ob die Anfrage der Gruppe von Schichten zugewiesen wird oder nicht.

WorkStatus

Ob ein Mitarbeiter arbeitet oder nicht.

Enums
WORK_STATUS_UNSPECIFIED Unbekannter Arbeitsstatus.
STATUS_WORK Status, der einen berufstätigen Mitarbeiter darstellt.
STATUS_NOT_WORK Status, der einen nicht erwerbstätigen Mitarbeiter darstellt.

HourlyContract

Gibt einen Basisstundensatz, Ratendifferenzen und Multiplikatoren für Überstunden an, um die Vergütung für einen Mitarbeiter zu bestimmen. Beachten Sie, dass Vorschriften an verschiedenen Orten eine andere Berechnung der Überstundenvergütung erfordern können. Der Solver schätzt die Überstundenvergütung, um einen Proxy der Gesamtkosten entweder zu minimieren oder ein Budget einzuhalten (siehe BudgetRequirement). Er ist nicht als Tool zur Berechnung der Gehaltsabrechnung gedacht.

JSON-Darstellung
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Felder
baseHourlyRate

number

Die Vergütung für die Arbeit in einer Nicht-Überstunden-Arbeitszeit. Wenn für den Mitarbeiter mehrere Gebühren gelten, werden Ratendifferenzen relativ zu diesem Basisstundensatz angewendet. Wenn es mehrere Preise gibt, sollte außerdem der Basisstundensatz dem Mindestwert dieser Preise entsprechen.

hourlyRateShiftDifferentials

map (key: string, value: number)

Der Stundensatzunterschied, der zusätzlich zum baseHourlyRate berechnet wird. Wenn der Basisstundenpreis beispielsweise 30 $/Std. beträgt, „shift_1“ zu einem Preis von 40 $/Std. und „shift_2“ zu einem Preis von 45 $/Std. bezahlt wird, dann lautet die Proto-Darstellung: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Eine Liste aller Zeiträume, für die Überstunden berechnet werden müssen. Diese Zeiträume dürfen sich nicht überschneiden.

OvertimePeriod

Ein fester und regelmäßig wiederkehrender Zeitraum (in der Regel 168 Stunden oder sieben aufeinanderfolgende 24-Stunden-Zeiträume), in dem die Höhe der Überstunden vergütet wird. Für jeden Zeitraum gibt es einen Überzeitmultiplikator (z.B. 1.5) bezogen auf die baseHourlyRate und eine Beschränkung der Anzahl von Stunden, die als normale Arbeit (keine Überstunden) gelten. Jede Verschiebung, die sich mit den Zeitfenstern startDateTime (einschließlich) und endDateTime (ausschließlich) überschneidet, wird auf die Gesamtzahl der in dem Zeitraum gearbeiteten Stunden angerechnet. Wenn es sich um eine unvollständige Überschneidung handelt, werden nur die sich überschneidenden Stunden gezählt.

JSON-Darstellung
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Felder
overtimeMultiplier

number

Multiplikator zur Berechnung der Überstundenstundenrate (muss größer oder gleich 1,0 sein). Der Stundensatz für die Überstunden wird normalerweise mit baseHourlyRate * overtimeMultiplier berechnet. Wenn über hourlyRateShiftDifferentials mehrere Preise angegeben sind, schätzt der Matherechner den Stundensatz der Überstunden mit einem einfachen Durchschnitt der Preise, die während der Überstunden gelten. Hinweis: Vorschriften an verschiedenen Orten können eine andere Berechnung der Überstundenvergütung erfordern. Der Solver schätzt die Überstundenvergütung, um entweder einen Proxy der Gesamtkosten zu minimieren oder ein Budget einzuhalten. Er ist jedoch nicht als Tool zur Berechnung der Gehaltsabrechnung gedacht.

startDateTime

object (DateTime)

Beginn für die Verlängerung. Wenn sich eine Schicht diesen Zeitpunkt überschneidet, werden die Stunden einer solchen Schicht ab startDateTime gezählt.

endDateTime

object (DateTime)

Endzeit für die Verlängerung. Wenn sich eine Schicht diesen Zeitpunkt überschneidet, werden die Stunden einer solchen Schicht bis zu endDateTime gezählt.

maximumRegularHours

number

Maximale Anzahl der Arbeitsstunden, die regelmäßig (ohne Überstunden) bezahlt werden. Diese Menge muss positiv sein.

Shift

Eine Schicht ist ein festes Zeitfenster, in dem Mitarbeitende arbeiten können.

JSON-Darstellung
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Felder
id

string

Eindeutige ID, die dieser Schicht zugewiesen ist.

locationId

string

ID des Standorts, an dem diese Schicht durchgeführt wird. Dieses Feld kann leer sein.

startDateTime

object (DateTime)

Der Beginn der Schicht (einschließlich).

endDateTime

object (DateTime)

Das Ende der Schicht (ausschließlich). Derzeit sind mit dem Solver nur Schichten möglich, die weniger als 24 Stunden dauern.

breakRules[]

object (BreakRule)

Eine Liste der Unterbrechungsregeln, die während der Schicht auftreten. Mitarbeitern, die diese Schicht machen, wird nach break_rule eine Pause eingeräumt, in der sie die Nachfrage nach der Rolle, die sie erfüllen, nicht decken. Jedes BreakRule-Zeitfenster muss vollständig im Zeitfenster dieser Schicht enthalten sein.

BreakRule

Eine Regel, die festlegt, wann und wie lange eine Pause innerhalb einer Schicht beginnen kann. Die Liste aller möglichen Unterbrechungen, die berücksichtigt werden, wird in Schritten von ruleIncrementMinutes ermittelt. Wenn eine Unterbrechungsregel beispielsweise eine 30-minütige Pause vorgibt, die zwischen 10:00 und 11:00 beginnen kann, und das Regelinkrement 20 Minuten beträgt, werden folgende Pausen berücksichtigt: [10:00, 10:30], [10:20, 10:50], [10:40, 11:1,1.1

JSON-Darstellung
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Felder
earliestStartTime

object (DateTime)

Der früheste Beginn der Unterbrechung (einschließlich). Es können nur hours und minutes festgelegt werden.

latestStartTime

object (DateTime)

Spätester Beginn der Pause (einschließlich). Es können nur hours und minutes festgelegt werden.

durationMinutes

integer

Dauer der Unterbrechung in Minuten.

ruleIncrementMinutes

integer

[Optional] Zeitabschnitt in Minuten für alle Pausen, die in dieser Regel berücksichtigt werden können. Enthält standardmäßig den Wert durationMinutes, wenn nichts anderes festgelegt wird.

CoverageRequirement

Eine Abdeckungsanforderung gibt die Anzahl der Mitarbeitenden an, die in einem bestimmten Zeitraum und an einem bestimmten Standort für eine Reihe von Rollen und/oder Fähigkeiten benötigt werden. DateTime-Intervalle an einem bestimmten Standort dürfen sich nicht überschneiden. Alternativ kann eine Liste mit Schicht-IDs anstelle eines Zeitfensters und eines Ortes bereitgestellt werden. Nur Mitarbeitende, die der jeweiligen Rolle zugewiesen werden können oder über die entsprechende Fähigkeit verfügen, können diese Anforderung erfüllen.

Für eine bestimmte Rolle und/oder Kompetenz ist die Deckungsanforderung erfüllt, wenn mindestens targetEmployeeCount Mitarbeiter zu jedem Zeitpunkt im Zeitfenster (oder für jede Schicht in shiftIds) arbeiten. Im Gegensatz dazu wird die Deckungsanforderung zu irgendeinem Zeitpunkt im Zeitfenster (oder für eine der Schichten in shiftIds) von weniger als targetEmployeeCount Mitarbeitern in diesem Zeitfenster gearbeitet. Es wird zwar mehr Arbeitskräfte als die targetEmployeeCount benötigt, um die Anforderung zu erfüllen, aber der Rechner reduziert den Personalbedarf.

JSON-Darstellung
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
Felder
startDateTime

object (DateTime)

Die Startzeit für die Abdeckungsanforderung (einschließlich). Wenn festgelegt, muss shiftIds leer sein.

endDateTime

object (DateTime)

Das Ende für die Abdeckungsanforderung (ausschließlich). Wenn festgelegt, muss shiftIds leer sein.

locationId

string

Ort, an dem die Mitarbeitenden gebraucht werden. shiftIds ist nicht leer, das Feld muss leer sein.

shiftIds[]

string

Wenn festgelegt, werden die Rollen- und Qualifikationsanforderungen einzeln auf jede Schicht-ID in dieser Liste angewendet. Wenn die Shift-IDs nicht leer sind, müssen startDateTime, endDateTime und locationId leer sein.

roleRequirements[]

object (RoleRequirement)

Erforderliche Anzahl von Mitarbeitern, die den angegebenen Rollen während des Zeitfensters zugewiesen werden müssen. Für jede Rollen-ID darf höchstens eine role_requirement angegeben werden. Die standardmäßige Prioritätsstufe für jede der Anforderungen ist PRIORITY_MANDATORY. Diese Einschränkungen werden verletzt, wenn während des Zeitfensters weniger als targetEmployeeCount Mitarbeiter den angegebenen Rollen zugewiesen sind.

skillRequirements[]

object (SkillRequirement)

Erforderliche Anzahl von Mitarbeitenden mit den angegebenen Fähigkeiten, die während des Zeitfensters den Schichten zugewiesen sind. Für jede Kompetenz-ID darf höchstens eine skill_requirement angegeben werden. Die standardmäßige Prioritätsstufe für jede der Anforderungen ist PRIORITY_LOW. Diese Einschränkungen werden verletzt, wenn weniger als targetEmployeeCount Mitarbeiter zu einem beliebigen Zeitpunkt während des Zeitfensters die entsprechenden Fähigkeiten besitzen.

RoleRequirement

Erforderliche Anzahl von Mitarbeitern, die der angegebenen Rolle während des Zeitfensters zugewiesen werden müssen.

JSON-Darstellung
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Felder
roleId

string

Rollen-ID für die Anforderung.

targetEmployeeCount

integer

Gewünschte Anzahl von Mitarbeitenden, die der Rolle während des Zeitfensters zugewiesen werden.

priority

enum (Priority)

Prioritätsebene für diese Anforderungseinschränkung. Die Standardpriorität für alle Ressourceneinschränkungen ist PRIORITY_MANDATORY.

SkillRequirement

Erforderliche Anzahl von Mitarbeitenden, die während des Zeitfensters arbeiten und über die angegebene Fähigkeit verfügen.

JSON-Darstellung
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Felder
skillId

string

Skill-ID für die Anforderung.

targetEmployeeCount

integer

Gewünschte Anzahl von Mitarbeitenden mit der angegebenen Fähigkeit, die während des Zeitfensters arbeiten.

priority

enum (Priority)

Prioritätsebene für diese Anforderungseinschränkung. Die Standardpriorität für alle Ressourceneinschränkungen ist PRIORITY_LOW.

BudgetRequirement

Budgetanforderungen für ein bestimmtes Intervall.

JSON-Darstellung
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Felder
totalBudget

number

Gesamtbudget für das angegebene Intervall. Bei einer Priorität von PRIORITY_MANDATORY muss ein Gesamtbudget angegeben werden.

Wenn totalBudget nicht festgelegt ist, werden die Gesamtkosten des Zeitplans gemäß der angegebenen priority minimiert. Wenn beispielsweise die priority für das Budget PRIORITY_MEDIUM ist, minimiert der Solver die Kosten, bevor ein Einschränkungsverstoß mit der Priorität PRIORITY_LOW reduziert wird.

startDateTime

object (DateTime)

Beginn, ab dem dieses Budget angewendet wird. Wenn keine Startzeit angegeben ist, wird sie auf die früheste Startzeit aller gegebenen Schichten festgelegt.

endDateTime

object (DateTime)

Endzeit, in der dieses Budget angewendet wird. Wenn keine Endzeit angegeben ist, wird sie auf das letzte Ende aller gegebenen Schichten festgelegt.

priority

enum (Priority)

Priorität für die Erfüllung der Budgetanforderungen während des angegebenen Zeitfensters. Die Standardpriorität ist PRIORITY_LOW. Wenn die Priorität auf PRIORITY_MANDATORY festgelegt ist, muss totalBudget festgelegt werden.

Hinweis: Wenn diese Priorität höher als andere Einschränkungsprioritäten ist und wenn totalBudget eng gefasst ist, könnte der resultierende Zeitplan erheblich gegen die Mitarbeitereinschränkungen oder die Abdeckungsanforderungen verstoßen.

ShiftAssignment

Ein Mitarbeiter, der eine Schichtzuweisung erhält.

JSON-Darstellung
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Felder
employeeId

string

Die Mitarbeiter-ID, die zugewiesen wird.

shiftId

string

Schicht-ID, die dem Mitarbeiter zugewiesen ist.

roleId

string

Rollen-ID, der der Mitarbeiter für die Schicht zugewiesen ist.

breaks[]

object (Break)

Liste der Pausen für diese Schichtzuweisung.

Pause

Ein Zeitraum, in dem ein Mitarbeiter seine Arbeit während einer Schicht unterbricht.

JSON-Darstellung
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Felder
startDateTime

object (DateTime)

Der Beginn einer Pause.

durationMinutes

integer

Dauer der Unterbrechung in Minuten.

SolutionStatus

Lösungsstatus (d.h. ein Zeitplan), der in der Antwort eines Solver angegeben wird.

Enums
SOLUTION_STATUS_UNSPECIFIED Nicht angegebener Status für die Antwort.
FEASIBLE Der zurückgegebene Zeitplan ist möglich, aber möglicherweise nicht optimal.
OPTIMAL Der zurückgegebene Zeitplan ist optimal.
INFEASIBLE Für die gegebenen Einschränkungen ist kein durchführbarer Zeitplan vorhanden. Der Solver gibt diesen Wert möglicherweise zurück, wenn eine Teilmenge der Einschränkungen mit der Prioritätsstufe PRIORITY_MANDATORY nicht erfüllt werden kann.
NOT_SOLVED Es wurde kein Zeitplan gefunden.
NOT_SOLVED_DEADLINE_EXCEEDED Es wurde kein Zeitplan innerhalb des angegebenen Zeitlimits gefunden.