Method: scheduling.solveShiftScheduling

Menyelesaikan masalah penjadwalan shift tetap dari SolveShiftSchedulingRequest yang ditentukan dengan menugaskan karyawan untuk melakukan shift sehingga karyawan preferensi penjadwalan dimaksimalkan dan pelanggaran batasan penjadwalan diminimalkan.

Permintaan HTTP

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

URL menggunakan sintaksis gRPC Transcoding.

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi 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)
    }
  ]
}
Kolom
requestId

string

ID masalah atau permintaan.

solveParameters

object (SolveParameters)

Parameter untuk mengontrol satu penyelesaian masalah.

employees[]

object (Employee)

Semua karyawan yang tersedia untuk dijadwalkan.

shifts[]

object (Shift)

Semua shift untuk mengikuti jadwal.

coverageRequirements[]

object (CoverageRequirement)

Persyaratan cakupan untuk seluruh cakrawala perencanaan. Daftar ini menentukan jumlah karyawan yang harus menjalankan setiap peran, atau memiliki keterampilan, selama jangka waktu atau daftar ID shift. Semua persyaratan cakupan harus ditentukan dengan jangka waktu atau daftar ID perubahan (tetapi tidak keduanya). Periode waktu (jika diberikan) untuk persyaratan cakupan tidak boleh tumpang-tindih untuk setiap lokasi yang ditentukan. Tingkat prioritas default untuk setiap batasan ini adalah PRIORITY_MANDATORY untuk persyaratan peran dan PRIORITY_LOW untuk persyaratan keterampilan. Lihat enum Priority untuk detail selengkapnya.

roleIds[]

string

Daftar semua peran yang memungkinkan di seluruh tenaga kerja. Setiap karyawan harus memiliki setidaknya satu peran yang dapat ditugaskan kepada mereka untuk shift. Peran mengacu pada penugasan pekerjaan tertentu selama {i>shift<i} (yaitu perawat terdaftar, koki eksekutif, pelayan, dll.). Saat seorang karyawan ditugaskan ke shift, mereka juga diberi satu peran tertentu.

skillIds[]

string

Daftar semua keterampilan yang tersedia di seluruh tenaga kerja. Keterampilan mengacu pada kualifikasi tambahan yang mungkin dimiliki seorang karyawan yang tidak berhubungan dengan pekerjaan tertentu (yaitu sertifikasi, bahasa yang digunakan, dll.). Daftar ini boleh kosong. Ketika seorang karyawan ditugaskan untuk sebuah {i>shift<i}, mereka harus memenuhi semua keterampilan yang dibutuhkan untuk {i>shift<i} itu.

locationIds[]

string

Daftar semua kemungkinan lokasi untuk rangkaian shift dalam jadwal. Daftar ini boleh kosong. Menentukan lokasi yang berbeda dapat berguna ketika, misalnya, manajer perawat ingin menjadwalkan banyak perawat di berbagai unit rumah sakit atau, misalnya, manajer hotel ingin menjadwalkan karyawan di beberapa hotel.

budgetRequirements[]

object (BudgetRequirement)

Spesifikasi anggaran untuk masalah penjadwalan. Tingkat prioritas default untuk setiap persyaratan ini adalah PRIORITY_LOW. Lihat enum Priority untuk detail selengkapnya.

assignmentsHint[]

object (ShiftAssignment)

Geser penugasan untuk digunakan sebagai solusi tentatif (alias petunjuk solusi) untuk masalah penjadwalan. Petunjuk penetapan akan diabaikan jika tugas bertentangan dengan shift yang tidak dapat ditetapkan atau permintaan penjadwalan.

Isi respons

Respons untuk API penjadwalan tenaga kerja. Untuk setiap respons, shiftAssignments akan kosong jika solutionStatus yang ditampilkan adalah NOT_SOLVED_DEADLINE_EXCEEDED atau INFEASIBLE. Jika solutionStatus yang ditampilkan adalah OPTIMAL atau FEASIBLE, penetapan shift yang valid akan ditampilkan dalam shiftAssignments. Untuk penetapan shift yang valid, properti berikut berlaku:

  1. Setiap ID karyawan ada dalam kumpulan karyawan yang diberikan dalam permintaan.
  2. Setiap ID peran yang ditetapkan kepada karyawan terdapat dalam kumpulan ID peran untuk karyawan yang bersangkutan.
  3. Setiap ID pergeseran dimuat dalam kumpulan shift yang diberikan dalam permintaan.
  4. Setiap ID shift bukan salah satu ID shift yang tidak dapat ditetapkan untuk karyawan tertentu.
  5. Seorang karyawan tidak akan pernah ditugaskan ke dua {i>shift<i} yang tumpang tindih.
  6. Untuk jadwal yang diberikan, tidak ada batasan atau permintaan dengan tingkat prioritas PRIORITY_MANDATORY yang dilanggar.

Jika berhasil, isi respons memuat data dengan struktur berikut:

Representasi JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Kolom
requestId

string

ID permintaan yang dikaitkan dengan respons ini.

solutionStatus

enum (SolutionStatus)

Status solusi yang ditampilkan. Jika solusi tidak FEASIBLE atau OPTIMAL, kolom lain dalam proto ini mungkin kosong. Jika statusnya NOT_SOLVED_DEADLINE_EXCEEDED, batas waktu tercapai tanpa menemukan solusi yang layak atau menentukan apakah solusi yang layak ada. Permintaan mungkin tidak layak jika batasan tingkat prioritas WAJIB tidak dapat dipenuhi.

shiftAssignments[]

object (ShiftAssignment)

Daftar semua tugas. Setiap ShiftAssignment menentukan karyawan, shift yang ditugaskan kepada mereka, dan peran yang ditugaskan kepada mereka untuk shift tersebut.

statusMessage

string

Jika solutionStatus tidak optimal, kolom ini mungkin berisi informasi tambahan tentang pemecah.

SolveParameters

Parameter yang mengontrol satu pemecahan masalah penjadwalan shift.

Representasi JSON
{
  "timeLimit": string
}
Kolom
timeLimit

string (Duration format)

Waktu maksimum yang harus dihabiskan oleh pemecah masalah untuk menyelesaikan soal. Jika tidak disetel, setelan defaultnya adalah 1 menit.

Nilai ini bukan batas pasti dan tidak memperhitungkan overhead komunikasi. Latensi yang diharapkan untuk menyelesaikan masalah mungkin sedikit lebih besar daripada nilai ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

Karyawan

Seorang karyawan dari tenaga kerja yang akan dijadwalkan.

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

string

ID unik yang ditetapkan untuk karyawan ini.

roleIds[]

string

ID peran yang dapat dijalankan karyawan ini. Setidaknya harus ada satu peran yang ditentukan. Saat karyawan ditugaskan ke shift, mereka juga diberi satu peran dari daftar ini. Karyawan tersebut dapat diberi peran yang berbeda selama periode penjadwalan.

skillIds[]

string

ID keterampilan yang dimiliki karyawan ini. Daftar ini boleh kosong. Ketika seorang karyawan ditugaskan ke shift, mereka menggunakan keterampilan apa pun yang tercantum di sini untuk membahas persyaratan keterampilan selama durasi shift yang ditugaskan.

shiftPreferences[]

object (ShiftPreference)

Shift preferensi karyawan ini. Shift yang ditentukan di sini mewakili shift yang ingin ditugaskan kepada karyawan selama periode penjadwalan. ID perubahan yang ditentukan di shiftPreferences harus unik. Pemecah masalah akan mencoba memaksimalkan jumlah nilai ShiftPreference.preference pada semua shiftPreferences yang terpenuhi.

schedulingConstraints[]

object (SchedulingConstraint)

Daftar batasan penjadwalan untuk karyawan ini. Tingkat prioritas default untuk setiap batasan ini adalah PRIORITY_MEDIUM. Lihat enum Priority untuk detail selengkapnya.

resourceConstraints[]

object (ResourceConstraint)

Batasan penjadwalan tambahan yang tidak ditentukan di schedulingConstraints dapat ditambahkan di sini ke resourceConstraints. ResourceConstraint adalah representasi yang lebih abstrak untuk membatasi resource bagi karyawan. Tingkat prioritas default untuk setiap batasan ini adalah PRIORITY_MEDIUM. Lihat enum Priority untuk detail selengkapnya.

shiftRequests[]

object (ShiftRequest)

Daftar permintaan shift untuk karyawan tersebut. Permintaan bisa berupa karyawan yang ditugaskan atau tidak untuk shift tertentu. Setiap tugas penjadwalan tetap untuk karyawan tersebut dapat ditampilkan dengan ShiftRequest dengan prioritas PRIORITY_MANDATORY. ID shift dapat muncul di maksimal satu permintaan penjadwalan untuk karyawan ini. Tingkat prioritas default untuk setiap permintaan ini adalah PRIORITY_LOW. Lihat enum Priority untuk detail selengkapnya.

hourlyContract

object (HourlyContract)

Kontrak yang menetapkan tarif per jam reguler dan lembur untuk karyawan.

ShiftPreference

Preferensi numerik untuk ID pergeseran tertentu.

Representasi JSON
{
  "shiftId": string,
  "preference": integer
}
Kolom
shiftId

string

ID Shift yang preferensinya ditetapkan.

preference

integer

Nilai preferensi yang lebih besar menunjukkan pergeseran yang lebih diinginkan.

SchedulingConstraint

Batasan penjadwalan khusus untuk karyawan tertentu. Batasan yang ditentukan hanya diterapkan selama interval yang diberikan [startDateTime, endDateTime).

Representasi 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.
}
Kolom
priority

enum (Priority)

Tingkat prioritas untuk batasan penjadwalan ini. Prioritas default untuk semua batasan penjadwalan adalah PRIORITY_MEDIUM.

startDateTime

object (DateTime)

Waktu mulai saat batasan penjadwalan ini berlaku (inklusif).

endDateTime

object (DateTime)

Waktu berakhir saat batasan penjadwalan ini berlaku (eksklusif).

Kolom union type. Jenis batasan yang ditentukan. Setiap batasan hanya diterapkan dalam jangka waktu yang ditentukan di atas. type hanya dapat berupa salah satu dari berikut:
minimumMinutes

integer

Jumlah menit minimum yang dapat digunakan karyawan untuk bekerja. Jika karyawan ditugaskan ke shift yang tumpang tindih (seluruh atau sebagian) periode waktu tersebut, jumlah menit shift tumpang tindih dengan periode waktu tersebut akan dimasukkan dalam hitungan ini.

maximumMinutes

integer

Jumlah menit maksimum karyawan dapat bekerja dalam jangka waktu tersebut. Jika karyawan ditugaskan ke shift yang tumpang tindih (seluruh atau sebagian) periode waktu tersebut, jumlah menit shift tumpang tindih dengan periode waktu tersebut akan dimasukkan dalam hitungan ini.

minimumConsecutiveWorkDays

integer

Jumlah minimum hari berturut-turut karyawan dapat bekerja. Seorang karyawan bekerja pada hari tertentu jika mereka ditugaskan pada {i>shift<i} yang dimulai pada hari itu. Setiap shift yang ditugaskan kepada karyawan yang dimulai dalam jangka waktu ini termasuk dalam jumlah ini.

maximumConsecutiveWorkDays

integer

Jumlah maksimum hari berturut-turut karyawan dapat bekerja. Seorang karyawan bekerja pada hari tertentu jika mereka ditugaskan pada {i>shift<i} yang dimulai pada hari itu. Setiap shift yang ditugaskan kepada karyawan yang dimulai dalam jangka waktu ini termasuk dalam jumlah ini.

minimumShiftCount

integer

Jumlah minimum shift yang dapat dilakukan karyawan. Setiap shift yang ditugaskan kepada karyawan yang sepenuhnya tumpang-tindih dengan jangka waktu tersebut termasuk dalam jumlah ini.

maximumShiftCount

integer

Jumlah maksimum shift yang dapat dilakukan karyawan. Setiap shift yang ditugaskan kepada karyawan yang sepenuhnya tumpang-tindih dengan jangka waktu tersebut termasuk dalam jumlah ini.

minimumRestMinutes

integer

Jumlah menit minimum karyawan harus beristirahat setelah satu shift selesai sebelum ditugaskan ke shift lain. Batasan ini berlaku untuk setiap pasangan shift yang tercakup sepenuhnya dalam [startDateTime, endDateTime].

Prioritas

Tingkat prioritas untuk kendala apa pun pada jadwal karyawan atau persyaratan cakupan. Ini termasuk SchedulingConstraint, ResourceConstraint, ShiftRequest, dan CoverageRequirement. Karena bisa saja ada batasan yang bertentangan, setiap batasan tidak selalu dapat dipenuhi. Dengan demikian, setiap jenis batasan memiliki prioritas (diberikan oleh pengguna atau default) yang memberi tahu pemecah masalah tentang kepentingan relatif semua batasan yang diberikan ke jadwal yang lengkap.

Enum
PRIORITY_UNSPECIFIED Tingkat prioritas tidak diketahui.
PRIORITY_LOW Tingkat prioritas terendah. Batasan dengan prioritas ini tidak terlalu penting dibandingkan batasan lainnya. Mereka adalah pihak pertama yang dipertimbangkan untuk melakukan pelanggaran jika solusi yang layak tidak dapat ditemukan.
PRIORITY_MEDIUM Tingkat prioritas sedang. Batasan dengan prioritas ini lebih penting daripada batasan dengan prioritas PRIORITY_LOW, tetapi kurang penting dibandingkan batasan dengan prioritas PRIORITY_HIGH. Jika solusi yang layak tidak dapat ditemukan setelah melonggarkan semua batasan dengan prioritas PRIORITY_LOW, batasan prioritas PRIORITY_MEDIUM akan dianggap berikutnya untuk pelanggaran.
PRIORITY_HIGH Tingkat prioritas tertinggi. Batasan dengan tingkat prioritas ini adalah yang paling penting. Solusi ini adalah solusi terakhir yang dipertimbangkan untuk pelanggaran jika solusi yang layak tidak dapat ditemukan setelah melonggarkan batasan dari tingkat prioritas yang lebih rendah.
PRIORITY_MANDATORY Tingkat prioritas yang mewakili sesuatu yang tidak dapat dilanggar oleh pemecah masalah. Jika pemecah masalah menampilkan SolutionStatus.INFEASIBLE, itu mungkin karena terlalu banyak batasan PRIORITY_MANDATORY.

ResourceConstraint

Batasan umum yang membatasi jumlah "resource" tertentu digunakan oleh seorang karyawan. Ini adalah versi abstrak dari SchedulingConstraint yang lebih spesifik yang lebih fleksibel bagi pengguna. Banyak batasan penjadwalan yang tidak dapat ditentukan di SchedulingConstraint.type dapat ditentukan menggunakan pesan ini.

Representasi JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Kolom
priority

enum (Priority)

Tingkat prioritas batasan resource ini. Prioritas default untuk semua batasan resource adalah PRIORITY_MEDIUM.

resourceUsages

map (key: string, value: number)

Jumlah sumber daya yang digunakan oleh shift. Misalnya, jika batasan ini berlaku untuk jam kerja minimum dan maksimum seorang karyawan dalam minggu tertentu, peta ini akan berisi pergeseran yang terjadi pada minggu tersebut dan lamanya setiap shift dalam jam.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Penggunaan resource minimum untuk batasan resource yang harus dipenuhi.

maximumResourceUsage

number

Penggunaan resource maksimum untuk batasan resource yang harus dipenuhi.

ShiftRequest

Permintaan karyawan untuk ditugaskan atau tidak ditugaskan ke shift tertentu.

Representasi JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Kolom
priority

enum (Priority)

Tingkat prioritas permintaan penjadwalan ini. Prioritas default untuk semua permintaan penjadwalan adalah PRIORITY_LOW.

shiftIds[]

string

ID shift permintaan penjadwalan.

type

enum (WorkStatus)

Jenis permintaan, misalnya, apakah permintaan ditugaskan atau tidak ditetapkan ke kumpulan shift.

WorkStatus

Apakah seorang karyawan bekerja atau tidak.

Enum
WORK_STATUS_UNSPECIFIED Status pekerjaan tidak diketahui.
STATUS_WORK Status mewakili karyawan yang bekerja.
STATUS_NOT_WORK Status mewakili karyawan yang tidak bekerja.

HourlyContract

Menentukan tarif dasar per jam, diferensial tarif, dan pengganda waktu lembur guna menentukan kompensasi untuk satu karyawan. Perlu diperhatikan bahwa peraturan di tempat yang berbeda mungkin memerlukan komputasi kompensasi lembur yang berbeda. Pemecah masalah memperkirakan kompensasi lembur untuk meminimalkan proxy dari total biaya atau memenuhi anggaran (lihat BudgetRequirement). Fitur ini tidak dimaksudkan sebagai alat untuk menghitung penggajian.

Representasi JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Kolom
baseHourlyRate

number

Kompensasi untuk bekerja di luar jam lembur. Jika karyawan memiliki beberapa tarif, perbedaan tarif akan diterapkan relatif terhadap tarif per jam dasar ini. Selain itu, jika ada beberapa tarif, tarif per jam dasar harus merupakan nilai minimum dari tarif tersebut.

hourlyRateShiftDifferentials

map (key: string, value: number)

Perbedaan tarif per jam, dibayar berdasarkan baseHourlyRate. Misalnya, jika tarif per jam dasar adalah $30/jam, "shift_1" dibayar dengan tarif $40/jam dan, "shift_2" dibayar dengan tarif $45/jam, maka representasi protonya adalah: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Daftar semua periode yang memerlukan penghitungan lembur. Periode ini tidak boleh tumpang-tindih.

OvertimePeriod

Periode tetap dan berulang yang teratur (biasanya 168 jam atau tujuh periode 24 jam berturut-turut) yang digunakan untuk menentukan jumlah kompensasi lembur. Setiap periode memiliki pengganda waktu tambahan (mis., 1.5) relatif terhadap baseHourlyRate dan batas jumlah jam yang dianggap sebagai pekerjaan reguler (non-lembur). Setiap perubahan yang tumpang-tindih dengan jangka waktu startDateTime (inklusif) dan endDateTime (eksklusif) akan dihitung sebagai total jumlah jam kerja dalam periode tersebut. Jika tumpang tindih sebagian, hanya jam yang tumpang tindih yang akan dihitung.

Representasi JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Kolom
overtimeMultiplier

number

Pengganda untuk menghitung tarif per jam lembur (harus lebih besar atau sama dengan 1,0). Tarif per jam lembur biasanya akan dihitung sebagai baseHourlyRate * overtimeMultiplier. Jika ada beberapa tarif yang diberikan melalui hourlyRateShiftDifferentials, pemecah masalah memperkirakan tarif lembur per jam dengan rata-rata sederhana dari tarif yang berlaku selama periode lembur. Catatan: peraturan di tempat yang berbeda mungkin memerlukan komputasi kompensasi lembur yang berbeda. Pemecah masalah memperkirakan kompensasi lembur untuk meminimalkan proxy dari total biaya atau memenuhi anggaran, tetapi tidak dimaksudkan sebagai alat untuk menghitung penggajian.

startDateTime

object (DateTime)

Waktu mulai untuk periode perpanjangan waktu. Jika shift tumpang-tindih pada waktu ini, jam shift tersebut akan dihitung dari startDateTime.

endDateTime

object (DateTime)

Waktu berakhir untuk periode perpanjangan waktu. Jika shift tumpang-tindih pada waktu ini, jam shift tersebut akan dihitung hingga endDateTime.

maximumRegularHours

number

Jumlah maksimum jam kerja yang dibayar dengan tarif reguler (bukan lembur). Jumlah ini harus positif.

Shift

Shift menentukan jangka waktu tetap di mana karyawan dapat bekerja.

Representasi JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Kolom
id

string

ID unik yang ditetapkan untuk peralihan ini.

locationId

string

ID lokasi tempat perubahan ini dilakukan. Daftar ini boleh kosong.

startDateTime

object (DateTime)

Waktu mulai shift (inklusif).

endDateTime

object (DateTime)

Waktu berakhir shift (eksklusif). Saat ini, pemecah masalah hanya mengizinkan shift yang berdurasi kurang dari 24 jam.

breakRules[]

object (BreakRule)

Daftar aturan jeda yang terjadi selama shift. Karyawan yang melakukan shift ini diberi waktu istirahat per break_rule, dan selama periode tersebut mereka tidak memenuhi permintaan untuk peran yang mereka penuhi. Setiap periode waktu BreakRule harus disertakan sepenuhnya dalam jangka waktu shift ini.

BreakRule

Aturan yang menentukan kapan jeda dapat dimulai dalam sebuah shift dan durasinya. Daftar semua kemungkinan jeda yang dipertimbangkan ditentukan dengan kelipatan ruleIncrementMinutes. Misalnya, jika aturan jeda membuat model jeda 30 menit yang dapat dimulai antara pukul 10.00 dan 11.00, serta penambahan aturan adalah 20 menit, daftar jeda yang dipertimbangkan adalah: [10:00, 10:30], [10:20, 10:50], [10:40, 11:1], [10:40, 11:1]

Representasi JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Kolom
earliestStartTime

object (DateTime)

Waktu mulai paling awal dari jeda (inklusif). Hanya hours dan minutes yang dapat ditetapkan.

latestStartTime

object (DateTime)

Waktu mulai terbaru waktu istirahat (inklusif). Hanya hours dan minutes yang dapat ditetapkan.

durationMinutes

integer

Durasi istirahat dalam menit.

ruleIncrementMinutes

integer

[Opsional] Penambahan waktu dalam menit untuk semua jeda yang dapat dipertimbangkan dalam aturan jeda ini. Jika tidak disetel, setelan defaultnya adalah durationMinutes.

CoverageRequirement

Persyaratan cakupan menentukan jumlah karyawan yang dibutuhkan untuk serangkaian peran dan/atau keterampilan selama jangka waktu tertentu dan di lokasi tertentu. Interval DateTime di lokasi tertentu tidak boleh tumpang-tindih. Sebagai alternatif, daftar ID shift dapat diberikan, sebagai ganti jangka waktu dan lokasi. Hanya karyawan yang dapat ditugaskan pada peran tertentu (atau yang memiliki keahlian tertentu) yang dapat memenuhi persyaratan ini.

Untuk peran dan/atau keterampilan tertentu, persyaratan cakupan akan terpenuhi jika ada minimal targetEmployeeCount karyawan yang bekerja setiap saat dalam jangka waktu tertentu (atau untuk setiap shift di shiftIds). Sebaliknya, persyaratan cakupan dilanggar jika dalam jangka waktu mana pun (atau untuk shift mana pun di shiftIds), jumlah karyawan yang bekerja selama jangka waktu tersebut kurang dari targetEmployeeCount. Jumlah karyawan yang bekerja lebih banyak daripada targetEmployeeCount masih dapat memenuhi persyaratan ini, tetapi penambahan staf yang berlebihan dapat dikurangi oleh pemecah masalah.

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

object (DateTime)

Waktu mulai untuk persyaratan cakupan (inklusif). Jika ditetapkan, shiftIds harus kosong.

endDateTime

object (DateTime)

Waktu berakhir untuk persyaratan cakupan (eksklusif). Jika ditetapkan, shiftIds harus kosong.

locationId

string

Lokasi di mana karyawan dibutuhkan. shiftIds tidak kosong, kolom ini harus kosong.

shiftIds[]

string

Jika ditetapkan, persyaratan peran dan keterampilan akan diterapkan satu per satu untuk setiap ID shift dalam daftar ini. Jika shiftId tidak kosong, startDateTime, endDateTime, dan locationId harus kosong.

roleRequirements[]

object (RoleRequirement)

Jumlah karyawan yang harus ditetapkan ke peran yang ditentukan selama jangka waktu tersebut. Maksimal satu role_requirement harus diberikan untuk setiap ID peran. Tingkat prioritas default untuk setiap persyaratan adalah PRIORITY_MANDATORY. Batasan ini dilanggar jika jumlah karyawan yang ditetapkan ke peran yang ditentukan kurang dari targetEmployeeCount kapan saja selama jangka waktu tersebut.

skillRequirements[]

object (SkillRequirement)

Jumlah karyawan yang dibutuhkan dengan keterampilan tertentu yang ditugaskan untuk shift selama jangka waktu tertentu. Maksimal satu skill_requirement harus diberikan untuk setiap ID keterampilan. Tingkat prioritas default untuk setiap persyaratan adalah PRIORITY_LOW. Batasan ini dilanggar jika jumlah karyawan yang memiliki keterampilan yang diberikan kurang dari targetEmployeeCount pada satu waktu selama jangka waktu tertentu.

RoleRequirement

Jumlah karyawan yang harus ditetapkan pada peran yang ditentukan selama jangka waktu tersebut.

Representasi JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Kolom
roleId

string

ID Peran untuk persyaratan.

targetEmployeeCount

integer

Jumlah karyawan yang diinginkan yang ditugaskan untuk peran tersebut selama jangka waktu.

priority

enum (Priority)

Tingkat prioritas untuk batasan persyaratan ini. Prioritas default untuk semua batasan resource adalah PRIORITY_MANDATORY.

SkillRequirement

Jumlah karyawan yang bekerja selama periode waktu tersebut dan memiliki keahlian tertentu.

Representasi JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Kolom
skillId

string

ID keterampilan untuk persyaratan.

targetEmployeeCount

integer

Jumlah karyawan yang diinginkan dengan keterampilan tertentu yang bekerja selama jangka waktu tertentu.

priority

enum (Priority)

Tingkat prioritas untuk batasan persyaratan ini. Prioritas default untuk semua batasan resource adalah PRIORITY_LOW.

BudgetRequirement

Persyaratan anggaran untuk interval tertentu.

Representasi JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Kolom
totalBudget

number

Total anggaran untuk interval yang ditentukan. Total anggaran harus diberikan jika prioritasnya adalah PRIORITY_MANDATORY.

Jika totalBudget tidak ditetapkan, total biaya jadwal diminimalkan sesuai dengan priority yang ditentukan. Misalnya, jika priority untuk anggaran adalah PRIORITY_MEDIUM, pemecah masalah akan meminimalkan biaya sebelum mengurangi pelanggaran batasan dengan prioritas PRIORITY_LOW.

startDateTime

object (DateTime)

Waktu mulai saat anggaran ini berlaku. Jika waktu mulai tidak ditentukan, waktu mulai akan ditetapkan menjadi waktu mulai paling awal dari semua shift yang ditentukan.

endDateTime

object (DateTime)

Waktu berakhir saat anggaran ini berlaku. Jika waktu berakhir tidak ditentukan, waktu berakhir yang paling akhir dari semua shift yang ditentukan akan ditetapkan.

priority

enum (Priority)

Tingkat prioritas untuk memenuhi persyaratan anggaran selama jangka waktu yang ditentukan. Prioritas defaultnya adalah PRIORITY_LOW. Jika prioritas disetel ke PRIORITY_MANDATORY, totalBudget harus disetel.

Perhatikan bahwa jika prioritas ini lebih tinggi daripada prioritas batasan lainnya dan jika totalBudget ketat, jadwal yang dihasilkan dapat secara signifikan melanggar batasan karyawan atau persyaratan cakupan.

ShiftAssignment

Seorang karyawan untuk penugasan shift.

Representasi JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Kolom
employeeId

string

ID karyawan yang ditugaskan.

shiftId

string

ID Shift yang ditetapkan kepada karyawan.

roleId

string

ID peran yang ditugaskan kepada karyawan untuk shift tersebut.

breaks[]

object (Break)

Daftar waktu istirahat untuk penugasan shift ini.

Istirahat

Periode waktu di mana karyawan menginterupsi pekerjaannya selama {i>shift<i}.

Representasi JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Kolom
startDateTime

object (DateTime)

Waktu mulai istirahat.

durationMinutes

integer

Durasi istirahat dalam menit.

SolutionStatus

Status solusi (yaitu, jadwal) yang diberikan sebagai respons pemecah masalah.

Enum
SOLUTION_STATUS_UNSPECIFIED Status respons belum ditentukan.
FEASIBLE Jadwal yang dikembalikan layak, tetapi mungkin tidak optimal.
OPTIMAL Jadwal yang dikembalikan optimal.
INFEASIBLE Tidak ada jadwal yang valid untuk batasan yang diberikan. Pemecah masalah dapat menampilkan nilai ini jika subset batasan dengan tingkat prioritas PRIORITY_MANDATORY tidak dapat dipenuhi.
NOT_SOLVED Jadwal tidak ditemukan.
NOT_SOLVED_DEADLINE_EXCEEDED Tidak ada jadwal yang ditemukan dalam batas waktu yang ditentukan.