Indice
Break
(messaggio)BreakRule
(messaggio)BudgetRequirement
(messaggio)CoverageRequirement
(messaggio)CoverageRequirement.RoleRequirement
(messaggio)CoverageRequirement.SkillRequirement
(messaggio)DemandCoverageViolation
(messaggio)Employee
(messaggio)EmployeeDemand
(messaggio)EmployeeSchedule
(messaggio)EmployeeSchedule.ShiftWithEvents
(messaggio)EmployeeSchedule.ShiftWithEvents.Event
(messaggio)EventTemplate
(messaggio)HourlyContract
(messaggio)HourlyContract.OvertimePeriod
(messaggio)Priority
(enum)ResourceConstraint
(messaggio)SchedulingConstraint
(messaggio)Shift
(messaggio)ShiftAssignment
(messaggio)ShiftGenerationSolutionStatus
(enum)ShiftPreference
(messaggio)ShiftRequest
(messaggio)ShiftTemplate
(messaggio)SolutionStatus
(enum)SolveParameters
(messaggio)SolverConfig
(messaggio)WorkStatus
(enum)
Pausa
Un periodo di tempo in cui un dipendente interrompe il proprio lavoro durante un turno.
Campi | |
---|---|
start_date_time |
L'ora di inizio di una pausa. |
duration_minutes |
Durata dell'interruzione in minuti. |
BreakRule
Una regola che determina quando può iniziare una pausa all'interno di un turno e la sua durata. L'elenco di tutte le possibili interruzioni prese in considerazione viene determinato in incrementi di rule_increment_minutes
. Ad esempio, se una regola di interruzione modella un'interruzione di 30 minuti che può iniziare tra le 10:00 e le 11:00 e l'incremento della regola è di 20 minuti, le interruzioni considerate sono: [10:00, 10:30], [10:20, 10:50], [10:40, 11:1].
Campi | |
---|---|
earliest_start_time |
La prima ora di inizio della pausa (inclusa). È possibile impostare solo |
latest_start_time |
L'ultima ora di inizio della pausa (inclusa). È possibile impostare solo |
duration_minutes |
Durata dell'interruzione in minuti. |
rule_increment_minutes |
[Facoltativo] Incremento del tempo in minuti per tutte le interruzioni che possono essere considerate in questa regola per le interruzioni. Se non viene configurato, il valore predefinito è |
BudgetRequirement
Requisiti di budget per un determinato intervallo.
Campi | |
---|---|
total_budget |
Budget totale per l'intervallo specificato. È necessario specificare un budget totale se la priorità è Se il criterio |
start_date_time |
Ora di inizio durante il quale si applica il budget. Se l'ora di inizio non è specificata, viene impostata come la prima ora di inizio di tutti i turni specificati. |
end_date_time |
Ora di fine per l'applicazione del budget. Se l'ora di fine non è specificata, viene impostata come l'ultima ora di fine di tutti i turni. |
priority |
Livello di priorità per soddisfare il requisito di budget durante l'intervallo di tempo specificato. La priorità predefinita è Tieni presente che se questa priorità è superiore ad altre priorità di vincolo e se |
CoverageRequirement
Un requisito di copertura specifica il numero di dipendenti necessari per un insieme di ruoli e/o competenze durante una particolare finestra temporale e in una determinata località. Gli intervalli DateTime in una determinata località non possono sovrapporsi. In alternativa, è possibile fornire un elenco di ID turni al posto di una finestra temporale e di una località. Solo i dipendenti che possono essere assegnati a un ruolo specifico (o che possiedono una competenza specifica) possono soddisfare questo requisito.
Per un determinato ruolo e/o competenza, il requisito di copertura viene soddisfatto quando almeno target_employee_count
di dipendenti lavora in ogni momento della finestra temporale (o per ogni turno in shift_ids
). Al contrario, il requisito di copertura viene violato se in qualsiasi momento della finestra temporale (o per uno qualsiasi dei turni in shift_ids
), ci sono meno di target_employee_count
di dipendenti che lavorano durante l'intervallo di tempo. Un numero maggiore di dipendenti che lavorano rispetto a target_employee_count
soddisfa comunque il requisito, ma il risolutore riduce al minimo l'impiego eccessivo di personale.
Campi | |
---|---|
start_date_time |
L'ora di inizio del requisito di copertura (incluso). Se impostato, il campo |
end_date_time |
L'ora di fine del requisito di copertura (esclusa). Se impostato, il campo |
location_id |
Località in cui sono necessari i dipendenti. Il campo |
shift_ids[] |
Se impostato, i requisiti di ruolo e competenza vengono applicati singolarmente a ogni ID turno in questo elenco. Se il valore di shift_id non è vuoto, i campi |
role_requirements[] |
Numero richiesto di dipendenti da assegnare ai ruoli specificati durante l'intervallo di tempo. È necessario specificare al massimo un |
skill_requirements[] |
Numero richiesto di dipendenti con le competenze specificate assegnate ai turni durante l'intervallo di tempo. È necessario specificare al massimo un |
RoleRequirement
Numero obbligatorio di dipendenti da assegnare al ruolo specificato durante l'intervallo di tempo.
Campi | |
---|---|
role_id |
ID ruolo per il requisito. |
target_employee_count |
Numero desiderato di dipendenti assegnati al ruolo durante la finestra temporale. |
priority |
Livello di priorità per questo vincolo di requisito. La priorità predefinita per tutti i vincoli delle risorse è |
SkillRequirement
Numero richiesto di dipendenti che lavorano nell'intervallo di tempo e possiedono la competenza specificata.
Campi | |
---|---|
skill_id |
ID competenza per il requisito. |
target_employee_count |
Numero desiderato di dipendenti con le competenze specifiche che lavorano nell'intervallo di tempo. |
priority |
Livello di priorità per questo vincolo di requisito. La priorità predefinita per tutti i vincoli delle risorse è |
DemandCoverageViolation
Specifica la violazione della copertura della domanda per l'intervallo specificato. La domanda dei dipendenti è la stessa per tutto l'intervallo specificato.
Campi | |
---|---|
start_date_time |
Data e ora di inizio dell'intervallo di domanda (incluse). Questo valore viene specificato fino al minuto. |
end_date_time |
Data e ora di fine dell'intervallo di domanda (esclusa). Questo valore viene specificato fino al minuto. |
coverage_violation |
Violazione della copertura durante l'intervallo specificato. Un valore positivo indica che la domanda è coperta da un limite di copertura, mentre un valore negativo indica che la domanda è coperta. |
Dipendente
Un dipendente della forza lavoro da pianificare.
Campi | |
---|---|
id |
ID univoco assegnato a questo dipendente. |
role_ids[] |
ID ruolo eseguibili da questo dipendente. Deve essere specificato almeno un ruolo. Quando un dipendente è assegnato a un turno, viene anche assegnato a un singolo ruolo di questo elenco. Al dipendente potrebbero essere assegnati ruoli diversi durante la finestra di pianificazione. |
skill_ids[] |
ID delle competenze posseduti dal dipendente. Questo elenco può essere vuoto. Quando un dipendente è assegnato a un turno, utilizza qualsiasi sottoinsieme delle competenze elencate qui per coprire i requisiti di competenza per tutta la durata del turno assegnato. |
shift_preferences[] |
Sposta le preferenze di questo dipendente. I turni specificati qui rappresentano i turni a cui il dipendente preferirebbe essere assegnato durante la finestra di programmazione. Gli ID spostamento specificati in |
scheduling_constraints[] |
Elenco dei vincoli di pianificazione per questo dipendente. Il livello di priorità predefinito per ciascuno di questi vincoli è |
resource_constraints[] |
Eventuali vincoli di pianificazione aggiuntivi non specificati in |
shift_requests[] |
Elenco di richieste di turni per il dipendente. La richiesta può fare in modo che un dipendente venga assegnato o meno a turni specifici. Qualsiasi assegnazione di pianificazione fissa per il dipendente può essere rappresentata con un elemento |
hourly_contract |
Contratto che specifica le tariffe orarie regolari e di straordinario del dipendente. |
EmployeeDemand
Specifica il numero di dipendenti necessari per coprire la domanda in un intervallo DateTime specificato.
Campi | |
---|---|
start_date_time |
Inizio dell'intervallo di tempo per la domanda specificata (inclusa). Questi valori vengono letti per difetto al minuto; i secondi e tutte le unità più piccole vengono ignorati. |
end_date_time |
Fine dell'intervallo di tempo per la domanda specificata (esclusa). Questi valori vengono letti per difetto al minuto; i secondi e tutte le unità più piccole vengono ignorati. |
employee_count |
Numero di dipendenti necessari per coprire la domanda per questo intervallo. |
EmployeeSchedule
Un elenco ordinato di turni corrispondente a un singolo ShiftTemplate
da assegnare a più dipendenti.
Campi | |
---|---|
shift_template_id |
ID del modello utilizzato per generare questo insieme di variazioni. |
shifts[] |
Elenco dei turni a cui è assegnato il numero di dipendenti |
employee_count |
Numero di dipendenti da assegnare a questo insieme di turni per coprire la domanda. |
ShiftWithEvents
Specifica le date di inizio e di fine insieme a un elenco di eventi fissi di una variazione generata dal risolutore.
Campi | |
---|---|
start_date_time |
Data e ora di inizio del turno. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole. |
end_date_time |
Data e ora di fine del turno. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole. |
events[] |
Elenco degli eventi inclusi in questa modifica, mappati esattamente e nello stesso ordine dei |
Evento
Specifica la data e l'ora di inizio e di fine di un evento specifico in una variazione generata dal risolutore.
Campi | |
---|---|
event_template_id |
ID del modello utilizzato per generare l'evento. |
start_date_time |
Data e ora di inizio dell'evento. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole. |
end_date_time |
Data e ora di fine dell'evento. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole. |
EventTemplate
Modello che specifica le regole per la generazione di un singolo evento che si verifica durante un turno. Un evento può rappresentare una riunione, una pausa, un pranzo e così via.
Campi | |
---|---|
id |
ID univoco di questo modello. |
minimum_minutes_after_shift_start |
Numero minimo di minuti dopo l'inizio di un turno in cui può iniziare questo evento. |
maximum_minutes_after_shift_start |
Numero massimo di minuti dopo l'inizio di un turno in cui questo evento può iniziare. |
duration_minutes |
Durata fissa in minuti di questo evento. |
start_time_increment_minutes |
L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio degli eventi tra il giorno |
HourlyContract
Specifica una tariffa oraria di base, differenziali di tariffa e moltiplicatori di straordinari per determinare la retribuzione per un dipendente. Tieni presente che le normative vigenti in luoghi diversi potrebbero richiedere un calcolo diverso dell'indennità per gli straordinari. Il risolutore approssima la retribuzione degli straordinari per ridurre al minimo un proxy del costo totale o soddisfare un budget (vedi BudgetRequirement
). Non è inteso come uno strumento per calcolare le buste paga.
Campi | |
---|---|
base_hourly_rate |
Il compenso per il lavoro di un'ora non straordinaria. Se al dipendente si applicano più tariffe, vengono applicate differenze di tariffa rispetto a questa tariffa oraria di base. Inoltre, se sono presenti più tariffe, la tariffa oraria di base deve essere quella minima tra queste. |
hourly_rate_shift_differentials |
Il differenziale della tariffa oraria, pagato in aggiunta al |
overtime_periods[] |
Un elenco di tutti i periodi per i quali è necessario calcolare il tempo straordinario. Questi periodi non devono sovrapporsi. |
OvertimePeriod
Periodo fisso e ricorrente (in genere 168 ore o sette periodi consecutivi di 24 ore) utilizzato per determinare l'importo della compensazione per gli straordinari. Ogni periodo ha un moltiplicatore degli straordinari (ad es. 1.5) rispetto al base_hourly_rate
e a un limite al numero di ore considerate lavorative regolari (non straordinari). Qualsiasi turno che si sovrappone alla finestra di tempo start_date_time
(incluso) e end_date_time
(escluso) viene conteggiato nel numero totale di ore lavorate nel periodo. Se la sovrapposizione è parziale, vengono conteggiate solo le ore che si sovrappongono.
Campi | |
---|---|
overtime_multiplier |
Moltiplicatore per calcolare la tariffa oraria straordinaria (deve essere maggiore o uguale a 1,0). In genere, la tariffa oraria relativa agli straordinari viene calcolata come |
start_date_time |
Ora di inizio del periodo di tempo straordinario. Se un turno si sovrappone in questo orario, le ore di questo spostamento vengono conteggiate a partire da |
end_date_time |
Ora di fine del periodo di tempo straordinario. Se un turno si sovrappone a questo orario, le ore di questo turno vengono conteggiate fino a |
maximum_regular_hours |
Numero massimo di ore di lavoro pagate con una tariffa regolare (non straordinario). Questa quantità deve essere positiva. |
Priorità
Il livello di priorità per qualsiasi vincolo nella pianificazione di un dipendente o nei requisiti di copertura. Sono inclusi SchedulingConstraint
, ResourceConstraint
, ShiftRequest
e CoverageRequirement
. Poiché potrebbero esserci vincoli in conflitto, non è sempre possibile soddisfare tutti i vincoli. Di conseguenza, ogni tipo di vincolo ha una priorità (dall'utente o predefinita) che informa il risolutore dell'importanza relativa di tutti i vincoli assegnati a una pianificazione completa.
Enum | |
---|---|
PRIORITY_UNSPECIFIED |
Livello di priorità sconosciuto. |
PRIORITY_LOW |
Il livello di priorità più basso. I vincoli con questa priorità sono meno importanti degli altri. Sono i primi a essere presi in considerazione per violazione se non è possibile trovare una soluzione fattibile. |
PRIORITY_MEDIUM |
Livello di priorità medio. I vincoli con questa priorità sono più importanti dei vincoli con priorità PRIORITY_LOW , ma meno importanti dei vincoli con priorità PRIORITY_HIGH . Se non è possibile trovare una soluzione fattibile dopo aver allentato tutti i vincoli con priorità PRIORITY_LOW , i vincoli con priorità PRIORITY_MEDIUM vengono considerati i successivi per la violazione. |
PRIORITY_HIGH |
Il livello di priorità più alto. I vincoli con questo livello di priorità sono i più importanti. Sono gli ultimi a essere considerati per violazione se non è possibile trovare una soluzione fattibile dopo aver allentato i vincoli dei livelli di priorità inferiori. |
PRIORITY_MANDATORY |
Livello di priorità che rappresenta qualcosa che non può essere violato dal risolutore. Se il risolutore restituisce SolutionStatus.INFEASIBLE , la causa potrebbe essere un numero eccessivo di vincoli PRIORITY_MANDATORY . |
ResourceConstraint
Un vincolo generale che limita la quantità di una determinata "risorsa" utilizzata da un dipendente. Si tratta di una versione astratta dello standard SchedulingConstraint
più specifico e più flessibile per l'utente. Questo messaggio consente di specificare molti vincoli di pianificazione che non possono essere specificati in SchedulingConstraint.type
.
Campi | |
---|---|
priority |
Livello di priorità di questo vincolo della risorsa. La priorità predefinita per tutti i vincoli delle risorse è |
resource_usages |
Quantità di risorse utilizzata dai turni. Ad esempio, se questo vincolo si applica alle ore minime e massime lavorate da un dipendente in una determinata settimana, questa mappa conterrà i turni che si verificano in quella settimana e la durata di ogni turno in ore. |
minimum_resource_usage |
Utilizzo minimo delle risorse per soddisfare un vincolo delle risorse. |
maximum_resource_usage |
Utilizzo massimo delle risorse per soddisfare un vincolo delle risorse. |
SchedulingConstraint
Vincolo di pianificazione specifico per un determinato dipendente. Il vincolo specificato viene applicato solo durante l'intervallo [start_date_time,
end_date_time)
specificato.
Campi | |
---|---|
priority |
Livello di priorità per questo vincolo di pianificazione. La priorità predefinita per tutti i vincoli di pianificazione è |
start_date_time |
L'ora di inizio in cui viene applicato questo vincolo di pianificazione (inclusa). |
end_date_time |
L'ora di fine in cui viene applicato questo vincolo di pianificazione (esclusa). |
Campo unione type . Il tipo di vincolo specificato. Ogni vincolo viene applicato solo entro l'intervallo di tempo specificato sopra. type può essere solo uno dei seguenti: |
|
minimum_minutes |
Numero minimo di minuti in cui il dipendente può lavorare. Se al dipendente è assegnato un turno che si sovrappone (totalmente o parzialmente) all'intervallo di tempo, il numero di minuti in cui il turno si sovrappone alla finestra temporale è incluso in questo conteggio. |
maximum_minutes |
Numero massimo di minuti in cui il dipendente può lavorare nella finestra temporale. Se al dipendente è assegnato un turno che si sovrappone (totalmente o parzialmente) all'intervallo di tempo, il numero di minuti in cui il turno si sovrappone alla finestra temporale è incluso in questo conteggio. |
minimum_consecutive_work_days |
Numero minimo di giorni consecutivi in cui il dipendente può lavorare. Un dipendente lavora in un giorno specifico se è assegnato a un turno che inizia durante quella giornata. Nel conteggio è incluso qualsiasi turno assegnato al dipendente che inizia nella finestra temporale. |
maximum_consecutive_work_days |
Numero massimo di giorni consecutivi in cui il dipendente può lavorare. Un dipendente lavora in un giorno specifico se è assegnato a un turno che inizia durante quella giornata. Nel conteggio è incluso qualsiasi turno assegnato al dipendente che inizia nella finestra temporale. |
minimum_shift_count |
Numero minimo di turni che il dipendente può lavorare. Nel conteggio viene incluso qualsiasi turno assegnato al dipendente che si sovrappone completamente alla finestra temporale. |
maximum_shift_count |
Numero massimo di turni che il dipendente può lavorare. Nel conteggio viene incluso qualsiasi turno assegnato al dipendente che si sovrappone completamente alla finestra temporale. |
minimum_rest_minutes |
Numero minimo di minuti in cui il dipendente deve riposare dopo la fine di un turno prima di essere assegnato a un altro turno. Questo vincolo si applica a ogni coppia di adattamenti completamente inclusi in [ |
Maiusc
Un turno specifica una finestra temporale fissa in cui i dipendenti possono lavorare.
Campi | |
---|---|
id |
ID univoco assegnato a questo spostamento. |
location_id |
ID località in cui è stato applicato questo turno. Può essere vuoto. |
start_date_time |
L'ora di inizio del turno (inclusa). |
end_date_time |
L'ora di fine del turno (esclusa). Attualmente, il risolutore ammette solo turni di durata inferiore a 24 ore. |
break_rules[] |
Un elenco di regole di interruzione che si verificano durante il turno. Ai dipendenti che svolgono questo turno viene assegnata una pausa ogni |
ShiftAssignment
Un dipendente a cui assegnare il ruolo di turno.
Campi | |
---|---|
employee_id |
L'ID dipendente assegnato. |
shift_id |
ID spostamento assegnato al dipendente. |
role_id |
ID ruolo a cui è assegnato il dipendente per il turno. |
breaks[] |
Elenco delle pause per questo compito di turno. |
ShiftGenerationSolutionStatus
Stato della soluzione fornito nella risposta di un risolutore.
Enum | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Stato non specificato per la risposta. |
SHIFT_GENERATION_SOLVED |
Il risolutore ha trovato una soluzione nel limite di tempo indicato. |
SHIFT_GENERATION_NOT_SOLVED |
Un problema ha impedito al risolutore di generare cambiamenti. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Non è stato possibile generare adattamenti per coprire la domanda entro il limite di tempo specificato. |
ShiftPreference
Una preferenza numerica per un determinato ID variazione.
Campi | |
---|---|
shift_id |
ID spostamento per il quale è specificata la preferenza. |
preference |
Valori di preferenza più alti indicano un cambiamento più desiderabile. |
ShiftRequest
La richiesta di un dipendente di essere assegnata o meno a turni specifici.
Campi | |
---|---|
priority |
Livello di priorità di questa richiesta di pianificazione. La priorità predefinita per tutte le richieste di pianificazione è |
shift_ids[] |
Gli ID delle variazioni della richiesta di pianificazione. |
type |
Tipo di richiesta, ad esempio se la richiesta è assegnata o meno all'insieme di turni. |
ShiftTemplate
Modello che specifica le regole per generare le variazioni. Un turno è un'unità di lavoro che specifica un'ora di inizio e di fine e può contenere eventi (ad esempio pranzo, pause e così via). A una data specifica verrà assegnato uno spostamento nella risposta.
Campi | |
---|---|
id |
ID univoco di questo modello. |
earliest_start_time |
La prima ora del giorno in cui può iniziare un turno. Questo valore viene specificato con le ore e i minuti; i secondi e i nano vengono ignorati. |
latest_start_time |
L'ultima ora della giornata in cui può iniziare un turno. Questo valore viene specificato con le ore e i minuti; i secondi e i nano vengono ignorati. Se questo valore è inferiore a |
duration_minutes |
Durata fissa di una variazione generata da questo modello. |
start_time_increment_minutes |
L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio comprese tra |
days_off_count_per_week |
Numero fisso di giorni liberi a settimana. Un dipendente ha un determinato giorno libero se non è assegnato a un turno che inizia in quella data. Una settimana dura 7 giorni e inizia la domenica. |
event_templates[] |
Regole per la generazione di eventi per ogni turno. Verrà incluso esattamente un evento in ogni turno per ogni evento specificato. |
minimum_interevent_gap_minutes |
Numero minimo di minuti tra la fine di un evento e l'inizio di quello successivo. |
maximum_employee_count |
Numero massimo di dipendenti che può essere assegnato a tutti i turni generati da questo modello. |
SolutionStatus
Stato della soluzione (ovvero una pianificazione) fornito nella risposta di un risolutore.
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Stato non specificato per la risposta. |
FEASIBLE |
La pianificazione restituita è fattibile, ma potrebbe non essere ottimale. |
OPTIMAL |
La pianificazione restituita è ottimale. |
INFEASIBLE |
Non esiste alcuna pianificazione fattibile per i vincoli specificati. Il risolutore potrebbe restituire questo valore se non è possibile soddisfare un sottoinsieme dei vincoli con livello di priorità PRIORITY_MANDATORY . |
NOT_SOLVED |
Nessuna pianificazione trovata. |
NOT_SOLVED_DEADLINE_EXCEEDED |
Nessuna pianificazione trovata entro il limite di tempo specificato. |
SolveParameters
Parametri che controllano una singola soluzione del problema di pianificazione dei turni.
Campi | |
---|---|
time_limit |
Tempo massimo che il risolutore dovrebbe dedicare al problema. Se non viene configurato, il valore predefinito è 1 minuto. Questo valore non rappresenta un limite rigido e non tiene conto dell'overhead di comunicazione. La latenza prevista per risolvere il problema potrebbe superare leggermente questo valore. |
SolverConfig
Specifica parametri aggiuntivi per risolvere il problema relativo alla generazione di adattamenti.
Campi | |
---|---|
time_limit |
Tempo massimo che il risolutore dovrebbe dedicare al problema. Se non viene configurato, il valore predefinito è 1 minuto. La scelta di un limite di tempo deve dipendere dalla portata del problema. Per fare un esempio, quando si risolve un'istanza di 7 giorni con 2 Questo valore non rappresenta un limite rigido e non tiene conto dell'overhead di comunicazione. La latenza prevista per risolvere il problema potrebbe superare leggermente questo valore. |
multi_day_schedule |
Se true, il risolutore genera |
shift_events_can_change |
Se true, i |
WorkStatus
Che un dipendente lavori o meno.
Enum | |
---|---|
WORK_STATUS_UNSPECIFIED |
Stato del lavoro sconosciuto. |
STATUS_WORK |
Stato che rappresenta un dipendente che lavora. |
STATUS_NOT_WORK |
Stato che rappresenta un dipendente non lavoratore. |