Job Family Module
Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Family Module — modul master yang mengelola keluarga jabatan (job family), dipakai untuk mengelompokkan job title (mis. Finance, Sales, Engineering, Human Resources). Untuk detail teknis dan aturan validasi, lihat TEKNIS.md dan VALIDATION-RULES.md.
Overview
Job Family Module mengelola job family (keluarga jabatan) sebagai master data. Setiap job family memiliki nama, key (unique, auto-generated dari nama), dan deskripsi opsional. Job family dipakai untuk mengelompokkan job title (JobTitle) dalam struktur HR — satu job title dapat terhubung ke satu job family.
Modul ini menyediakan CRUD dasar (create, list, get by id, update, soft delete) dengan tenant isolation dan audit fields (created_by, updated_by, deleted_at, dll.).
Goals
- Menyediakan master data untuk kelompok jabatan (job family)
- Mendukung key unik per tenant (auto-generated slug dari nama)
- Menjadi referensi untuk job title (relasi family_id)
- Operasi sederhana: create, list, detail, update, soft delete
- Tenant isolation dan audit trail
Core Concepts
1. Job Family
- Name — Nama tampilan (contoh: Finance, Sales, Engineering, Human Resources)
- Key — Identifier unik, di-generate otomatis dari nama (slug: lowercase, spasi/special char diganti
-, deduplikasi dengan suffix-1,-2jika bentrok) - Description — Opsional; deskripsi keluarga jabatan
- is_active — Status aktif (default true pada create)
2. Tenant & Audit
- Setiap record terikat tenant_id
- Audit: created_by, created_at, updated_by, updated_at, deleted_by, deleted_at (soft delete)
3. Relasi
- JobTitle — Satu job family dapat memiliki banyak job title (JobTitle.family_id → JobFamily.id). Soft delete job family tidak memblokir referensi; integrasi dengan job title mengandalkan filter deleted_at.
Contoh Data
Format isian Create:
| Field | Keterangan | Required | Contoh |
|---|---|---|---|
name | Nama job family | ✅ | "Finance", "Sales" |
description | Deskripsi opsional | - | "Finance related roles" |
Key di-generate otomatis (contoh: finance, sales, engineering, human-resources). Jika nama menghasilkan slug yang sudah dipakai, sistem menambah suffix (finance-1, finance-2).
Format Update (semua optional):
| Field | Keterangan | Contoh |
|---|---|---|
key | Key (manual override) | "finance" |
name | Nama | "Finance" |
description | Deskripsi | null atau string |
is_active | Status aktif | true |
Supported Operations
| Operasi | Ringkasan |
|---|---|
| Create | Buat job family; key auto dari name, is_active = true |
| List | Daftar dengan filter search, is_active, pagination, sorting (order_by, order_direction) |
| Get by ID | Detail satu job family by UUID |
| Update | Partial update (key, name, description, is_active) |
| Soft Delete | Set deleted_at, deleted_by (data tidak dihapus fisik) |
Tidak ada hard delete di API; soft delete saja.
Data Integrity Rules
- Key unik (di level tabel; dengan RLS efektif per tenant)
- Name required pada create
- Update dan soft delete memvalidasi existence (record harus ada)
- Soft delete tidak memeriksa apakah masih ada job title yang memakai family ini (dapat ditambah di kemudian hari)
Integrasi
| Modul / Tabel | Hubungan |
|---|---|
| JobTitle | JobTitle.family_id → JobFamily.id (satu job title bisa punya satu job family) |
| Tenant | Semua data di-scope per tenant_id |
Technical Characteristics
- Identifier: UUID
- Base route:
/job-families - Auth: Bearer token (AuthGuard); tenant dari current user
- RLS: Tenant-scoped client (createTenantClient)
Typical Use Cases
- Master kelompok jabatan untuk struktur HR (Finance, Sales, Engineering, HR, dll.)
- Filter dan grouping job title berdasarkan job family
- Referensi di modul rekrutmen, posisi, atau kompensasi
Referensi
- Technical:
docs/TEKNIS.md - Validation rules:
docs/VALIDATION-RULES.md