Job Title Module
Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Title Module — modul master yang mengelola jabatan (job title), menghubungkan job family, job level, dan job grade. Untuk detail teknis dan aturan validasi, lihat TEKNIS dan VALIDATION-RULES.
Overview
Job Title Module mengelola job title (jabatan) sebagai master data. Setiap job title memiliki nama, deskripsi opsional, dan relasi ke job family, job level, serta job grade. Job title dipakai sebagai referensi untuk job position dan employee dalam struktur HR.
Modul ini menyediakan CRUD dasar (create, list, get by id, update, soft delete) dengan tenant isolation dan audit fields.
Goals
- Menyediakan master data untuk jabatan (job title)
- Menghubungkan job family, job level, dan job grade dalam satu entitas
- Menjadi referensi untuk job position dan employee
- Operasi sederhana: create, list, detail, update, soft delete
- Tenant isolation dan audit trail
Core Concepts
1. Job Title
- Name — Nama tampilan jabatan (contoh: Finance Junior 1, Senior Engineer)
- Description — Opsional; deskripsi jabatan
- family_id — UUID Job Family (referensi kelompok jabatan)
- level_id — UUID Job Level (referensi level jabatan)
- grade_id — UUID Job Grade (referensi grade 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
- JobFamily — JobTitle.family_id → JobFamily.id
- JobLevel — JobTitle.level_id → JobLevel.id
- JobGrade — JobTitle.grade_id → JobGrade.id
- JobPosition — Banyak job position dapat mengacu ke satu job title
- Employee — Employee dapat terhubung ke job title
Contoh Data
Format isian Create:
| Field | Keterangan | Required | Contoh |
|---|---|---|---|
name | Nama job title | ✅ | "Finance Junior 1" |
family_id | UUID Job Family | ✅ | UUID |
level_id | UUID Job Level | ✅ | UUID |
grade_id | UUID Job Grade | ✅ | UUID |
description | Deskripsi opsional | - | "Finance related role" |
Format Update (semua optional kecuali name):
| Field | Keterangan | Contoh |
|---|---|---|
name | Nama | "Senior Finance" |
family_id | UUID Job Family | UUID |
level_id | UUID Job Level | UUID |
grade_id | UUID Job Grade | UUID |
description | Deskripsi | null atau string |
is_active | Status aktif | true |
Supported Operations
| Operasi | Ringkasan |
|---|---|
| Create | Buat job title; validasi family_id, level_id, grade_id harus ada |
| List | Daftar dengan filter search, is_active, pagination, sorting |
| Get by ID | Detail satu job title by UUID |
| Update | Partial update (name, family_id, level_id, grade_id, 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
- family_id, level_id, grade_id harus mereferensi record yang ada (validasi FK)
- name required pada create
- Update dan soft delete memvalidasi existence (record harus ada)
Integrasi
| Modul / Tabel | Hubungan |
|---|---|
| JobFamily | JobTitle.family_id → JobFamily.id |
| JobLevel | JobTitle.level_id → JobLevel.id |
| JobGrade | JobTitle.grade_id → JobGrade.id |
| JobPosition | JobPosition.title_id → JobTitle.id |
| Employee | Employee dapat terhubung ke JobTitle |
| Tenant | Semua data di-scope per tenant_id |
Technical Characteristics
- Identifier: UUID
- Base route:
/job-titles - Auth: Bearer token (AuthGuard); tenant dari current user
- RLS: Tenant-scoped client (createTenantClient)
Referensi
- Technical: TEKNIS
- Validation rules: VALIDATION-RULES