Absensi: Clock-in GPS, WiFi, WFH, WFA

Plugin absensi modern: clock-in via GPS dengan geofence, validasi WiFi kantor, dukungan WFH/WFA/Kunjungan, shift custom, dan rekap bulanan untuk HR.

  1. 1

    Apa itu Absensi SatuTim + kenapa pakai

    Banyak tim Indonesia masih pakai fingerprint mesin atau Excel manual buat catat hadir karyawan. Masalahnya: mesin fingerprint cuma di kantor (gak relevan buat WFH/lapangan), Excel manual gampang dimanipulasi, dan gak nyambung sama task management. Plugin Absensi SatuTim: clock-in/out via app (web + mobile PWA) dengan validasi multi-mode, kantor (GPS + WiFi), WFH, WFA, kunjungan klien. Status (tepat waktu / terlambat) dihitung otomatis dari shift assignment. Data nyambung langsung ke Payroll untuk potongan keterlambatan.

    Aktifkan di Pengaturan → Plugin → Absensi (workspace admin).

    • Plugin disable by default, admin workspace harus enable + setup config sebelum staff bisa clock-in
    • Free plan: max 3 user + max 1 lokasi kantor. Pro+: unlimited.
  2. 2

    Setup awal: jam kerja & timezone workspace

    Sebelum karyawan bisa clock-in, admin harus set policy dasar. Buka Pengaturan → Plugin → Absensi → Konfigurasi:

    • Jam mulai default (mis. 08:00)
    • Jam selesai default (mis. 17:00)
    • Toleransi keterlambatan / grace period (default 15 menit, clock-in dalam 15 menit setelah jam mulai masih dianggap "tepat waktu")
    • Hari kerja (default Senin-Jumat = 1,2,3,4,5. Pakai 1,2,3,4,5,6 untuk include Sabtu)
    • Timezone (mis. Asia/Jakarta, Asia/Makassar, Asia/Jayapura), penting buat tim yang tersebar di 3 zona Indonesia
    • Tarif denda keterlambatan per menit (opsional, rupiah, dipakai Payroll buat potongan otomatis)
    • Tarif lembur per menit (opsional, rupiah)

    Click Simpan. Config ini default untuk semua staff yang gak punya shift custom.

    Timezone wajib benar, kalau workspace di Jakarta tapi timezone di-set UTC, karyawan jam 8 WIB akan ke-catat sebagai jam 1 dini hari, status "terlambat 7 jam".
  3. 3

    Daftarkan lokasi kantor (geofence)

    Untuk mode clock-in kantor, daftarkan lokasi kantor dengan radius. Buka Pengaturan → Absensi → Lokasi Kantor → + Tambah Lokasi:

    • Nama (mis. "Kantor Pusat Sudirman", "Cabang Bandung")
    • Alamat (opsional, buat referensi admin)
    • Koordinat latitude / longitude, bisa search di Google Maps, klik kanan lokasi, copy koordinat
    • Radius geofence dalam meter (default 100m, cukup buat 1 gedung. Bigger campus pakai 300-500m)
    • WiFi IP allowlist (opsional, anti-spoofing tambahan), masukkan public IP kantor (cek di whatismyipaddress.com). Format 1.2.3.4 atau CIDR 1.2.3.0/24 buat range. Multiple IP comma-separated.
    • Status aktif (toggle ON)

    Staff yang clock-in mode kantor dengan GPS di luar radius → ditolak dengan pesan "Di luar radius kantor (250m dari Kantor Pusat)". Kalau IP allowlist diset dan staff terhubung lewat WiFi rumah / pribadi → ditolak dengan pesan "Koneksi tidak dari WiFi kantor yang terdaftar".

    • Tambah multiple lokasi kalau workspace punya beberapa cabang, system otomatis pilih yang terdekat
    • WiFi IP allowlist optional tapi sangat recommended untuk anti-GPS-spoof
  4. 4

    Bikin shift custom (opsional)

    Default jam kerja workspace berlaku untuk semua. Tapi kalau tim kamu punya shift berbeda (mis. tim warehouse shift pagi 06:00-14:00, tim CS shift sore 14:00-22:00, tim security shift malam 22:00-06:00), bikin shift custom.

    Pengaturan → Absensi → Shift → + Tambah Shift:

    • Nama (mis. "Shift Pagi", "Shift Malam Security")
    • Tim (opsional, limit shift cuma untuk tim tertentu)
    • Jam mulai / selesai
    • Grace period (per-shift, override default)
    • Hari kerja (per-shift)
    • Warna badge (buat identifikasi visual)

    Setelah shift dibuat, assign user ke shift: pilih shift → tab "Anggota" → tambah staff + tanggal mulai berlaku (fromDate) + tanggal selesai opsional (toDate, kosongkan = berlaku terus).

    Bulk assign: pilih shift → "Assign multiple" → centang user (max 500), set fromDate untuk semua sekaligus.

    Shift assignment overlap di-handle dengan pick yang paling baru (fromDate terdekat). Pastikan tidak ada gap kalau pindah shift mid-week.
  5. 5

    Atur mode clock-in per user (policy)

    Tidak semua staff perlu akses ke semua mode. Contoh: staff lapangan butuh kunjungan + WFA, tapi tidak perlu kantor. Sebaliknya, staff kasir cuma boleh mode kantor (gak boleh WFH biar kasir gak skip ke rumah).

    Pengaturan → Absensi → Policy → pilih user → centang mode yang diizinkan:

    • office, clock-in di lokasi kantor (butuh GPS dalam radius)
    • wfh, work from home (gak butuh GPS, status auto "remote")
    • wfa, work from anywhere (sama wfh tapi label beda buat laporan)
    • visit, kunjungan klien (butuh visitTarget, nama lokasi yang dikunjungi)

    Default: kalau policy belum di-set, semua mode allowed (backward compat). Best practice: explicit set policy untuk setiap user.

    • Owner workspace selalu masuk policy list, bahkan kalau bukan member tim manapun
  6. 6

    Cara staff clock-in (dari sisi karyawan)

    Staff buka /absensi (atau aplikasi mobile PWA terpisah di absensi.satutim.id). Halaman utama:

    1. Status hari ini, kartu besar di atas: "Belum clock-in" / "Sudah clock-in 08:45 (3 menit terlambat)" / "Sudah clock-out 17:30".
    2. Tombol Clock-in besar dengan pilihan mode (sesuai policy user). Tap mode → permission GPS diminta browser → koordinat dikirim ke server.
    3. Status setelah submit:
    • Kantor: server validasi GPS dalam radius + IP allowlist → success / error
    • WFH / WFA: sukses langsung, status Remote
    • Kunjungan: muncul prompt "Nama lokasi target" sebelum submit
    1. Catatan opsional, input teks bebas (mis. "Onboarding klien baru di Surabaya")

    Logika telat: clock-in dalam masa toleransi dari jam mulai shift = Hadir. Lebih dari toleransi = Telat, dengan menit keterlambatan dihitung otomatis.

    Clock-out: tap tombol Clock-out → GPS opsional (gak wajib) → status update + menit lembur dihitung kalau lebih lama dari jam selesai shift.

    • PWA install: tutorial PWA muncul di onboarding atau Settings → Akun
    • Kalau GPS gagal di indoor (sinyal lemah), pindah dekat jendela atau pakai mode WFA + note
  7. 7

    Stats personal & streak

    Buka /absensi/stats untuk lihat insight personal:

    • Bulan ini: hari hadir, hari terlambat, total menit lembur, total menit telat, rata-rata jam clock-in (mis. "Rata-rata kamu masuk jam 08:23")
    • Minggu ini: hadir vs terlambat (last 7 days)
    • Streak: berapa hari berturut-turut clock-in tepat waktu, streak putus kalau ada late, dipreserve kalau ada hari weekend atau cuti
    • Shift aktif hari ini: nama shift, jam mulai/selesai, grace period

    Useful buat self-monitoring dan KPI personal. Manager bisa lihat stats anggota tim mereka via /absensi/team (kalau punya akses admin team).

  8. 8

    Rekap admin & export untuk HR

    Admin workspace buka /absensi/admin → Rekap. Filter: rentang tanggal, tim, user spesifik, status (semua / hadir / telat / WFH).

    View:

    • Table per-record: tanggal, user, mode, clock-in, clock-out, lateMinutes, overtimeMinutes, lokasi GPS (peta mini saat hover), IP koneksi
    • Aggregat per-user: total hari hadir, total telat, total lembur menit, total denda Rp (kalau tarif diset)
    • Heatmap kalender: visual hadir/telat/absent per hari per user

    Export CSV / Excel untuk integrasi dengan HRIS lama (mis. tinggal upload ke sistem absensi existing). Atau langsung pakai data ini di plugin Payroll, tarif lateness × menit telat = potongan otomatis.

    • Limit query: 200 record default, bisa override sampe 5000 untuk export bulanan
    • Visi field IP / GPS hanya untuk admin, staff biasa cuma lihat data dirinya sendiri
  9. 9

    Push notif & remindber jam masuk

    SatuTim Absensi PWA support push notification native:

    • Reminder pagi: 15 menit sebelum jam masuk shift, push notif "Jangan lupa clock-in, masuk 08:00 WIB". Bisa di-disable per-user di Pengaturan → Notifikasi → Absensi.
    • Reminder pulang: 10 menit setelah jam pulang shift, push notif "Sudah clock-out belum? Sesi clock-in masih terbuka". Mencegah open record yang lupa di-close.
    • Status update: kalau admin update status manual (mis. excuse keterlambatan setelah review), staff terkait dapet notif.

    Untuk enable push: install PWA dulu (lihat tutorial PWA installation), lalu di awal pemakaian browser akan tanya "Allow notifications?", tap Allow.

    iOS Safari support push notification PWA mulai iOS 16.4 (Maret 2023). Kalau iPhone lama (iOS < 16.4), push tidak jalan, pakai email reminder sebagai gantinya.
  10. 10

    Anti-fraud: GPS spoof + IP cek

    Concern umum: "Gimana kalau staff fake GPS via apps spoofer?" Jawabannya, lapis-lapis defensive:

    1. WiFi IP allowlist (paling kuat): kalau workspace ngotot, set IP kantor publik. Staff yang fake GPS tapi terhubung di rumah → IP gak match → ditolak. GPS spoof harus disertai VPN ke IP kantor (jauh lebih sulit).
    2. GPS accuracy check: koordinat dengan akurasi rendah (di atas 200m) di-flag di rekap admin (kemungkinan emulator atau indoor weak signal). Bukan auto-reject tapi visible buat audit.
    3. Device fingerprint (Phase 2, coming soon): track device ID + browser. Multiple staff dari device sama = flag suspicious.
    4. Audit log: setiap clock-in catat IP + user-agent + lokasi GPS exact. Bisa di-cross-check kalau ada dispute.

    Best practice untuk industry sensitive (mis. tempat produksi, retail): kombinasikan IP allowlist + radius kecil (50m) + face recognition external app (Phase 3 roadmap).

    GPS spoof prevention 100% mustahil di software, pasangkan dengan trust budaya kerja. Kalau staff sering spoof, problem-nya HR/management, bukan teknologi.
  11. 11

    Pengajuan kelambatan & ijin (link ke HR Requests)

    Staff terlambat karena ban kempes / macet / sakit ringan? Kalau di-catat sebagai late di rekap, salary kepotong (kalau tarif denda aktif). Solusi: ajukan justifikasi keterlambatan via plugin HR Requests.

    Buka /lembur → + Pengajuan baru → Justifikasi Keterlambatan → isi tanggal kejadian + alasan + lampiran foto bukti opsional (mis. tilang macet) → submit.

    Admin tim review di queue approval. Kalau di-approve, status late tidak ke-include di perhitungan denda Payroll. Lihat tutorial HR Requests untuk flow lengkap.

    • Justifikasi keterlambatan opsional, kalau workspace gak set tarif denda, late cuma jadi catatan tanpa efek finansial
  12. 12

    Hari libur nasional + cuti bersama (calendar)

    Workspace owner harus daftarkan hari libur supaya streak hadir + denda telat di Payroll fair ke karyawan. Tanpa ini, Lebaran tanggal 21 Maret bakal kebaca "semua karyawan absen", false alarm.

    /absensi/admin → Hari Libur:

    • Tombol "Seed Libur Kemenag 2026", sekali klik, insert 17 hari libur nasional Indonesia (sumber SK Menteri Agama). Skip duplikat kalau sudah ada.
    • + Tambah Manual, buat libur custom (cuti bersama internal, anniversary perusahaan, dll). Toggle "Berbayar?" (paid leave default ON; cuti bersama Lebaran sering unpaid optional).
    • Daftar tahun, filter by year, edit nama, atau hapus.

    Efek otomatis:

    • Streak hadir: hari libur skip dari hitungan (gak putus streak)
    • Payroll lateness: kalau staff masuk telat di hari libur, gak dipotong (kerja sukarela)
    • Push reminder clock-in: skip kirim notif pagi di hari libur
    • Cuti pengajuan: hari libur otomatis exclude dari hitungan working days (cuti 1 minggu yang melewati Lebaran = ke-charge cuma 3 hari)
    • Update tiap akhir tahun dengan SK Menteri Agama terbaru, biasanya November
    • Cuti bersama non-paid bisa toggle off, staff yang mau kerja boleh, gak dianggap absen
  13. 13

    Admin koreksi record absensi (data integrity)

    Real-world HR sering hadapin kasus:

    • Staff lupa clock-out semalem, status "tidak lengkap"
    • GPS buggy hari Senin, status "telat" 3 jam padahal cuma 5 menit
    • Aplikasi sempat bermasalah jam 8 pagi, semua staff gak bisa clock-in
    • Staff sakit dadakan tapi lupa lapor, record dummy harus dimasukkan

    Dulu satu-satunya cara adalah mengedit data mentah secara manual (berisiko, tanpa jejak). Sekarang admin workspace punya tombol koreksi resmi:

    /absensi/admin → Rekap → klik record → "Koreksi":

    • Edit jam masuk / jam pulang (datetime picker)
    • Override status manual ("hadir" / "telat" / "tidak lengkap" / "remote")
    • Ubah mode (mis. kantor → WFH kalau salah klik)
    • Update catatan + wajib isi "Alasan Koreksi" (min 3 karakter), tercatat di audit log

    Atau hapus record sepenuhnya dengan catatan alasan, kalau duplikat dari testing atau staff yang udah resign tapi masih clock-in entah dari perangkat hilang.

    Setiap koreksi mencatat:

    • siapa admin yang mengedit
    • waktu koreksi
    • alasan koreksi
    • Audit log: aktivitas "koreksi record absensi" atau "hapus record absensi"

    Keterlambatan/lembur dihitung ulang otomatis kalau jam masuk/pulang berubah (kecuali admin override status secara eksplisit).

    Koreksi adalah legally sensitive, kalau staff dispute payroll, audit log ini yang dijadikan bukti. Jangan abuse.
  14. 14

    Selfie saat clock-in (anti-curang ekstra)

    Lokasi GPS dan jaringan kantor kadang masih bisa diakali. Lapis pengaman tambahan: selfie wajib saat clock-in/clock-out untuk mode kantor.

    Cara pakai (staff):

    1. Tap tombol Clock-in mode kantor
    2. Kamera depan ponsel/laptop terbuka otomatis (kasih izin kamera sekali saja)
    3. Ambil selfie → cek preview → kirim
    4. Foto langsung menempel ke catatan absensi kamu

    Foto disimpan dengan aman, tidak bisa diubah, dan hanya admin yang bisa membukanya lewat tautan aman sementara dari halaman rekap.

    Selfie melengkapi lokasi GPS + jaringan kantor jadi pengecekan berlapis, sehingga lebih sulit dicurangi.

    Privasi:

    • Foto hanya bisa dilihat admin workspace, BUKAN semua anggota
    • Lama penyimpanan menyesuaikan plan workspace (Pro 30 hari, Business 90 hari, Enterprise lebih lama)
    • Bisa dimatikan per-workspace lewat pengaturan (default OFF untuk workspace yang sensitif soal privasi)
    • Pakai jaringan yang stabil supaya unggah selfie cepat, file foto otomatis diperkecil dari sisi aplikasi
    • Atur selfie per-workspace di Pengaturan → Absensi → Anti-Curang (default opsional)
    Konsultasikan dulu dengan tim HR + legal sebelum mewajibkan selfie, UU PDP (No. 27/2022) mensyaratkan persetujuan eksplisit untuk data biometrik.
  15. 15

    Auto-close incomplete sessions (jaga integritas data)

    Tanpa fitur ini, sesi clock-in yang lupa clock-out akan terus terbuka di sistem. Stats hitung salah (rata-rata clock-in kebawa weird), Payroll lateness misleading, manager view confusing.

    Sistem otomatis jalan tiap hari jam 00:00 WIB:

    1. Cek semua catatan absensi yang belum clock-out dan clock-in-nya lebih dari 18 jam yang lalu
    2. Set status menjadi "incomplete", hitung menit keterlambatan (lembur = 0 karena gak ada clock-out)
    3. Catat di audit log dengan pelaku "sistem"

    18 jam threshold:

    • Conservative, staff yang lembur sampe tengah malem masih punya 6 jam toleransi setelah jam pulang normal
    • Aman dari false-positive: shift pagi lupa clock-out → auto-closed setelah ~24 jam total

    Staff yang ketauan habis lupa clock-out:

    • Catatan jadi status "incomplete" di stats personal, visible dengan label "Tidak clock-out, auto-closed sistem"
    • Bisa ajukan koreksi via admin kalau benar-benar kerja sampai larut (admin update jam clock-out manual)

    Proses ini aman diulang: kalau dijalankan ulang, hasilnya sama (catatan yang sudah ditandai "incomplete" akan dilewati).

  16. 16

    Plan gating + limit per paket

    Absensi tersedia di semua plan (termasuk Free), tapi dengan limit:

    • Free: 3 user max, 1 lokasi kantor max, no shift custom, no IP allowlist, no API export. Cocok buat tim kecil yang baru mulai.
    • Pro: unlimited user dalam quota workspace (15 user default), unlimited lokasi, shift custom enabled, IP allowlist enabled, CSV export.
    • Business: + bulk shift assign (500/operasi), + API access untuk integrate ke HRIS eksternal, + audit log retention 90 hari.
    • Enterprise: + face recognition integration ready, + custom geofence shapes (polygon, bukan cuma circle), + on-premise relay option, + SLA.

    Upgrade workspace via Pengaturan → Billing.

    Plan gate enforced di backend, bahkan kalau UI bypass, API tetap reject. Lihat plugin-guard middleware.
  17. 17

    Troubleshooting umum

    Masalah yang sering ke-report + fix:

    "Belum ada lokasi kantor aktif" saat clock-in mode kantor:
    → Admin belum tambah lokasi atau toggle "aktif" off. Cek /absensi/admin → Lokasi.

    "Di luar radius kantor (250m)" padahal lagi di lobby:
    → GPS tidak akurat karena indoor. Coba pindah dekat jendela. Atau admin tambah radius ke 200m.

    "Koneksi tidak dari WiFi kantor yang terdaftar":
    → IP allowlist active dan staff connect via WiFi rumah / mobile data. Solusi: switch ke WiFi kantor, atau admin update allowlist kalau staff resmi WFH (atau pakai mode WFH instead of kantor).

    "Kamu sudah clock-in hari ini, lakukan clock-out dulu":
    → Ada sesi terbuka. Clock-out dulu sesi sebelumnya, baru clock-in lagi (mis. balik dari istirahat siang panjang).

    "Mode tidak diizinkan untuk akun kamu":
    → Kebijakan user gak include mode itu. Admin update kebijakan.

    Status "incomplete" di rekap:
    → User clock-in tapi gak clock-out. Sistem otomatis menutup sesi setelah jam pulang + toleransi → status jadi "incomplete". Admin bisa manual close via UI.

    Streak salah hitung:
    → Streak reset di hari kerja yang gak clock-in. Weekend di-skip, public holiday gak (custom holiday list = Phase 2).

    Masih stuck? Buka /support/new dengan: screenshot error, mode yang dipakai, koordinat GPS exact, IP kalau pakai allowlist.