title: “Recruitment ATS — Applicant Tracking System” description: “Sistem pelacakan pelamar dengan job posting, kanban pipeline 6 tahap, dan React Query di SNISHOP ERP.”
Recruitment ATS — Applicant Tracking System

Arsitektur
Akses Halaman
URL:/recruitment-ats
Dua Tab Utama
Statistik
Entitas: JobPosting
Jenis Pekerjaan
Status Lowongan
Entitas: Applicant
Kanban Pipeline
7 Kolom Status
Alur Progresi
Tombol “Maju”
Setiap pelamar memiliki tombol “Maju” yang memajukan status ke tahap berikutnya:Applicant Detail Dialog
Dialog detail pelamar menampilkan:React Query
ATS menggunakan React Query (useQuery, useMutation, useQueryClient) untuk manajemen data:
Keuntungan React Query
Job Posting Card
Setiap lowongan ditampilkan dalam card dengan informasi:Integrasi dengan HR Module
Saat pelamar berstatushired, data bisa dikonversi menjadi CompanyMember (karyawan baru) melalui proses onboarding di EmployeeForm.
Tips Penggunaan
- Buat job posting dengan deskripsi dan persyaratan yang jelas untuk menarik pelamar berkualitas
- Review pelamar baru secara berkala dan majukan yang memenuhi syarat ke tahap screening
- Jadwalkan interview segera setelah screening selesai
- Berikan catatan pada setiap pelamar untuk referensi di tahap selanjutnya
- Tutup lowongan yang sudah terisi agar tidak menerima lamaran baru
- Gunakan data statistik (active jobs, total hired) untuk evaluasi proses rekrutmen
Entity Relationship Diagram
Tabel Schema — Entitas Rekrutmen
JobPosting
Applicant
InterviewSchedule
CompanyInvitation
CompanyMember
Employee
State Machine — Application Lifecycle
Transisi Status Pelamar
Sequence Diagrams
1. Submit Lamaran
2. Jadwal Interview
3. Offer Letter & Hiring
Enum Tables
application_status (Applicant.current_status)
employment_type (JobPosting.employment_type)
job_status (JobPosting.status)
interview_type (InterviewSchedule.interview_type)
interview_status (InterviewSchedule.status)
interview_recommendation (InterviewSchedule.recommendation)
invitation_status (CompanyInvitation.status)
company_role (CompanyInvitation.role / CompanyMember.role)
employee_status (Employee.status)
member_status (CompanyMember.status)
RBAC — Recruitment ATS
Catatan RLS (Row-Level Security)
Semua entitas rekrutmen menggunakan RLS berbasiscompany_id:
Referensi Schema Nested Object
Bagian ini mendokumentasikan struktur detail untuk field bertipeobject dan array[object] yang merujuk pada sub-schema dari masing-masing entitas.
Applicant.education — Sub-Schema
Setiap elemen dalam arrayeducation pada entitas Applicant memiliki struktur berikut:
Contoh data:
Applicant.experience — Sub-Schema
Setiap elemen dalam arrayexperience pada entitas Applicant memiliki struktur berikut:
Contoh data:
InterviewSchedule.feedback — Sub-Schema
Setiap elemen dalam arrayfeedback pada entitas InterviewSchedule memiliki struktur berikut:
Contoh data:
Employee.bank_account — Sub-Schema
Fieldbank_account pada entitas Employee memiliki struktur berikut:
Contoh data:
Employee.emergency_contact — Sub-Schema
Fieldemergency_contact pada entitas Employee memiliki struktur berikut:
Contoh data:
CompanyMember.working_hours — Sub-Schema
Fieldworking_hours pada entitas CompanyMember memiliki struktur berikut:
Contoh data:
CompanyInvitation.permissions / CompanyMember.permissions — Sub-Schema Lengkap
Fieldpermissions pada CompanyInvitation dan CompanyMember berisi objek dengan boolean flags yang menentukan hak akses member. Berikut daftar lengkap seluruh permission:
Hak Akses Umum (Default Aktif untuk Semua Member)
Hak Akses Umum (Default Nonaktif)
Hak Akses HR & Keuangan
Hak Akses Inventori
Hak Akses Proyek
Hak Akses POS (Point of Sale)
Hak Akses Laporan & Manajemen
Hak Akses Produksi
Hak Akses HPP & Distribusi
Hak Akses B2B
Enum Tambahan — Employee.department
Fielddepartment pada entitas Employee menggunakan enum yang berbeda dari field department pada JobPosting atau CompanyMember (yang bertipe string bebas). Berikut daftar nilai enum untuk Employee.department:
Perbedaan Field department antar Entitas
Perbedaan employment_type antar Entitas
Terdapat perbedaan kecil nilai enumemployment_type antara JobPosting dan Employee:
Catatan: JobPosting menggunakaninternshipsedangkan Employee menggunakaninternuntuk konsep yang sama. Perbedaan penamaan ini perlu diperhatikan saat konversi data dari Applicant yang di-hired menjadi Employee.
