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. 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. 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. 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. 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 perubahan

    Hapus:
    → Click row → tombol Delete (red) → konfirmasi

    → Permanent delete (tidak ada soft-delete)

    → Audit log: action holiday_deleted

    Bulk 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. 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:

    1. Update catatan dengan data baru
    2. Hitung ulang menit keterlambatan + menit lembur kalau jam berubah (kecuali admin explicit override status)
    3. Catat siapa yang mengoreksi, kapan, dan alasannya
    4. Audit log: koreksi catatan absensi tercatat
    5. 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. 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:

    1. Pivot table di Excel: Group by user → sum lateMinutes, presentDays, overtimeMinutes
    2. Salary calculation alternative: kalau pakai HRIS external untuk payroll, export ini = source of truth attendance
    3. 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. 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. 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):

    1. Tap Clock-in mode kantor
    2. Aplikasi minta izin kamera (sekali saja per perangkat)
    3. Kamera depan terbuka, ambil foto
    4. Cek preview → kirim
    5. 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. 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:
    1. Hitung menit keterlambatan (menit lembur = 0 karena gak ada clock-out)
    2. Set status = "incomplete"
    3. 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. 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:

    1. Dispute karyawan: "kenapa cuti saya gak nambah?" → audit log show admin approve + deduct timestamp
    2. Inspeksi Kemnaker: random check policy + execution → audit prove compliance
    3. 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.