Acceptance Criteria
⚙️ General Rules
⚙️ Platform: Web Admin
📄 Feature: Self-registration ke aplikasi HR
🎯 User Story: Sebagai calon admin Saya ingin daftar sendiri ke aplikasi dengan paket yang saya pilih Sehingga saya dapat menggunakan aplikasi sesuai fitur yang ada di paket
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat mendaftar sendiri dari landing page (skip landing page) |
+ |
SKIPPED |
belum diimplement |
|
Admin dapat mendaftar sendiri dengan data lengkap. |
+ |
PASSED |
|
|
Admin dapat mendaftar dengan akun google |
+ |
PASSED |
|
|
Admin dapat mengaktifkan akun dengan klik link yang dikirim ke email. |
+ |
FAILED |
link di email seharusnya ke webuser bukan ke webadmin |
|
Semua field harus diisi sebelum dikirim |
- |
PASSED |
|
|
Format email dan telepon harus benar |
- |
PASSED |
|
|
Format password harus benar, sesuai dengan aturan yg tertera |
- |
PASSED |
📄 Feature: Login
🎯 User Story: Sebagai admin Saya ingin login ke web admin Sehingga saya dapat melihat dashboard dan memiliki akses sesuai dengan role yang saya miliki
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Login dengan email dan password yg benar, bisa masuk ke dashboard PASSED |
+ |
PASSED |
|
|
Login dengan gmail yang sudah terdaftar, bisa masuk ke dashboard |
+ |
PASSED |
|
|
Login dengan email dan password yg salah, TIDAK bisa masuk ke dashboard |
- |
PASSED |
|
|
Login dengan akun non-admin, tidak bisa login |
- |
||
|
Login dengan gmail yg tidak terdaftar, tidak bisa login |
- |
PASSED |
|
|
[Auth] Direct URL without login |
- |
FAILED |
Expected : Halaman error 404 tampil, tanpa redirect ke login. |
🎯 User Story: Sebagai employee Saya ingin login ke aplikasi Sehingga saya dapat melihat dashboard dan memiliki akses sesuai dengan role yang saya miliki
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Login dengan email dan password yg benar, bisa masuk ke dashboard PASSED |
+ |
PASSED |
|
|
Login dengan gmail yang sudah terdaftar, bisa masuk ke dashboard |
+ |
PASSED |
|
|
Login dengan email dan password yg salah, TIDAK bisa masuk ke dashboard |
- |
PASSED |
|
|
Login dengan akun non-employee, tidak bisa login |
- |
||
|
Login dengan gmail yg tidak terdaftar, tidak bisa login |
- |
PASSED |
📄 Feature: Lupa password
🎯 User Story: Sebagai admin Saya ingin reset password jika lupa sebelum login Sehingga bisa login dari intruksi yang dikirim ke email
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Submit forgot password dengan email benar dikirim email untuk reset password |
+ |
PASSED |
24/09 |
|
Submit forgot password dengan email SALAH, system tetap menunjukan message yang sama tetapi system tidak mengirim email. |
- |
PASSED |
24/09 |
📄 Feature: Dashboard
🎯 User Story: Sebagai admin Saya ingin melihat overview perusahaan sendiri di dashboard Sehingga saya bisa mengetahui info pengumuman terbaru, statistik karyawan, karyawan yang cuti, izin, kontrak, kalendar kerja, dsb
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Bisa melihat pengumuman yang aktif |
+ |
FAILED | Crash saat membuka konten Announcement |
|
Bisa melihat statistik (karyawan, organization, gender) |
+ |
PASSED |
|
|
Bisa melihat karyawan yang cuti hari ini |
+ |
|
|
|
Bisa melihat karyawan yang izin hari ini |
+ |
||
|
Bisa melihat kalender kerja bulan ini dengan data libur dan event |
+ |
||
|
Bisa melihat daftar karyawan kontrak <= 3 bulan masa kontrak habis |
+ |
||
|
Tidak melihat data perusahaan lain |
- |
||
|
Tidak melihat pengumuman yang tidak aktif |
- |
PASSED |
|
|
Tidak melihat karyawan yang tidak cuti hari ini di box cuti |
- |
||
|
Tidak melihat karyawan yang tidak izin hari ini di box izin |
- |
||
|
Tidak melihat data karyawan tetap |
- |
||
|
Tidak melihat data karyawan kontrak yang lebih dari 3 bulan habis masa kontraknya |
- |
📄 Feature: Head Office
🎯 User Story: Sebagai admin Saya ingin update info head office Sehingga info head office bisa digunakan pada fitur lain seperti lokasi pada shift location dan prefix pada employee id
FAILED: is_hq harus terisi ketika create user register sebagai admin dan otomatis membuat compny. employment_info & personal_info juga harus terisi ketika verify user (jika belum terisi)
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Setelah update location pada map, maka pada shift harus nya menggunakan lokasi yang sesuai dengan yang diset |
+ |
||
|
Ketika checkin, jika pada data shift dipilih head office ini, maka harus menampilkan head office ini di pilihan lokasi checkin |
+ |
||
|
Setelah menambah data branch, branch bisa diset ke employee |
+ |
||
|
Ketika checkin, jika pada data shift diaktifkan opsi geotagging, maka lokasi checkin harus sesuai dengan lokasi headoffice (dalam radius) |
+ |
||
|
Setelah update company prefix, ketika employee_id di auto-generate, harus menggunakan prefix ini |
+ |
||
|
Jika pada data shift dipilih head office ini dan diset geotagging, tetapi user berada di luar radius, maka data attendance dianggap tidak disiplin secara lokasi |
- |
||
|
Jika pada data shift tidak dipiliah head office, ketika checkin harusnya tidak muncul head office ini |
- |
📄 Feature: Branch Management
🎯 User Story: Sebagai admin Saya ingin manage (crud) data branch yang ada di perusahaan ini Sehingga data dan atribut pada branch bisa digunakan pada fitur lain seperti lokasi pada shift location, sppd pada fitur check in, set branch pada data employee, dsb.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Data branch bisa di CRUD oleh admin yang memiliki permission |
+ |
FAILED |
company.0.cityId: "'3207' is not of type 'integer'" company.0.npwpParentId: "None is not of type 'integer'" |
|
Setelah set location pada map, maka pada shift harus nya menggunakan lokasi yang sesuai dengan yang diset |
+ |
PASSED |
|
|
Setelah menambah data branch, branch bisa diset ke employee |
+ |
PASSED |
|
|
Jika opsi geolocation diaktifkan, maka ketika checkin akan dikenakan aturan checkin harus di lokasi dengan radius yang telah diset |
+ |
PASSED |
|
|
Jika opsi sppd/business trip diaktfkan, maka harus muncul di fitur checkin |
PASSED |
||
|
Jika checkin di lokasi di luar radius, akan ada flag tidak disiplin secara lokasi |
📄 Feature: Satellite Office Management
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data satellite office yang ada di perusahaan ini, sehingga informasi lokasi, geolokasi, dan data terkait lainnya bisa digunakan pada fitur lain seperti:
-
Shift Location: Menentukan lokasi kerja untuk shift.
-
Check-in: Memastikan karyawan melakukan check-in di lokasi yang tepat.
-
Employee Data: Menetapkan satellite office sebagai lokasi kerja karyawan.
-
Business Trip (SPPD): Mengelola check-in untuk perjalanan dinas.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Data satellite office dapat di CRUD oleh admin yang memiliki permission. |
+ |
PASSED |
|
|
Setelah menentukan lokasi di peta, lokasi shift harus sesuai dengan lokasi satellite office yang telah ditetapkan. |
+ |
PASSED |
|
|
Setelah menambah data satellite office, lokasi tersebut dapat ditetapkan untuk karyawan. |
+ |
PASSED |
|
|
Jika opsi geolocation diaktifkan, aturan check-in berdasarkan radius yang telah diatur akan berlaku. |
+ |
PASSED |
|
|
Jika opsi business trip/SPPD diaktifkan, fitur check-in harus menyesuaikan untuk perjalanan dinas. |
+ |
PASSED |
|
|
Fungsi untuk menambahkan, mengedit, dan menghapus satellite office harus berjalan sesuai alur yang telah ditentukan, yaitu:
|
+ |
PASSED |
Map seragamkan dengan company/branch. Ada search box, dan ketika terpilih suatu lokasi, input text address otomatis terisi dengan data lokasi tapi editable. |
|
Jika karyawan check-in di luar radius lokasi satellite office yang telah ditentukan (jika geolokasi diaktifkan), maka akan ada flag tidak disiplin. |
- |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data satellite office. |
- |
PASSED |
|
|
Sistem harus menolak jika ada data wajib yang tidak terisi saat mencoba menambah atau mengedit satellite office (misalnya, nama atau lokasi). |
- |
PASSED |
📄 Feature: Setup roles & permissions
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data role dan permission yang ada di perusahaan, sehingga saya bisa mengatur siapa saja karyawan yang memiliki role dan permission tertentu
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin bisa CRUD role yang belum di assign |
+ |
FAILED |
FAILED : skrg harus ada employee |
|
Admin bisa assign role ke beberapa user |
+ |
||
|
User yang di-assign akan mendapatkan menu dan permission sesuai role yg di-assign |
+ |
||
|
User yang tidak memiliki permission tidak bisa mengakses menu yang tidak ada di permission |
- |
📄 Feature: Employment status
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data employment status yang ada di perusahaan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat menambahkan employee status baru, melihat, melakukan pengeditan dan menghapus employee status |
+ |
PASSED |
|
|
Sistem meminta konfirmasi sebelum benar-benar menghapus. |
+ |
PASSED |
|
|
Admin tidak bisa membuat status baru tanpa nama atau field kosong. |
- |
PASSED |
📄 Feature: Grade & class
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data Grade dan Class yang ada di perusahaan, sehingga saya bisa menetapkan level atau tingkatan karyawan dan menggunakan data ini untuk fitur lain
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Data Grade dan Class dapat di CRUD oleh admin yang memiliki permission. |
+ |
||
|
Fungsi untuk menambahkan, mengubah, dan menghapus data Grade harus berjalan sesuai alur yang telah ditentukan, yaitu:
|
+ |
PASSED |
|
|
Fungsi untuk menambahkan, mengubah, dan menghapus data Class harus berjalan sesuai alur yang telah ditentukan, yaitu:
|
+ |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data Grade dan Class. |
- |
||
|
Sistem harus menolak jika ada data wajib yang tidak terisi saat mencoba menambah atau mengedit Grade atau Class. |
- |
PASSED |
|
|
Sistem harus memberikan peringatan jika ada upaya untuk menghapus Grade atau Class yang sudah terhubung dengan data karyawan. |
- |
PASSED |
|
|
Pengguna tidak bisa melakukan penghapusan data Grade atau Class tanpa adanya verifikasi atau konfirmasi. |
- |
📄 Feature: Job position
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data posisi pekerjaan yang ada di perusahaan, sehingga saya bisa menetapkan jabatan yang relevan untuk setiap karyawan dan menggunakan data ini untuk fitur lain
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Fungsi untuk menambahkan, mengubah, dan menghapus data posisi harus berjalan sesuai alur yang telah ditentukan, yaitu:
|
+ |
||
|
Data Job Position dapat di CRUD oleh admin yang memiliki permission. |
+ |
||
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data Job Position. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah atau mengedit data posisi dengan informasi yang tidak lengkap atau wajib (misalnya, nama posisi kosong). |
– |
||
|
Sistem harus memberikan peringatan atau mencegah penghapusan jika ada Job Position yang sudah digunakan atau terhubung dengan data karyawan yang masih aktif. |
- |
📄 Feature: Job level
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data level pekerjaan yang ada di perusahaan, sehingga saya bisa menetapkan tingkatan yang relevan untuk setiap posisi dan menggunakan data ini untuk fitur lain, seperti:
-
Employee Data: Menetapkan level pekerjaan pada data setiap karyawan.
-
Compensation & Benefits: Menentukan skala gaji berdasarkan level pekerjaan.
-
Career Path: Memetakan jalur karir karyawan berdasarkan level.
-
Cash Advance: Menentukan limit cash advance by job level
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Fungsi untuk menambahkan, mengubah, dan menghapus data level pekerjaan harus berjalan sesuai alur yang telah ditentukan, yaitu:
|
+ |
PASSED |
|
|
Data Job Level dapat di CRUD oleh admin yang memiliki permission. |
+ |
||
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data Job Level. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah atau mengedit data level dengan informasi yang tidak lengkap atau wajib (misalnya, nama level kosong). |
– |
PASSED |
|
|
Sistem harus memberikan peringatan atau mencegah penghapusan jika ada Job Level yang sudah terhubung dengan data karyawan atau posisi yang masih aktif. |
- |
📄 Feature: Holiday
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data hari libur di perusahaan, sehingga:
-
Hari libur bisa diatur sesuai dengan kalender nasional atau kebijakan perusahaan.
-
Karyawan tidak perlu check-in pada hari libur.
-
Jadwal kerja dan laporan kehadiran secara otomatis mencatat hari tersebut sebagai hari libur.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat menambah, mengedit, dan menghapus data hari libur. |
+ |
||
|
Saat menambahkan hari libur baru, admin dapat mengisi detail seperti nama hari libur dan tanggalnya. |
+ |
PASSED |
|
|
Setelah hari libur ditambahkan, hari tersebut harus secara otomatis terintegrasi dengan fitur Work Schedule (untuk menandai hari libur) dan Attendance Log (untuk memastikan tidak ada Absen pada tanggal tersebut). |
+ |
Di work schedul menampilkan list shift buka holiday |
|
|
Admin dapat mengedit data hari libur yang sudah ada jika terjadi perubahan. |
- |
PASSED |
|
|
Admin dapat menghapus data hari libur yang tidak lagi relevan. |
- |
PASSED |
|
|
Data hari libur dapat diatur sebagai hari libur nasional atau libur khusus perusahaan. |
- |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data hari libur. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah data hari libur dengan informasi yang tidak lengkap (misalnya, nama libur atau tanggal kosong). |
- |
PASSED |
|
|
Sistem harus memberikan peringatan jika ada upaya untuk menghapus hari libur yang sudah ada dalam rentang waktu laporan kehadiran yang sudah final. |
- |
PASSED |
|
|
Data libur tidak boleh tumpang tindih dengan data hari kerja, dan sistem harus bisa membedakannya. |
- |
📄 Feature: Work schedule
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data shift dan schedule, sehingga saya bisa menetapkan jam kerja yang fleksibel atau tetap untuk karyawan dan menggunakan data ini untuk fitur lain, seperti:
-
Time Tracking: Mengintegrasikan jadwal kerja dengan sistem absensi.
-
Overtime Calculation: Menghitung lembur berdasarkan jam kerja yang ditentukan.
-
Employee Attendance: Memantau kehadiran karyawan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat membuat shift baru, melengkapi semua data yang diperlukan, dan menyimpannya. Shift baru harus muncul dalam daftar dan dapat digunakan untuk membuat schedule. |
+ |
PASSED |
|
|
Admin dapat melihat detail shift yang sudah ada, termasuk jam kerja per hari. Terdapat opsi untuk mengedit atau membatalkan tampilan detail. |
+ |
PASSED |
|
|
Admin dapat mengedit data shift yang ada. Perubahan harus berhasil disimpan dan diperbarui di daftar. Notifikasi keberhasilan harus muncul. |
+ |
PASSED |
|
|
Admin dapat menghapus shift yang diinginkan. Setelah verifikasi penghapusan, data shift harus terhapus secara permanen dan tidak lagi ditampilkan. |
+ |
PASSED |
|
|
Admin dapat membuat schedule baru, melengkapi semua data yang diperlukan, dan memilih shift yang sudah tersedia. Schedule baru harus muncul dalam daftar dan dapat ditetapkan untuk karyawan. |
+ |
PASSED |
|
|
Admin dapat melihat detail schedule yang sudah ada, termasuk shift yang digunakan. Terdapat opsi untuk mengedit atau membatalkan tampilan detail. |
+ |
PASSED |
|
|
Admin dapat mengedit data schedule yang ada. Perubahan harus berhasil disimpan dan diperbarui di daftar. Notifikasi keberhasilan harus muncul. |
+ |
PASSED |
|
|
Admin dapat menghapus schedule yang diinginkan. Setelah verifikasi, data schedule harus terhapus secara permanen dan tidak lagi ditampilkan. |
+ |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data Work Schedule. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah atau mengubah shift atau schedule dengan informasi yang tidak lengkap atau wajib (misalnya, jam kerja kosong). |
- |
PASSED |
|
|
Sistem harus memberikan peringatan atau mencegah penghapusan Shift atau Schedule yang sedang digunakan oleh karyawan aktif. |
- |
||
|
User tidak bisa menghapus data tanpa adanya verifikasi atau konfirmasi. |
- |
PASSED |
📄 Feature: employee_id
🎯 User Story: Sebagai admin Saya ingin dapat mengelola (CRUD) format ID karyawan, sehingga saya bisa menetapkan aturan penomoran yang konsisten dan otomatis untuk setiap karyawan baru yang ditambahkan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat mengedit format Employee ID. |
+ |
||
|
Admin dapat membuat format yang telah diatur dengan kombinasi dari 3 komponen. |
+ |
||
|
Admin dapat mengubah format dengan bebas dan menyimpannya. |
+ |
PASSED |
|
|
Sistem harus memberikan peringatan jika ada upaya untuk menyimpan format yang tidak memenuhi aturan yang ditentukan (misalnya, format INCREMENT yang tidak sesuai). |
- |
PASSED |
📄 Feature: User/employee
🎯 User Story: Saya ingin dapat membuat user baru secara manual, melihat daftar user, mengedit, dan menghapus user, sehingga saya bisa mengatur akses pengguna aplikasi sesuai kebutuhan perusahaan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat menambah pengguna baru secara manual dengan mengisi informasi wajib (misalnya, nama, email, dan peran/hak akses). |
+ |
||
|
Admin dapat melihat daftar semua pengguna/karyawan yang ada dalam sistem. |
+ |
PASSED |
|
|
Admin dapat mencari atau memfilter daftar pengguna berdasarkan kriteria tertentu (misalnya, nama, departemen, atau peran). |
+ |
PASSED |
|
|
Admin dapat mengedit data profil pengguna yang sudah ada. |
+ |
PASSED |
|
|
Admin dapat menghapus pengguna yang sudah tidak relevan dari sistem. |
+ |
PASSED |
|
|
Setelah pengguna baru dibuat, ia dapat login ke sistem dengan kredensial yang telah diberikan. |
+ |
||
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengelola data pengguna. |
- |
||
|
Sistem harus menolak pembuatan pengguna baru jika ada informasi wajib yang tidak terisi atau jika email yang digunakan sudah terdaftar. |
- |
PASSED |
|
|
Sistem harus memberikan peringatan atau meminta konfirmasi sebelum menghapus pengguna. |
- |
PASSED |
|
|
Pengguna yang sedang login tidak dapat menghapus akunnya sendiri. |
- |
||
|
Sistem harus mencegah pengeditan atau penghapusan data pengguna yang penting untuk riwayat (misalnya, log kehadiran) tanpa adanya alur persetujuan atau arsip yang jelas. |
- |
PASSED |
📄 Feature: Organization
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data organization beserta manager dan anggotanya
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat menambah struktur organisasi sesuai dengan yang ada di perusahaan. |
+ |
PASSED |
|
|
Admin dapat mengubah struktur organisasi (mengeset parent). |
+ |
PASSED |
|
|
Admin dapat menetapkan manajer untuk setiap unit organisasi. |
+ |
||
|
Admin dapat menetapkan anggota ke dalam setiap unit organisasi. |
+ |
PASSED |
|
|
Admin dapat mengubah atau memindahkan manajer dan anggota dari satu unit ke unit lain. |
+ |
||
|
Sistem harus menampilkan hirarki visual dari struktur organisasi. |
+ |
||
|
Admin dapat menghapus unit organisasi yang sudah tidak relevan. |
+ |
PASSED |
|
|
Sistem harus menolak jika ada upaya untuk menghapus unit organisasi yang masih memiliki anggota atau manajer di dalamnya. |
- |
PASSED |
|
|
Admin tidak dapat menetapkan seorang karyawan sebagai manajer jika karyawan tersebut tidak memiliki peran atau hak akses yang sesuai. |
- |
||
|
Sistem harus mencegah duplikasi data atau pembuatan unit dengan nama yang sama di bawah parent yang sama. |
- |
PASSED |
Sudah diperbaiki ketika create data jika ada duplicate |
|
Data anggota atau manajer tidak boleh hilang atau salah setelah dipindahkan ke unit organisasi lain. |
- |
📄 Feature: Approval
🎯 User Story: Sebagai admin Saya ingin dapat mengelola (CRUD) alur persetujuan untuk berbagai jenis request, sehingga setiap permohonan dapat disetujui atau ditolak sesuai dengan urutan hierarki yang telah saya tentukan, sehingga:
-
Saya bisa menetapkan urutan persetujuan yang spesifik untuk setiap jenis permintaan (misalnya, Pengajuan Cuti harus disetujui oleh Supervisor, lalu HR, lalu General Manager).
-
Saya dapat mengubah dan mengatur ulang urutan persetujuan ini jika ada perubahan struktur organisasi.
-
Setiap permohonan dapat disetujui atau ditolak sesuai dengan hierarki yang telah saya tentukan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat Menambah alur persetujuan baru untuk jenis permintaan tertentu. |
+ |
PASSED |
|
|
Admin dapat Mengedit alur persetujuan yang sudah ada. |
+ |
PASSED |
|
|
Admin dapat Menghapus alur persetujuan yang sudah tidak digunakan. |
+ |
PASSED |
|
|
Admin dapat Mengatur ulang (reorder) urutan persetujuan dengan mudah (misalnya, dengan drag-and-drop atau tombol panah). |
+ |
FAILED |
Reorder belum working (api belum ada, fe bleum call api) |
|
Saat sebuah alur persetujuan ditetapkan, setiap permintaan yang diajukan harus mengikuti urutan yang telah ditentukan tersebut. |
+ |
||
|
Sistem harus menolak jika ada upaya untuk menyimpan alur persetujuan dengan informasi yang tidak lengkap (misalnya, tidak ada approver yang ditentukan dalam sebuah tingkatan). |
- |
FAILED |
Masih bisa di-submit, tapi ada error |
|
Sistem harus mencegah penghapusan alur persetujuan jika masih ada permintaan yang sedang berjalan atau menunggu persetujuan di bawah alur tersebut. |
- |
||
|
Sistem Sistem tidak boleh secara otomatis melanjutkan ke tingkat persetujuan berikutnya jika persetujuan di tingkat sebelumnya belum diberikan. |
- |
||
|
Karyawan yang terdampak untuk mendapatkan daftar approver harus sesuai dengan urutan target |
+ |
FAILED |
MAJOR cek target , terutama branch |
|
Urutan approvers ketika pengajuan dan proses approval harus sesuai dengan config |
+ |
Note:
MAJOR: Harus bisa di reorder
MAJOR cek target , terutama branch
📄 Feature: Announcement
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) pengumuman perusahaan. Tujuannya agar saya bisa membuat, memperbarui, dan menghapus informasi penting yang perlu diketahui oleh seluruh karyawan dan menyampaikannya melalui semua aplikasi yang tersedia.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat menambah pengumuman baru dengan mengisi detail seperti judul, konten, dan tanggal publikasi. |
+ |
||
|
Admin dapat mengedit pengumuman yang sudah ada. |
+ |
PASSED |
|
|
Admin dapat menghapus pengumuman yang sudah tidak relevan atau kadaluarsa. |
+ |
PASSED |
|
|
Pengumuman yang dibuat harus otomatis tampil di semua platform aplikasi (web dan mobile). |
+ |
PASSED |
|
|
Admin dapat mengatur status pengumuman (misalnya, aktif, nonaktif, atau dijadwalkan). |
+ |
PASSED |
|
|
Sistem harus menolak jika ada upaya untuk menambah pengumuman dengan informasi wajib yang tidak terisi (misalnya, judul atau konten kosong). |
- |
PASSED |
|
|
Pengumuman yang sudah dihapus tidak boleh muncul kembali di platform manapun. |
- |
PASSED |
|
|
Pengumuman yang tidak aktif atau belum mencapai tanggal publikasi tidak boleh terlihat oleh karyawan. |
- |
PASSED |
|
|
Sistem harus memberikan peringatan atau konfirmasi sebelum menghapus pengumuman. |
- |
PASSED |
📄 Feature: Project
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) data proyek beserta atribut-atributnya. Tujuannya agar saya bisa mendefinisikan proyek, mengalokasikan sumber daya, dan melacak aktivitas yang terkait dengan proyek tersebut. Data ini akan terintegrasi dengan fitur lain seperti manajemen lembur dan perjalanan dinas.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat menambah proyek baru dengan mengisi atribut-atribut seperti nama proyek, deskripsi, tanggal mulai, dan tanggal selesai. |
+ |
||
|
Admin dapat mengedit atribut proyek yang sudah ada. |
+ |
PASSED |
|
|
Admin dapat menghapus proyek yang sudah selesai atau tidak relevan. |
+ |
PASSED |
|
|
Admin dapat menetapkan karyawan ke dalam proyek. |
+ |
PASSED |
|
|
Atribut proyek (misalnya, nama proyek) dapat dipilih dan digunakan pada fitur-fitur lain seperti pengajuan lembur atau perjalanan dinas (SPPD). |
+ |
||
|
Admin dapat melihat daftar semua proyek yang sudah ada. |
+ |
PASSED |
|
|
Sistem harus menolak jika jika ada upaya untuk menambah proyek dengan informasi wajib yang tidak terisi (misalnya, nama proyek kosong). |
- |
PASSED |
|
|
Sistem harus memberikan peringatan atau meminta konfirmasi sebelum menghapus proyek. |
- |
PASSED |
|
|
Sistem harus mencegah penghapusan proyek jika masih ada data yang terhubung, seperti log lembur atau perjalanan dinas yang sedang berjalan. |
- |
||
|
Pengeditan data proyek tidak boleh secara tidak sengaja mempengaruhi data historis yang sudah tercatat. |
- |
📄 Feature: Attendance
🎯 User Story: Sebagai admin, saya ingin dapat mengatur kebijakan dasar absensi perusahaan, seperti menentukan batas waktu pengajuan absensi mundur dan tanggal cut-off untuk laporan bulanan. Tujuannya agar sistem absensi berjalan sesuai aturan yang kami tetapkan, memastikan kedisiplinan dan akurasi data kehadiran.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat mengakses halaman pengaturan absensi. |
+ |
||
|
Admin dapat mengisi atau mengubah nilai untuk Minimum Days Before Attendance Date. |
+ |
PASSED |
|
|
Admin dapat mengisi atau mengubah nilai untuk Cutoff Date. |
+ |
PASSED |
|
|
Admin dapat mengaktifkan atau menonaktifkan fitur absensi web untuk pengguna. |
+ |
||
|
Setelah perubahan disimpan, kebijakan baru harus langsung diterapkan pada sistem. |
+ |
PASSED |
|
|
Terdapat tombol Edit atau Save yang berfungsi untuk menyimpan perubahan. |
+ |
PASSED |
|
|
Sistem harus menolak jika input untuk Minimum Days Before Attendance Date atau Cutoff Date bukan angka atau memiliki nilai yang tidak valid. |
- |
PASSED |
|
|
Admin yang tidak memiliki izin tidak dapat mengubah pengaturan ini. |
- |
||
|
Sistem tidak boleh menyimpan perubahan jika ada kesalahan input. |
- |
PASSED |
|
|
JIka ada kekurangan jam kerja |
🎯 User Story: Sebagai admin, saya ingin memantau dan meninjau seluruh data absensi karyawan secara terpusat. Tujuannya agar saya bisa mengevaluasi kedisiplinan, mengidentifikasi anomali (seperti absen atau terlambat), dan mengunduh laporan kehadiran jika diperlukan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Pengguna dapat mengakses halaman log absensi. |
+ |
||
|
Halaman tersebut harus menampilkan ringkasan data kehadiran (misalnya, jumlah absen, terlambat, dll.) dalam periode yang dipilih. |
+ |
||
|
Terdapat daftar karyawan dengan ringkasan data absensi mereka. |
+ |
||
|
Admin dapat menggunakan filter berdasarkan nama karyawan dan bulan untuk mempermudah pencarian. |
+ |
||
|
Admin dapat mengunduh (export) data absensi ke format yang relevan. |
+ |
||
|
Admin dapat melihat detail log absensi individu setiap karyawan. |
+ |
||
|
Data yang ditampilkan di log harus akurat dan tidak boleh salah. |
- |
||
|
Filter pencarian tidak boleh gagal atau menampilkan data yang tidak relevan. |
- |
||
|
Admin yang tidak memiliki izin tidak dapat melihat data kehadiran karyawan. |
- |
||
|
Sistem tidak boleh gagal saat mencoba mengunduh laporan absensi. |
- |
🎯 User Story: Sebagai employee, saya ingin memantau dan melihat ringkasan data kehadiran saya secara real-time di aplikasi mobile, sehingga saya bisa tahu status kehadiran saya setiap hari dan kekurangan jam kerja.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Pengguna dapat melihat ringkasan status kehadiran bulanan (misalnya, jumlah hari absen, terlambat, cuti, dll.). |
+ |
||
|
Sistem harus dapat menghitung dan menampilkan kekurangan jam kerja (shortage of working hours) jika ada. |
+ |
||
|
Setiap tanggal pada kalender harus menampilkan status kehadiran harian dan jenis shift (misalnya, WFO, WFH, Cuti, Libur). |
+ |
||
|
Pengguna dapat mengubah tampilan laporan berdasarkan bulan. |
+ |
||
|
Data kehadiran yang ditampilkan tidak boleh berbeda dengan data di sistem admin. |
- |
||
|
Kekurangan jam kerja tidak boleh dihitung secara salah. |
- |
||
|
Pengguna tidak boleh bisa mengedit atau mengubah data kehadiran dari tampilan ini. |
- |
Perhitungan jam mengikuti aturan seperti di Simulasi Attendance:
https://docs.google.com/spreadsheets/d/1Sqsai2HhwARaTnd8jew6wroSvghnDrJ0P4evhgjGa5c/edit?gid=0#gid=0
Note:
-
di attendance log, shift yg muncul harus dari table attendance jika ada (sudah pernah checkin), jika tidak ada, baru dari schedule , data config yg dibutuhkan untuk kalkulasi penentuan flagging, misal late_in , early_in, dsb, simpan juga di table transaksi yaitu attendance, jangan diambil realtime dari schedule/shift. Karena akan ada byk column, ketika query ke table ini, jangan pakai *, pilih column secara manual agar tidak berat
-
Tambah config untuk kekurangan jam kerja di bulan itu & cuti yg dipotong
-
Cek lagi: You have a shortage of working hours of 8 hours
📄 Feature: Leave Config
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) kebijakan cuti di perusahaan, sehingga:
-
Saya bisa membuat berbagai jenis cuti sesuai kebutuhan perusahaan (misalnya, Cuti Tahunan, Cuti Sakit, Cuti Bersalin).
-
Saya dapat menetapkan aturan dan saldo cuti untuk setiap karyawan atau kelompok karyawan.
-
Saya bisa mendistribusikan saldo cuti secara adil dan transparan.
-
Setiap pengajuan cuti dapat diproses sesuai dengan kebijakan yang telah diatur.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat Menambah, mengedit, dan menghapus jenis cuti (misalnya, Cuti Tahunan). |
+ |
PASSED |
|
|
Admin dapat Mengatur aturan untuk setiap jenis cuti, seperti apakah cuti tersebut berbayar atau tidak, apakah bisa diajukan sebagai hari, atau apakah dapat diajukan di masa probation. |
+ |
||
|
Admin dapat Menetapkan saldo cuti (misalnya, 12 hari per tahun) dan mekanisme akumulasinya (misalnya, di awal tahun atau per bulan). |
+ |
||
|
Admin dapat Menetapkan cuti kepada karyawan, baik secara individu maupun massal. |
+ |
||
|
Sistem harus secara otomatis mengupdate saldo cuti karyawan ketika ada pengajuan cuti yang disetujui. |
+ |
||
|
Admin dapat melihat riwayat saldo cuti dan penggunaannya oleh setiap karyawan. |
+ |
||
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengubah pengaturan cuti. |
- |
||
|
Sistem harus menolak jika ada upaya untuk mengedit atau menghapus jenis cuti yang sedang digunakan oleh karyawan aktif. |
- |
||
|
Sistem harus mencegah pengajuan cuti jika saldo karyawan tidak mencukupi atau jika pengajuan tidak sesuai dengan aturan yang telah ditetapkan (misalnya, mengajukan cuti saat masa probation padahal tidak diizinkan). |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah jenis cuti dengan informasi yang tidak lengkap atau wajib (misalnya, nama jenis cuti kosong). |
- |
PASSED |
|
|
Saldo cuti tidak boleh diubah tanpa riwayat audit yang jelas. |
- |
Note: di pengajuan pastikan opsi seperti attachment sesuai config
📄 Feature: Leave Balance
🎯 User Story: Sebagai admin, saya ingin dapat menyesuaikan saldo cuti semua karyawan di perusahaan. Tujuannya agar saya bisa melakukan koreksi, penyesuaian, atau memberikan tambahan cuti secara manual, dengan catatan yang jelas mengenai perubahan yang dilakukan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat mengakses fitur penyesuaian saldo cuti. |
+ |
||
|
Admin dapat mencari dan memilih karyawan yang saldonya akan disesuaikan. |
+ |
PASSED |
|
|
Admin dapat menambah atau mengurangi saldo cuti karyawan dengan memasukkan jumlah hari. |
+ |
PASSED |
|
|
Admin harus diminta untuk mengisi alasan atau catatan mengapa penyesuaian dilakukan. |
+ |
PASSED |
|
|
Setelah penyesuaian dilakukan, saldo cuti yang baru harus segera terlihat di profil karyawan dan di sistem. |
+ |
||
|
Setiap penyesuaian harus tercatat dalam riwayat audit, termasuk siapa yang melakukan perubahan, tanggal, jumlah perubahan, dan alasannya. |
+ |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses fitur penyesuaian saldo cuti. |
- |
||
|
Sistem harus mencegah penyesuaian tanpa adanya alasan atau catatan. |
- |
PASSED |
|
|
Sistem harus menolak input nilai saldo yang tidak valid (misalnya, angka negatif saat menambah saldo). |
- |
PASSED |
|
|
Penyesuain saldo yang dilakukan secara manual tidak boleh memengaruhi perhitungan saldo cuti otomatis (misalnya, akumulasi bulanan) jika tidak seharusnya. |
- |
📄 Feature: Overtime
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) kebijakan dan aturan lembur di perusahaan, sehingga:
-
Setiap pengajuan lembur dapat diproses sesuai dengan peraturan yang telah ditetapkan.
-
Perhitungan upah lembur berjalan otomatis berdasarkan aturan yang berlaku.
-
Terdapat batasan jam kerja lembur harian dan mingguan.
-
Saya dapat mengatur siapa saja yang berhak mendapatkan upah lembur.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat mengaktifkan atau menonaktifkan fitur lembur. |
+ |
||
|
Admin dapat menentukan batas maksimum jam lembur harian dan mingguan. |
+ |
PASSED |
|
|
Admin dapat mengatur tarif upah lembur per jam, yang mungkin berbeda untuk hari kerja, akhir pekan, atau hari libur nasional. |
+ |
||
|
Admin dapat menentukan apakah upah lembur akan dibayarkan atau dikonversi menjadi cuti. |
+ |
||
|
Admin dapat menetapkan karyawan atau kelompok karyawan mana yang berhak mendapatkan upah lembur. |
+ |
PASSED |
|
|
Sistem harus dapat menghitung upah lembur secara otomatis berdasarkan data jam kerja yang telah diverifikasi dan aturan yang telah ditetapkan. |
+ |
||
|
Admin dapat mengubah atau memperbarui kebijakan lembur yang ada. |
+ |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengubah pengaturan overtime. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menyimpan pengaturan dengan nilai yang tidak valid (misalnya, tarif upah lembur yang kosong atau tidak dalam format angka). |
- |
PASSED |
|
|
Karyawan yang tidak berhak tidak bisa mengajukan lembur atau sistem tidak menghitung upah lembur untuk mereka, sesuai dengan aturan yang telah ditetapkan. |
- |
||
|
Perhitungan upah lembur tidak boleh melebihi batas jam maksimum yang telah ditentukan. |
- |
Note:
-
di web user, ketika mengajukan backdate, perlu munculin jam mulai & akhir (contoh di mobile app)
-
Durasi max di luar working_day, tidak terambil di fe ketika pengajuan
-
Ketika persetukuan di mobile, durasi tidak sesuai
-
Overtime user detail rate belum wokking
-
Overtime detail di mobile app tidak muncul
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan lembur melalui portal web atau aplikasi mobile. Tujuannya agar saya bisa mendapatkan persetujuan lembur untuk pekerjaan yang sudah atau akan saya lakukan, mendapatkan upah yang sesuai, serta menerima pembaruan status pengajuan di mana saja dan kapan saja.
✅ Positive Acceptance Criteria:
-
Pengajuan Lembur:
-
Pengguna dapat mengakses fitur pengajuan lembur di portal web dan aplikasi mobile.
-
Formulir pengajuan harus konsisten di kedua platform dan meminta semua field yang dibutuhkan (tanggal, jam mulai, jam selesai, alasan, dan, jika perlu, proyek terkait).
-
Pengguna dapat mengajukan lembur untuk tanggal di masa depan atau di masa lalu (sesuai kebijakan backdate yang diatur admin).
-
Setelah pengajuan berhasil, akan muncul notifikasi sukses.
-
Pengelolaan Lampiran:
-
Pengguna dapat mengunggah file pendukung di kedua platform.
-
Pemberitahuan & Status:
-
Pengguna dapat melihat status pengajuan (pending, disetujui, ditolak) di kedua platform.
-
Pengguna menerima notifikasi push (untuk mobile) dan notifikasi di aplikasi ketika pengajuan lemburnya disetujui atau ditolak.
-
Tampilan riwayat pengajuan lembur harus konsisten di web dan mobile.
❌ Negative Acceptance Criteria:
-
Validasi Formulir:
-
Sistem harus mencegah pengajuan jika ada field wajib yang tidak terisi.
-
Sistem harus menolak pengajuan jika jam lembur yang diinputkan melebihi batas yang diatur oleh admin.
-
Sistem harus menolak pengajuan lembur untuk tanggal yang melebihi batas backdate yang diizinkan oleh admin.
-
Unggahan File:
-
Sistem harus menolak unggahan file jika ukurannya melebihi batas yang telah ditentukan (misalnya, 2 MB).
-
Performa & Stabilitas:
-
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan lembur.
-
Notifikasi:
-
Notifikasi tidak boleh terlambat atau tidak terkirim.
-
Manajemen Data:
-
Pengguna tidak bisa mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak.
📄 Feature: Permit
🎯 User Story: Sebagai admin, saya ingin dapat mengelola (CRUD) kebijakan dan aturan izin di perusahaan, sehingga:
-
Setiap pengajuan izin dapat diproses sesuai dengan alur persetujuan yang telah ditetapkan.
-
Karyawan dapat mengajukan izin melalui sistem dengan alasan yang jelas.
-
Saya bisa menentukan jenis-jenis izin apa saja yang tersedia untuk karyawan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin dapat menambah, mengedit, dan menghapus jenis-jenis izin yang tersedia (misalnya, "Izin Pribadi", "Izin Sakit", "Izin Keperluan Mendesak"). |
+ |
PASSED |
|
|
Admin dapat mengatur apakah izin tersebut mengurangi jatah cuti atau tidak. |
+ |
||
|
Admin dapat menentukan apakah dokumen pendukung (misalnya, surat dokter) diperlukan untuk jenis izin tertentu. |
+ |
||
|
Karyawan dapat mengajukan izin sesuai dengan jenis dan aturan yang telah ditetapkan. |
+ |
||
|
Setiap pengajuan izin harus melewati alur persetujuan yang telah diatur sebelum statusnya berubah menjadi "Disetujui" atau "Ditolak". |
+ |
||
|
Admin dapat melihat daftar semua pengajuan izin, baik yang sedang diproses maupun yang sudah selesai. |
+ |
||
|
Sistem harus menolak jika ada upaya untuk menambah jenis izin dengan informasi yang tidak lengkap (misalnya, nama jenis izin kosong). |
- |
PASSED |
|
|
Karyawan tidak bisa mengajukan izin yang tidak tersedia dalam daftar jenis izin. |
- |
||
|
Pengajuan izin tidak boleh secara otomatis disetujui tanpa melalui alur persetujuan yang telah ditetapkan. |
- |
||
|
Karyawan tidak bisa menghapus pengajuan izin yang sedang diproses tanpa adanya persetujuan atau konfirmasi dari admin/atasan. |
- |
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan izin melalui portal web dan mobile ketika ada keperluan mendesak selama jam kerja. Tujuannya agar saya bisa mendapatkan persetujuan untuk meninggalkan kantor dan memiliki catatan yang jelas mengenai izin yang saya ajukan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Pengguna dapat mengakses halaman pengajuan izin. |
+ |
||
|
Proses pengisian formulir pengajuan di mobile harus sesuai dengan versi web. |
+ |
FAILED |
|
|
Pengguna dapat memilih jenis izin yang tersedia sesuai dengan konfigurasi admin. |
+ |
PASSED |
|
|
Pengguna dapat mengisi detail seperti tanggal izin, alasan, dan durasi (misalnya, beberapa jam atau satu hari penuh). |
+ |
FAILED |
Di web user ketika mengajukan backdate tidak menampilkan jam |
|
Setelah pengajuan dikirim, statusnya berubah menjadi Pending dan muncul dalam daftar riwayat pengajuan. |
+ |
PASSED |
|
|
Pengguna dapat melihat riwayat semua pengajuan izin beserta statusnya (disetujui, ditolak, pending) |
+ |
PASSED |
|
|
Tampilan riwayat pengajuan izin di aplikasi mobile harus konsisten dengan versi web. |
+ |
||
|
Pengguna menerima notifikasi push ke mobile app ketika pengajuan izinnya disetujui atau ditolak. |
+ |
||
|
Pengguna tidak bisa mengajukan jenis izin yang tidak tersedia. |
- |
PASSED |
|
|
Sistem harus mencegah pengajuan izin untuk tanggal di masa lalu. |
- |
FAILED |
|
|
Sistem harus menolak pengajuan jika ada data wajib yang tidak terisi. |
- |
PASSED |
|
|
Pengguna tidak bisa mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak. |
- |
PASSED |
|
|
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan izin. |
- |
||
|
Notifikasi tidak boleh terlambat atau tidak terkirim. |
- |
||
|
Pengguna tidak bisa mengajukan izin untuk tanggal yang tidak valid atau jenis izin yang tidak diizinkan oleh admin. |
- |
PASSED |
Note:
-
di web user belum bisa resubmit
-
izin digunakan, tersimpan hanya untuk yg sudah approved
-
Yang diresubmit tidak muncul di approver
📄 Feature: Requests
🎯 User Story: Sebagai admin, saya ingin dapat melihat / memonitor semua request dari karyawan di perusahaan saya sesuai peraturan yang berlaku, sehingga:
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat melihat daftar semua permintaan yang masuk dari karyawan. |
+ |
||
|
Setiap permintaan dalam daftar harus menampilkan informasi dasar seperti nama karyawan, jenis permintaan (cuti, izin, lembur), tanggal pengajuan, dan status saat ini. |
+ |
PASSED |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau melihat daftar permintaan. |
- |
||
|
Informasi yang ditampilkan di daftar permintaan tidak boleh tumpang tindih atau salah. |
- |
PASSED |
|
|
Sistem harus mencegah admin untuk menyetujui atau menolak permintaan yang sudah memiliki status final (misalnya, yang sudah disetujui atau ditolak). |
- |
||
|
Daftar permintaan tidak boleh gagal dimuat atau menampilkan pesan kesalahan saat filter atau pencarian diterapkan. |
- |
PASSED |
📄 Feature: Reimbursement
🎯 User Story: Sebagai admin, saya ingin dapat mengatur kebijakan reimbursement di perusahaan saya. Tujuannya agar saya bisa mendefinisikan jenis-jenis pengeluaran yang bisa diajukan, menetapkan batas maksimal, dan memastikan setiap pengajuan diproses sesuai dengan peraturan yang berlaku.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin yang memiliki permission dapat menambah, mengedit, dan menghapus jenis reimbursement (misalnya, Transportasi, Akomodasi, Konsumsi). |
+ |
PASSED |
|
|
Untuk setiap jenis reimbursement, admin dapat menetapkan aturan dan batasannya, seperti: batas per periode, per karyawan dan per jenis biaya. |
+ |
PASSED |
|
|
Kebijakan reimbursement dapat diatur agar berlaku untuk Karyawan yang ditetapkan oleh admin. |
+ |
PASSED |
|
|
Aturan dan batasan yang telah diatur harus secara otomatis diterapkan pada formulir pengajuan reimbursement karyawan. |
+ |
PASSED |
|
|
Setiap perubahan pada kebijakan harus tersimpan dengan riwayat audit yang jelas. |
+ |
PENDING |
|
|
Admin dengan permission yang tidak sesuai tidak bisa mengakses atau mengubah pengaturan reimbursement. |
- |
||
|
Sistem harus menolak jika ada upaya untuk menambah atau mengubah kebijakan dengan informasi wajib yang tidak terisi atau dengan nilai yang tidak valid (misalnya, batas maksimal berupa teks). |
- |
||
|
Sistem harus mencegah penghapusan reimbursement jika sudah ada pengajuan yang sedang diproses atau sudah disetujui di bawah jenis tersebut. |
- |
||
|
Aturan dan batasan yang ditetapkan tidak boleh tumpang tindih atau menghasilkan kesalahan perhitungan pada pengajuan. |
- |
||
|
Sistem harus memberikan peringatan jika ada upaya untuk menyimpan aturan yang logikanya salah (misalnya, batas per hari melebihi batas per karyawan). |
- |
Reimbursement Simulation
https://docs.google.com/spreadsheets/d/1klR_jbiTZk7W7puaVnuxpVQO-Hgrkb9eM1VC5kRflnc
📄 Feature: Cash Advance
🎯 User Story: Sebagai admin, saya ingin dapat mengatur kebijakan cash advance di perusahaan saya sesuai peraturan yang berlaku.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Admin bisa menambahkan policy baru. |
+ |
PASSED |
|
|
Admin bisa mengubah nama, deskripsi, atau aturan pada policy yang sudah ada. |
+ |
PASSED |
|
|
Admin dapat melihat semua policy yang tersedia dan juga menghapus policy. |
+ |
PASSED |
|
|
Admin tidak bisa membuat policy dengan nama kosong. |
- |
PASSED |
|
|
Admin tidak bisa membuat dua policy dengan nama duplikat. |
- |
FAILED |
⚙️ Platform: Mobile & Web User
📄 Feature: Verify Invitation from Admin
🎯 User Story: Sebagai employee Saya ingin dapat memverifikasi alamat email saya melalui undangan yang dikirimkan oleh admin. Tujuannya agar saya bisa mengaktifkan akun saya dan masuk ke aplikasi sebagai pengguna yang sah.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Pengguna menerima email undangan dari sistem. |
+ |
||
|
Email undangan harus berisi tautan verifikasi yang valid. |
+ |
||
|
Ketika pengguna mengklik tautan verifikasi, sistem akan mengarahkan pengguna ke halaman di mana mereka dapat membuat kata sandi untuk akun mereka. |
+ |
||
|
Setelah kata sandi dibuat dan dikonfirmasi, pengguna menerima notifikasi bahwa aktivasi akun berhasil. |
+ |
||
|
Pengguna dapat menggunakan email dan kata sandi baru untuk login ke aplikasi. |
+ |
||
|
Tautan verifikasi tidak boleh berfungsi jika sudah kedaluwarsa atau sudah pernah digunakan sebelumnya. |
- |
||
|
Sistem harus menolak jika pengguna mencoba membuat kata sandi yang tidak memenuhi kriteria keamanan (misalnya, terlalu pendek atau tidak mengandung kombinasi karakter yang disyaratkan). |
- |
||
|
Sistem harus menolak jika pengguna mencoba masuk dengan kredensial yang tidak valid sebelum akun diaktifkan. |
- |
||
|
Email verifikasi tidak boleh terkirim ke alamat email yang salah atau tidak terdaftar di sistem. |
- |
📄 Feature: Lupa password di mobile app
🎯 User Story: Sebagai employee Saya ingin reset password jika lupa sebelum login Sehingga bisa login dari intruksi yang dikirim ke email
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
Submit forgot password dengan email benar dikirim email untuk reset password. |
+ |
||
|
Submit forgot password dengan email SALAH, system tetap menunjukan message yang sama tetapi system tidak mengirim email. |
- |
📄 Feature: Dashboard
🎯 User Story: Sebagai employee di web dan mobile Saya ingin melihat pengumuman, bisa cekin, melihat kalender kerja, info tim saya, dan info cuti
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
User dapat melakukan dan melihat check-in/check-out, jika sudah check-in/check-out status akan berubah dan menampilkan jam check-in/check-out. |
+ |
PASSED |
|
|
User dapat melihat daftar anggota tim, data tim menampilkan nama, jabatan dan status kehadiran. |
+ |
PASSED |
|
|
User dapat melihat kalender event dan hari libur nasional/cuti bersama. |
+ |
PASSED |
|
|
User dapat melihat sisa kuota cuti yang tersedia. |
+ |
PASSED |
|
|
Jika belum check-in maka tidak bisa langsung check-out. |
- |
PASSED |
📄 Feature: Update Profile (Basic Info)
🎯 User Story: Sebagai employee Saya ingin mengedit data pribadi saya dan mengajukan perubahan kepada pihak yang berwenang,sehingga data saya tetap akurat dan valid setelah mendapat persetujuan.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
User bisa mengubah field tertentu dan mengirim pengajuan perubahan data. |
+ |
PASSED |
|
|
User dapat melihat daftar perubahan yang diajukan pada fitur request. |
+ |
PASSED |
|
|
User tidak bisa menyimpan perubahan langsung tanpa approval. |
- |
PASSED |
📄 Feature: Update Profile (Education & Experience)
🎯 User Story: Sebagai employee Saya ingin mengajukan pengisian dan perubahan data pendidikan dan pengalaman kerja agar bisa di-approve sama approver.
|
Acceptance Criteria |
+/- |
STATUS |
NOTE |
|
User dapat menambahkan formal education dan nonformal education. |
+ |
||
|
User dapat menambahkan work experience atau pekerjaan yang pernah dilakukan. |
+ |
||
|
User bisa mengedit data education yang sudah dimasukkan. |
+ |
||
|
Formal education yang di input tampil dalam daftar urut berdasarkan tahun terbaru. |
+ |
||
|
User wajib mengisi semua field yang dibutuhkan. |
- |
PASSED |
📄 Feature: Change Password
🎯 User Story: Sebagai employee Saya ingin mengubah password saya Sehingga saya dapat login dengan password baru saya.
✅ Positive Acceptance Criteria:
-
User dapat membuka halaman Change Password di aplikasi.
-
User memasukkan kata sandi lama dengan benar.
-
User memasukkan kata sandi baru sesuai aturan (misalnya minimal 8 karakter, ada huruf & angka).
-
User memasukkan konfirmasi sandi baru yang sama dengan sandi baru.
-
User klik tombol Buat Password Baru.
-
Sistem menampilkan pesan sukses dan password berhasil diperbarui.
-
Setelah logout, user dapat login kembali menggunakan password baru.
❌ Negative Acceptance Criteria:
-
User memasukkan kata sandi lama yang salah
-
User memasukkan kata sandi baru sama dengan kata sandi lama
-
User memasukkan konfirmasi sandi baru yang tidak sama dengan sandi baru.
-
User memasukkan kata sandi baru yang tidak sesuai aturan keamanan (terlalu pendek, hanya angka, dll).
-
User meninggalkan salah satu field kosong (sandi lama, sandi baru, atau konfirmasi).
📄 Feature: Telegram Notification
🎯 User Story: Sebagai employee Saya ingin menghubungkan akun saya dengan Telegram bot Sehingga saya dapat menerima notifikasi aplikasi langsung di Telegram.
✅ Positive Acceptance Criteria:
-
User dapat membuka halaman Telegram Notification di aplikasi.
-
User klik tombol Buka Telegram Bot, diarahkan ke Telegram bot.
-
Telegram bot muncul dan user klik/ketik /start untuk mulai.
-
User ketik /register email, untuk registrasi email ke bot dengan email yang terdaftar di peoplehub
-
Registrasi berhasil dan user akan menerima kode OTP, baik pada in mail email, atau notifikasi aplikasi
-
User memasukan token otorisasi dan klik tombol verifikasi
-
User berhasil menghubungkan Telegram dengan aplikasi
-
User klik tombol putuskan koneksi untuk memutuskan koneksi
-
User dapat menghubungkan akun telegram nya agar bisa dikirim notifikasi ketika ada event tertentu seperti approval disetujui/ditolak
-
User dapat melepaskan akun telegram agar tidak dikirim notifikasi ke telegram
❌ Negative Acceptance Criteria:
-
User mengetik perintah selain /register email.
-
User menggunakan email yang tidak terdaftar di PeopleHub saat /register
-
User tidak menerima kode OTP (karena email salah atau jaringan bermasalah).
-
User memasukkan OTP/token yang salah atau expired.
-
User klik Putuskan Koneksi, tetapi sistem gagal melakukan disconnect
📄 Feature: Employee List
🎯 User Story: Sebagai employee Saya ingin melihat info employee lain yang ada di perusahaan saya.
✅ Positive Acceptance Criteria
-
Karyawan dapat mengakses halaman Employee List yang menampilkan daftar semua karyawan.
-
Setiap entri karyawan di dalam daftar harus menampilkan informasi dasar seperti nama, jabatan, dan departemen.
-
Terdapat kolom pencarian yang memungkinkan karyawan untuk mencari rekan kerja berdasarkan kriteria tertentu (misalnya, nama, jabatan, atau departemen).
-
Karyawan dapat mengklik nama atau foto profil karyawan lain untuk melihat detail informasi yang lebih lengkap (misalnya, email, nomor telepon, atau lokasi kantor).
-
Halaman ini harus menampilkan data yang akurat dan terkini sesuai dengan data master karyawan.
❌ Negative Acceptance Criteria
-
Karyawan tidak dapat mengedit atau menghapus data karyawan lain.
-
Data sensitif seperti gaji, informasi pribadi yang bersifat rahasia, atau data performa tidak boleh ditampilkan pada halaman ini.
-
Karyawan yang tidak memiliki akses atau permission tidak bisa melihat daftar ini.
📄 Feature: Org Chart
🎯 User Story: Sebagai employee Saya ingin melihat struktur organisasi di perusahaan saya.
✅ Positive Acceptance Criteria:
-
Karyawan dapat mengakses halaman Org Chart.
-
Tampilan Org Chart harus representatif dan mudah dipahami, idealnya dalam bentuk bagan visual atau pohon hierarki.
-
Bagan harus menampilkan nama karyawan, jabatan, dan hubungan pelaporan (misalnya, siapa yang melapor kepada siapa).
-
Struktur organisasi harus akurat dan terkini sesuai dengan data yang telah ditetapkan di fitur lain (misalnya, Job Position dan Employee List).
❌ Negative Acceptance Criteria:
-
User tidak dapat mengubah atau mengedit struktur organisasi. Tampilan ini hanya bersifat read-only.
-
Data sensitif seperti gaji atau informasi pribadi rahasia tidak boleh ditampilkan di Org Chart.
-
Karyawan hanya dapat melihat struktur yang relevan dengan mereka. Meskipun tidak ada larangan untuk melihat keseluruhan bagan, detail sensitif tetap harus dibatasi.
-
Jika ada data yang tidak terisi (misalnya, seorang karyawan belum memiliki atasan yang ditetapkan), sistem harus menanganinya dengan baik dan tidak menimbulkan error.
📄 Feature: Request (Basic Info)
🎯 User Story: Sebagai employee Saya ingin mengajukan pengisian dan perubahan data pribadi agar bisa di-approve sama approver.
✅ Positive Acceptance Criteria:
❌ Negative Acceptance Criteria:
📄 Feature: Request (Family)
🎯 User Story: Sebagai employee Saya ingin mengajukan pengisian dan perubahan data keluarga agar bisa di-approve sama approver.
📄 Feature: Request (Permit)
Note:
📄 Feature: Request (SPPD)
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan perjalanan dinas (SPPD) melalui portal web atau aplikasi mobile. Tujuannya agar saya bisa mengajukan permohonan dengan mudah, memiliki catatan yang jelas tentang status dan riwayatnya, serta selalu mendapatkan pembaruan status pengajuan di mana saja dan kapan saja.
✅ Positive Acceptance Criteria:
-
Pengajuan Perjalanan Dinas:
-
Pengguna dapat mengakses halaman pengajuan perjalanan dinas di portal web dan aplikasi mobile.
-
Formulir pengajuan harus konsisten di kedua platform dan meminta detail wajib seperti tanggal pergi, tanggal kembali, tujuan, dan alasan.
-
Pengguna dapat memilih tanggal di masa depan.
-
Setelah pengajuan dikirim, notifikasi sukses akan muncul dan statusnya berubah menjadi Pending.
-
Pemberitahuan & Status:
-
Pengguna dapat melihat riwayat semua pengajuan perjalanan dinas beserta statusnya (disetujui, ditolak, pending) di kedua platform.
-
Pengguna menerima notifikasi push (untuk mobile) ketika pengajuan disetujui atau ditolak.
-
Tampilan riwayat pengajuan SPPD harus konsisten di web dan mobile.
❌ Negative Acceptance Criteria:
-
Validasi Formulir:
-
Sistem harus mencegah pengajuan perjalanan dinas untuk tanggal di masa lalu atau tanggal yang tidak valid.
-
Sistem harus menolak pengajuan jika ada data wajib yang tidak terisi.
-
Performa & Stabilitas:
-
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan perjalanan dinas.
-
Notifikasi:
-
Notifikasi tidak boleh terlambat atau tidak terkirim.
-
Manajemen Data:
-
Pengguna tidak bisa mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak.
📄 Feature: Request (Time Off)
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan cuti melalui portal web atau aplikasi mobile dan memantau status pengajuan saya. Tujuannya agar saya bisa mengajukan cuti dengan mudah, memiliki informasi yang jelas mengenai sisa saldo cuti, dan mendapatkan pembaruan status pengajuan di mana saja dan kapan saja.
✅ Positive Acceptance Criteria:
-
Pengajuan Cuti:
-
Pengguna dapat mengakses halaman pengajuan cuti di portal web dan aplikasi mobile.
-
Formulir pengajuan harus konsisten di kedua platform dan meminta detail wajib seperti jenis cuti, tanggal mulai, tanggal selesai, dan alasan.
-
Pengguna dapat melihat sisa saldo cuti yang tersedia di kedua platform sebelum mengajukan cuti.
-
Setelah pengajuan dikirim, statusnya berubah menjadi Pending dan muncul dalam daftar riwayat pengajuan.
-
Pemberitahuan & Status:
-
Pengguna dapat melihat riwayat semua pengajuan cuti beserta statusnya (disetujui, ditolak, pending) di kedua platform.
-
Pengguna dapat melihat alur persetujuan untuk pengajuan cutinya.
-
Pengguna menerima notifikasi push (untuk mobile) dan/atau notifikasi di aplikasi ketika pengajuan cutinya disetujui atau ditolak.
-
Tampilan riwayat pengajuan cuti harus konsisten di web dan mobile.
❌ Negative Acceptance Criteria:
-
Validasi Formulir:
-
Sistem harus mencegah pengajuan cuti jika saldo tidak mencukupi.
-
Sistem harus menolak pengajuan cuti untuk tanggal di masa lalu atau tanggal yang tidak diizinkan oleh admin.
-
Pengguna tidak bisa mengajukan cuti untuk jenis cuti yang tidak dialokasikan untuknya.
-
Performa & Stabilitas:
-
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan cuti.
-
Notifikasi:
-
Notifikasi tidak boleh terlambat atau tidak terkirim.
-
Manajemen Data:
-
Pengguna tidak bisa mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak.
📄 Feature: Request (Reimbursement)
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan reimbursement melalui portal web atau aplikasi mobile sesuai dengan kebijakan yang diatur oleh admin. Tujuannya agar saya bisa mendapatkan penggantian biaya dengan mudah dan memantau proses persetujuannya hingga selesai.
2. Acceptance Criteria
✅ Positive Acceptance Criteria:
-
Pengajuan Reimbursement:
-
Pengguna dapat mengakses fitur pengajuan reimbursement di portal web dan aplikasi mobile.
-
Formulir pengajuan harus konsisten di kedua platform dan meminta detail wajib seperti jenis pengeluaran, deskripsi, tanggal, dan jumlah.
-
Pengguna dapat melihat sisa saldo dari setiap jenis reimbursement yang dapat diajukan di kedua platform.
-
Setelah pengajuan dikirim, notifikasi sukses akan muncul dan statusnya berubah menjadi Pending.
-
Manajemen Lampiran:
-
Pengguna dapat mengunggah lampiran sebagai bukti pengeluaran di kedua platform, dengan ukuran file maksimal 2 MB.
-
Pemberitahuan & Status:
-
Sistem harus menampilkan alur persetujuan yang jelas (nama-nama atasan yang akan menyetujui) di kedua platform.
-
Pengguna menerima notifikasi push (untuk mobile) dan/atau notifikasi di aplikasi ketika pengajuan reimbursement-nya disetujui atau ditolak.
-
Tampilan riwayat pengajuan reimbursement harus konsisten di web dan mobile.
❌ Negative Acceptance Criteria:
-
Validasi & Batasan:
-
Sistem harus mencegah pengajuan jika total jumlah yang diajukan melebihi saldo yang tersedia.
-
Sistem harus menolak pengajuan jika ada field wajib yang tidak terisi.
-
Sistem harus menolak unggahan lampiran jika ukuran file melebihi 2 MB. PASSED
-
Konsistensi & Stabilitas:
-
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan reimbursement.
-
Notifikasi tidak boleh terlambat atau tidak terkirim.
-
Manajemen Data:
-
Pengguna tidak bisa mengajukan reimbursement untuk jenis pengeluaran yang tidak tersedia.
📄 Feature: Request (Cash Advance)
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan cash advance melalui portal web atau aplikasi mobile sesuai kebijakan perusahaan. Tujuannya agar saya bisa mendapatkan uang muka untuk keperluan kerja dan memantau proses persetujuannya dengan mudah, di mana pun dan kapan pun.
✅ Positive Acceptance Criteria:
-
Pengajuan Cash Advance:
-
Pengguna dapat mengakses fitur pengajuan cash advance di portal web dan aplikasi mobile.
-
Formulir pengajuan harus konsisten di kedua platform dan meminta detail wajib seperti Jenis Kegiatan, Tanggal, Keperluan Pengajuan, Tujuan, dan Catatan.
-
Pengguna dapat menambahkan detail pengeluaran (Nama, Deskripsi, Kategori, Jumlah, dan Qty).
-
Pengguna dapat mengunggah lampiran dengan ukuran file maksimal 2 MB.
-
Setelah pengajuan dikirim, notifikasi sukses akan muncul dan statusnya berubah menjadi Pending.
-
Pemberitahuan & Status:
-
Sistem harus menampilkan alur persetujuan yang jelas (nama-nama atasan yang akan menyetujui) di kedua platform.
-
Pengguna menerima notifikasi push (untuk mobile) dan/atau notifikasi di aplikasi ketika pengajuan cash advance-nya disetujui atau ditolak.
-
Tampilan riwayat pengajuan cash advance harus konsisten di web dan mobile.
❌ Negative Acceptance Criteria:
-
Validasi & Batasan:
-
Sistem harus mencegah pengajuan jika ada field wajib yang tidak terisi.
-
Sistem harus menolak pengajuan jika total jumlah yang diajukan melebihi batas yang telah ditentukan oleh admin.
-
Sistem harus menolak unggahan lampiran jika ukuran file melebihi 2 MB.
-
Konsistensi & Stabilitas:
-
Aplikasi mobile tidak boleh gagal atau mengalami crash saat pengguna mencoba mengajukan cash advance.
-
Tampilan harus responsif dan semua elemen formulir harus dapat diakses dengan mudah di layar sentuh.
-
Notifikasi:
-
Notifikasi tidak boleh terlambat atau tidak terkirim.
-
Manajemen Data:
-
Pengguna tidak bisa mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak.
📄 Feature: Request (Attendance)
🎯 User Story: Sebagai employee Saya ingin dapat mengajukan perbaikan absensi dengan mudah melalui aplikasi mobile jika saya lupa check-in atau check-out. Tujuannya agar saya bisa memperbaiki data kehadiran saya kapan saja dan di mana saja, dan riwayat kehadiran saya tetap akurat.
✅ Positive Acceptance Criteria:
-
Pengguna dapat mengakses halaman pengajuan absensi yang terlupa.
-
Formulir pengajuan harus meminta detail wajib, seperti tanggal, jam check-in, jam check-out, dan alasan lupa absensi.
-
Pengguna hanya bisa mengajukan absensi untuk tanggal yang berada dalam batas backdate yang telah diatur oleh admin.
-
Setelah pengajuan dikirim, notifikasi sukses akan muncul.
-
Pengguna dapat melihat status pengajuan (pending, disetujui, ditolak) dalam daftar riwayat.
- Request date max 1 hari (configurable by admin)
- Jika user belum cekin di tanggal yg direquest, maka harus cekin & cekout wajib diisi
- Jika user sudah cekin di tanggal yg direquest, maka yang wajib diisi hanya cekout
❌ Negative Acceptance Criteria:
-
Sistem harus mencegah pengajuan jika tanggal yang dipilih melebihi batas backdate yang telah diatur admin.
-
Sistem harus menolak pengajuan jika ada field wajib yang tidak terisi (misalnya, alasan atau jam).
-
User tidak bisa mengajukan absensi yang tumpang tindih dengan data absensi yang sudah ada atau dengan jenis cuti/izin lainnya.
-
User tidak dapat mengubah atau menghapus pengajuan yang sudah disetujui atau ditolak.
📄 Feature: Request (Change Shift)
🎯 User Story: Sebagai employee Saya ingin mengajukan perubahan shift di masa datang sesuai kebijakan yang diatur oleh admin perusahaan.
✅ Positive Acceptance Criteria:
-
User dapat mengajukan dan memilih shift pengganti.
-
User dapat mengunggah dokumen pendukung untuk shift pengganti dengan maksimal 2MB.
❌ Negative Acceptance Criteria:
-
User mengupload file yang ukurannya tidak semua dengan ketentuan.
-
User tidak dapat memilih tanggal pergantian shift untuk hari yang sudah lewat.
📄 Feature: Notification
🎯 User Story: Sebagai employee saya ingin menerima notifikasi melalui berbagai saluran (di aplikasi, email, FCM, dan Telegram). Tujuannya agar saya tidak ketinggalan informasi penting, seperti status pengajuan saya atau pengumuman perusahaan, di mana pun dan kapan pun.
✅ Positive Acceptance Criteria:
-
Pengguna menerima notifikasi di dalam aplikasi untuk setiap perubahan status pada pengajuan yang ia buat (misalnya, pengajuan cuti disetujui).
-
Pengguna menerima notifikasi melalui email untuk setiap perubahan status pada pengajuan.
-
Pengguna yang mengaktifkan FCM (push notification) di ponselnya menerima notifikasi pop-up saat ada pembaruan penting.
-
Pengguna yang telah mengintegrasikan akun Telegram-nya menerima notifikasi melalui Telegram.
-
Notifikasi harus terkirim secara real-time atau hampir real-time setelah suatu peristiwa terjadi.
-
Isi notifikasi harus jelas dan ringkas, mencakup informasi penting seperti jenis permintaan, status, dan nama approver (jika ada).
❌ Negative Acceptance Criteria:
-
Notifikasi tidak boleh gagal terkirim di salah satu atau semua saluran.
-
Notifikasi tidak boleh terlambat secara signifikan.
-
Notifikasi tidak boleh menampilkan informasi yang salah atau tumpang tindih.
-
Pengguna yang menonaktifkan satu jenis notifikasi (misalnya, email) tidak seharusnya menerima notifikasi melalui saluran tersebut, tetapi tetap menerima di saluran lain yang aktif.
-
Notifikasi tidak boleh terkirim ke pengguna yang salah.
📄 Feature: Auto-update mobile app
🎯 User Story: Sebagai employee Saya ingin aplikasi mobile yang saya gunakan mendapatkan pembaruan secara otomatis jika ada rilis versi terbaru. Tujuannya agar saya selalu menggunakan fitur-fitur terbaru dan perbaikan yang ada tanpa harus repot memperbarui secara manual.
✅ Positive Acceptance Criteria:
-
Ketika ada rilis aplikasi versi terbaru, pengguna yang mengaktifkan fitur pembaruan otomatis di perangkatnya akan mendapatkan pembaruan tanpa perlu tindakan manual.
-
Proses pembaruan harus berjalan di latar belakang (jika diizinkan oleh sistem operasi) dan tidak mengganggu penggunaan aplikasi saat itu.
-
Setelah pembaruan selesai, aplikasi harus berjalan normal dan menampilkan fitur-fitur baru atau perbaikan yang relevan.
-
Pengguna harus dapat melihat informasi versi terbaru di halaman pengaturan aplikasi.
❌ Negative Acceptance Criteria:
-
Aplikasi tidak boleh mengalami crash atau gagal berfungsi selama atau setelah proses pembaruan otomatis.
-
Proses pembaruan tidak boleh menguras baterai atau kuota data pengguna secara berlebihan.
-
Jika pengguna tidak mengaktifkan pembaruan otomatis, aplikasi harus memberikan notifikasi atau pesan yang jelas tentang ketersediaan pembaruan terbaru.
-
Aplikasi tidak boleh secara otomatis memperbarui dirinya jika pengguna hanya terhubung ke jaringan seluler (kecuali diizinkan oleh preferensi pengguna).
⚙️ Platform: Background/Scheduler
📄 Feature: Attendance
🎯 User Story: Sebagai admin Saya ingin sistem secara otomatis men-generate perhitungan kehadiran dan menyimpannya di database. Tujuannya agar data kehadiran dapat diakses dengan cepat dan efisien tanpa membebani server, serta memberikan laporan yang akurat dan up-to-date setiap harinya.
✅ Positive Acceptance Criteria:
-
Proses penjadwalan (scheduler) harus dapat berjalan secara otomatis sesuai jadwal yang telah ditentukan (misalnya, setiap hari pukul 00:00).
-
Sistem harus dapat menghitung data kehadiran untuk setiap karyawan, termasuk status seperti Absen, Terlambat, Cuti, Lembur, Izin, dan lainnya, berdasarkan data check-in/check-out dan kebijakan yang berlaku.
-
Hasil perhitungan harus disimpan dalam tabel terpisah yang dioptimalkan untuk performa.
-
Data yang ditampilkan pada dashboard Attendance Log harus mengambil data dari tabel yang telah digenerate oleh scheduler ini.
-
Jika ada data backdate yang diajukan atau disetujui, scheduler harus dapat memproses ulang data untuk tanggal yang relevan.
❌ Negative Acceptance Criteria:
-
Proses scheduler tidak boleh gagal atau berhenti tanpa adanya notifikasi atau log error.
-
Data yang digenerate oleh scheduler tidak boleh salah atau berbeda dari perhitungan manual.
-
Jika proses perhitungan berjalan, kinerja sistem tidak boleh menurun secara signifikan.
-
Scheduler tidak boleh memproses ulang seluruh data jika hanya ada perubahan pada satu atau dua data karyawan.
-
Jika ada kesalahan dalam proses, sistem harus memiliki mekanisme retry atau pemulihan otomatis.
✅ Positive Acceptance Criteria:
-
Sistem secara otomatis akan melacak batas waktu penyelesaian untuk setiap pengajuan cash advance yang telah disetujui.
-
Sistem akan mengirimkan notifikasi pengingat kepada karyawan yang bersangkutan pada waktu yang telah ditentukan (misalnya, 3 hari sebelum batas waktu).
-
Notifikasi pengingat harus dikirimkan melalui saluran yang telah dikonfigurasi (misalnya, di dalam aplikasi, email, atau FCM).
-
Isi notifikasi harus jelas dan informatif, mencakup nama pengajuan cash advance, tanggal jatuh tempo penyelesaian, dan tautan untuk melakukan settlement.
-
Jika karyawan sudah melakukan settlement, notifikasi pengingat ini tidak boleh lagi dikirimkan.
❌ Negative Acceptance Criteria:
-
Notifikasi pengingat tidak boleh gagal terkirim atau terlambat.
-
Sistem tidak boleh mengirimkan pengingat kepada karyawan yang sudah menyelesaikan cash advance-nya.
-
Notifikasi pengingat tidak boleh menampilkan informasi yang salah mengenai batas waktu atau pengajuan.
-
Sistem tidak boleh berhenti mengirimkan pengingat jika karyawan terus mengabaikan notifikasi sampai batas waktu terlampaui.
📄 Feature: Cash Advance Reminder
🎯 User Story: Sebagai employee Saya ingin menerima pengingat (reminder) jika saya belum melakukan penyelesaian (settlement) untuk cash advance yang saya ajukan, sesuai dengan waktu yang ditentukan oleh sistem. Tujuannya agar saya tidak lupa dan terhindar dari sanksi atau surat peringatan.
⚙️ Non-functional
📄 Feature: Checkin & checkout tps
🎯 User Story: Sebagai user Saya ingin bisa checkin dan checkout dengan cepat meskipun dalam kondisi banyak user berbarengan sehingga proses cekin lancar dan tidak menunggu lama
⚙️ New User/Company Setup Sequence
-
Self-register user (as admin)
-
Verify email
-
Activate user
-
Auto seed per-company default data (once)
-
Login to web admin
-
Setup roles & permissions note: bisa ngga tidak wajib dipilih user?
-
Setup head office note: err Company not found ~ no emp info?
-
Setup branch (opt, tergantung ada/tidak branch)
-
Setup satellite office (opt, tergantung ada/tidak)
-
Setup employment status
-
Setup grade & class
-
Setup job position
-
Setup job level
-
Setup holiday
-
Setup schedule
-
Break
-
Shift
-
Schedule
-
Setup employee_id
-
Insert add user/employee
-
Setup organization
-
Setup approval
-
Setup announcement
-
Setup project
Note: Sangat disarankan untuk setup new company sesuai urutan agar tidak bolak-balik karena memerlukan data di menu sebelumnya