Skip to main content

Job Family Module

Peruntukan: Dokumen ini adalah Product Requirements Document (PRD) untuk Job Family Module — modul master yang mengelola keluarga jabatan (job family), dipakai untuk mengelompokkan job title (mis. Finance, Sales, Engineering, Human Resources). Untuk detail teknis dan aturan validasi, lihat TEKNIS.md dan VALIDATION-RULES.md.


Overview

Job Family Module mengelola job family (keluarga jabatan) sebagai master data. Setiap job family memiliki nama, key (unique, auto-generated dari nama), dan deskripsi opsional. Job family dipakai untuk mengelompokkan job title (JobTitle) dalam struktur HR — satu job title dapat terhubung ke satu job family.

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


Goals

  • Menyediakan master data untuk kelompok jabatan (job family)
  • Mendukung key unik per tenant (auto-generated slug dari nama)
  • Menjadi referensi untuk job title (relasi family_id)
  • Operasi sederhana: create, list, detail, update, soft delete
  • Tenant isolation dan audit trail

Core Concepts

1. Job Family

  • Name — Nama tampilan (contoh: Finance, Sales, Engineering, Human Resources)
  • Key — Identifier unik, di-generate otomatis dari nama (slug: lowercase, spasi/special char diganti -, deduplikasi dengan suffix -1, -2 jika bentrok)
  • Description — Opsional; deskripsi keluarga 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

  • JobTitle — Satu job family dapat memiliki banyak job title (JobTitle.family_id → JobFamily.id). Soft delete job family tidak memblokir referensi; integrasi dengan job title mengandalkan filter deleted_at.

Contoh Data

Format isian Create:

FieldKeteranganRequiredContoh
nameNama job family"Finance", "Sales"
descriptionDeskripsi opsional-"Finance related roles"

Key di-generate otomatis (contoh: finance, sales, engineering, human-resources). Jika nama menghasilkan slug yang sudah dipakai, sistem menambah suffix (finance-1, finance-2).

Format Update (semua optional):

FieldKeteranganContoh
keyKey (manual override)"finance"
nameNama"Finance"
descriptionDeskripsinull atau string
is_activeStatus aktiftrue

Supported Operations

OperasiRingkasan
CreateBuat job family; key auto dari name, is_active = true
ListDaftar dengan filter search, is_active, pagination, sorting (order_by, order_direction)
Get by IDDetail satu job family by UUID
UpdatePartial update (key, name, description, is_active)
Soft DeleteSet deleted_at, deleted_by (data tidak dihapus fisik)

Tidak ada hard delete di API; soft delete saja.


Data Integrity Rules

  • Key unik (di level tabel; dengan RLS efektif per tenant)
  • Name required pada create
  • Update dan soft delete memvalidasi existence (record harus ada)
  • Soft delete tidak memeriksa apakah masih ada job title yang memakai family ini (dapat ditambah di kemudian hari)

Integrasi

Modul / TabelHubungan
JobTitleJobTitle.family_id → JobFamily.id (satu job title bisa punya satu job family)
TenantSemua data di-scope per tenant_id

Technical Characteristics

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

Typical Use Cases

  • Master kelompok jabatan untuk struktur HR (Finance, Sales, Engineering, HR, dll.)
  • Filter dan grouping job title berdasarkan job family
  • Referensi di modul rekrutmen, posisi, atau kompensasi

Referensi

  • Technical: docs/TEKNIS.md
  • Validation rules: docs/VALIDATION-RULES.md