Job Grade Module
Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Grade Module — modul master yang mengelola grade jabatan (job grade), terhubung ke job level. Untuk detail teknis dan aturan validasi, lihat TEKNIS dan VALIDATION-RULES.
Overview
Job Grade Module mengelola job grade (grade jabatan) sebagai master data. Setiap job grade memiliki nama, key (unique, auto-generated dari nama), deskripsi opsional, dan terhubung ke job level. Job grade dipakai sebagai referensi untuk job title 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 grade jabatan (job grade)
- Mendukung key unik per tenant (auto-generated slug dari nama)
- Terhubung ke job level (level_id)
- Menjadi referensi untuk job title
- Operasi sederhana: create, list, detail, update, soft delete
- Tenant isolation dan audit trail
Core Concepts
1. Job Grade
- Name — Nama tampilan (contoh: 1, 2, 3, 1A, 1B, 2A, 2B)
- Key — Identifier unik, di-generate otomatis dari nama (slug)
- Description — Opsional; deskripsi grade
- level_id — UUID Job Level (wajib; referensi level 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
- JobLevel — JobGrade.level_id → JobLevel.id
- JobTitle — Banyak job title dapat mengacu ke satu job grade
Contoh Data
Format isian Create:
| Field | Keterangan | Required | Contoh |
|---|---|---|---|
name | Nama job grade | ✅ | "1", "2A", "Senior" |
level_id | UUID Job Level | ✅ | UUID |
description | Deskripsi opsional | - | "Grade 1 entry level" |
Key di-generate otomatis dari name (slug). Jika bentrok, suffix -1, -2 ditambahkan.
Format Update (semua required di DTO saat ini):
| Field | Keterangan | Contoh |
|---|---|---|
name | Nama | "2" |
level_id | UUID Job Level | UUID |
description | Deskripsi | null atau string |
is_active | Status aktif | true |
Supported Operations
| Operasi | Ringkasan |
|---|---|
| Create | Buat job grade; key auto dari name, validasi level_id harus ada |
| List | Daftar dengan filter search, is_active, pagination, sorting |
| Get by ID | Detail satu job grade by UUID |
| Update | Update (key di-regenerate dari name) |
| Soft Delete | Set deleted_at, deleted_by |
Tidak ada hard delete di API; soft delete saja.
Data Integrity Rules
- Key unik per tenant
- level_id harus mereferensi JobLevel yang ada
- name required pada create
- Update memvalidasi existence job grade dan job level
Integrasi
| Modul / Tabel | Hubungan |
|---|---|
| JobLevel | JobGrade.level_id → JobLevel.id |
| JobTitle | JobTitle.grade_id → JobGrade.id |
| Tenant | Semua data di-scope per tenant_id |
Technical Characteristics
- Identifier: UUID
- Base route:
/job-grades - Auth: Bearer token (AuthGuard); tenant dari current user
- RLS: Tenant-scoped client (createTenantClient)
Referensi
- Technical: TEKNIS
- Validation rules: VALIDATION-RULES