Method: scheduling.solveShiftScheduling

Löst ein festes Problem bei der Schichtplanung aus dem gegebenen SolveShiftSchedulingRequest, indem die Mitarbeitenden Schichten so zugewiesen werden, dass die Planungseinstellungen maximiert und Verstöße gegen Planungseinschränkungen werden minimiert.

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, mit denen eine einzelne Lösung des Problems gesteuert wird.

employees[]

object (Employee)

Alle verfügbaren Mitarbeiter müssen eingeplant werden.

shifts[]

object (Shift)

Alle Schichten, um den Zeitplan zu bilden.

coverageRequirements[]

object (CoverageRequirement)

Abdeckungsanforderungen für den gesamten Planungshorizont Diese geben die Anzahl der Mitarbeitenden an, die entweder während eines bestimmten Zeitfensters oder einer Liste von Schicht-IDs jede Rolle ausüben oder über eine Fähigkeit verfügen müssen. Alle Abdeckungsanforderungen müssen entweder mit Zeitfenstern oder mit einer Liste von Schicht-IDs angegeben werden (aber nicht mit beidem). Zeitfenster für die Abdeckungsanforderungen (falls angegeben) dürfen sich für jeden Standort nicht ü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, der er für eine Schicht zugewiesen werden kann. Eine Rolle bezieht sich auf einen bestimmten Arbeitsauftrag während einer Schicht (z. B. registrierte Krankenschwester, Chefkoch, Kellner usw.). Wenn ein Mitarbeiter einer Schicht zugewiesen wird, wird ihm auch eine bestimmte Rolle zugewiesen.

skillIds[]

string

Liste aller möglichen Fähigkeiten in der gesamten Belegschaft. Eine Kompetenz bezieht sich auf alle zusätzlichen Qualifikationen, die Mitarbeitende möglicherweise haben und die nicht mit einer bestimmten zuweisbaren Tätigkeit in Zusammenhang stehen (z. B. Zertifizierungen, gesprochene Sprachen usw.). Diese Liste kann leer sein. Wenn ein Mitarbeiter einer Schicht zugewiesen wird, muss er alle für diese Schicht erforderlichen Fähigkeiten erfüllen.

locationIds[]

string

Liste aller möglichen Orte für die Schichten im Fahrplan. Diese Liste kann leer sein. Die Angabe verschiedener Standorte kann nützlich sein, wenn beispielsweise ein Pflegepersonal mehrere Krankenschwestern mit verschiedenen Einheiten eines Krankenhauses einplanen möchte oder ein Hotelmanager, der Mitarbeiter für mehrere 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)

Schichtzuweisungen, die als vorläufige Lösung (auch als Lösungshinweis bezeichnet) für das Planungsproblem verwendet werden sollen. Zuweisungshinweise werden ignoriert, wenn die Zuweisung einer nicht zuweisbaren Schicht- oder Planungsanfrage widersprechen.

Antworttext

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

  1. Jede Mitarbeiter-ID ist in der Gruppe von Mitarbeitern enthalten, die in der Anfrage angegeben wurde.
  2. Jede dem Mitarbeiter zugewiesene Rollen-ID ist in den Rollen-IDs für den jeweiligen Mitarbeiter enthalten.
  3. Jede Schicht-ID ist in dem in der Anfrage angegebenen Schichtsatz enthalten.
  4. Jede Schicht-ID gehört nicht zu den nicht zuweisbaren Schicht-IDs für den jeweiligen Mitarbeiter.
  5. Einem Mitarbeiter wird nie zwei Schichten zugewiesen, die sich überschneiden.
  6. Beim angegebenen Zeitplan wird keine der Einschränkungen oder Anfragen mit der Prioritätsstufe PRIORITY_MANDATORY verletzt.

Bei Erfolg enthält der Antworttext Daten mit der folgenden Struktur:

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

string

Die ID der Anfrage, der diese Antwort zugeordnet ist.

solutionStatus

enum (SolutionStatus)

Status der zurückgegebenen Lösung. Wenn die Lösung nicht FEASIBLE oder OPTIMAL ist, können andere Felder in diesem Proto leer sein. 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 durchführbar, wenn die Einschränkungen der Prioritätsebene MANDATORY nicht alle erfüllt werden können.

shiftAssignments[]

object (ShiftAssignment)

Liste aller Zuweisungen. Jede ShiftAssignment gibt einen Mitarbeiter an, die Schicht, der er zugewiesen ist, und die Rolle, die er in dieser Schicht ausführen soll.

statusMessage

string

Wenn solutionStatus nicht optimal ist, kann dieses Feld zusätzliche Informationen zum Rechner enthalten.

SolveParameters

Parameter, die eine einzelne Lösung des Schichtplanungsproblems steuern.

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

string (Duration format)

Maximale Zeit, die der Rechner mit der Aufgabe verbringen sollte. Wenn nichts festgelegt ist, wird der Standardwert 1 Minute verwendet.

Dieser Wert ist kein fester Grenzwert und berücksichtigt nicht den Kommunikationsaufwand. Die erwartete Latenz zur Behebung des Problems kann diesen Wert geringfügig überschreiten.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

Mitarbeiter

Ein Mitarbeiter aus der Belegschaft, für den ein Termin vereinbart wird.

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, wird ihm auch eine einzelne Rolle aus dieser Liste zugewiesen. Der Mitarbeiter kann während des Planungszeitraums verschiedenen Rollen zugewiesen werden.

skillIds[]

string

Fähigkeits-IDs, die dieser Mitarbeiter besitzt. Diese Liste kann leer sein. Wenn Mitarbeitende einer Schicht zugewiesen werden, verwendet sie eine beliebige Teilmenge der hier aufgeführten Fähigkeiten, um die Kompetenzanforderungen während der gesamten Schicht abzudecken.

shiftPreferences[]

object (ShiftPreference)

Die Einstellungen dieses Mitarbeiters ändern. Die hier angegebenen Schichten stellen die Schichten dar, denen die Mitarbeitenden während des Planungszeitfensters zugewiesen werden würden. Die in shiftPreferences angegebenen Schicht-IDs müssen eindeutig sein. Der Matherechner versucht, die Summe der ShiftPreference.preference-Werte aus allen shiftPreferences-Werten zu maximieren, die erfüllt sind.

schedulingConstraints[]

object (SchedulingConstraint)

Liste der Zeitplanbeschrä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 nicht in schedulingConstraints angegeben sind, können hier zu resourceConstraints hinzugefügt werden. Eine ResourceConstraint ist eine abstrakte Darstellung zur Begrenzung der 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 des Mitarbeiters. Es kann sein, dass ein Mitarbeiter bestimmten Schichten zugewiesen wird oder nicht. Alle feste Terminzuweisungen für den Mitarbeiter können mit einem ShiftRequest mit der Priorität PRIORITY_MANDATORY dargestellt werden. Eine Schicht-ID darf in maximal einer Terminplanungsanfrage 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 Stundensätze für Überstunden für den Mitarbeiter vorgibt.

ShiftPreference

Eine numerische Präferenz für eine bestimmte Schicht-ID.

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

string

Shift-ID, für die die Einstellung angegeben wird.

preference

integer

Höhere Präferenzwerte kennzeichnen eine erwünschte Abweichung.

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ätsstufe für diese Planungseinschränkung. Die Standardpriorität für alle Planungseinschränkungen ist PRIORITY_MEDIUM.

startDateTime

object (DateTime)

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

endDateTime

object (DateTime)

Die Endzeit für die Anwendung dieser Planungsbeschränkung (ausgenommen).

Union-Feld type. Der Typ 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

Mindestanzahl der Minuten, die der Mitarbeiter arbeiten kann. Wenn der Mitarbeiter einer Schicht zugewiesen ist, die das Zeitfenster (vollständig oder teilweise) überschneidet, wird die Anzahl der Minuten, in denen sich die Schicht mit dem Zeitfenster überschneidet, in dieser Anzahl berücksichtigt.

maximumMinutes

integer

Maximale Anzahl der Minuten, die der Mitarbeiter im Zeitfenster arbeiten kann. Wenn der Mitarbeiter einer Schicht zugewiesen ist, die das Zeitfenster (vollständig oder teilweise) überschneidet, wird die Anzahl der Minuten, in denen sich die Schicht mit dem Zeitfenster überschneidet, in dieser Anzahl berücksichtigt.

minimumConsecutiveWorkDays

integer

Mindestanzahl an aufeinanderfolgenden Tagen, 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, die dem Mitarbeiter zugewiesen wurden und die im Zeitfenster beginnen, werden hier 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, die dem Mitarbeiter zugewiesen wurden und die im Zeitfenster beginnen, werden hier berücksichtigt.

minimumShiftCount

integer

Mindestanzahl der Schichten, die der Mitarbeiter ausüben kann. In dieser Anzahl ist jede Schicht berücksichtigt, die der Mitarbeitenden zugewiesen wurde und die sich vollständig mit dem Zeitfenster überschneidet.

maximumShiftCount

integer

Maximale Anzahl der Schichten, die der Mitarbeiter ausführen kann. In dieser Anzahl ist jede Schicht berücksichtigt, die der Mitarbeitenden zugewiesen wurde und die sich vollständig mit dem Zeitfenster überschneidet.

minimumRestMinutes

integer

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

Priorität

Die Prioritätsstufe für eine Einschränkung des Zeitplans eines Mitarbeiters oder die Abdeckungsanforderungen. Dazu gehören SchedulingConstraint, ResourceConstraint, ShiftRequest und CoverageRequirement. Da es Konflikte zwischen Einschränkungen geben könnte, ist es nicht immer möglich, jede Einschränkung zu erfüllen. Daher hat jede Art von Einschränkung eine Priorität (vom Nutzer vergeben oder eine Standardeinstellung), die den Matherechner ü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 werden als Erste in Betracht gezogen, wenn keine praktikable Lösung gefunden wird.
PRIORITY_MEDIUM Prioritätsebene mittel. 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 dem Lockern aller Einschränkungen mit der Priorität PRIORITY_LOW keine praktikable Lösung gefunden werden kann, werden als Nächstes Einschränkungen mit der Priorität PRIORITY_MEDIUM aufgrund eines Verstoßes in Betracht gezogen.
PRIORITY_HIGH Die höchste Prioritätsstufe. Einschränkungen mit dieser Prioritätsstufe sind am wichtigsten. Sie sind die letzten, die für einen Verstoß in Betracht gezogen werden, wenn nach dem Lockern der Einschränkungen der niedrigeren Prioritätsstufen keine praktikable Lösung gefunden werden kann.
PRIORITY_MANDATORY Prioritätsstufe, die etwas darstellt, das vom Solver nicht verletzt werden darf. Wenn der Matherechner SolutionStatus.INFEASIBLE zurückgibt, kann das an zu vielen PRIORITY_MANDATORY-Einschränkungen liegen.

ResourceConstraint

Eine allgemeine Einschränkung, die die Menge einer bestimmten „Ressource“ begrenzt von einem Mitarbeiter verwendet wird. Dies ist eine abstrakte Version der spezifischeren SchedulingConstraint, die für den Nutzer flexibler ist. Viele Planungseinschränkungen, die nicht in SchedulingConstraint.type angegeben 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ätsstufe 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 diese Einschränkung beispielsweise für die minimale und maximale Arbeitsstunden eines Mitarbeiters in einer bestimmten Woche gilt, enthält diese Karte die Schichten in dieser Woche und die Länge 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, die durch eine Ressourceneinschränkung erreicht wird.

maximumResourceUsage

number

Maximale Ressourcennutzung, die durch eine Ressourceneinschränkung erreicht werden soll.

ShiftRequest

Die Anfrage eines Mitarbeiters, bestimmten Schichten zugewiesen oder nicht zugewiesen zu werden.

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 dem Schichtsatz zugewiesen ist oder nicht.

WorkStatus

Ob ein Mitarbeiter arbeitsfähig ist oder nicht.

Enums
WORK_STATUS_UNSPECIFIED Unbekannter Arbeitsstatus.
STATUS_WORK Status, der einen arbeitenden Mitarbeiter repräsentiert.
STATUS_NOT_WORK Status, der einen nicht erwerbstätigen Mitarbeiter repräsentiert.

HourlyContract

Gibt einen Basisstundensatz, Preisdifferenzen und Überstundenmultiplikatoren an, um die Vergütung für einen Mitarbeiter zu bestimmen. Beachte, dass an verschiedenen Orten gesetzliche Vorschriften eine andere Berechnung der Überstundenvergütung erfordern. Der Solver schätzt die Überstundenvergütung, um entweder einen Teil der Gesamtkosten zu minimieren oder ein Budget einzuhalten (siehe BudgetRequirement). Es 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 ohne Überstunden. Wenn für einen Mitarbeiter mehrere Tarife gelten, werden Differenzen relativ zum Basisstundensatz angewendet. Wenn es mehrere Preise gibt, sollte der Basisstundensatz das Minimum dieser Preise sein.

hourlyRateShiftDifferentials

map (key: string, value: number)

Der Stundensatz, der zusätzlich zu baseHourlyRate bezahlt wird. Wenn der Basisstundensatz beispielsweise 30 $/Std. beträgt, wird „shift_1“ verwendet. wird zu einem Preis von 40 $/Stunde bezahlt und „shift_2“ wird zu einem Preis von 45 $/Stunde bezahlt, 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 Perioden, 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), der zur Bestimmung der Höhe der Überstundenvergütung verwendet wird. Jede Periode hat einen Multiplikator für die Verlängerung (z.B. 1,5) relativ zum baseHourlyRate und einer Beschränkung für die Anzahl der Stunden, die als normale Arbeit (keine Überstunden) gelten. Jede Schicht, die sich mit den Zeitfenstern startDateTime (einschließlich) und endDateTime (exklusiv) überschneidet, wird auf die Gesamtzahl der Stunden angerechnet, die im Zeitraum gearbeitet wurden. Wenn es sich um eine teilweise Ü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 für die Berechnung des Überstundensatzes (muss größer oder gleich 1,0 sein). Der Stundensatz für Überstunden wird in der Regel mit baseHourlyRate * overtimeMultiplier berechnet. Wenn über hourlyRateShiftDifferentials mehrere Tarife angegeben sind, schätzt der Matherechner den Stundensatz für Überstunden anhand eines einfachen Durchschnitts der Tarife, die während der Überstunden anfallen. Hinweis: Vorschriften an verschiedenen Orten erfordern möglicherweise eine andere Berechnung der Überstundenvergütung. Der Solver schätzt die Überstundenvergütung, um entweder einen Teil der Gesamtkosten zu minimieren oder ein Budget einzuhalten. Er ist jedoch nicht als Tool zur Berechnung der Gehaltsabrechnung gedacht.

startDateTime

object (DateTime)

Startzeit für die Verlängerung. Wenn sich eine Schicht in diesem Zeitraum überschneidet, werden die Stunden einer solchen Schicht ab startDateTime gezählt.

endDateTime

object (DateTime)

Endzeit für die Verlängerung. Wenn sich eine Schicht in diesem Zeitraum überschneidet, werden die Stunden einer solchen Schicht bis zum endDateTime gezählt.

maximumRegularHours

number

Maximale Anzahl an Arbeitsstunden, die zum regulären Stundensatz (ohne Überstunden) bezahlt werden. Diese Menge muss positiv sein.

Umschalttaste

Eine Schicht gibt ein festes Zeitfenster an, 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

Standort-ID, an der diese Schicht stattfindet. Dieses Feld kann leer sein.

startDateTime

object (DateTime)

Der Beginn der Schicht (einschließlich).

endDateTime

object (DateTime)

Die Endzeit der Schicht (ausschließlich). Derzeit unterstützt der Solver nur Schichten, die weniger als 24 Stunden dauern.

breakRules[]

object (BreakRule)

Eine Liste der Regeln für den Umbruch, die während der Schicht gelten. Mitarbeitern, die in dieser Schicht arbeiten, wird pro break_rule eine Pause zugewiesen, in der sie den Bedarf für die Rolle, die sie erfüllen, nicht decken. Jedes BreakRule-Zeitfenster muss vollständig in das Zeitfenster dieser Schicht einbezogen werden.

BreakRule

Eine Regel, die festlegt, wann eine Pause innerhalb einer Schicht beginnen kann und wie lange sie dauert. Die Liste aller möglichen Pausen, die berücksichtigt werden sollen, wird in Schritten von ruleIncrementMinutes festgelegt. Beispiel: Eine Pauseregel modelliert eine 30-minütige Pause, die zwischen 10:00 und 11:00 Uhr beginnen kann, und das Regelinkrement beträgt 20 Minuten. Die Liste der berücksichtigten Pausen lautet: [10:00, 10:30], [10:20, 10:50], [10:40, 11:1,1,1,1,1,1,1,1,1,1,1.

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

object (DateTime)

Die früheste Startzeit der Pause (einschließlich). Es können nur hours und minutes festgelegt werden.

latestStartTime

object (DateTime)

Die späteste Startzeit der Pause (einschließlich). Es können nur hours und minutes festgelegt werden.

durationMinutes

integer

Dauer der Pause in Minuten.

ruleIncrementMinutes

integer

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

CoverageRequirement

Eine Deckungsanforderung gibt die Anzahl der Mitarbeitenden an, die für eine Reihe von Rollen und/oder Fähigkeiten während eines bestimmten Zeitfensters und an einem bestimmten Standort benötigt werden. DateTime-Intervalle an einem bestimmten Ort dürfen sich nicht überschneiden. Alternativ kann eine Liste mit Schicht-IDs anstelle eines Zeitfensters und eines Standorts bereitgestellt werden. Nur Mitarbeitende, die einer bestimmten Rolle zugewiesen werden können (oder die die spezifische Fähigkeit besitzen), können diese Anforderung erfüllen.

Für die jeweilige Rolle und/oder Fähigkeit ist die Deckungsanforderung erfüllt, wenn zu jedem Zeitpunkt des Zeitfensters (oder für jede Schicht in shiftIds) mindestens targetEmployeeCount Mitarbeiter arbeiten. Im Gegensatz dazu wird die Deckungsanforderung nicht erfüllt, wenn im Zeitfenster (oder in einer der Schichten in shiftIds) während des Zeitfensters weniger als targetEmployeeCount Mitarbeiter arbeiten. Mehr aktive Mitarbeiter als der targetEmployeeCount erfüllen die Anforderung zwar weiterhin, aber übermäßige Personalbelegung wurde durch den Matherechner minimiert.

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

Standort, an dem die Mitarbeiter gebraucht werden. shiftIds ist nicht leer, dieses Feld muss leer sein.

shiftIds[]

string

Wenn festgelegt, werden die Rollen- und Qualifikationsanforderungen einzeln auf jede Schicht-ID in dieser Liste angewendet. Wenn ShiftIds 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 muss höchstens ein role_requirement angegeben werden. Die standardmäßige Prioritätsstufe für jede der Anforderungen ist PRIORITY_MANDATORY. Diese Einschränkungen werden nicht eingehalten, wenn den angegebenen Rollen während des Zeitfensters weniger als targetEmployeeCount Mitarbeiter zugewiesen sind.

skillRequirements[]

object (SkillRequirement)

Erforderliche Anzahl der Mitarbeitenden mit den angegebenen Fähigkeiten, die während des Zeitfensters Schichten zugewiesen sind. Für jede Skill-ID muss höchstens ein skill_requirement angegeben werden. Die standardmäßige Prioritätsstufe für jede der Anforderungen ist PRIORITY_LOW. Diese Einschränkungen werden nicht eingehalten, wenn im Zeitfenster weniger als targetEmployeeCount Mitarbeiter über die entsprechenden Fähigkeiten verfügen.

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 Mitarbeitern, die der Rolle während des Zeitfensters zugewiesen wurden.

priority

enum (Priority)

Prioritätsstufe 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 die angegebenen Fähigkeiten besitzen.

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 jeweiligen Fähigkeit, die während des Zeitfensters arbeiten.

priority

enum (Priority)

Prioritätsstufe 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äß dem angegebenen priority minimiert. Wenn priority für das Budget beispielsweise PRIORITY_MEDIUM beträgt, minimiert der Solver die Kosten, bevor er einen Einschränkungsverstoß mit der Priorität PRIORITY_LOW reduziert.

startDateTime

object (DateTime)

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

endDateTime

object (DateTime)

Endzeit für die Anwendung dieses Budgets. Wenn keine Endzeit angegeben ist, wird sie auf die letzte Endzeit aller Schichten festgelegt.

priority

enum (Priority)

Prioritätsstufe für die Erfüllung der Budgetanforderung im angegebenen Zeitraum. Die Standardpriorität ist PRIORITY_LOW. Wenn die Priorität auf PRIORITY_MANDATORY festgelegt ist, muss totalBudget festgelegt werden.

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

ShiftAssignment

Ein Mitarbeiter, der eine andere Rolle zuweisen soll.

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

string

Die zugewiesene Mitarbeiter-ID.

shiftId

string

Schicht-ID, die dem Mitarbeiter zugewiesen ist.

roleId

string

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

breaks[]

object (Break)

Liste der Pausen für diese Schichtzuweisung.

Pause

Ein Zeitraum, in dem Mitarbeitende ihre Arbeit während einer Schicht unterbrechen.

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

object (DateTime)

Der Beginn einer Pause.

durationMinutes

integer

Dauer der Pause in Minuten.

SolutionStatus

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

Enums
SOLUTION_STATUS_UNSPECIFIED Unbekannter Status für die Antwort.
FEASIBLE Der zurückgegebene Zeitplan ist machbar, aber möglicherweise nicht optimal.
OPTIMAL Der zurückgegebene Zeitplan ist optimal.
INFEASIBLE Für die angegebenen Einschränkungen ist kein praktikabler Zeitplan vorhanden. Der Solver kann diesen Wert zurückgeben, 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.