Hari Libur Nasional + Admin Tools
Manage kalender hari libur Indonesia, koreksi record absensi manual, export CSV bulanan, team today board untuk manager. Production-grade HR ops.
- 1
Kenapa kalender hari libur penting
Tanpa data hari libur, sistem absensi & payroll bias kasih hasil aneh:
- Streak hadir putus karena Lebaran (semua hari off bukan absen)
- Payroll potong telat di tanggal libur (gak adil, staff yang sukarela kerja malah kepotong)
- Pengingat otomatis kirim notif "Jangan lupa clock-in 17 Agustus", spam ke semua karyawan
- Cuti tahunan ke-charge untuk hari yang seharusnya libur (cuti 1 minggu yang melewati Lebaran ke-charge 5 hari padahal cuma 3 working days)
Solusi: workspace owner daftarkan daftar hari libur tahunan. Sistem cross-check setiap operasi terkait absensi.
- Update setiap akhir tahun dengan SK Menteri Agama untuk tahun depan
- 2
Seed Libur Kemenag dengan 1 klik
SatuTim ship dengan preset hari libur nasional Indonesia berdasarkan SK Menteri Agama:
Preset 2026 (17 hari):
- Tahun Baru Masehi (1 Jan)
- Imlek (29 Jan)
- Isra Miraj (17 Feb)
- Nyepi (19 Mar)
- Cuti bersama Idul Fitri (20-22 Mar)
- Wafat Isa Almasih (3 Apr)
- Hari Buruh (1 Mei)
- Kenaikan Isa Almasih (14 Mei)
- Waisak (26 Mei)
- Idul Adha (27 Mei)
- Hari Lahir Pancasila (1 Jun)
- Tahun Baru Islam (16 Jun)
- Kemerdekaan RI (17 Agu)
- Maulid Nabi (25 Agu)
- Natal (25 Des)
Preset 2027 juga tersedia (sama struktur).
Cara seed:
/absensi/admin → Hari Libur → tombol "Seed Preset Kemenag 2026"- System bulk insert 17 row dengan source =
kemenag - Skip duplicate kalau sudah ada (mis. admin udah manual add 17 Agustus)
- Response:
inserted: N, skipped: M
Done, workspace sekarang punya kalender libur 2026 lengkap. Bisa edit nama, hapus yang tidak relevan, atau tambah custom (cuti bersama internal).
- Source field track origin, `kemenag` (preset), `manual` (admin tambah), `preset` (future custom preset)
- 3
Tambah hari libur custom
Beberapa workspace punya hari libur internal di luar Kemenag:
- Anniversary perusahaan (libur company-wide)
- Cuti bersama tambahan (mis. tanggal kejepit)
- Hari libur khusus (mis. anniversary founder)
+ Tambah Libur:
- Tanggal YYYY-MM-DD (date picker)
- Nama (mis. "HUT PT Maju Mundur ke-10")
- Berbayar? toggle (default ON):
- Paid (default): staff gak masuk = tetap dapet gaji, gak deduct cuti, gak dianggap absen
- Unpaid: staff yang mau kerja boleh, yang tidak masuk = ambil cuti / unpaid (mis. cuti bersama Lebaran kategori H+5 dst)
- Source:
manual
Submit → tambah ke daftar libur workspace.
Cuti bersama nasional optional vs wajib bisa beda per workspace policy. Kementerian biasanya mandate cuma tanggal Hari Raya inti; sisa adalah optional. - 4
Edit / hapus hari libur
Hari libur salah ketik / sudah tidak berlaku?
Edit nama / berbayar:
→ Click row → tombol Edit → update field → Save
→ Audit log catat perubahanHapus:
→ Click row → tombol Delete (red) → konfirmasi
→ Permanent delete (tidak ada soft-delete)
→ Audit log: actionholiday_deletedBulk operations (Phase 2, coming):
- Delete year (clear 2025 entries setelah lewat)
- Copy from year to year (copy template 2026 jadi 2027 dengan auto-adjust tanggal)
Best practice maintenance:
- Akhir November setiap tahun: seed preset tahun berikutnya
- Akhir Januari: review + edit kalau Kemenag publish update SK
- Tahun jalan: tambah manual ad-hoc libur kalau ada
- Hapus libur tidak refund cuti yang sudah approved untuk tanggal itu, manual koreksi via balance edit kalau ada dispute
- 5
Koreksi record absensi (admin tool)
Sebelumnya, kalau staff lupa clock-out atau GPS bug, admin gak punya cara resmi yang aman dan tercatat untuk membenahi data. Sekarang ada fitur koreksi admin resmi.
/absensi/admin → Rekap → klik record → Tombol "Koreksi":
- Edit jam clock-in / clock-out (datetime picker dengan timezone workspace)
- Override status (hadir / telat / incomplete / remote)
- Ubah mode (mis. kantor → WFH karena salah klik staff)
- Tambah / edit note
- Wajib isi "Alasan Koreksi" (min 3 karakter, mis. "Staff lupa clock-out, lihat group WA jam 17:30 udah pulang")
Click Save → sistem:
- Update catatan dengan data baru
- Hitung ulang menit keterlambatan + menit lembur kalau jam berubah (kecuali admin explicit override status)
- Catat siapa yang mengoreksi, kapan, dan alasannya
- Audit log: koreksi catatan absensi tercatat
- Affect Payroll periode itu kalau belum di-generate (lateness deduction berubah)
Hapus record:
→ Tombol "Delete" → konfirmasi + alasan
→ Hard delete (audit log preserve)
→ Useful untuk: duplicate testing record, staff resign tapi clock-in dari device hilang, staff yang ternyata tidak qualify (kontraktor sehari tapi accidentally registered)Legal sensitive, kalau staff dispute potongan gaji, audit log koreksi yang dipakai bukti. Jangan abuse. - 6
Export CSV rekap bulanan
HR butuh export ke Excel untuk:
- Submit ke HRIS lama (perusahaan multi-system)
- Audit eksternal akuntan / konsultan pajak
- Personal archive ad-hoc
- Dispute resolution dengan staff
/absensi/admin → Rekap → tombol "Export CSV":
- Filter periode (from / to date)
- Click → download otomatis:
attendance-<workspaceId>-<YYYY-MM-DD>.csv
Format (Excel-compatible dengan UTF-8 BOM):
- Tanggal, Nama, Email, Mode, Lokasi, Shift
- Clock In, Clock Out (ISO format)
- Status, Terlambat (menit), Lembur (menit)
- GPS In, GPS Out (lat,lng)
- IP In, IP Out
- Note, Dikoreksi Oleh, Catatan Koreksi
Limit: 10.000 row per export. Untuk workspace besar (>10k records/bulan), split by tim atau half-month.
Use cases:
- Pivot table di Excel: Group by user → sum lateMinutes, presentDays, overtimeMinutes
- Salary calculation alternative: kalau pakai HRIS external untuk payroll, export ini = source of truth attendance
- Compliance audit: print + sign + filing untuk dokumen tahunan
- Buka di Excel: Data → Get External Data → From Text → UTF-8 → Comma delimiter
- Buka di LibreOffice / Google Sheets: native UTF-8 support, langsung buka
- 7
Team Today Board (manager dashboard)
Manager pagi sebelum standup: "Siapa hadir hari ini, siapa cuti, siapa belum clock-in?"
/absensi/team-today (atau widget di dashboard):
Grid card per anggota tim visible ke manager:
- Foto + nama
- Status badge color-coded:
- 🟢 Hadir (
present, clock-in tepat waktu) - 🟡 Telat (
late+ menit late) - 🔵 Remote (
remote, WFH/WFA) - 🟣 Pending (belum clock-in, shift hari ini)
- 📴 Cuti Tahunan / Sakit / Izin / Melahirkan
- ⚪ Tidak terjadwal (gak punya shift hari ini)
- 🎉 Libur (badge workspace-wide hari libur)
- Detail clock-in time, mode, lokasi (kalau hadir)
- Shift hari ini (nama + jam mulai-selesai)
Filter:
- By tim (kalau manager handle multiple tim)
- Refresh otomatis tiap 60 detik (live status)
Banner workspace-wide:
- Kalau hari libur nasional: "🎉 Hari ini libur, [Nama Libur]. Tim kamu off."
- Kalau lebih dari 50% tim cuti: warning "60% tim cuti hari ini, staffing rendah, pertimbangkan reschedule meeting"
Manager view ini critical pre-standup, gak perlu Slack/WA "siapa yang gak datang hari ini?". Real-time data, source of truth.
- Endpoint `/attendance/team-today` lightweight, cached 30 detik, < 500ms response time
- 8
Selfie saat clock-in (anti-curang lanjutan)
Untuk workspace dengan risiko tinggi (retail, pabrik, perbankan, yang rawan kecurangan absensi), selfie jadi lapis pengaman tambahan setelah lokasi GPS + jaringan kantor.
Cara pakai (staff):
- Tap Clock-in mode kantor
- Aplikasi minta izin kamera (sekali saja per perangkat)
- Kamera depan terbuka, ambil foto
- Cek preview → kirim
- Foto menempel otomatis ke catatan clock-in kamu
Clock-out caranya sama, ambil selfie lagi saat pulang.
Batas & ketentuan foto:
- Ukuran foto otomatis diperkecil dari sisi aplikasi supaya ringan
- Format gambar umum didukung (foto dari iPhone juga otomatis menyesuaikan)
- Foto disimpan dengan aman dan tidak bisa diubah
Dilihat admin di rekap:
- Buka detail record → lihat foto saat masuk/pulang lewat tautan aman sementara
- Berguna untuk klarifikasi: "tanggal sekian jam sekian memang kamu yang clock-in?"
Privasi:
- Hanya admin workspace yang bisa melihat foto, BUKAN semua anggota
- Lama penyimpanan menyesuaikan plan workspace
- Bisa dimatikan per-workspace (default OFF, opt-in)
UU PDP (No. 27/2022) mensyaratkan persetujuan eksplisit untuk data biometrik. Pemilik workspace wajib menjelaskan kebijakannya + punya persetujuan tertulis dari staff sebelum mewajibkan selfie. - 9
Auto-close incomplete sessions (otomatis tiap malam)
Realita: 5-10% staff lupa clock-out per minggu (kerja larut malam, langsung pulang lupa, device mati). Tanpa intervention, sesi terbuka selamanya = stats salah + Payroll bias.
Sistem otomatis tiap hari jam 00:00 WIB:
- Cek semua catatan absensi yang belum clock-out dan clock-in-nya lebih dari 18 jam yang lalu
- Diproses bertahap (dibatasi sekian ratus catatan per putaran biar gak membebani sistem)
- Per catatan:
- Hitung menit keterlambatan (menit lembur = 0 karena gak ada clock-out)
- Set status = "incomplete"
- Catat di audit log dengan alasannya
18 jam threshold rationale:
- Shift normal: clock-in 8 pagi → clock-out 5 sore = 9 jam
- Lembur extreme: clock-in 8 pagi → clock-out 12 malem = 16 jam (still ok)
- Lupa clock-out: clock-in 8 pagi → 18 jam = 2 pagi besok = sudah jelas lupa
- Conservative: bukan default 24 jam (terlalu lama, stats hari ini udah rusak)
Aman diulang: kalau proses dijalankan ulang, hasilnya sama (catatan yang sudah ditandai "incomplete" akan dilewati).
Staff impact:
- Stats personal show "Tidak clock-out, auto-closed sistem" label
- Streak gak putus (incomplete bukan absent)
- Payroll: 0 overtime untuk hari itu (tidak fair untuk yang benar2 lembur)
- Solusi: staff hubungi admin → admin koreksi via fitur koreksi dengan jam clock-out benar
- Proses ini berjalan otomatis di latar belakang tiap malam, admin gak perlu setup apa pun
- Kalau perlu memperbaiki sesi tertentu lebih cepat, admin bisa langsung koreksi manual via Rekap → Koreksi
- 10
Audit log integration (compliance trail)
Semua admin tools di atas catat audit log yang tidak bisa diubah untuk compliance:
| Action | Trigger |
|--------|---------|
| Koreksi catatan absensi | Admin edit record manual |
| Hapus catatan absensi | Admin hapus record |
| Sesi ditutup otomatis | Sistem auto-close (pelaku: sistem) |
| Hari libur dibuat / dihapus | Admin manage kalender |
| Impor preset hari libur | Bulk preset insert |
| Saldo cuti diubah | Admin edit kuota cuti |
| Aksi pengajuan cuti | Submit / approve / reject / cancel cuti |Access audit log: Pengaturan → Audit Log → filter berdasarkan jenis resource (absensi atau cuti).
Retention sesuai plan workspace:
- Pro: 30 hari
- Business: 90 hari
- Enterprise: unlimited + SLA + on-premise export
Compliance use cases:
- Dispute karyawan: "kenapa cuti saya gak nambah?" → audit log show admin approve + deduct timestamp
- Inspeksi Kemnaker: random check policy + execution → audit prove compliance
- Audit eksternal: akuntan butuh trail untuk verify financial impact (PPh21, BPJS) sesuai data attendance
Export (Phase 2): admin bisa export audit log periode ke CSV untuk arsip eksternal kalau perlu beyond plan retention.
Audit log immutable, admin gak bisa edit/hapus entry yang sudah ada. Bahkan owner workspace cuma bisa view, gak bisa delete. Design intentional untuk legal protection.