Skip to content

Contract Management

Ringkasan

Contract Management menangani pembuatan, pelacakan, dan terminasi kontrak kerja. Kontrak dibuat otomatis ketika applicant mencapai stage offer di pipeline rekrutmen.

Modul ini menggunakan Eloquent Observers yang bereaksi terhadap event model — membuat probation secara otomatis saat stage kontrak berubah dan mengirim notifikasi saat probation berkembang.


Alur

Applicant mencapai stage 'offer'

StageOrchestrator buat contract

Contract dibuat (status: draft)
    ├── Employee record dibuat
    ├── Teacher record dibuat
    ├── User account dibuat
    └── Default role diassign

HR review → Activate Contract → stage_id berubah

ContractObserver::updated() terpanggil

Jika meta stage punya contract_type = 'probation'
    → Probation dibuat otomatis

ProbationObserver::created() terpanggil
    → SendPromotedToProbationNotification di-dispatch

Stage probation berubah

ProbationObserver::updated() terpanggil
    → SendAcquisitionStageChangedNotification di-dispatch

Probation selesai → Contract confirmed / terminated

Alur Observer

ContractObserver — Auto-Create Probation

ContractObserver mendengarkan event updated pada model Contract. Ketika stage_id berubah ke stage yang dikonfigurasi dengan contract_type: probation, observer membuat Probation record secara otomatis.

Penjelasan:

  1. Observer memeriksa apakah stage_id benar-benar berubah (isDirty). Jika tidak, tidak ada aksi.
  2. Stage baru dimuat dan meta.contract_type diperiksa — hanya stage dengan konfigurasi probation yang memicu pembuatan.
  3. Pemeriksaan duplikat mencegah pembuatan beberapa probation untuk kontrak yang sama.
  4. Durasi probation dihitung dari meta.duration_days (default 3 bulan).
  5. Seluruh operasi berjalan dalam database transaction untuk konsistensi.

ProbationObserver — Notifikasi

ProbationObserver mengirim job notifikasi saat probation dibuat atau diupdate.

Penjelasan:

  1. Saat dibuat — mengirim SendPromotedToProbationNotification untuk memberi tahu employee bahwa mereka naik ke probation.
  2. Saat stage berubah — mendeteksi perubahan stage_id, mencari nama stage lama dan baru, lalu mengirim SendAcquisitionStageChangedNotification dengan detail transisi.

State Contract

DRAFT → ACTIVE → EXPIRED
  │         │
  │         ├── TERMINATED
  │         └── RENEWED

  └── CANCELLED

Database

Tabel Kunci

TabelDeskripsi
contractsKontrak kerja — applicant_id, employee_id, type, start_date, end_date, status, stage_id
probationsMasa probation — contract_id, stage_id, employee_id, start_date, end_date, duration_months, status
contract_settingsKonfigurasi tipe kontrak — template, terms
probation_settingsAturan masa probation — durasi, interval review

Relasi

applicant → contract (hasOne)
contract → probations (hasMany)
contract → employee (belongsTo)
contract → contract_settings (belongsTo)
probation → stage (belongsTo)

File Penting

FileTujuan
app/Observers/ContractManagement/ContractObserver.phpAuto-create Probation saat stage contract berubah ke tipe probation
app/Observers/ContractManagement/ProbationObserver.phpDispatch notifikasi saat probation dibuat dan stage berubah
app/Services/Platform/Pipeline/StageOrchestrator.phpAuto-create contract dari pipeline applicant
app/Models/ContractManagement/Contract/Contract.phpModel Contract dengan stage_id dan relasi probation
app/Models/ContractManagement/Probation/Probation.phpTracking probation dengan stage progression
app/Models/ContractManagement/ContractSetting/ContractSetting.phpKonfigurasi tipe kontrak
app/Jobs/Recruitment/SendPromotedToProbationNotification.phpJob: notifikasi employee naik probation
app/Jobs/Recruitment/SendAcquisitionStageChangedNotification.phpJob: notifikasi perubahan stage probation
app/Filament/Resources/Contracts/CRUD contract admin panel