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 2026-05): - Karyawan kini di sidebar group Beranda (di bawah Dashboard) — sering dipakai, layak diberi 1-click access. - Organisasi, Waktu Kerja, Penggajian, Miscellaneous ada di sidebar section Master Data (paling bawah, sebagai accordion). Setup data ini jarang diubah harian; ditempatkan terakhir supaya sidebar fokus ke operasi & reporting di atas. - Surat Keputusan (SK) sekarang di-akses sebagai tab di halaman Organisasi (bukan menu tersendiri). SK adalah container versi struktur jabatan — buat SK baru saat ada restrukturisasi; struktur lama tetap immutable.
Urutan setup¶
- (Saat restrukturisasi) Bikin Surat Keputusan baru — struktur dari SK aktif otomatis di-clone, edit yang berubah saja.
- Bikin pohon Jabatan di SK aktif (top-down dari direktur sampai staff)
- Tambah Karyawan (single via form atau bulk via CSV) — akun login otomatis dibuatkan
- Lengkapi Biodata + sub-resource (alamat, keluarga, riwayat kerja, riwayat pendidikan)
- Setup Setting Karyawan (gaji pokok + status + bank rekening) di tab "Setting Karyawan" pada halaman Karyawan Detail
- (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)¶
- Klik tombol "Tambah Jabatan" (kanan atas)
- Isi form:
- Nomor Posisi (wajib, unik): mis.
DIR-001 - Nama Jabatan (wajib): mis.
Direktur Utama - Parent: kosongkan (untuk jabatan root)
- Level (Golongan): 1 (paling tinggi)
- Grade: opsional, mis.
Eksekutif - Klik Simpan
Tambah Jabatan Anak¶
- Klik "Tambah Jabatan"
- Pilih Parent dari dropdown (cari nama atau nomor posisi)
- Isi field lain
- Level harus ≥ level parent (otomatis di-validate)
- Simpan
Upload Jabatan (Bulk via CSV)¶
Untuk struktur besar, upload CSV lebih cepat:
- Klik tombol "Tambah" → submenu "Upload Jabatan"
- Modal upload akan tampil
- Download Template — file CSV dengan header standar
- Isi CSV. Format kolom:
- Baris 1 = header (jangan diubah)
parent_nomor_posisikosongkan untuk jabatan root- Urutkan dari root ke leaf (parent harus ada sebelum child)
- Pilih file CSV via Choose File
- Klik Upload & Validate — sistem cek duplikat + parent valid
- Bila ada error, list error per baris akan tampil. Perbaiki CSV → upload ulang.
- Bila valid, klik Konfirmasi Insert — sistem insert semua dalam 1 transaksi (all-or-nothing).
Edit Jabatan¶
- Klik nama jabatan di list → buka Halaman Detail Jabatan
- Klik "Edit"
- Ubah field. Validasi:
- Parent baru tidak boleh menyebabkan cyclic (jabatan tidak boleh jadi parent dirinya sendiri lewat chain)
- Level baru harus ≥ level parent
- 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)¶
- Klik tombol "Tambah Karyawan" (kanan atas)
- 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)¶
- Tombol "Tambah Karyawan" → submenu "Upload Karyawan"
- Modal upload, Download Template dulu
- Format CSV (header WAJIB di baris pertama, urut bebas):
7 kolom wajib:
| Kolom | Detail |
|---|---|
nama |
Nama lengkap (≤ 150 char) |
email |
Format email, harus unik per tenant |
gender |
L atau P |
nomor_induk |
NIK internal, unik per tenant (≤ 50 char) |
jabatan_nomor_posisi |
Match nomor_posisi di master Jabatan tenant |
tanggal_bergabung |
Format YYYY-MM-DD |
tipe_penempatan |
INISIASI / PROMOSI / MUTASI / LAINNYA |
4 kolom opsional (Setting Karyawan / PPh 21):
| Kolom | Detail |
|---|---|
status_kekaryawanan_kode |
Match kode di master Status Kekaryawanan tenant (mis. TETAP, KONTRAK, atau kode numerik) |
gaji_pokok |
Nominal Rp (angka, tanpa pemisah ribuan); contoh 7500000 |
status_perkawinan |
TK (Tidak Kawin) / K (Kawin) / HB (Hidup Berpisah) |
status_ptkp |
Kode PTKP DJP: TK/0..3, K/0..3, K/I/0..3, HB/0..3 |
Contoh isi:
nama,email,gender,nomor_induk,jabatan_nomor_posisi,tanggal_bergabung,tipe_penempatan,status_kekaryawanan_kode,gaji_pokok,status_perkawinan,status_ptkp
Budi Santoso,[email protected],L,EMP-0001,J001,2026-01-15,INISIASI,TETAP,8000000,K,K/1
Siti Aminah,[email protected],P,EMP-0002,J002,2026-02-01,INISIASI,KONTRAK,6500000,TK,TK/0
Pak Kosong,[email protected],L,EMP-0003,J002,2026-02-01,INISIASI,,,,
- Upload file → validate → konfirmasi insert (all-or-nothing: kalau ada error di 1 baris, tidak ada baris yang masuk)
Perilaku 4 field opsional: kalau minimal 1 terisi → row Setting Karyawan otomatis ikut dibuat dalam transaksi sama. Semua kosong (mis. row "Pak Kosong" di contoh) → karyawan masuk tanpa Setting; HR bisa lengkapi via tab Setting Karyawan di Detail.
Catatan: Bulk import HANYA membuat karyawan + biodata minimal (nama + email) + setting (kalau diisi). Sub-resource lain (alamat, keluarga, riwayat) di-isi terpisah via halaman Detail Karyawan.
Status PTKP wajib untuk kalkulasi PPh 21 nanti. Karyawan tanpa
status_ptkpakan di-skip oleh modul Hitung Pajak (lihat 07-proses-gaji.md).
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)
- Status Perkawinan (PPh 21): TK Tidak Kawin / K Kawin / HB Hidup Berpisah
- Status PTKP (PPh 21): kode DJP lengkap (16 opsi: TK/0..3, K/0..3, K/I/0..3, HB/0..3). Dropdown dengan group: Tidak Kawin / Kawin / Kawin+Istri Digabung / Hidup Berpisah.
- Bank Akun:
- Bank: dropdown dari master bank
- Nomor Rekening
- Nama Pemilik Rekening (opsional, default = nama karyawan)
Penting (Gaji Pokok): Karyawan tanpa Gaji Pokok akan dapat nominal 0 di komponen FORMULA yang pakai
[GP]. Lengkapi field ini untuk SEMUA karyawan sebelum kalkulasi gaji.Penting (Status PTKP): Karyawan tanpa Status PTKP akan di-skip oleh modul Hitung Pajak. Lengkapi untuk semua karyawan yang masuk objek PPh 21 sebelum trigger kalkulasi pajak. K/I/* (Kawin penghasilan istri digabung) dipakai kalau istri karyawan ikut menanggung PPh 21 dari penghasilan terpisah.
Untuk bulk-set gaji_pokok by golongan jabatan, tersedia script seed
seed_kalkulasi_data.py(sisi backend, untuk admin teknis) — lihat juga 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¶
Timeline audit aktivitas karyawan di sistem — terbuka sebagai daftar kronologis (terbaru di atas) dengan filter per kategori: Semua · Pengajuan · Approval · Profil · Akun.
Yang dicatat:
| Kategori | Contoh event |
|---|---|
| 📝 Pengajuan | Karyawan mengajukan cuti / ijin / tukar shift |
| ✅ Approval | Karyawan (sebagai atasan) menyetujui/menolak pengajuan bawahan, atau menerima/menolak permintaan tukar shift |
| 👤 Profil | Tambah / ubah / hapus data alamat, keluarga, riwayat kerja, riwayat pendidikan, atau identitas (biodata) |
| 🔑 Akun | Ganti password sendiri, atau reset password oleh HR |
Tiap baris menampilkan judul aksi, detail (alasan/catatan), waktu, dan—bila tersedia—pelaku ("oleh …"). Tombol Muat lebih banyak untuk memuat riwayat lama. Halaman ini read-only (tidak ada aksi mutasi).
Mulai dari sekarang
Timeline hanya berisi event yang terjadi setelah fitur ini aktif. Aktivitas lama (sebelum rilis) tidak tersedia karena sistem belum merekamnya. Wajar bila timeline karyawan lama masih kosong di awal.
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.