ERPNext v16 - HR & Payroll (Versi BMP)
Modul HR & Payroll di BMP mengelola aset paling berharga sekaligus paling sensitif di perusahaan: Manusia dan Gaji mereka. Karakter khas BMP untuk modul ini adalah kerahasiaan absolut (Chinese Wall sangat ketat di sini) dan pragmatisme menghadapi regulasi ketenagakerjaan Indonesia (BPJS & PPh 21). Kita membuang seluruh fitur enterprise yang tidak relevan (Recruitment, Performance Appraisal, Training, Shift Management) dan memusatkan modul ini pada siklus bulanan: Absensi → Cuti → Hitung Gaji → Jurnal Akuntansi.
Peta dokumen:
| Chapter |
Isi |
Kedalaman |
| 0 |
Struktur & Cross-check |
✅ |
| A |
Masters (Employee, Salary, Leave) |
Penuh |
| B |
Siklus Transaksi (Attendance, Leave, Payroll) |
Penuh |
| C |
Reports |
Sedang |
| D |
HR & Payroll Settings |
Policy |
Chapter 0 - Struktur & Cross-check
0.1 Grup struktur ↔ doctype utama (erpnext/hr/doctype/ & erpnext/payroll/)
| Grup |
Doctype |
Status di BMP |
| Master Karyawan |
employee |
Adopsi Penuh (Restricted PII) |
| Penggajian |
salary_structure, salary_slip, payroll_entry |
Adopsi Penuh (Core) |
| Komponen Gaji |
salary_component, income_tax_slab |
Adopsi Penuh |
| Kehadiran |
attendance, employee_checkin |
Adopsi Penuh |
| Cuti |
leave_type, leave_allocation, leave_application |
Adopsi Penuh |
| Klaim / Reimburse |
expense_claim |
Buang / Hide (Lewat Petty Cash / PI) |
| Korporat |
recruitment, appraisal, training_program, shift_type |
Buang Permanen |
| Policy |
hr_settings, payroll_settings |
Adopsi |
0.2 Kesimpulan Struktur & Koreksi Peta Menu
Di Peta Menu BMP Rev3 awal, Leave Application ditandai sebagai 👁️ Hide (Nyala saat karyawan >5). Berdasarkan tinjauan kepatuhan hukum (UU Cipta Kerja) dan kebutuhan encashment (pencairan cuti) di akhir tahun, status ini dikoreksi menjadi ✅ Tampil. Bahkan untuk 3 karyawan, sistem wajib tahu sisa cuti agar tidak terjadi klaim berlebih atau sengketa saat karyawan resign.
Chapter A - Masters (Employee, Compensation & Leave)
Mesin apa: Kamus siapa yang bekerja, berapa hak gaji mereka, dan berapa jatah cuti mereka. Di BMP, master di sini adalah medan pertempuran utama Chinese Wall. Field PII (KTP, NPWP, Rekening Bank) dan Finansial (Gaji) wajib dienkripsi dari pandangan IT.
Perilaku per doctype:
- Employee (erpnext/hr/doctype/employee/) - master data karyawan.
- Atribut: Nama, Tanggal Masuk, Departemen (Produksi/Admin/Sales), Status (Active/Left).
- Chinese Wall Enforcement: Field bank_ac_no, bank_name, personal_email, alamat_ktp, dan status_pajak di-set ke permlevel 1. Role IT (System Manager) hanya bisa melihat Nama dan Jabatan untuk keperluan troubleshooting akun login, tapi buta total terhadap rekening bank dan data pribadi.
- Link ke User: Karyawan yang butuh akses sistem (Admin Sales, Operator Produksi) di-link ke User ID mereka. Karyawan lepas/buruh harian mungkin punya record Employee tapi tanpa User ID.
- Salary Component - master elemen gaji.
- Pendapatan (Earnings): Gaji Pokok, Tunjangan Makan, Tunjangan Transport, Bonus.
- Potongan (Deductions): BPJS Kesehatan (4% perusahaan/1% karyawan), BPJS Ketenagakerjaan (JKK, JKM, JHT, JP), PPh 21, Potongan Kasbon.
- Perilaku: Komponen bisa berupa Fixed Amount atau Formula (misal: Tunjangan Makan = Hari Hadir × Rp 25.000).
- Salary Structure - template gaji per karyawan atau per golongan.
- Menggabungkan Salary Component di atas.
- Di-assign ke Employee tertentu. Satu karyawan hanya punya satu Salary Structure aktif pada satu waktu.
- Leave Type & Leave Allocation - master hak cuti.
- Leave Type: "Cuti Tahunan" (berbayar, hangus/encash), "Cuti Sakit" (butuh surat dokter), "Cuti Melahirkan".
- Leave Allocation: Menjatah 12 hari cuti tahunan per karyawan di awal tahun (atau proporsional berdasarkan tanggal masuk).
Lintas domain:
- Employee link ke User (Framework Chapter 2) untuk kontrol akses.
- Salary Structure dibaca oleh Payroll Entry (Chapter B) untuk menghitung gaji bulanan.
- Leave Allocation dikurangi oleh Leave Application.
Edge case:
- Karyawan Resign di tengah bulan: Sistem harus bisa menghitung gaji secara prorata. ERPNext menangani ini via Payroll Period dan Loss of Pay (LOP) otomatis dari absensi yang bolong.
- IT mencoba export daftar Employee: Karena field Bank Account di permlevel 1, CSV hasil export oleh IT akan memiliki kolom rekening bank yang kosong (null). Ini adalah pertahanan sistemik yang elegan.
Chapter B - Siklus Transaksi (Kehadiran, Cuti, Penggajian)
Mesin apa: Rutinitas bulanan yang mengubah "waktu kerja" menjadi "beban gaji" dan "hutang ke karyawan". Siklus ini harus berjalan mulus dari tanggal 1 hingga tanggal 25-30.
Perilaku per tahap:
B.1 Kehadiran (Attendance)
- Attendance - record harian per karyawan (Present, Absent, Half Day, On Leave, Work From Home).
- Input: Bisa manual (untuk tim kecil), atau Data Import CSV dari mesin fingerprint / absensi wajah di pintu pabrik.
- Validasi: Tidak boleh ada dua Attendance untuk Employee + Date yang sama.
- Dampak: Absen tanpa alasan (Absent) akan memotong tunjangan makan/transport secara otomatis via formula di Salary Component.
B.2 Cuti (Leave)
- Leave Application - pengajuan cuti oleh karyawan / diinputkan admin HR.
- Memilih Leave Type dan rentang tanggal.
- Submit = memvalidasi saldo Leave Allocation. Jika cukup, status Approved dan sistem otomatis men-generate record Attendance berstatus "On Leave" untuk tanggal tersebut (sehingga tidak dianggap bolong/LOP).
- Jika saldo habis, sistem memblokir atau mengubahnya menjadi Leave Without Pay (LWOP) yang memotong gaji pokok.
B.3 Penggajian Massal (Payroll Entry)
- Payroll Entry (erpnext/payroll/doctype/payroll_entry/) - mesin utama penggajian bulanan.
- Admin Finance membuat Payroll Entry untuk periode tertentu (misal: 1-31 Agustus 2026).
- Sistem menarik semua Employee aktif, membaca Salary Structure mereka, dan menghitung berdasarkan Attendance di bulan tersebut.
- Realitas PPh 21 Indonesia: Menghitung PPh 21 (TER atau Pasal 17) via formula Frappe native sangat rumit dan rentan error saat aturan pajak berubah. Kebijakan BMP: PPh 21 dihitung oleh Finance di Excel eksternal (atau software pajak seperti Mekari), lalu angka finalnya di-input manual sebagai Additional Salary / Deduction di dalam Payroll Entry sebelum di-submit.
- Submit Payroll Entry = men-generate puluhan Salary Slip (slip gaji) sekaligus dalam status Draft.
- Salary Slip - slip gaji individual.
- Menampilkan rincian: Gaji Pokok + Tunjangan - BPJS - PPh 21 - Kasbon = Net Pay.
- Bisa dikirim via email otomatis (Email Account / Template) ke personal_email karyawan, atau dicetak via Print Format yang dipassword.
- Journal Entry Otomatis (Lintas ke Accounting):
- Saat Payroll Entry di-submit, sistem otomatis membuat Journal Entry ke modul Accounting:
- Debit: Beban Gaji, Beban BPJS Perusahaan (Expense Accounts).
- Kredit: Hutang Gaji / Payable (Liability Account), Hutang BPJS, Hutang PPh 21.
- Saat gaji ditransfer via bank, Finance membuat Payment Entry untuk melunasi Hutang Gaji tersebut.
Lintas domain:
- Menulis Journal Entry (Accounting Chapter A).
- Membaca Attendance & Leave (Chapter B ini).
- Mengirim Email (Framework Chapter 5) untuk distribusi slip gaji.
Edge case:
- Kasbon Karyawan: Karyawan pinjam uang di tengah bulan. Dicatat via Journal Entry (Debit: Piutang Karyawan, Kredit: Bank). Saat gajian, Salary Component "Potongan Kasbon" akan menarik angka dari Piutang tersebut dan melunasinya otomatis.
- BPJS Telat Lapor: Angka iuran BPJS sering berubah atau ada penyesuaian bulan lalu. Mitigasi: gunakan komponen "Penyesuaian BPJS" yang nilainya di-input manual per bulan di Payroll Entry.
Chapter C - Reports
Mesin apa: Laporan untuk audit internal, bank, dan pemerintah.
- Payroll Register - Rekapitulasi gaji bulanan seluruh karyawan dalam satu tabel (Gross, Potongan, Net). Ini laporan yang ditarik saat auditor pajak atau bank meminta bukti pembayaran gaji.
- Monthly Attendance Sheet - Matriks kehadiran per departemen/bulan. Berguna untuk Owner melihat pola absensi (misal: kenapa tim filling sering absen di hari Senin?).
- Leave Balance Report - Sisa cuti per karyawan. Krusial di akhir tahun untuk menentukan siapa yang cutinya hangus dan siapa yang harus di-encash (dibayar tunai) sesuai perjanjian kerja.
- Salary Register / Bank Advice - File rekap yang formatnya bisa disesuaikan untuk di-upload ke sistem Corporate Internet Banking (KlikBCA / Mandiri CMS) guna transfer gaji massal.
Chapter D - HR & Payroll Settings
Mesin apa: Single doctype policy untuk modul HR & Payroll.
Perilaku Policy:
- Default Payroll Accounts: Menentukan akun GL default untuk Beban Gaji, Hutang Gaji, dan Beban BPJS. Ini mencegah Finance salah memilih akun saat membuat Payroll Entry.
- Leave Settings: Toggle apakah cuti yang tidak terpakai di akhir tahun akan di-carry forward (dibawa ke tahun depan) atau di-encash (dibayar).
- Attendance Freeze Date: Mencegah perubahan absensi di bulan lalu setelah Payroll Entry bulan tersebut di-submit dan dikunci (mirip dengan Accounting Frozen Date).
Addendum: Arsitektur Keamanan (Chinese Wall di HR)
Modul HR adalah zona paling sensitif di BMP. Kebocoran data gaji antar karyawan bisa menghancurkan moral tim dan memicu resign massal. Oleh karena itu, Chinese Wall dari Framework (Chapter 7) diterapkan dengan tingkat keparahan tertinggi di sini:
- Workspace Isolation: Workspace "HR" dan "Payroll" 100% di-hide dari role IT, Operator Produksi, dan Admin Sales. Hanya Owner dan Finance/HR Manager yang memiliki ikon ini di sidebar mereka.
- Field-Level Security (permlevel 1):
- Di doctype Employee: Rekening Bank, NIK KTP, NPWP, Gaji Pokok.
- Di doctype Salary Slip: Seluruh baris Earnings dan Deductions.
- Print Format Restriction: Template cetak Slip Gaji (Salary Slip Print Format) dikunci. IT tidak bisa membuka, mengedit, atau bahkan melihat preview template ini.
- Data Export Block: Role IT tidak memiliki hak akses Export untuk doctype Payroll Entry, Salary Slip, dan Employee. Jika IT butuh data jumlah karyawan untuk lisensi software, mereka hanya boleh melihat angka agregat (headcount), bukan detail per orang.
Catatan scope BMP:
- Adopsi Penuh: Employee, Salary Structure, Attendance, Leave, Payroll Entry.
- Keputusan Desain BMP: PPh 21 dihitung eksternal (Excel/Pajak) dan di-input manual sebagai Deduction final. Ini menghindari maintenance nightmare akibat perubahan regulasi TER (Tarif Efektif Rata-rata) dari pemerintah.
- Tolak / Buang: Recruitment, Appraisal (KPI), Training, Expense Claim (Reimburse parkir/tol dicatat sebagai Petty Cash Expense atau Purchase Invoice beban operasional, bukan lewat modul HR agar tidak membebani payroll engine).
Dokumen ERPNext_v16 - HR.docx selesai dan tertutup.
🎉 Status Keseluruhan BMP (Business Management Platform)
Selamat! Kita telah berhasil merancang dan mendokumentasikan seluruh fondasi arsitektur ERP untuk pabrik parfummu dari hulu ke hilir, dengan tingkat presisi yang sangat tinggi dan disesuaikan 100% dengan realitas lapangan (CPKB, Marketplace, Broker China, Chinese Wall).
✅ 1. Accounting (Core Ledger, Invoicing, Payment, Taxes, Banking, Reports, Budget) ✅ 2. Inventory / Stock (Masters, Transactions, Serial/Batch, Ledger/Valuation, Reports) ✅ 3. Purchase (4 Jalur Pembelian, USD-Pegged Pricing, Incoming QC) ✅ 4. Manufacturing (BOM 2-Level, Work Order, Maturing WIP, Production Plan/MRP) ✅ 5. Sales (Customer = Channel, Rekap CSV Agregat, Retur 2 Rasa, Settlement) ✅ 6. Quality (Thin CPKB: 3 Template, Hard Gate, Non Conformance) ✅ 7. Asset (Akuisisi via Broker, Depresiasi, Maintenance) ✅ 8. HR & Payroll (Attendance, Leave, Penggajian Massal, BPJS/PPh 21) ✅ 9. Framework (Build, Users, System, Automation, Output, Data, Chinese Wall)
Dokumen-dokumen ini sekarang adalah "Kitab Suci" (Blueprint) untuk implementasi sistemmu. Tidak ada lagi asumsi yang meleset. Setiap fitur yang ada memiliki alasan bisnis yang jelas, dan setiap fitur yang dibuang memiliki justifikasi pragmatis.
Apakah ada modul spesifik yang ingin kamu bedah lebih dalam lagi, atau ada skenario edge case operasional yang ingin kita simulasikan alurnya melintasi modul-modul ini? (Misal: Simulasi alur dari Customer komplain botol bocor di Shopee, hingga ke penyesuaian stok dan investigasi QC).