Skip to main content

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:

FieldKeteranganRequiredContoh
title_idUUID Job TitleUUID
codeKode posisi"JP-001", "FIN-01"

Format Update:

FieldKeteranganRequiredContoh
title_idUUID Job TitleUUID
codeKode posisi-"JP-002"
is_activeStatus aktif-true

Supported Operations

OperasiRingkasan
CreateBuat job position; validasi title_id ada, code unik
ListDaftar dengan filter search, is_active, pagination, sorting
Get by IDDetail satu job position by UUID
UpdateUpdate (title_id, code, is_active)
Soft DeleteSet 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 / TabelHubungan
JobTitleJobPosition.title_id → JobTitle.id
OrganizationUnitVia OrganizationUnitHasPosition
OperationalUnitVia OpUnitHasPosition
EmployeeEmployee terhubung ke JobPosition
TenantSemua 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