Lewati ke isi

2. Master Organisasi & Karyawan

Bab ini menjelaskan cara setup struktur organisasi (pohon jabatan) dan tambah karyawan. Ini adalah prerequisite untuk semua menu lain — karyawan tidak bisa pengajuan cuti, masuk pipeline, atau dapat gaji bila belum punya jabatan + biodata.

Catatan navigasi UI (per iterasi terbaru): - Karyawan kini di sidebar group Beranda (di bawah Dashboard) — sering dipakai, layak diberi 1-click access. - Organisasi, Surat Keputusan, Waktu Kerja, Penggajian, Miscellaneous pindah ke dropdown Master Data di header (kanan atas, sebelah informasi user). Setup data ini jarang diubah; sidebar dibebaskan untuk operasi harian + reporting. - Surat Keputusan (SK) adalah container versi struktur jabatan — buat SK baru saat ada restrukturisasi; struktur lama tetap immutable.

Urutan setup

  1. (Saat restrukturisasi) Bikin Surat Keputusan baru — struktur dari SK aktif otomatis di-clone, edit yang berubah saja.
  2. Bikin pohon Jabatan di SK aktif (top-down dari direktur sampai staff)
  3. Tambah Karyawan (single via form atau bulk via CSV) — akun login otomatis dibuatkan
  4. Lengkapi Biodata + sub-resource (alamat, keluarga, riwayat kerja, riwayat pendidikan)
  5. Setup Setting Karyawan (gaji pokok + status + bank rekening) di tab "Setting Karyawan" pada halaman Karyawan Detail
  6. (Opsional) Atur Login Setup (kirim kredensial / reset) dan Biometrik Presensi per karyawan di tab masing-masing

2.1 Master Jabatan

Akses: sidebar Master Data → Organisasi.

Konsep

  • Jabatan punya hierarki via parent_id — bikin tree organization
  • Setiap jabatan punya level (golongan): angka 1-20 (default range tenant 1-10, bisa diubah di Profile Organisasi)
  • Jabatan punya nomor posisi unik per tenant (mis. DIR-001, MGR-FIN-01)
  • Setiap jabatan bisa punya:
  • Job Description (deskripsi tugas)
  • Kompetensi (skill yang dibutuhkan)

Tampilan halaman

Halaman Organisasi punya 2 mode toggle di pojok kanan atas:

  • List view — tabel datar dengan filter parent + level
  • Tree view — pohon hierarki yang bisa di-expand/collapse

Tambah Jabatan Root (level paling atas)

  1. Klik tombol "Tambah Jabatan" (kanan atas)
  2. Isi form:
  3. Nomor Posisi (wajib, unik): mis. DIR-001
  4. Nama Jabatan (wajib): mis. Direktur Utama
  5. Parent: kosongkan (untuk jabatan root)
  6. Level (Golongan): 1 (paling tinggi)
  7. Grade: opsional, mis. Eksekutif
  8. Klik Simpan

Tambah Jabatan Anak

  1. Klik "Tambah Jabatan"
  2. Pilih Parent dari dropdown (cari nama atau nomor posisi)
  3. Isi field lain
  4. Level harus ≥ level parent (otomatis di-validate)
  5. Simpan

Upload Jabatan (Bulk via CSV)

Untuk struktur besar, upload CSV lebih cepat:

  1. Klik tombol "Tambah" → submenu "Upload Jabatan"
  2. Modal upload akan tampil
  3. Download Template — file CSV dengan header standar
  4. Isi CSV. Format kolom:
    nomor_posisi,nama_jabatan,parent_nomor_posisi,level,grade
    DIR-001,Direktur Utama,,1,Eksekutif
    MGR-FIN-01,Manajer Keuangan,DIR-001,2,Manajerial
    STF-FIN-01,Staff Keuangan,MGR-FIN-01,3,Staff
    
  5. Baris 1 = header (jangan diubah)
  6. parent_nomor_posisi kosongkan untuk jabatan root
  7. Urutkan dari root ke leaf (parent harus ada sebelum child)
  8. Pilih file CSV via Choose File
  9. Klik Upload & Validate — sistem cek duplikat + parent valid
  10. Bila ada error, list error per baris akan tampil. Perbaiki CSV → upload ulang.
  11. Bila valid, klik Konfirmasi Insert — sistem insert semua dalam 1 transaksi (all-or-nothing).

Edit Jabatan

  1. Klik nama jabatan di list → buka Halaman Detail Jabatan
  2. Klik "Edit"
  3. Ubah field. Validasi:
  4. Parent baru tidak boleh menyebabkan cyclic (jabatan tidak boleh jadi parent dirinya sendiri lewat chain)
  5. Level baru harus ≥ level parent
  6. Simpan

Detail Jabatan: 2 Tab

Halaman detail punya 2 tab:

Tab "Deskripsi Kerja" — daftar job description: - Klik + Tambah Jobdesc → isi deskripsi → simpan - Edit/hapus per item

Tab "Kompetensi Jabatan" — daftar kompetensi: - Klik + Tambah Kompetensi → isi nama + deskripsi → simpan

Hapus Jabatan

  • Soft delete — data tetap di DB tapi tidak ditampilkan
  • Tidak bisa dihapus bila masih ada child aktif atau masih dipakai karyawan aktif (sistem akan tolak dengan pesan jelas)
  • Solusi: pindahkan child / re-assign karyawan dulu

2.2 Master Karyawan

Akses: sidebar Master Data → Karyawan.

Tampilan halaman

Tabel daftar karyawan dengan kolom: - Nomor Induk (NIK) - Nama - Email - Jabatan + Golongan - Kelompok Kerja - Tipe Penempatan - Aksi (Edit / Detail)

Toolbar: search (nama/NIK/email) + filter (jabatan, kelompok kerja) + tombol Tambah.

Tambah Karyawan (single)

  1. Klik tombol "Tambah Karyawan" (kanan atas)
  2. Modal Tambah Karyawan wizard 2 step:

Step 1 — Identitas + Penempatan: - Biodata mode: pilih Buat Baru atau Pakai Biodata Existing - Buat Baru: isi Nama, Email, Tempat lahir, Tanggal lahir, Gender, Agama, Golongan darah - Pakai Existing: cari biodata yang sudah ada (untuk kasus 1 orang dipindah ke jabatan lain) - Nomor Induk (NIK): bebas format, prefix kode tenant disarankan (mis. KEU01-001) - Tanggal Bergabung: format YYYY-MM-DD - Tipe Penempatan: INISIASI (karyawan baru), PROMOSI, MUTASI, LAINNYA - Jabatan: cari via picker — ketik nama atau nomor posisi (jangan declare semua jabatan, dropdown lambat) - Kelompok Kerja: pilih dari dropdown (lihat bab 3 untuk setup kelompok kerja)

Step 2 — Konfirmasi: - Review semua field - Klik Simpan

Tambah Karyawan (Bulk via CSV)

  1. Tombol "Tambah Karyawan" → submenu "Upload Karyawan"
  2. Modal upload, Download Template dulu
  3. Format CSV:
    nomor_induk,tanggal_bergabung,tipe_penempatan,nama,email,nomor_posisi_jabatan,kode_kelompok_kerja
    KEU01-001,2026-01-15,INISIASI,Budi Santoso,[email protected],STF-FIN-01,KK-FRO
    
  4. Upload file → validate → konfirmasi insert (all-or-nothing)

Catatan: Bulk import HANYA membuat karyawan + biodata minimal (nama + email). Sub-resource (alamat, keluarga, riwayat) di-isi terpisah via halaman Detail Karyawan.


2.3 Halaman Detail Karyawan

Klik nama karyawan di list → buka halaman detail dengan 2 area:

Header info (atas): - Avatar dengan inisial nama - NIK + Jabatan + Kelompok Kerja - Email + telepon - Tempat/tanggal lahir + demografi - Data sensitif (KTP, NPWP, nama ibu) dengan mata icon untuk toggle masking - Tombol kanan atas: Edit Identitas, Setting (dropdown: Login Setup, Aktifitas Sistem, Biometrik Presensi, Terminasi)

Tab navigation (6 tab):

Tab 1: Penempatan

  • Read-only display: NIK, tanggal bergabung, tipe penempatan, jabatan, atasan, kelompok kerja
  • Tombol "Edit Penempatan" untuk update

Tab 2: Setting Karyawan (untuk payroll)

Field: - Gaji Pokok (IDR, decimal): dipakai konstanta [GP] di formula - Status Kekaryawanan: dropdown dari master (TETAP, KONTRAK, MAGANG, dll — lihat bab 4) - Bank Akun: - Bank: dropdown dari master bank - Nomor Rekening - Nama Pemilik Rekening (opsional, default = nama karyawan)

Penting: Karyawan tanpa Gaji Pokok akan dapat nominal 0 di komponen FORMULA yang pakai [GP]. Lengkapi field ini untuk SEMUA karyawan sebelum kalkulasi gaji.

Untuk bulk-set gaji_pokok by golongan jabatan, tersedia script seed seed_kalkulasi_data.py — lihat 07-proses-gaji.md.

Tab 3: Alamat

List alamat karyawan dengan tipe (TINGGAL / KTP / DARURAT / LAINNYA). - Tambah / Edit / Hapus per item

Tab 4: Keluarga

Anggota keluarga + relasi (SUAMI/ISTRI/ANAK/dll).

Tab 5: Riwayat Kerja

Pengalaman kerja sebelumnya. Tahun keluar harus ≥ tahun masuk.

Tab 6: Riwayat Pendidikan

Pendidikan formal/non-formal/kedinasan.


2.4 Edit Identitas Karyawan

Klik tombol "Edit Identitas" di header — modal wizard 2 step:

Step 1 — Profil Umum: - Nama, email, tempat/tanggal lahir, gender, agama, golongan darah, telepon

Step 2 — Data Sensitif (PII): - KTP, NPWP, Nama Ibu Kandung - Disimpan terenkripsi di database

Field PII: hanya HR (yang punya akses ke karyawan ini) yang boleh lihat. Saat tampil di header, default ter-mask — klik icon mata untuk reveal.


2.5 Setting Submenu (Karyawan Detail)

Tombol Setting di header → dropdown 4 menu:

Login Setup

Untuk karyawan yang mau login self-service (lihat slip gaji, ajukan cuti, dll): - Username (default = email karyawan) - Send Login Account — kirim email berisi username + password sementara

Aktifitas Sistem

Riwayat aksi karyawan di sistem (audit log: login, perubahan data, approval pengajuan).

Biometrik Presensi

Log raw clock-in/clock-out dari mesin biometrik (sebelum dikalkulasi jadi realisasi).

Beda dengan Realisasi: Biometrik = data sumber. Realisasi = hasil kalkulasi (status efektif: hadir/ijin/cuti).

Terminasi

Hapus / non-aktifkan karyawan dari sistem. Aksi destruktif: - Soft-delete karyawan + revoke akun login - Histori pengajuan + realisasi tetap tersimpan (untuk audit) - Modal konfirmasi penuh akan tampil — wajib ketik konfirmasi


2.6 Tips & Best Practice

Tips Alasan
Bikin pohon jabatan dulu sebelum tambah karyawan Karyawan butuh jabatan_id saat create
Bikin Kelompok Kerja sebelum tambah karyawan Karyawan butuh kelompok_kerja_id
Untuk testing, gunakan bulk CSV Lebih cepat untuk 50+ karyawan
Cek "Pakai Biodata Existing" untuk mutasi/promosi Hindari duplikasi PII di tenant
Lengkapi Setting Karyawan SEBELUM tutup bulan pertama Tanpa gaji_pokok + status, karyawan tidak masuk kalkulasi
Soft-delete karyawan, jangan hard delete Histori payroll + pengajuan terjaga

Langkah berikutnya

3. Master Waktu Kerja — bikin shift, jadwal mingguan, kelompok kerja, dan assign jadwal.