Skip to content

Rekrutmen

Ringkasan

Rekrutmen menangani siklus kandidat penuh — dari konfigurasi pipeline hingga pelacakan applicant, assessment, interview, verifikasi dokumen, dan perekrutan otomatis.

Modul ini menggunakan Eloquent Observers yang bereaksi terhadap event model untuk mengotomatiskan snapshot stage, duplikasi konfigurasi pipeline, inisialisasi deposit, pengiriman notifikasi, dan pembuatan record perekrutan.

Entitas Kunci

EntitasDeskripsi
PipelineKumpulan stage terurut yang mendefinisikan alur rekrutmen
StageLangkah dalam pipeline (Screening, Interview, dll)
ApplicantKandidat yang dilacak melalui stage pipeline
CandidateOrang dalam talent pool

Diagram Alir

Pipeline Configuration Flow

Berikut adalah diagram alir yang menggambarkan bagaimana admin mengkonfigurasi pipeline dan stage untuk rekrutmen:

Applicant Review Flow

Berikut adalah diagram alir yang menunjukkan bagaimana admin mereview dan memproses applicant:

Assessment Scoring Flow

Berikut adalah diagram alir yang menunjukkan proses input dan review nilai assessment:


Alur Observer

ApplicantObserver — Otomatisasi Siklus Hidup Penuh

ApplicantObserver adalah observer paling kompleks — menangani kode unik, snapshot pipeline, kemajuan stage, logika perekrutan, dan sinkronisasi status vacancy di 6 event Eloquent.

Penjelasan per event:

creating — Sebelum applicant disimpan pertama kali:

  1. Generate kode unik applicant (prefix APP-) via Applicant::generateUniqueCode().
  2. Snapshot stage pipeline saat ini ke kolom JSON pipeline_stages — membekukan konfigurasi stage pada saat aplikasi.

created — Setelah applicant disimpan:

  1. Panggil InitializeApplicantDeposits untuk membuat record deposit/fee berdasarkan konfigurasi pipeline.

saving — Sebelum setiap penyimpanan:

  1. Jika terhubung ke candidate, sinkron name, email, phone, social_media dari candidate.
  2. Jika stage_id berubah:
    • Update snapshot pipeline_stages — tandai stage selesai, set stage current, sisanya pending.
    • Jika stage terakhir → jalankan Hiring Logic: buat User, Employee, Teacher (jika judul vacancy mengandung "teacher"), assign role default, kirim HiringNotification.
    • Set status applicant ke done (final) atau progress (menengah).
  3. Selalu panggil StageOrchestrator::enter() setelah logika stage.

saved — Setelah setiap penyimpanan:

  1. Panggil SyncVacancyState untuk update status vacancy.

updated — Setelah update:

  1. Jika stage_id berubah, dispatch SendStageChangedNotification dengan nama stage asal/tujuan.

deleted — Setelah hapus:

  1. Panggil SyncVacancyState untuk kalkulasi ulang status vacancy.

ApplicantDocumentObserver — Versi Dokumen

ApplicantDocumentObserver mengelola deduplikasi dokumen dengan hash SHA1:

Penjelasan:

  1. Dokumen dengan is_current = true mendapat hash SHA1 deterministik berdasarkan owner_type|owner_id|document_type_id.
  2. Hash ini memastikan setiap pemilik hanya punya satu dokumen "current" per tipe — upload versi baru menggantikan yang lama.
  3. Dokumen dengan is_current = false mendapat current_key = null (diarsipkan).

VacancyObserver — Setup Pipeline Otomatis

VacancyObserver mengotomatiskan konfigurasi vacancy saat dibuat atau pipeline-nya berubah:

Penjelasan:

created — Saat vacancy baru dibuat:

  1. Membuat VacancyState dengan status pending.
  2. Memanggil duplicatePipelineSettings() — menyalin semua stage, dokumen, dan deposit dari master pipeline ke PipelineRequiredItem per-vacancy.

updated — Saat vacancy diupdate:

  1. Jika pipeline_id berubah, hapus semua stage dan required items lama, lalu duplikasi dari pipeline baru.
  2. Mencatat log untuk notifikasi ke applicant terpilih.

DFD — Data Flow Diagram

Level 0 — Context Diagram

Level 1 — Pemrosesan Applicant


Activity Diagram — Siklus Applicant


Database

Tabel Kunci

TabelDeskripsi
applicantsMelacak kandidat melalui stage — stage_id, status, score, pipeline_stages (JSON snapshot)
candidatesTalent pool — user_id, first_name, last_name, email
talent_interviewsJadwal interview — scheduled_at, interviewer_id, status
talent_assessmentsNilai tes — type (WRITTEN/INTERVIEW/MICRO), score
applicant_documentsUpload file per stage — asset_id, current_key, status
applicant_depositsPelacakan fee per stage — amount, status
vacancy_statesStatus vacancy — status, stage_id
pipeline_required_itemsPersyaratan polimorfik (dokumen, deposit) per stage/vacancy

File Penting

FileTujuan
app/Observers/Recruitment/ApplicantObserver.phpSiklus hidup penuh — generate kode, snapshot stage, hiring logic, notifikasi
app/Observers/Recruitment/ApplicantDocumentObserver.phpVersi dokumen — deduplikasi hash SHA1
app/Observers/Recruitment/VacancyObserver.phpSetup pipeline — duplikasi otomatis stage, dokumen, deposit ke vacancy
app/Jobs/Recruitment/SendStageChangedNotification.phpJob: notifikasi perubahan stage applicant
app/Services/Recruitment/Deposits/InitializeApplicantDeposits.phpBuat record deposit saat applicant dibuat
app/Services/Recruitment/VacancyState/SyncVacancyState.phpSinkron status vacancy berdasarkan applicant
app/Services/Platform/Pipeline/StageOrchestrator.phpTrigger entry stage dan auto-create contract
app/Models/Recruitment/Applicant/Applicant.phpModel applicant — stage, status, scoring
app/Models/Recruitment/Candidate/Candidate.phpTalent pool
app/Models/Recruitment/TalentAssessment/TalentAssessment.phpScoring assessment
app/Models/Recruitment/TalentInterview/TalentInterview.phpJadwal interview
app/Models/Platform/Pipeline/Pipeline.phpDefinisi pipeline
app/Models/Platform/Stage/Stage.phpDefinisi stage dengan konfigurasi
app/Filament/Resources/Applicants/CRUD applicant + actions (advance, approve)