Skip to main content

Job Level Module

Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Level Module — modul master yang mengelola level jabatan (job level), sebagai hierarki di atas job grade. Untuk detail teknis dan aturan validasi, lihat TEKNIS dan VALIDATION-RULES.


Overview

Job Level Module mengelola job level (level jabatan) sebagai master data. Setiap job level memiliki nama, key (unique, di-generate dari nama), deskripsi opsional, dan order_index untuk urutan tampilan. Job level menjadi parent untuk job grade dan referensi untuk job title.

Modul ini menyediakan CRUD dasar (create, list, get by id, update, soft delete) dengan tenant isolation dan audit fields.


Goals

  • Menyediakan master data untuk level jabatan (job level)
  • Mendukung key unik per tenant (auto-generated slug dari nama)
  • Mendukung order_index untuk urutan tampilan
  • Menjadi parent untuk job grade dan referensi job title
  • Operasi sederhana: create, list, detail, update, soft delete
  • Tenant isolation dan audit trail

Core Concepts

1. Job Level

  • Name — Nama tampilan (contoh: Junior, Middle, Senior, Manager)
  • Key — Identifier unik, di-generate otomatis dari nama (slug)
  • Description — Opsional; deskripsi level
  • order_index — Urutan tampilan (auto: max + 1 pada create)
  • 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

  • JobGrade — JobGrade.level_id → JobLevel.id
  • JobTitle — JobTitle.level_id → JobLevel.id

Contoh Data

Format isian Create:

FieldKeteranganRequiredContoh
nameNama job level"Junior", "Senior"
descriptionDeskripsi opsional-"Entry level"

Key di-generate otomatis dari name. order_index di-set otomatis (max + 1).
Catatan: Key harus unik; jika nama menghasilkan slug yang sudah ada, create akan gagal (beda dengan job-family yang pakai suffix).

Format Update (semua optional):

FieldKeteranganContoh
keyKey (manual override)"senior"
nameNama"Senior"
descriptionDeskripsinull atau string
order_indexUrutan3
is_activeStatus aktiftrue

Supported Operations

OperasiRingkasan
CreateBuat job level; key dari name, order_index = max+1; validasi key unik
ListDaftar dengan filter search, is_active, pagination, sorting
Get by IDDetail satu job level by UUID
UpdateUpdate (key, name, description, order_index, is_active)
Soft DeleteSet deleted_at, deleted_by

Tidak ada hard delete di API; soft delete saja.


Data Integrity Rules

  • Key unik per tenant
  • order_index untuk urutan (boleh duplicate, dipakai untuk sort)
  • Create: validasi key belum dipakai (validateExistence)
  • Update: validasi record ada (validateNotFound)

Integrasi

Modul / TabelHubungan
JobGradeJobGrade.level_id → JobLevel.id
JobTitleJobTitle.level_id → JobLevel.id
TenantSemua data di-scope per tenant_id

Technical Characteristics

  • Identifier: UUID
  • Base route: /job-levels
  • Auth: Bearer token (AuthGuard); tenant dari current user
  • RLS: Tenant-scoped client (createTenantClient)

Referensi