Skip to main content

Product Requirements Document (PRD)

:::info Status Locked v1.0 — keputusan domain, NFR, state machine, enum, dan face runtime terkunci untuk MVP. Perubahan rule memerlukan update PRD + persetujuan Project Leader. :::

FieldValue
ProductNexus Ops — Aplikasi Absensi Divisi Operation
Version1.0.1
Mata KuliahSTSI4440
TimKelompok B — Capstone Project 50 Team B 2026
Last updated2026-09-25

1. Ringkasan produk​

Nexus Ops adalah sistem absensi digital untuk Divisi Operation yang mencatat kehadiran secara real-time dengan validasi identitas (face recognition) dan lokasi (GPS geofencing), serta mengintegrasikan pengelolaan izin/cuti, lembur, dashboard monitoring, dan laporan otomatis.

Masalah yang diselesaikan​

  • Pencatatan absensi manual (kertas / spreadsheet) rentan error, manipulasi, dan terlambat dilaporkan.
  • Lokasi kerja tersebar, sistem shift, serta izin/cuti yang dinamis sulit dipantau secara real-time.
  • Manajemen kesulitan memperoleh data kehadiran yang akurat untuk payroll, evaluasi kinerja, dan disiplin kerja.

Value proposition​

Satu platform absensi yang akurat, aman, dan terpantau secara real-time — dari clock-in karyawan hingga laporan untuk manajemen dan HRD.


2. Latar belakang & tujuan​

Tujuan bisnis​

  1. Mencatat dan memantau kehadiran karyawan Divisi Operation secara digital dan real-time.
  2. Meningkatkan akurasi & keamanan data melalui face recognition dan GPS geofencing.
  3. Mengintegrasikan izin, cuti, dan lembur dalam satu platform.
  4. Menyediakan dashboard interaktif dan pelaporan otomatis bagi manajemen.

Tujuan keberhasilan (success metrics — terkunci)​

MetrikTargetCatatan
Accuracy clock-in valid≥ 95% kehadiran tervalidasi wajah + GPSDiukur pada UAT
Waktu rekap laporan< 5 menit generate Excel (PDF opsional)Vs proses manual
Adoption UAT≥ 80% skenario utama lulusKaryawan + supervisor + HRD
Latency notifikasi< 1 menit setelah eventStatus izin/cuti, pengingat

Rule domain pendukung: §10.


3. Pengguna & persona​

PersonaPeranKebutuhan utama
Karyawan OperationPengguna utama absensiClock-in/out cepat, ajukan izin/cuti/lembur, terima notifikasi
Supervisor / ManajerPenyetuju & monitoringSetujui/tolak pengajuan, pantau kehadiran tim real-time
HRD / AdministrasiRekap & pelaporanRekap data, generate laporan payroll/audit, kelola master data

4. Ruang lingkup​

In scope (MVP / semester ini)​

  1. Absensi digital — clock-in/clock-out + face recognition + GPS geofencing
  2. Izin & cuti — pengajuan, persetujuan, pencatatan, notifikasi
  3. Lembur — input & persetujuan terintegrasi data kehadiran
  4. Dashboard monitoring — kehadiran harian, rekap mingguan/bulanan, statistik keterlambatan/ketidakhadiran
  5. Laporan otomatis — ekspor PDF/Excel
  6. Notifikasi — push notification (absensi, status approval, deadline)
  7. Platform — mobile Android + web dashboard admin
  8. Backend API — REST API untuk autentikasi, absensi, dan layanan validasi

Out of scope / batasan​

BatasanKeterangan
Scope organisasiKhusus Divisi Operation (ekspansi divisi lain = fase berikutnya)
Face recognitionPakai library siap pakai; tidak train model dari nol
Integrasi payrollHanya ekspor data; tidak sinkron langsung ke sistem payroll existing
Platform mobileFokus Android (iOS dapat dipertimbangkan kemudian)
StorageDatabase lokal/cloud perusahaan sesuai keputusan infrastruktur
Face override supervisorCUT MVP — absensi gagal face tetap retry / hubungi HRD re-enroll
Lupa password self-serviceCUT MVP — reset oleh HRD lewat kelola akun
Kuota/saldo cutiCUT MVP — jenis leave enum saja
Roster shift per karyawanCUT MVP — satu default shift organisasi
Approve di mobileCUT MVP — supervisor approve hanya di web
Quiet hours / preferensi lanjutPreferensi quiet hours = P2; FCM + in-app feed dipakai untuk approval P0
Object storageCloudflare R2 (bukan Firebase Storage)

5. User stories & requirements fungsional​

Prioritas: P0 = harus ada di MVP · P1 = penting · P2 = nice-to-have / fase lanjut

5.1 Autentikasi & akun​

IDUser storyPriority
AUTH-01Sebagai karyawan, saya dapat login agar mengakses fitur absensi.P0
AUTH-02Sebagai admin/HRD, saya dapat mengelola akun pengguna (aktif/nonaktif, role).P0
AUTH-03Sebagai sistem, saya menegakkan role-based access (Karyawan / Supervisor / HRD).P0

5.2 Absensi (clock-in / clock-out)​

IDUser storyPriority
ATT-01Sebagai karyawan, saya dapat clock-in/out dari aplikasi mobile.P0
ATT-02Sebagai sistem, saya memvalidasi wajah karyawan sebelum menyimpan absensi.P0
ATT-03Sebagai sistem, saya memvalidasi lokasi berada dalam area geofence yang diizinkan.P0
ATT-04Sebagai karyawan, saya melihat status absensi hari ini (sudah/belum clock-in, jam masuk/keluar).P0
ATT-05Sebagai sistem, saya mencatat timestamp, lokasi, dan hasil validasi untuk audit.P0
ATT-06Sebagai supervisor, saya melihat daftar karyawan yang belum absen pada shift berjalan. Definisi: karyawan is_active yang belum punya baris attendance_records untuk work_date hari ini (Asia/Jakarta).P1

5.3 Izin & cuti​

IDUser storyPriority
LV-01Sebagai karyawan, saya dapat mengajukan izin/cuti dengan tanggal, jenis, dan keterangan.P0
LV-02Sebagai supervisor, saya dapat menyetujui atau menolak pengajuan.P0
LV-03Sebagai karyawan, saya menerima notifikasi saat status pengajuan berubah.P0
LV-04Sebagai HRD, saya dapat melihat riwayat izin/cuti untuk rekap.P1

5.4 Lembur​

IDUser storyPriority
OT-01Sebagai karyawan, saya dapat mengajukan jam lembur terkait kehadiran.P0
OT-02Sebagai supervisor, saya dapat menyetujui/menolak lembur.P0
OT-03Sebagai HRD, data lembur masuk ke laporan untuk keperluan payroll.P1

5.5 Dashboard & laporan​

IDUser storyPriority
RPT-01Sebagai manajer, saya melihat dashboard kehadiran real-time (harian).P0
RPT-02Sebagai manajer/HRD, saya melihat rekap mingguan/bulanan & statistik keterlambatan.P0
RPT-03Sebagai HRD, saya dapat generate laporan PDF/Excel.P0
RPT-04Sebagai sistem, laporan dapat difilter per periode / karyawan / status.P1

5.6 Notifikasi​

IDUser storyPriority
NTF-01Sebagai karyawan, saya menerima pengingat absensi (mis. mendekati jam shift).P1
NTF-02Sebagai karyawan/supervisor, saya menerima notifikasi status approval.P0
NTF-03Sebagai karyawan, saya mendapat pengingat deadline pengajuan bila relevan.P2

6. Requirements non-fungsional (terkunci)​

KategoriRequirementTarget
KeamananJWT Bearer; embedding wajah tidak di-log penuh; RBACHTTPS, bcrypt, least privilege; sesi 12 jam
AkurasiValidasi ganda (wajah + GPS) sebelum absensi diterimaReject jika salah satu gagal; face cosine ≥ 0.65; GPS accuracy ≤ 50 m
KetersediaanLayanan API selama jam operasionalBest-effort 07:00–18:00 WIB; smoke H-1 sebelum demo
PerformaRespons APIp95 umum < 1.5 s; absensi (clock-in/out) < 3 s
UsabilitasClock-in singkat di mobile≤ 3 langkah utama setelah buka app
AuditabilityAbsensi & approval tercatataudit_logs + fields face/GPS di attendance
Portabilitas dataEkspor laporanExcel wajib; PDF nice-to-have

7. Alur proses utama (ringkas)​

Clock-in​

State machine — hari absensi​

Status API (attendance_status)Label UI
presentHadir
lateTerlambat
absentAlpha
leaveIzin
holidayLibur (opsional org)

State machine — approval (leave / OT)​

Status API (request_status)Label UI
pendingMenunggu
approvedDisetujui
rejectedDitolak
cancelledDibatalkan

Pengajuan izin/cuti​

Generate laporan​

Metodologi pengerjaan​

State machine absensi & approval terkunci di atas; ERD terkunci di Infrastructure §5.1.​

8. Asumsi & dependensi​

Asumsi​

  • Karyawan memiliki perangkat Android dengan kamera dan GPS.
  • Area kerja memiliki batas geofence yang dapat didefinisikan.
  • Template wajah karyawan tersedia / dapat di-enroll saat onboarding.
  • Stakeholder Divisi Operation tersedia untuk wawancara & UAT.

Dependensi​

  • Backend (terkunci): Bun + Hono + Drizzle + Neon PostgreSQL + Cloudflare Workers — lihat Infrastructure
  • Web (terkunci): Vue 3 + Vite + TypeScript + Orval → Cloudflare Pages
  • Mobile (terkunci): React Native + Expo (SDK 57) + Expo Router + Orval → APK via GitHub Actions · dev client untuk face
  • Face (terkunci): On-device MobileFaceNet (TFLite) → embedding; Worker cosine ≥ 0.65 — bukan face-api.js di Workers
  • Geolocation API + validasi geofence server-side
  • Firebase Cloud Messaging (FCM) — push Android (approval + reminder)
  • Cloudflare R2 — ekspor laporan (Excel/PDF signed URL); bukan foto wajah
  • Infrastruktur: Infrastructure Document

9. Milestone & jadwal (dari proposal)​

Sprint board = 1 minggu × 8 (S1…S8). Detail & Gantt: SDLC §4.

SprintMingguFokusArtefak terkait PRD
S11Analisis kebutuhan, wawancara, requirementPRD v0.2 (setelah feedback)
S22Desain + kickoff paralel BE & UISpec teknis + wireframe; OpenAPI awal
S3–S53–5Build paralel BE + mobile + web (utamanya P0)Increment API + UI demoable
S66Parallel lanjut + integrasi (P1)Test report awal
S77Parallel polish (P2) + mulai UATUAT checklist berjalan
S88UAT selesai, deploy, evaluasi, laporanRelease + laporan

Metodologi: Waterfall untuk kerangka tahapan, Agile Scrum (sprint 1 minggu); backend dan UI dikerjakan paralel sejak S2 (bukan antrian BE → mobile → web).


10. Keputusan domain terkunci (MVP)​

Aturan berikut mengunci perilaku produk untuk semester ini. Kontrak API, UI, dan checklist tes manual harus merujuk ke sini.

10.1 Absensi & status hari​

AturanKeputusan
Status HadirClock-in valid (wajah + GPS)
Status TerlambatClock-in valid setelah default_shift_start + grace 15 menit
Status AlphaTidak ada clock-in valid dan tidak ada leave approved pada hari itu
Status IzinLeave approved mencakup hari tersebut
Clock-in & clock-outKeduanya wajib wajah + GPS (satu alur M-ATT*)
Lupa clock-outBoleh clock-out sampai clock-in berikutnya; tanpa auto-close / override supervisor
ShiftSatu default shift organisasi (W-S01); tanpa roster per karyawan
GeofenceValid jika di salah satu lokasi aktif org; radius default 100 m; akurasi GPS maks 50 m
Retry face/GPSMaks 3 per percobaan absensi
Face overrideTidak ada di MVP
Hub setelah clock-inCTA utama Clock-out; clock-in disabled sampai clock-out / hari baru (M-ATT01)
Sukses clock-outReuse M-ATT04 (bukan layar baru)
RBAC ditolakRoute guard + toast/redirect — tanpa halaman denied penuh

10.2 Face enrollment & verifikasi​

AturanKeputusan
RuntimeOn-device MobileFaceNet → embedding 192-d; Worker cosine similarity
ThresholdCosine ≥ 0.65 (FACE_MATCH_THRESHOLD)
EscapeFACE_MODE=stub → face_result = skipped (tanpa ubah kontrak)
Siapa enrollKaryawan self-enroll di M-P03
Jumlah sampel3 embedding jelas → simpan sampel + mean
Approve HRD atas templateTidak wajib
Retensi fotoTidak ada — embedding only (D-09)
Limitasi MVPEmbedding dari klien dipercaya; anti-spoof out of scope

10.3 Izin, cuti, lembur, approval​

AturanKeputusan
Jenis leave MVPEnum API: sick | annual | other → UI: Sakit | Cuti | Izin lain
Kuota/saldoTidak dihitung di MVP
PendingBoleh batal (M-LV03); tidak boleh edit
Overlap leave vs absensi validTolak pengajuan
OTTanggal + jam mulai/selesai; maks 4 jam (hard reject); tidak wajib link ke record absensi
ApproveHanya web (W-AP*)
TolakWajib alasan; tombol Tolak disabled sampai alasan terisi
Status requestpending | approved | rejected | cancelled

10.4 Master data & laporan​

AturanKeputusan
User P0 fieldsemail, full_name, role, is_active, password awal; supervisor_id opsional
NIPWajib di employees.nip (unik); login Email atau NIP
Site/shift per userDefer; geofence org-wide + default shift org 08:00 WIB
TimezoneAsia/Jakarta; work_date lokal
Ekspor laporanKolom: NIP, nama, tanggal, masuk, keluar, status, jenis leave, jam OT
FormatExcel wajib MVP → R2 signed URL; PDF nice-to-have

10.5 Auth & notifikasi​

AturanKeputusan
Lupa password self-serviceCUT (reset HRD)
SesiJWT 12 jam
Notifikasi P0In-app feed + FCM untuk status approval
Quiet hoursP2
Object storageCloudflare R2 untuk ekspor laporan saja

10.6 Reason code & enum​

Reason codeCopy UI (ID)
OUT_OF_GEOFENCEDi luar area kerja
LOW_GPS_ACCURACYAkurasi GPS terlalu rendah
FACE_NO_MATCHWajah tidak cocok
FACE_NOT_ENROLLEDWajah belum terdaftar — enroll dulu
FACE_LOW_QUALITYKualitas wajah kurang jelas
ALREADY_CLOCKED_INSudah clock-in hari ini
NOT_CLOCKED_INBelum clock-in — tidak bisa clock-out
OUTSIDE_SHIFT_WINDOWDi luar jendela shift (jika diaktifkan)

Screens M-ATT05 / M-ATT06 menampilkan reason di atas (bukan hanya FACE_MISMATCH).​

11. Acceptance criteria (MVP)​

MVP dianggap selesai bila:

  1. Karyawan dapat clock-in/out dengan validasi wajah dan GPS pada Android (aturan §10.1).
  2. Pengajuan izin/cuti/lembur dapat di-approve/reject supervisor di web dengan alasan wajib saat tolak + notifikasi ke karyawan.
  3. Dashboard menampilkan kehadiran harian dan rekap periode (status Hadir/Terlambat/Alpha/Izin).
  4. HRD dapat mengunduh laporan Excel (PDF opsional) dengan kolom §10.4.
  5. Role access membatasi fitur sesuai persona (employee / supervisor / hrd).
  6. Checklist tes manual (card [Test] di board, owner Atin) untuk skenario utama lulus sesuai target adoption.

12. Risiko & mitigasi​

RisikoDampakMitigasi
Akurasi face recognition rendah di lapanganAbsensi gagal / false rejectThreshold tunable + retry 3×; re-enroll HRD/karyawan — tanpa override supervisor di MVP
GPS tidak akurat / indoorGeofence gagalRadius default 100 m; reject + reason code; log akurasi
Scope creep fitur payroll penuhTelat deliveryKunci batasan: hanya ekspor
Ketersediaan stakeholder UATFeedback terlambatJadwalkan UAT di Minggu 7; Atin jalankan tes manual per sprint
Integrasi FCM / R2Notifikasi / ekspor gagalWiring di S3–S5; fallback in-app feed jika FCM down; R2 hanya reports
Native face build gagalAbsensi terblokirFACE_MODE=stub tanpa ubah kontrak API

13. Tim & RACI ringkas​

AnggotaGitHubPeran
Atin MulyantoatmcorporationProject Leader & Analyst — requirement, koordinasi, manual tester, penulis karya ilmiah (karil)
Akmal SyarifudinakmalsyrfBackend & Infrastructure — API, DB, face/geofence server-side, CI/CD
Leonardus Sunu KristiantoleokristMobile Developer — auth/home, absensi (kamera + GPS), profil/enrollment
Asep Muhammadasepmuhamad1300-ctrlUI/UX & Web Frontend — Figma/design system, dashboard admin Vue
Moch Riswan Lutfin AnfaanfariswanMobile & Web Frontend — leave/OT/notif mobile; geofence & sebagian halaman web pendukung
note

atmcorporation (Atin) ≠ anfariswan (Anfa). Jangan menukar assignee board antara keduanya.


14. Luaran terkait​

  • Aplikasi mobile absensi (Android)
  • Web dashboard admin
  • Backend RESTful API
  • Dokumentasi teknis (arsitektur, API spec, panduan)
  • Checklist tes manual + UAT
  • Karya ilmiah (karil) — naskah Bab I–V (lanjutan bentuk metopen UT / R&D); owner Atin; board [Docs] Karil
  • Laporan akhir proyek + presentasi/demo

15. Riwayat revisi​

VersiTanggalPerubahan
0.1.02026-09-22Draft awal dari proposal capstone Kelompok B
0.1.12026-09-23Dependensi backend diselaraskan ke stack aktual (Infra v0.2)
0.1.22026-09-24Milestone sprint 1 minggu; BE∥UI paralel sejak S2
0.1.32026-09-24Dependensi web (Vue/CF Pages) & mobile (RN+Expo) terkunci
0.2.02026-09-24Kunci keputusan domain MVP; tim lengkap (Atin + Anfa); Atin = PL/Analyst + manual tester; cut face override / lupa password / kuota
0.2.12026-09-24Hub clock-out state, batal leave, RBAC guard; kunci FCM + Cloudflare R2
1.0.02026-09-24Locked: NFR angka, state machine, reason codes, enums, face on-device, D-09 embedding-only, ATT-06 definisi
1.0.12026-09-25Luaran karil (Bab I–V) + Atin sebagai penulis; selaras SDLC §4.1

Referensi​