Configure HR Module dan Process Payroll Indonesia untuk UMKM Mitra
Modul: Employees · Attendances · Time Off · Payroll · Expenses
Sistem Informasi Enterprise — ERP Odoo 19.0
🎯 Output: 10 screenshots wajib (80 poin) + 2 bonus (20 poin) → ZIP file Lab10_[NIM]_[Nama].zip
⚠️ Data belum lengkap? Gunakan 5 karyawan dummy Moda Indah Fashion dari tabel di Step 2. UMKM solo tanpa karyawan? → Pilih Alternatif A (data dummy) atau C (kalkulator BPJS).
🔧 T1 — Mengkonfigurasi struktur organisasi HR: Departments, Job Positions, Working Hours
📋 T2 — Membuat employee records lengkap (Work Info + Private Info) & contracts PKWT/PKWTT
📅 T3 — Mengkonfigurasi leave types, public holidays, mass allocation & approval workflow
💰 T4 — Memproses payslip dengan Salary Rules (BPJS + PPh 21), cross-check manual, & verify journal entry
🎯 Buat 3 Departments, 3 Job Positions, Working Hours, aktifkan Overtime
Step 1 · Departments & Jobs
Employees → Configuration → Departments → New
Employees → Configuration → Job Positions → New
Employees → Configuration → Working Schedules
Attendances → Configuration → Settings
📸 SCREENSHOT 10.1: Halaman Departments dengan minimal 3 departemen terbuat
🎯 5 Employee Records + Contracts PKWT/PKWTT
Step 2 · 5 Karyawan Moda Indah
| Nama | Departemen | Jabatan | PTKP | Gaji Pokok | Kontrak |
|---|---|---|---|---|---|
| Budi Santoso | Sales | Sales Associate | K/1 | Rp 4.500.000 | PKWT |
| Dewi Lestari | Sales | Sales Associate | TK/0 | Rp 4.500.000 | PKWT |
| Andi Prasetyo | Kasir & Op | Store Supervisor | K/2 | Rp 6.000.000 | PKWTT |
| Siti Rahayu | Finance | Admin & Finance | K/0 | Rp 5.000.000 | PKWTT |
| Bu Rina Hartati | Finance | HR Manager | K/1 | Rp 7.000.000 | PKWTT |
Substitusi: Jika punya data UMKM mitra sendiri (min 5 karyawan), boleh substitusi. Pastikan ada variasi: minimal 2 status PTKP berbeda dan campuran PKWT/PKWTT.
Step 2 · Employee & Contract
⚠️ Wajib dulu: Employees → Configuration → Contract Types → New → buat PKWT dan PKWTT (tidak default di Odoo 19)
📸 SCREENSHOT 10.2: Employee record (tab Private Info) · 📸 10.3: Contract status "Open"
🎯 3 Leave Types + Public Holidays + Mass Allocation + Leave Request
Step 3 · Leave Types & Holidays
Time Off → Configuration → Leave Types
| Leave Type | Approval | Document? | Unpaid? |
|---|---|---|---|
| Cuti Tahunan | By Employee's Approver | Tidak | Tidak |
| Cuti Sakit | No Validation (notifikasi) | Ya (surat dokter) | Tidak |
| Cuti Tidak Dibayar | Set by Time Off Officer | Tidak | Ya ✅ |
Time Off → Configuration → Public Holidays → New
Input minimal: Tahun Baru (1 Jan) · Hari Buruh (1 Mei) · Hari Lahir Pancasila (1 Jun) · HUT RI (17 Agt) · Natal (25 Des)
⚠️ Cuti Tidak Dibayar harus di-centang Unpaid — penting agar payroll otomatis potong gaji proporsional!
Step 3 · Allocation & Request
Time Off → Managers → Allocation Requests → New
📸 10.4: Leave Types (3, Unpaid tercentang) · 📸 10.5: Mass Allocation 12 hari · 📸 10.6: Leave Request Budi "Approved"
Step 3 · Checkpoint
Leave request error "Insufficient balance"? → Pastikan allocation sudah di-confirm, dan validity dates mencakup tanggal request cuti.
🎯 Salary Structure + Rules (BPJS + PPh 21) · Compute · Cross-check · Journal
Step 4 · Salary Rules
Payroll → Configuration → Salary Structures → Buat: "Gaji Karyawan Indonesia Simplified"
| Rule Name | Kode | Kategori | Formula |
|---|---|---|---|
| Gaji Pokok | BASIC | Basic | contract.wage |
| Tunj. Transport | TRANSP | Allowance | 500000 |
| Tunj. Makan | MEAL | Allowance | 500000 |
| BPJS Kesehatan (1%) | BPJSK | Deduction | -(BASIC+TRANSP+MEAL)*0.01 |
| BPJS JHT (2%) | JHT | Deduction | -BASIC*0.02 |
| BPJS JP (1%) | JP | Deduction | -BASIC*0.01 |
| PPh 21 Estimasi | PPH21 | Deduction | manual input |
4.3 Assign ke Contract: Buka contract setiap karyawan → Salary Structure → pilih "Gaji Karyawan Indonesia Simplified"
⚠️ PPh 21: lab ini pakai simplified approach — input manual dari perhitungan teori. Implementasi production butuh formula Python yang akurat + konsultan.
Step 4 · Payslip + PPh 21
Payroll → Payslips → New
| Gaji Pokok | Rp 4.500.000 |
| Tunj. Transport + Makan | Rp 1.000.000 |
| BPJS Kes (1%) | −Rp 55.000 |
| JHT (2%) | −Rp 90.000 |
| JP (1%) | −Rp 45.000 |
| Net (sebelum PPh) | Rp 5.310.000 |
| Gross/thn | Rp 66.000.000 |
| Pengurang (JHT+JP+B.Jabatan) | −Rp 4.920.000 |
| Neto/thn | Rp 61.080.000 |
| PTKP K/1 | Rp 63.000.000 |
| PKP | −Rp 1.920.000 |
| PPh 21 | Rp 0 (PKP negatif) |
💡 Budi tidak kena PPh 21! Neto di bawah PTKP K/1.
Step 4 · Validate & Journal
| Komponen | Odoo | Manual | Selisih |
|---|---|---|---|
| BPJS Kes 1% | Rp ___ | Rp 55.000 | Rp ___ |
| JHT 2% | Rp ___ | Rp 90.000 | Rp ___ |
| JP 1% | Rp ___ | Rp 45.000 | Rp ___ |
| THP (pre-PPh) | Rp ___ | Rp 5.310.000 | Rp ___ |
Isi tabel ini di deliverables!
📸 10.7: Payslip Budi "Compute Sheet" (breakdown) · 📸 10.8: Cross-check tabel · 📸 10.9: Journal Entry payroll
Step 4 · Checkpoint
Payslip Compute Sheet semua Rp 0? → Salary Structure belum di-assign ke contract. Buka contract → pilih structure → save → compute ulang.
🎯 Grant Portal Access + Demo Payslip & Leave dari sisi karyawan
Step 5 · Portal Access
📸 SCREENSHOT 10.10: Tampilan employee portal (halaman Payslips atau Time Off)
Portal access gagal / email tidak terkirim? → SMTP belum dikonfigurasi di lab. Share portal link secara manual atau reset password via admin.
| Aspek | F&B / Kafe | Garment / Manufaktur | Jasa / Konsultan | Retail Multi-Outlet |
|---|---|---|---|---|
| Working Hours | 3 shift (pagi/siang/malam) | 2 grup (kantor/pabrik) | Standar + WFH | Multi-lokasi |
| Contract Mix | PKWT part-timer + PKWTT | PKWTT operator + PKWT seasonal | PKWTT + freelance | PKWT per toko |
| Salary Structure | Standar + tip pool | 2 struktur (staff vs operator + insentif) | Gaji tinggi + komisi | Standar seragam |
| JKK Rate | 0,24% (retail) | Lebih tinggi (tekstil) | 0,24% (jasa) | 0,24% (retail) |
| Key Challenge | Overtime weekend + shift | Insentif produksi → PPh 21 | Expense reimburse + billable | Attendance multi-toko |
☕ F&B: Part-timer Rp 800k/bln — apakah wajib BPJS? Ya! Sejak hari pertama kerja. Konsekuensi hukum jika tidak.
🧵 Garment: Insentif produksi Rp 2.500/lembar di atas target → masuk gross → mempengaruhi PPh 21.
📸 10.1 — Departments (min 3) & Job Positions
📸 10.2 — Employee record (tab Private Information) · 📸 10.3 — Contract "Open"
📸 10.4 — Leave Types (3, Unpaid tercentang) · 📸 10.5 — Mass Allocation 12 hari
📸 10.6 — Leave Request Budi "Approved"
📸 10.7 — Payslip Budi Compute Sheet · 📸 10.8 — Cross-check BPJS tabel
📸 10.9 — Journal Entry payroll · 📸 10.10 — Employee Portal
Bonus: B1 — Hitung PPh 21 Dewi (TK/0) vs Budi (K/1), jelaskan perbedaan (+10 poin) · B2 — Batch payslip 5 karyawan semua "Done" (+10 poin)
| Kriteria | Poin | Baik (100%) | Kurang (<70%) |
|---|---|---|---|
| Step 1: Config (Dept + Jobs + WH) | 8 | 3 dept + 3 jobs + schedule | Kurang dari 3 |
| Step 2: Employee + Contract | 16 | 5 records lengkap + contracts Open | Private Info tidak lengkap |
| Step 3: Leave Types + Allocation | 24 | 3 types + holidays + allocation + request approved | Allocation belum confirm |
| Step 4: Payroll (utama) | 24 | Rules benar + payslip + cross-check + JE | BPJS formula salah |
| Step 5: Portal | 8 | Portal aktif, payslip terlihat | Portal tidak demo'd |
Total: 80 poin wajib + 20 poin bonus = 100 poin.
Payslip semua Rp 0? → Salary Structure belum di-assign ke contract. Buka contract → pilih structure → save.
BPJS tidak terhitung / salah? → Cek formula salary rule. BPJS Kes = -(BASIC+TRANSP+MEAL)*0.01, bukan hanya BASIC.
Leave allocation tidak muncul? → Allocation belum di-confirm, atau validity dates tidak mencakup tanggal request. Cek kedua hal ini.
Journal entry payroll tidak ada? → Accounting module belum aktif, atau payroll journal belum dikonfigurasi di Payroll → Configuration → Settings.
Contract tidak bisa dibuat? → Employee belum di-save. Atau belum buat Contract Types PKWT/PKWTT di Configuration.
🤝 Customer Relationship Management — Pipeline, Lead, Opportunity
📋 Project Management — Tasks, Milestones, Timesheets
🔗 Integrasi CRM → Sales → Project → Invoicing
Sistem Informasi Enterprise — ERP Odoo 19.0
dengan Real UMKM Partner Program