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 / terminatedAlur 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:
- Observer memeriksa apakah
stage_idbenar-benar berubah (isDirty). Jika tidak, tidak ada aksi. - Stage baru dimuat dan
meta.contract_typediperiksa — hanya stage dengan konfigurasiprobationyang memicu pembuatan. - Pemeriksaan duplikat mencegah pembuatan beberapa probation untuk kontrak yang sama.
- Durasi probation dihitung dari
meta.duration_days(default 3 bulan). - Seluruh operasi berjalan dalam database transaction untuk konsistensi.
ProbationObserver — Notifikasi
ProbationObserver mengirim job notifikasi saat probation dibuat atau diupdate.
Penjelasan:
- Saat dibuat — mengirim
SendPromotedToProbationNotificationuntuk memberi tahu employee bahwa mereka naik ke probation. - Saat stage berubah — mendeteksi perubahan
stage_id, mencari nama stage lama dan baru, lalu mengirimSendAcquisitionStageChangedNotificationdengan detail transisi.
State Contract
DRAFT → ACTIVE → EXPIRED
│ │
│ ├── TERMINATED
│ └── RENEWED
│
└── CANCELLEDDatabase
Tabel Kunci
| Tabel | Deskripsi |
|---|---|
contracts | Kontrak kerja — applicant_id, employee_id, type, start_date, end_date, status, stage_id |
probations | Masa probation — contract_id, stage_id, employee_id, start_date, end_date, duration_months, status |
contract_settings | Konfigurasi tipe kontrak — template, terms |
probation_settings | Aturan masa probation — durasi, interval review |
Relasi
applicant → contract (hasOne)
contract → probations (hasMany)
contract → employee (belongsTo)
contract → contract_settings (belongsTo)
probation → stage (belongsTo)File Penting
| File | Tujuan |
|---|---|
app/Observers/ContractManagement/ContractObserver.php | Auto-create Probation saat stage contract berubah ke tipe probation |
app/Observers/ContractManagement/ProbationObserver.php | Dispatch notifikasi saat probation dibuat dan stage berubah |
app/Services/Platform/Pipeline/StageOrchestrator.php | Auto-create contract dari pipeline applicant |
app/Models/ContractManagement/Contract/Contract.php | Model Contract dengan stage_id dan relasi probation |
app/Models/ContractManagement/Probation/Probation.php | Tracking probation dengan stage progression |
app/Models/ContractManagement/ContractSetting/ContractSetting.php | Konfigurasi tipe kontrak |
app/Jobs/Recruitment/SendPromotedToProbationNotification.php | Job: notifikasi employee naik probation |
app/Jobs/Recruitment/SendAcquisitionStageChangedNotification.php | Job: notifikasi perubahan stage probation |
app/Filament/Resources/Contracts/ | CRUD contract admin panel |