Job Position Module
Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Position Module — modul master yang mengelola posisi jabatan (job position), menghubungkan job title dengan kode unik. Untuk detail teknis dan aturan validasi, lihat TEKNIS dan VALIDATION-RULES.
Overview
Job Position Module mengelola job position (posisi jabatan) sebagai master data. Setiap job position memiliki code (unik per tenant), terhubung ke job title, dan dipakai untuk penempatan employee di organization unit atau operational unit.
Modul ini menyediakan CRUD dasar (create, list, get by id, update, soft delete) dengan tenant isolation dan audit fields.
Goals
- Menyediakan master data untuk posisi jabatan (job position)
- Code unik per tenant untuk identifikasi posisi
- Menghubungkan ke job title
- Mendukung penempatan di organization unit / operational unit
- Operasi sederhana: create, list, detail, update, soft delete
- Tenant isolation dan audit trail
Core Concepts
1. Job Position
- title_id — UUID Job Title (wajib; referensi jabatan)
- code — Kode posisi, unik per tenant (contoh: JP-001, JP-002)
- 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 — JobPosition.title_id → JobTitle.id
- OrganizationUnit — Via OrganizationUnitHasPosition (many-to-many)
- OperationalUnit — Via OpUnitHasPosition (many-to-many)
- Employee — Employee dapat terhubung ke job position
Contoh Data
Format isian Create:
| Field | Keterangan | Required | Contoh |
|---|---|---|---|
title_id | UUID Job Title | ✅ | UUID |
code | Kode posisi | ✅ | "JP-001", "FIN-01" |
Format Update:
| Field | Keterangan | Required | Contoh |
|---|---|---|---|
title_id | UUID Job Title | ✅ | UUID |
code | Kode posisi | - | "JP-002" |
is_active | Status aktif | - | true |
Supported Operations
| Operasi | Ringkasan |
|---|---|
| Create | Buat job position; validasi title_id ada, code unik |
| List | Daftar dengan filter search, is_active, pagination, sorting |
| Get by ID | Detail satu job position by UUID |
| Update | Update (title_id, code, is_active) |
| Soft Delete | Set deleted_at, deleted_by |
Tidak ada hard delete di API; soft delete saja.
Data Integrity Rules
- code unik per tenant (validasi saat create)
- title_id harus mereferensi JobTitle yang ada
- Update memvalidasi existence dan (bila code diubah) uniqueness code
Integrasi
| Modul / Tabel | Hubungan |
|---|---|
| JobTitle | JobPosition.title_id → JobTitle.id |
| OrganizationUnit | Via OrganizationUnitHasPosition |
| OperationalUnit | Via OpUnitHasPosition |
| Employee | Employee terhubung ke JobPosition |
| Tenant | Semua data di-scope per tenant_id |
Technical Characteristics
- Identifier: UUID
- Base route:
/job-positions - Auth: Bearer token (AuthGuard); tenant dari current user
- RLS: Tenant-scoped client (createTenantClient)
Referensi
- Technical: TEKNIS
- Validation rules: VALIDATION-RULES