Method: scheduling.solveShiftScheduling

Résout un problème d'horaires fixes de la SolveShiftSchedulingRequest donnée en affectant des employés à des quarts de travail de manière à maximiser les préférences d'emploi du temps et à minimiser les cas de non-respect des contraintes liés à la planification.

Requête HTTP

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

L'URL utilise la syntaxe de transcodage gRPC.

Corps de la requête

Le corps de la requête contient des données présentant la structure suivante :

Représentation 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)
    }
  ]
}
Champs
requestId

string

Identifiant du problème ou de la demande.

solveParameters

object (SolveParameters)

Paramètres permettant de contrôler une seule solution du problème.

employees[]

object (Employee)

Tous les employés disponibles peuvent être programmés.

shifts[]

object (Shift)

Tous les quarts de travail pour former le planning.

coverageRequirements[]

object (CoverageRequirement)

Exigences en termes de couverture pour l'ensemble de l'horizon de planification. Celles-ci indiquent le nombre d'employés devant occuper chaque fonction ou posséder une compétence pendant un créneau horaire ou via une liste d'identifiants d'équipes. Toutes les exigences de couverture doivent être spécifiées à l'aide de périodes ou d'une liste d'ID d'équipes (mais pas les deux). Les périodes (le cas échéant) correspondant aux exigences de couverture ne peuvent pas se chevaucher pour chaque zone géographique donnée. Le niveau de priorité par défaut pour chacune de ces contraintes est PRIORITY_MANDATORY pour les exigences du rôle et PRIORITY_LOW pour les exigences de compétence. Pour en savoir plus, consultez l'énumération Priority.

roleIds[]

string

Liste de tous les rôles possibles au sein du personnel. Chaque employé doit avoir au moins un rôle auquel il peut être affecté pour une journée de travail. Un rôle fait référence à une attribution d'emploi spécifique pendant une quart de travail (par exemple, infirmier diplômé, chef exécutif, serveur, etc.). Lorsqu'un employé est affecté à un quart de travail, il se voit également attribuer un rôle spécifique.

skillIds[]

string

Liste de toutes les compétences possibles pour l'ensemble du personnel. Une compétence fait référence à toutes les qualifications supplémentaires qu'un employé peut avoir qui n'ont pas trait à un poste attribuable spécifique (par exemple, des certifications, des langues parlées, etc.). Cette liste peut être vide. Lorsqu'un employé est affecté à un quart de travail, il doit posséder toutes les compétences nécessaires pour ce quart.

locationIds[]

string

Liste de tous les emplacements possibles pour l'ensemble des quarts de planning. Cette liste peut être vide. Il peut s'avérer utile de spécifier des emplacements différents lorsque, par exemple, une infirmière gérante souhaite prendre rendez-vous avec de nombreuses infirmières dans différentes unités d'un hôpital ou, par exemple, un directeur d'hôtel souhaite planifier des employés dans plusieurs hôtels.

budgetRequirements[]

object (BudgetRequirement)

Spécification du budget pour le problème de planification. Le niveau de priorité par défaut pour chacune de ces exigences est PRIORITY_LOW. Pour en savoir plus, consultez l'énumération Priority.

assignmentsHint[]

object (ShiftAssignment)

Décalez les devoirs pour les utiliser comme solution provisoire (ou indice de solution) au problème de planification. Les indications d'attribution sont ignorées si l'attribution est contraire à une demande d'horaire non attribuable ou à une requête de planification.

Corps de la réponse

Réponse de l'API de planification du personnel. Pour chaque réponse, shiftAssignments sera vide si le solutionStatus renvoyé est NOT_SOLVED_DEADLINE_EXCEEDED ou INFEASIBLE. Si le solutionStatus renvoyé est OPTIMAL ou FEASIBLE, une attribution d'équipe valide est renvoyée dans shiftAssignments. Pour une attribution de quarts valide, les propriétés suivantes sont conservées:

  1. Chaque ID d'employé fait partie de l'ensemble d'employés indiqué dans la requête.
  2. Chaque ID de rôle attribué à un employé est contenu dans l'ensemble d'ID de rôle de cet employé.
  3. Chaque ID d'équipe est contenu dans l'ensemble des quarts fourni dans la requête.
  4. Chaque ID d'équipe n'est pas un ID d'équipe non attribuable pour un employé donné.
  5. Un employé ne sera jamais affecté à deux quarts de travail qui se chevauchent.
  6. Pour le calendrier donné, aucune des contraintes ni aucune demande de niveau de priorité PRIORITY_MANDATORY n'est enfreinte.

Si la requête aboutit, le corps de la réponse contient des données qui ont la structure suivante :

Représentation JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Champs
requestId

string

ID de la requête à laquelle cette réponse est associée.

solutionStatus

enum (SolutionStatus)

État de la solution renvoyée. Si la solution n'est pas FEASIBLE ou OPTIMALE, d'autres champs de ce fichier proto peuvent être vides. Si l'état est NOT_SOLVED_DEADLINE_EXCEEDED, cela signifie que la limite de temps a été atteinte sans trouver de solution réalisable ni déterminer si une solution réalisable existe. Les demandes peuvent être impossibles si les contraintes de niveau de priorité OBLIGATOIRE ne peuvent pas toutes être satisfaites.

shiftAssignments[]

object (ShiftAssignment)

Liste de toutes les attributions. Chaque ShiftAssignment spécifie un employé, l'équipe à laquelle il est affecté et le rôle qui lui est affecté.

statusMessage

string

Si solutionStatus n'est pas optimal, ce champ peut contenir des informations supplémentaires sur le résolveur.

SolveParameters

Paramètres qui contrôlent une solution unique pour le problème de planification des équipes.

Représentation JSON
{
  "timeLimit": string
}
Champs
timeLimit

string (Duration format)

Temps maximal que le résolveur doit consacrer au problème. Si cette règle n'est pas configurée, la valeur par défaut est de 1 minute.

Cette valeur n'est pas une limite stricte et ne tient pas compte de la surcharge de communication. La latence attendue pour résoudre le problème peut légèrement dépasser cette valeur.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

Employé

Un employé dont l'employé doit être programmé.

Représentation JSON
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
Champs
id

string

Identifiant unique attribué à cet employé.

roleIds[]

string

ID des rôles que cet employé peut exécuter. Au moins un rôle doit être spécifié. Lorsqu'un employé est affecté à un quart de travail, il se voit également attribuer un seul rôle à partir de cette liste. Différents rôles peuvent être affectés à l'employé au cours de la période de planification.

skillIds[]

string

Cet employé possède des ID de compétence. Cette liste peut être vide. Lorsqu'un employé est affecté à un quart de travail, il utilise un sous-ensemble des compétences énumérées ici pour couvrir les exigences de compétences pendant toute la durée de la période qui lui est assignée.

shiftPreferences[]

object (ShiftPreference)

Changez les préférences de cet employé. Les quarts indiqués ici représentent les quarts auxquels l'employé aimerait être affecté pendant la fenêtre de planification. Les ID d'équipe indiqués dans shiftPreferences doivent être uniques. Le résolveur tente de maximiser la somme des valeurs ShiftPreference.preference pour l'ensemble des shiftPreferences satisfaits.

schedulingConstraints[]

object (SchedulingConstraint)

Liste des contraintes de planification pour cet employé. Le niveau de priorité par défaut pour chacune de ces contraintes est PRIORITY_MEDIUM. Pour en savoir plus, consultez l'énumération Priority.

resourceConstraints[]

object (ResourceConstraint)

Toute contrainte de planification supplémentaire non spécifiée dans schedulingConstraints peut être ajoutée ici à resourceConstraints. Un ResourceConstraint est une représentation plus abstraite pour limiter les ressources d'un employé. Le niveau de priorité par défaut pour chacune de ces contraintes est PRIORITY_MEDIUM. Pour en savoir plus, consultez l'énumération Priority.

shiftRequests[]

object (ShiftRequest)

Liste des demandes d'horaires pour l'employé. La demande peut concerner l'affectation d'un employé ou l'absence d'affectation à des quarts de travail spécifiques. Toutes les attributions d'horaires fixes pour l'employé peuvent être représentées par un ShiftRequest avec une priorité de PRIORITY_MANDATORY. Un identifiant d'équipe peut apparaître dans une demande de planning maximum pour cet employé. Le niveau de priorité par défaut de chacune de ces requêtes est PRIORITY_LOW. Pour en savoir plus, consultez l'énumération Priority.

hourlyContract

object (HourlyContract)

Contrat qui spécifie les taux horaires normaux et supplémentaires pour l'employé.

ShiftPreference

Préférence numérique pour un ID d'équipe spécifique.

Représentation JSON
{
  "shiftId": string,
  "preference": integer
}
Champs
shiftId

string

ID du décalage pour lequel la préférence est spécifiée.

preference

integer

Des valeurs de préférence plus élevées indiquent un changement plus souhaitable.

SchedulingConstraint

Contrainte de planification spécifique pour un employé particulier. La contrainte spécifiée n'est appliquée que pendant l'intervalle donné [startDateTime, endDateTime).

Représentation 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.
}
Champs
priority

enum (Priority)

Niveau de priorité de cette contrainte de planification. La priorité par défaut de toutes les contraintes de planification est PRIORITY_MEDIUM.

startDateTime

object (DateTime)

Heure de début d'application de cette contrainte de planification (incluse).

endDateTime

object (DateTime)

Heure de fin d'application de cette contrainte de planification (exclue).

Champ d'union type. Type de contrainte spécifié. Chaque contrainte n'est appliquée que pendant la période spécifiée ci-dessus. type ne peut être qu'un des éléments suivants :
minimumMinutes

integer

Durée minimale pendant laquelle l'employé peut travailler. Si l'employé est affecté à un quart de travail qui chevauche (entièrement ou partiellement) le créneau horaire, le nombre de minutes correspondant au chevauchement du créneau horaire est inclus dans ce nombre.

maximumMinutes

integer

Nombre maximal de minutes pendant lesquelles l'employé peut travailler dans la fenêtre de temps. Si l'employé est affecté à un quart de travail qui chevauche (entièrement ou partiellement) le créneau horaire, le nombre de minutes correspondant au chevauchement du créneau horaire est inclus dans ce nombre.

minimumConsecutiveWorkDays

integer

Nombre minimal de jours consécutifs pendant lesquels l'employé peut travailler. Un employé travaille un jour spécifique s'il est affecté à un quart de travail qui commence ce jour-là. Tous les quarts auxquels l'employé est affecté et qui débute dans le créneau horaire sont inclus dans ce décompte.

maximumConsecutiveWorkDays

integer

Nombre maximal de jours consécutifs pendant lesquels l'employé peut travailler. Un employé travaille un jour spécifique s'il est affecté à un quart de travail qui commence ce jour-là. Tous les quarts auxquels l'employé est affecté et qui débute dans le créneau horaire sont inclus dans ce décompte.

minimumShiftCount

integer

Nombre minimal d'équipes que l'employé peut effectuer. Tous les quarts auxquels l'employé est affecté et qui coïncide avec ce qui est indiqué dans le créneau horaire sont inclus dans ce nombre.

maximumShiftCount

integer

Nombre maximal d'équipes que l'employé peut effectuer. Tous les quarts auxquels l'employé est affecté et qui coïncide avec ce qui est indiqué dans le créneau horaire sont inclus dans ce nombre.

minimumRestMinutes

integer

Nombre minimal de minutes pendant lesquelles l'employé doit se reposer à la fin d'une quart de travail avant d'être affecté à un autre quart. Cette contrainte s'applique à chaque paire de décalages entièrement inclus dans [startDateTime, endDateTime].

Priorité

Niveau de priorité de toute contrainte sur l'emploi du temps d'un employé ou des exigences de couverture. Exemples : SchedulingConstraint, ResourceConstraint, ShiftRequest et CoverageRequirement. Étant donné qu'il peut y avoir des contraintes contradictoires, il n'est pas toujours possible de satisfaire toutes les contraintes. Chaque type de contrainte est associé à une priorité (donnée par l'utilisateur ou par défaut) qui informe le résolveur de l'importance relative de toutes les contraintes appliquées à une planification complète.

Enums
PRIORITY_UNSPECIFIED Niveau de priorité inconnu.
PRIORITY_LOW Niveau de priorité le plus bas. Les contraintes de cette priorité sont moins importantes que les autres. Ils sont les premiers à être pris en compte pour le non-respect des règles en l'absence de solution acceptable.
PRIORITY_MEDIUM Niveau de priorité "Moyenne". Les contraintes de cette priorité sont plus importantes que celles de priorité PRIORITY_LOW, mais moins importantes que celles de priorité PRIORITY_HIGH. Si aucune solution réalisable ne peut être trouvée après avoir assoupli toutes les contraintes de priorité PRIORITY_LOW, les contraintes de priorité PRIORITY_MEDIUM sont alors considérées comme non conformes.
PRIORITY_HIGH Niveau de priorité le plus élevé. Les contraintes de ce niveau de priorité sont les plus importantes. Ils sont les derniers à être pris en compte pour un cas de non-respect si aucune solution réalisable ne peut être trouvée après l'assouplissement des contraintes des niveaux de priorité inférieurs.
PRIORITY_MANDATORY Niveau de priorité représentant un élément que le résolveur ne peut pas violer. Si le résolveur renvoie SolutionStatus.INFEASIBLE, cela peut être dû à un trop grand nombre de contraintes PRIORITY_MANDATORY.

ResourceConstraint

Contrainte générale qui limite la quantité d'une certaine « ressource » utilisée par un employé. Il s'agit d'une version abstraite de SchedulingConstraint, plus spécifique et plus flexible pour l'utilisateur. Ce message permet de spécifier de nombreuses contraintes de planification qui ne peuvent pas être spécifiées dans le SchedulingConstraint.type.

Représentation JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Champs
priority

enum (Priority)

Niveau de priorité de cette contrainte de ressource. La priorité par défaut pour toutes les contraintes de ressources est PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Quantité de ressources utilisée par les équipes. Par exemple, si cette contrainte s'applique au minimum et au maximum d'heures travaillées par un employé au cours d'une semaine spécifique, cette carte contiendra les quarts de travail de cette semaine et la durée de chaque quart en heures.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Utilisation minimale des ressources pour qu'une contrainte de ressource soit satisfaite.

maximumResourceUsage

number

Utilisation maximale des ressources pour qu'une contrainte de ressource soit satisfaite.

ShiftRequest

Demande d'affectation ou de non-affectation d'un employé à des quarts de travail spécifiques.

Représentation JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Champs
priority

enum (Priority)

Niveau de priorité de cette demande de planification. La priorité par défaut de toutes les requêtes de planification est PRIORITY_LOW.

shiftIds[]

string

ID des équipes de la demande de planification.

type

enum (WorkStatus)

Type de demande (par exemple, demande à être attribuée ou non à un ensemble d'équipes)

WorkStatus

Indique si un employé travaille ou non.

Enums
WORK_STATUS_UNSPECIFIED État du travail inconnu.
STATUS_WORK État représentant un employé qui travaille.
STATUS_NOT_WORK État représentant un employé qui ne travaille pas.

HourlyContract

Spécifie un taux horaire de base, des écarts de taux et des multiplicateurs d'heures supplémentaires pour déterminer la rémunération d'un employé. Notez que la réglementation en vigueur selon les pays peut nécessiter un calcul différent de la rémunération des heures supplémentaires. Le résolveur évalue la rémunération des heures supplémentaires soit pour minimiser un indicateur du coût total, soit pour respecter un budget (voir BudgetRequirement). Il n'a pas vocation à être un outil de calcul de la paie.

Représentation JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Champs
baseHourlyRate

number

Rémunération pour le fait de travailler une heure sans heures supplémentaires. Si plusieurs tarifs s'appliquent à un employé, des différences de taux sont appliquées par rapport à ce taux horaire de base. En outre, s'il existe plusieurs tarifs, le tarif horaire de base doit correspondre au minimum.

hourlyRateShiftDifferentials

map (key: string, value: number)

Différence de taux horaire, payé en plus de baseHourlyRate. Par exemple, si le tarif horaire de base est de 30 $/h, "shift_1" est payé au tarif de 40 $/h et "shift_2" est payé au tarif de 45 $/h, alors la représentation proto est: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Liste de toutes les périodes pour lesquelles des prolongations doivent être calculées. Ces périodes ne doivent pas se chevaucher.

OvertimePeriod

Période fixe et récurrente (généralement de 168 heures ou sept périodes de 24 heures consécutives) utilisée pour déterminer le montant de la rémunération pour les heures supplémentaires. Chaque période est associée à un multiplicateur d'heures supplémentaires (par exemple, 1,5) par rapport aux baseHourlyRate et à la limite du nombre d'heures considérées comme du travail normal (sans heures supplémentaires). Tout décalage qui chevauche la période startDateTime (incluse) et endDateTime (exclusif) est comptabilisé dans le nombre total d'heures travaillées au cours de cette période. Si le chevauchement est partiel, seules les heures qui se chevauchent sont comptabilisées.

Représentation JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Champs
overtimeMultiplier

number

Multiplicateur utilisé pour calculer le tarif horaire des heures supplémentaires (il doit être supérieur ou égal à 1). Le taux horaire des heures supplémentaires est généralement calculé comme suit : baseHourlyRate * overtimeMultiplier. Si plusieurs tarifs sont indiqués via hourlyRateShiftDifferentials, le résolveur évalue le taux horaire des heures supplémentaires à l'aide d'une simple moyenne des taux applicables au cours de la période de prolongation. Remarque: la réglementation en vigueur selon les pays peut nécessiter un calcul différent de la rémunération des heures supplémentaires. Le résolveur évalue la rémunération des heures supplémentaires afin de minimiser un indicateur du coût total ou de respecter un budget, mais il ne constitue pas un outil de calcul de la masse salariale.

startDateTime

object (DateTime)

Heure de début de la période de prolongation. Si une période de travail se chevauche cette fois-ci, les heures correspondantes sont comptabilisées à partir du startDateTime.

endDateTime

object (DateTime)

Heure de fin de la période de prolongation. En cas de chevauchement, les heures sont comptabilisées jusqu'à endDateTime.

maximumRegularHours

number

Nombre maximal d'heures de travail rémunérées à un taux normal (hors heures supplémentaires). Cette quantité doit être positive.

Moment de la journée

Une quart de travail spécifie une fenêtre de temps fixe pendant laquelle les employés peuvent travailler.

Représentation JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Champs
id

string

Identifiant unique attribué à ce décalage.

locationId

string

ID de la zone géographique où ce changement a lieu. Cette valeur n'est pas obligatoire.

startDateTime

object (DateTime)

Heure de début du quart de travail (incluse).

endDateTime

object (DateTime)

Heure de fin du décalage (exclusif). Actuellement, le résolveur n'autorise que les quarts de travail de moins de 24 heures.

breakRules[]

object (BreakRule)

Liste des règles de non-respect des règles appliquées pendant le quart de travail. Une pause par break_rule est attribuée aux employés effectuant ce quart de travail. Au cours de cette période, ils ne peuvent pas couvrir la demande pour le poste qu'ils occupent. Chaque période de BreakRule doit être entièrement incluse dans la période de cette période.

BreakRule

Il s'agit d'une règle qui détermine le moment où une pause peut commencer pendant une période d'ajustement, ainsi que sa durée. La liste de toutes les coupures possibles qui sont prises en compte est déterminée par incréments de ruleIncrementMinutes. Par exemple, si une règle d'interruption modélise une coupure de 30 minutes qui peut commencer entre 10:00 et 11:00, et que l'incrément de règle est de 20 minutes, la liste des coupures prises en compte est la suivante : [10:00, 10:30], [10:20, 10:50], [10:40, 11:1.1.

Représentation JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Champs
earliestStartTime

object (DateTime)

Heure de début au plus tôt de la coupure (incluse). Vous ne pouvez définir que hours et minutes.

latestStartTime

object (DateTime)

Heure de début la plus tardive de la coupure publicitaire (incluse). Vous ne pouvez définir que hours et minutes.

durationMinutes

integer

Durée de la pause en minutes.

ruleIncrementMinutes

integer

[Facultatif] Incrémentation en minutes de toutes les coupures publicitaires pouvant être prises en compte dans cette règle. Si ce champ n'est pas défini, la valeur par défaut est durationMinutes.

CoverageRequirement

Une exigence de couverture spécifie le nombre d'employés requis pour un ensemble de rôles et/ou de compétences pendant une période donnée et dans un lieu donné. Les intervalles DateTime d'un emplacement spécifique ne peuvent pas se chevaucher. Vous pouvez également fournir une liste d'ID d'équipes au lieu d'une période et d'un lieu. Seuls les employés pouvant être affectés à ce poste (ou qui possèdent les compétences spécifiques) peuvent répondre à cette exigence.

Pour un poste et/ou une compétence donnés, l'exigence de couverture est remplie lorsqu'au moins targetEmployeeCount employés travaillent à tout moment de la période (ou pour chaque équipe en shiftIds). En revanche, la couverture requise n'est pas respectée si, à un moment donné de la période (ou pour tous les quarts de travail de shiftIds), le nombre d'employés est inférieur à targetEmployeeCount pendant cette période. Un plus grand nombre d'employés que le targetEmployeeCount répond toujours aux exigences, mais le résolveur réduit les effectifs en excès.

Représentation JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
Champs
startDateTime

object (DateTime)

Heure de début de la couverture requise (incluse). S'il est défini, shiftIds doit être vide.

endDateTime

object (DateTime)

Heure de fin de la couverture requise (exclusive). S'il est défini, shiftIds doit être vide.

locationId

string

Lieu dans lequel les employés sont nécessaires. shiftIds n'est pas vide. Ce champ doit être vide.

shiftIds[]

string

Si cette option est définie, les exigences de rôle et de compétences sont appliquées individuellement à chaque ID d'équipe de cette liste. Si les identifiants ShiftId ne sont pas vides, startDateTime, endDateTime et locationId doivent être vides.

roleRequirements[]

object (RoleRequirement)

Nombre requis d'employés devant être affectés aux rôles spécifiés pendant la période. Au maximum, un role_requirement doit être indiqué pour chaque ID de rôle. Le niveau de priorité par défaut pour chacune des exigences est PRIORITY_MANDATORY. Ces contraintes sont enfreintes si les rôles spécifiés sont attribués à moins de targetEmployeeCount employés au cours de la période de travail.

skillRequirements[]

object (SkillRequirement)

Nombre requis d'employés possédant les compétences spécifiées qui sont affectées à des quarts de travail pendant la période. Au maximum, un skill_requirement doit être indiqué pour chaque identifiant de compétence. Le niveau de priorité par défaut pour chacune des exigences est PRIORITY_LOW. Ces contraintes sont enfreintes si moins de targetEmployeeCount employés possèdent les compétences données à un moment donné au cours de cette période.

RoleRequirement

Nombre requis d'employés devant être affectés au rôle spécifié pendant la période.

Représentation JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Champs
roleId

string

ID du rôle pour l'exigence.

targetEmployeeCount

integer

Nombre souhaité d'employés affectés au rôle pendant la période.

priority

enum (Priority)

Niveau de priorité pour cette contrainte d'exigence. La priorité par défaut pour toutes les contraintes de ressources est PRIORITY_MANDATORY.

SkillRequirement

Nombre requis d'employés qui travaillent pendant le créneau horaire et possèdent les compétences spécifiées.

Représentation JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Champs
skillId

string

ID de compétence requis pour cette condition.

targetEmployeeCount

integer

Nombre souhaité d'employés possédant les compétences concernées et qui travaillent pendant cette période.

priority

enum (Priority)

Niveau de priorité pour cette contrainte d'exigence. La priorité par défaut pour toutes les contraintes de ressources est PRIORITY_LOW.

BudgetRequirement

Exigences budgétaires pour un intervalle donné.

Représentation JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Champs
totalBudget

number

Budget total pour l'intervalle donné. Vous devez indiquer un budget total si la priorité est de PRIORITY_MANDATORY.

Si totalBudget n'est pas défini, le coût total du calendrier est réduit en fonction du priority spécifié. Par exemple, si la priority du budget est de PRIORITY_MEDIUM, le résolveur minimisera le coût avant de réduire les cas de non-respect des contraintes de priorité PRIORITY_LOW.

startDateTime

object (DateTime)

Heure de début correspondant à la période d'application de ce budget. Si aucune heure de début n'est spécifiée, elle est définie sur l'heure de début la plus proche de tous les quarts de travail donnés.

endDateTime

object (DateTime)

Heure de fin correspondant à la période d'application de ce budget. Si aucune heure de fin n'est spécifiée, elle est définie sur l'heure de fin au plus tard de tous les quarts de travail donnés.

priority

enum (Priority)

Niveau de priorité permettant d'atteindre le budget requis au cours de la période spécifiée. La priorité par défaut est PRIORITY_LOW. Si la priorité est définie sur PRIORITY_MANDATORY, totalBudget doit être défini.

Notez que si cette priorité est plus élevée que les priorités des autres contraintes et que la valeur totalBudget est serrée, le calendrier qui en résulte risque de ne pas respecter considérablement les contraintes liées aux employés ou les exigences de couverture.

ShiftAssignment

Un employé pour une attribution de poste.

Représentation JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Champs
employeeId

string

ID de l'employé en cours d'attribution.

shiftId

string

Identifiant d'équipe attribué à l'employé.

roleId

string

Identifiant du rôle auquel l'employé est affecté pour le quart de travail.

breaks[]

object (Break)

Liste des pauses pour cette attribution d'équipe.

Pause

Période au cours de laquelle un employé interrompt son travail pendant un quart de travail.

Représentation JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Champs
startDateTime

object (DateTime)

Heure de début d'une pause.

durationMinutes

integer

Durée de la pause en minutes.

SolutionStatus

État de la solution (planification) fourni dans la réponse d'un résolveur.

Enums
SOLUTION_STATUS_UNSPECIFIED État non spécifié pour la réponse.
FEASIBLE Le calendrier renvoyé est réalisable, mais n'est peut-être pas optimal.
OPTIMAL Le calendrier renvoyé est optimal.
INFEASIBLE Il n'existe aucun calendrier réalisable pour les contraintes données. Le résolveur peut renvoyer cette valeur si un sous-ensemble des contraintes de niveau de priorité PRIORITY_MANDATORY ne peut pas être satisfait.
NOT_SOLVED Aucun planning trouvé.
NOT_SOLVED_DEADLINE_EXCEEDED Aucun planning trouvé dans le délai imparti.