Method: scheduling.solveShiftScheduling

Memecahkan masalah penjadwalan shift tetap dari SolveShiftSchedulingRequest tertentu dengan menugaskan karyawan ke shift sehingga preferensi penjadwalan karyawan dapat dimaksimalkan dan pelanggaran batasan penjadwalan dapat 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 pemecahan masalah.

employees[]

object (Employee)

Semua karyawan yang tersedia akan dijadwalkan.

shifts[]

object (Shift)

Semua shift untuk membentuk jadwal.

coverageRequirements[]

object (CoverageRequirement)

Persyaratan cakupan untuk keseluruhan jangka waktu perencanaan. Batas ini menentukan jumlah karyawan yang harus menjalankan setiap peran, atau memiliki keterampilan, selama jangka waktu tertentu atau daftar ID shift. Semua persyaratan cakupan harus ditentukan dengan jangka waktu atau daftar ID shift (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 keahlian. Lihat enum Priority untuk detail selengkapnya.

roleIds[]

string

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

skillIds[]

string

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

locationIds[]

string

Daftar semua kemungkinan lokasi untuk kumpulan shift dalam jadwal. Daftar ini boleh kosong. Menentukan lokasi yang berbeda dapat berguna ketika, misalnya, seorang manajer perawat ingin menjadwalkan banyak perawat di unit yang berbeda di 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)

Alihkan penugasan untuk digunakan sebagai solusi tentatif (alias petunjuk solusi) untuk masalah penjadwalan. Petunjuk penetapan akan diabaikan jika penetapan 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, tugas shift yang valid akan ditampilkan dalam shiftAssignments. Untuk penetapan shift yang valid, properti berikut berlaku:

  1. Setiap ID karyawan terdapat dalam kumpulan karyawan yang diberikan dalam permintaan.
  2. Setiap ID peran yang ditetapkan untuk karyawan terdapat dalam kumpulan ID peran untuk karyawan tertentu.
  3. Setiap ID shift terdapat 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 untuk dua {i>shift<i} yang tumpang tindih.
  6. Untuk jadwal yang ditentukan, 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 terkait dengan respons ini.

solutionStatus

enum (SolutionStatus)

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

shiftAssignments[]

object (ShiftAssignment)

Daftar semua tugas. Setiap ShiftAssignment menentukan karyawan, shift yang ditetapkan untuknya, dan peran yang ditetapkan untuk melakukan shift tersebut.

statusMessage

string

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

SolveParameters

Parameter yang mengontrol satu pemecahan masalah penjadwalan shift.

Representasi JSON
{
  "timeLimit": string
}
Kolom
timeLimit

string (Duration format)

Waktu maksimum yang harus dihabiskan pemecah masalah untuk memecahkan masalah. Jika tidak disetel, durasi defaultnya adalah 1 menit.

Nilai ini bukanlah batas mutlak dan tidak memperhitungkan overhead komunikasi. Latensi yang diharapkan untuk menyelesaikan masalah mungkin sedikit melebihi nilai ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, 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 oleh karyawan ini. Setidaknya harus ada satu peran yang ditentukan. Saat seorang karyawan ditugaskan untuk shift, dia juga diberi satu peran dari daftar ini. Karyawan tersebut mungkin diberi peran yang berbeda selama periode penjadwalan.

skillIds[]

string

ID keahlian yang dimiliki karyawan ini. Daftar ini boleh kosong. Ketika seorang karyawan ditugaskan untuk shift, mereka menggunakan sebagian dari keterampilan yang tercantum di sini untuk mencakup persyaratan keterampilan selama durasi shift yang ditugaskan.

shiftPreferences[]

object (ShiftPreference)

Ubah preferensi karyawan ini. Shift yang ditentukan di sini menunjukkan shift yang ingin ditugaskan kepada karyawan selama periode penjadwalan. ID shift yang ditentukan dalam shiftPreferences harus unik. Pemecah masalah akan mencoba memaksimalkan jumlah nilai ShiftPreference.preference di seluruh 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 dalam 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. Permintaan tersebut bisa berupa penetapan karyawan atau tidak ditugaskan ke shift tertentu. Setiap tugas penjadwalan tetap untuk karyawan dapat direpresentasikan dengan ShiftRequest dengan prioritas PRIORITY_MANDATORY. ID shift dapat muncul paling banyak di 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 menentukan tarif per jam reguler dan lembur untuk karyawan.

ShiftPreference

Preferensi numerik untuk ID shift tertentu.

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

string

ID Shift yang preferensinya ditentukan.

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 ditentukan [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 periode waktu yang ditentukan di atas. type hanya ada berupa salah satu diantara berikut:
minimumMinutes

integer

Jumlah minimum menit yang dapat dikerjakan karyawan. Jika karyawan ditugaskan untuk melakukan shift yang tumpang tindih (sepenuhnya atau sebagian) dengan jangka waktu shift, jumlah menit shift yang tumpang tindih dengan jangka waktu akan disertakan dalam penghitungan ini.

maximumMinutes

integer

Jumlah menit maksimum karyawan dapat bekerja dalam jangka waktu tersebut. Jika karyawan ditugaskan untuk melakukan shift yang tumpang tindih (sepenuhnya atau sebagian) dengan jangka waktu shift, jumlah menit shift yang tumpang tindih dengan jangka waktu akan disertakan dalam penghitungan ini.

minimumConsecutiveWorkDays

integer

Jumlah minimum hari berturut-turut karyawan dapat bekerja. Seorang karyawan bekerja pada hari tertentu jika mereka ditugaskan untuk shift yang dimulai pada hari tersebut. Setiap shift yang ditetapkan kepada karyawan yang dimulai dalam jangka waktu akan disertakan dalam jumlah ini.

maximumConsecutiveWorkDays

integer

Jumlah maksimum hari berturut-turut karyawan dapat bekerja. Seorang karyawan bekerja pada hari tertentu jika mereka ditugaskan untuk shift yang dimulai pada hari tersebut. Setiap shift yang ditetapkan kepada karyawan yang dimulai dalam jangka waktu akan disertakan dalam jumlah ini.

minimumShiftCount

integer

Jumlah shift minimum yang dapat bekerja karyawan. Pergeseran apa pun yang ditugaskan kepada karyawan yang sepenuhnya tumpang tindih dengan periode waktu akan disertakan dalam jumlah ini.

maximumShiftCount

integer

Jumlah maksimum shift yang dapat bekerja karyawan. Pergeseran apa pun yang ditugaskan kepada karyawan yang sepenuhnya tumpang tindih dengan periode waktu akan disertakan dalam jumlah ini.

minimumRestMinutes

integer

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

Prioritas

Tingkat prioritas untuk batasan apa pun pada jadwal karyawan atau persyaratan cakupan. Ini mencakup SchedulingConstraint, ResourceConstraint, ShiftRequest, dan CoverageRequirement. Karena mungkin ada batasan yang bertentangan, setiap batasan tidak selalu mungkin 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 lengkap.

Enum
PRIORITY_UNSPECIFIED Tingkat prioritas tidak diketahui.
PRIORITY_LOW Tingkat prioritas terendah. Batasan dengan prioritas ini kurang penting dibandingkan batasan lainnya. Klaim tersebut akan menjadi pelanggaran pertama 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 dipertimbangkan berikutnya untuk pelanggaran.
PRIORITY_HIGH Tingkat prioritas tertinggi. Batasan dengan tingkat prioritas ini adalah yang paling penting. Keputusan ini adalah yang terakhir 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 soal menampilkan SolutionStatus.INFEASIBLE, hal ini mungkin disebabkan oleh terlalu banyak batasan PRIORITY_MANDATORY.

ResourceConstraint

Batasan umum yang membatasi jumlah "resource" tertentu yang digunakan oleh seorang karyawan. Ini adalah versi abstrak dari SchedulingConstraint yang lebih spesifik dan lebih fleksibel bagi pengguna. Banyak batasan penjadwalan yang tidak dapat ditentukan dalam 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 resource yang digunakan berdasarkan shift. Misalnya, jika batasan ini berlaku untuk jam minimum dan maksimum yang bekerja oleh seorang karyawan dalam minggu tertentu, peta ini akan berisi shift yang terjadi dalam 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 ditetapkan atau tidak ditetapkan ke kumpulan shift.

WorkStatus

Apakah seorang karyawan bekerja atau tidak.

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

HourlyContract

Menentukan tarif per jam dasar, diferensial tarif, dan pengganda lembur untuk menentukan kompensasi bagi karyawan. Perhatikan bahwa peraturan di berbagai tempat mungkin memerlukan komputasi kompensasi lembur yang berbeda. Pemecah masalah memperkirakan kompensasi lembur untuk meminimalkan proxy dari total biaya atau memenuhi anggaran (lihat BudgetRequirement). Hal 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 beberapa tarif berlaku untuk karyawan, perbedaan tarif akan diterapkan relatif terhadap tarif per jam dasar ini. Selain itu, jika ada beberapa tarif, tarif per jam dasar harus merupakan tarif minimum dari tarif tersebut.

hourlyRateShiftDifferentials

map (key: string, value: number)

Perbedaan tarif per jam, dibayar selain 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 proto 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 harus dihitung seiring waktu. Periode tersebut tidak boleh tumpang-tindih.

OvertimePeriod

Periode tetap dan berulang (biasanya 168 jam atau tujuh periode 24 jam berturut-turut) yang digunakan untuk menentukan jumlah kompensasi lembur. Setiap periode memiliki pengganda dari waktu ke waktu (mis., 1.5) relatif terhadap baseHourlyRate dan batas jumlah jam yang dianggap pekerjaan reguler (bukan lembur). Setiap pergeseran yang tumpang-tindih dengan periode waktu startDateTime (inklusif) dan endDateTime (eksklusif) akan dihitung dalam jumlah total jam kerja dalam periode tersebut. Jika tumpang-tindih tersebut 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 per jam lembur dengan rata-rata sederhana dari tarif yang berlaku selama periode lembur. Catatan: peraturan di berbagai tempat mungkin memerlukan komputasi kompensasi lembur yang berbeda. Pemecah masalah memperkirakan kompensasi lembur untuk meminimalkan proxy total biaya atau memenuhi anggaran, tetapi tidak dimaksudkan sebagai alat untuk menghitung penggajian.

startDateTime

object (DateTime)

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

endDateTime

object (DateTime)

Waktu berakhir untuk periode lembur. Jika pergeseran tumpang-tindih kali ini, jam pergeseran tersebut 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 yang dapat digunakan karyawan untuk bekerja.

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

string

ID unik yang ditetapkan untuk pergeseran ini.

locationId

string

ID lokasi tempat pergeseran ini bekerja. Daftar ini boleh kosong.

startDateTime

object (DateTime)

Waktu mulai perubahan (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 itu mereka tidak menanggung 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 shift dan durasinya. Daftar semua kemungkinan jeda yang dipertimbangkan ditentukan dengan kelipatan ruleIncrementMinutes. Misalnya, jika aturan jeda memodelkan jeda 30 menit yang dapat dimulai antara pukul 10.00 dan 11.00, dan penambahan aturan adalah 20 menit, daftar jeda yang dipertimbangkan adalah: [10:00, 10:30], [10:20, 10:50], [10:40, 11:10], [10:40, 11:10], [10:40, 11:10],

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

object (DateTime)

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

latestStartTime

object (DateTime)

Waktu mulai jeda paling akhir (inklusif). Hanya hours dan minutes yang dapat disetel.

durationMinutes

integer

Durasi jeda dalam hitungan menit.

ruleIncrementMinutes

integer

[Opsional] Pertambahan waktu dalam menit untuk semua jeda yang dapat dipertimbangkan dalam aturan jeda iklan 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. Atau, daftar ID shift dapat diberikan sebagai ganti periode waktu dan lokasi. Hanya karyawan yang dapat ditugaskan untuk peran tertentu (atau yang memiliki keterampilan tertentu) yang dapat memenuhi persyaratan ini.

Untuk peran dan/atau keterampilan tertentu, persyaratan cakupan dipenuhi jika setidaknya targetEmployeeCount jumlah karyawan bekerja pada setiap momen dalam jangka waktu tersebut (atau untuk setiap shift dalam shiftIds). Sebaliknya, persyaratan cakupan dilanggar jika suatu titik dalam jangka waktu tertentu (atau untuk setiap shift dalam shiftIds), terdapat kurang dari targetEmployeeCount jumlah karyawan yang bekerja selama jangka waktu tersebut. Lebih banyak karyawan yang bekerja daripada targetEmployeeCount masih memenuhi persyaratan, tetapi jumlah staf yang berlebihan diminimalkan 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 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 diperlukan yang akan diberi 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 ditugaskan ke peran yang ditentukan kurang dari targetEmployeeCount selama jangka waktu tertentu.

skillRequirements[]

object (SkillRequirement)

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

RoleRequirement

Jumlah karyawan yang diperlukan yang akan diberi 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 untuk ditugaskan selama jangka waktu tertentu.

priority

enum (Priority)

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

SkillRequirement

Jumlah karyawan yang diperlukan yang bekerja selama jangka waktu tersebut dan memiliki keterampilan yang ditentukan.

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

string

ID keahlian untuk persyaratan.

targetEmployeeCount

integer

Jumlah karyawan yang diinginkan dengan keterampilan tertentu yang bekerja selama periode waktu tersebut.

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 disetel menjadi waktu mulai paling awal dari semua shift yang diberikan.

endDateTime

object (DateTime)

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

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.

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

ShiftAssignment

Seorang karyawan untuk berganti peran.

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

string

ID karyawan yang ditetapkan.

shiftId

string

ID Shift yang ditetapkan ke karyawan.

roleId

string

ID Peran yang ditetapkan kepada karyawan untuk shift.

breaks[]

object (Break)

Daftar istirahat untuk tugas shift ini.

Istirahat

Periode waktu di mana seorang karyawan menginterupsi pekerjaan mereka selama shift.

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

object (DateTime)

Waktu mulai istirahat.

durationMinutes

integer

Durasi jeda dalam hitungan menit.

SolutionStatus

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

Enum
SOLUTION_STATUS_UNSPECIFIED Status respons belum ditentukan.
FEASIBLE Jadwal yang ditampilkan 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 ada subset batasan dengan tingkat prioritas PRIORITY_MANDATORY tidak dapat dipenuhi.
NOT_SOLVED Tidak ada jadwal yang ditemukan.
NOT_SOLVED_DEADLINE_EXCEEDED Tidak ada jadwal yang ditemukan dalam batas waktu yang diberikan.