Job Framework
Job framework ini bukan cuma HR admin, tapi buat:
- struktur karier
- konsistensi jabatan lintas unit
- kontrol akses & approval
- reporting & workforce planning
- future: payroll, budgeting, approval rule
Makanya dipisah berlapis.
1️⃣ JOB LEVELS – jenjang senioritas
job_levels
Fungsi
👉 Level karier vertikal
Contoh:
- Junior
- Senior
- Lead
- Manager
- Director
Dipakai untuk
- career path
- approval rule (misal: min level Manager)
- reporting (headcount by level)
- salary banding (future)
Kenapa tabel sendiri?
Karena:
- satu level bisa dipakai banyak job
- urutan penting (
order_index) - tenant bisa beda struktur
✅ KEEP. Ini pondasi.
2️⃣ JOB GRADES – kelas kompensasi
job_grades → job_levels
Fungsi
👉 Sub-level di dalam level
Contoh:
- Senior A / Senior B
- Grade 7 / Grade 8
Dipakai untuk
- payroll
- benefit tier
- internal fairness
Kenapa nggak langsung di level?
Karena:
- HR sering butuh lebih granular dari level
- grade bisa berubah tanpa mengubah title
🟡 Opsional, tapi penting buat company >100 org.
3️⃣ JOB FAMILIES – kelompok kompetensi
job_families
Fungsi
👉 Cluster skill / discipline
Contoh:
- Engineering
- Finance
- Operations
- Sales
- Creative
BUKAN
❌ department ❌ organization unit
Dipakai untuk
- learning path
- talent mobility
- reporting lintas unit
- approval rule (contoh: Finance only)
✅ KEEP. Ini HR best practice.
4️⃣ JOB TITLES – nama jabatan manusiawi
job_titles → family | level | grade
Fungsi
👉 Label resmi jabatan
Contoh:
- Software Engineer
- Finance Manager
- Warehouse Supervisor
Kenapa ini penting?
Karena:
- “Manager” di Finance ≠ Manager di Ops
- Title = kombinasi family + level + grade
Kenapa relasinya nullable?
Karena:
- tenant kecil belum tentu rapi
- bisa bertahap matang
✅ KEEP. Ini wajah framework.
5️⃣ JOB POSITIONS – slot organisasi nyata
job_positions → job_titles
Fungsi
👉 Posisi aktual yang bisa diisi orang
Contoh:
- SE-Backend-01
- FIN-MGR-HO
- WH-SPV-A
Bedanya dengan Job Title?
| Job Title | Job Position |
|---|---|
| Konsep | Slot |
| Generik | Spesifik |
| Tidak terbatas | Terbatas |
| “Software Engineer” | “SE Backend Tim A” |
Dipakai untuk
- headcount control
- hiring
- mutasi
- approval ownership
🔥 Ini table PALING penting buat real world.
6️⃣ ORG UNIT HAS POSITIONS – struktur formasi
organization_unit_has_positions
Fungsi
👉 Unit ini boleh punya posisi apa & berapa
Contoh:
-
Finance Dept:
- Finance Manager (1)
- Accountant (3)
Dipakai untuk
- formasi organisasi
- workforce planning
- budget approval
- validasi mutasi
🟡 max_headcount = future-proof (bagus lu taro)
7️⃣ EMPLOYEES – snapshot kondisi sekarang
employees
Kolom penting:
current_job_title_id
current_job_position_id
Fungsi
👉 status TERKINI karyawan
Kenapa snapshot?
Karena:
- query cepat
- UI gampang
- history disimpan di table lain
✅ BENAR secara desain.
8️⃣ EMPLOYEE_POSITIONS – riwayat jabatan
employee_positions
Fungsi
👉 historical truth
Contoh:
- 2022–2023: Staff
- 2023–2025: Senior
- 2025–now: Lead
Dipakai untuk
- audit
- appraisal
- approval rule berbasis masa kerja
- legal dispute (penting)
🔥 WAJIB kalau serius.
9️⃣ EMPLOYEE_OPERATIONAL_ASSIGNMENTS – penempatan operasional
employee_operational_assignments
Fungsi
👉 beda jabatan vs lokasi kerja
Contoh:
-
Title: Area Manager
-
Assignment:
- Jan–Jun: Region Barat
- Jul–Now: Region Timur
Kenapa dipisah?
Karena:
- jabatan bisa tetap
- area kerja berubah
🟡 Banyak sistem gagal di sini → desain lu benar.
🔁 RANGKUMAN 1 BARIS PER TABLE
| Table | Buat apa |
|---|---|
| job_levels | jenjang karier |
| job_grades | kelas kompensasi |
| job_families | cluster skill |
| job_titles | nama jabatan resmi |
| job_positions | slot nyata |
| org_unit_has_positions | formasi unit |
| employees | kondisi sekarang |
| employee_positions | riwayat jabatan |
| employee_operational_assignments | penempatan lapangan |
🧠 Cara mikir gampang (mental model)
- Title = apa
- Position = di mana & slot keberapa
- Level/Grade = seberapa senior & mahal
- Family = bidang keahlian