Employees (Karyawan)
| Code | SET-EMP |
| Module | Settings |
| Type | Master data |
| Status | Implemented |
| Priority | P0 — MVP |
| Process | Setup tenant |
| API | [URL Postman] |
1. Overview
Karyawan adalah data orang yang bekerja di tenant dan ditugaskan ke satu atau lebih toko. Karyawan punya kode (dibuat BE), profil (nama, email, telepon, jenis kelamin), status aktif, dan daftar toko penugasan. Karyawan terhubung ke sebuah entitas. Bila entitas yang sama juga punya akun pengguna, karyawan itu bisa login dan bertindak sebagai dirinya, misalnya sebagai PIC Pesanan Pembelian.
Karyawan bisa dibuat dari awal (entitas baru dibuat otomatis) atau dari entitas yang sudah ada, misalnya dari pengguna yang belum tercatat sebagai karyawan.
Hasil yang diharapkan: tenant tahu siapa bekerja di toko mana, dan data karyawan bisa dipakai sebagai penanggung jawab di transaksi.
2. Problem
- Transaksi seperti PO butuh penanggung jawab yang jelas dan terbatas pada karyawan toko terkait.
- Karyawan sering berpindah atau merangkap di beberapa cabang.
- Karyawan yang sudah keluar tidak boleh dipilih lagi, tetapi riwayatnya harus tetap ada.
3. Goals & Non-goals
Goals
- Admin bisa mendaftarkan karyawan dan menugaskannya ke toko. Indikator: karyawan muncul di pilihan penanggung jawab transaksi toko tersebut.
- Tidak ada duplikasi identitas. Indikator: karyawan bisa dibuat dari entitas yang sudah ada.
- Karyawan nonaktif bisa dibedakan. Indikator: status tampil di daftar dan di combobox pemilihan.
Non-goals
- Jabatan, gaji, jadwal kerja, dan absensi
- Hak akses (diatur lewat Pengguna dan Peran)
- Riwayat mutasi antar toko (selain log aktivitas)
4. User Scenarios
| Role | Scenario |
|---|---|
| Owner | Mendaftarkan kasir baru dan menugaskannya ke dua cabang |
| Admin | Menjadikan pengguna yang sudah ada sebagai karyawan tanpa mengetik ulang nama dan email |
| Kepala Toko | Memindahkan karyawan dari cabang A ke cabang B |
| Owner | Menonaktifkan karyawan yang sudah keluar |
5. User Flow
-
Pilih sumber — Dialog muncul saat membuka Tambah Karyawan:
- Buat dari Awal: formulir kosong.
- Buat dari Entitas: tabel entitas yang belum punya data karyawan (bisa dicari dan diurutkan, 10 per halaman). Nama lengkap dan email diisi otomatis dari entitas terpilih.
Tombol Selanjutnya aktif setelah sumber dipilih (dan entitas dipilih bila sumbernya entitas). Tombol Kembali mengarah ke daftar karyawan.
-
Profil — Status (Aktif / Tidak Aktif, wajib), nama lengkap, jenis kelamin (Laki-laki / Perempuan), email, dan nomor telepon; semuanya wajib.
-
Toko — Pilih satu atau lebih toko dari daftar semua toko (kartu dengan checkbox).
-
Tinjauan — Ringkasan beserta error BE bila ada.
-
Simpan — Bila sumbernya entitas, dikirim ke endpoint
by-partydenganparty_id. -
Tersimpan — Toast sukses, kembali ke daftar karyawan.
-
Detail / Ubah — Tab Profil menampilkan kode karyawan (read-only) dan profil. Tab Toko menampilkan toko penugasan. Kedua tab disimpan terpisah.
Alternative paths
- Tinggalkan wizard tanpa simpan — muncul konfirmasi perubahan belum disimpan.
- Hapus karyawan — hanya dari daftar (satuan atau massal), setelah konfirmasi.
6. User Stories
Prioritas: P0 wajib untuk rilis, P1 penting, P2 kalau sempat.
US-01 — Membuat karyawan dari awal (P0)
Sebagai owner, saya ingin mendaftarkan karyawan baru, agar bisa ditugaskan ke toko.
| ID | Kriteria penerimaan |
|---|---|
| AC-01.1 | Membuka Tambah Karyawan menampilkan dialog pilihan sumber; memilih “Buat dari Awal” membuka wizard Profil → Toko → Tinjauan. |
| AC-01.2 | Status, nama lengkap, jenis kelamin, email (format valid), dan telepon wajib diisi. |
| AC-01.3 | Minimal satu toko wajib dipilih. |
| AC-01.4 | Setelah berhasil, toast sukses tampil dan pengguna diarahkan ke daftar karyawan. |
| AC-01.5 | Error BE tampil di langkah Tinjauan dan pada field terkait. |
US-02 — Membuat karyawan dari entitas (P1)
Sebagai admin, saya ingin membuat karyawan dari entitas yang sudah ada, agar tidak terjadi duplikasi identitas.
| ID | Kriteria penerimaan |
|---|---|
| AC-02.1 | Tabel entitas hanya menampilkan entitas yang belum punya data karyawan. |
| AC-02.2 | Setelah entitas dipilih dan klik Selanjutnya, nama lengkap dan email terisi dari entitas. |
| AC-02.3 | Data dikirim dengan party_id entitas terpilih; tidak ada entitas baru yang dibuat. |
US-03 — Mengubah profil karyawan (P0)
Sebagai admin, saya ingin memperbarui profil dan status karyawan, agar data tetap akurat.
| ID | Kriteria penerimaan |
|---|---|
| AC-03.1 | Tombol Ubah Data hanya tampil untuk pengguna dengan izin update. |
| AC-03.2 | Kode karyawan tampil tetapi tidak bisa diubah. |
| AC-03.3 | Validasi sama dengan pembuatan (AC-01.2); tombol simpan aktif hanya jika ada perubahan. |
US-04 — Mengubah penugasan toko (P0)
Sebagai kepala toko, saya ingin mengubah toko penugasan karyawan, agar sesuai tempat kerjanya.
| ID | Kriteria penerimaan |
|---|---|
| AC-04.1 | Tab Toko di mode lihat hanya menampilkan toko penugasan; di mode ubah menampilkan semua toko dengan checkbox. |
| AC-04.2 | Minimal satu toko harus tetap terpilih. |
| AC-04.3 | Daftar toko penugasan diganti seluruhnya dengan pilihan baru saat disimpan. |
US-05 — Daftar dan filter karyawan (P0)
Sebagai owner, saya ingin melihat dan menyaring karyawan, agar mudah menemukan karyawan tertentu.
| ID | Kriteria penerimaan |
|---|---|
| AC-05.1 | Kolom: kode, nama lengkap, jenis kelamin, toko, sebagai pengguna (email, tautan ke detail pengguna), sebagai pemasok (kode, tautan ke detail pemasok), dan status. |
| AC-05.2 | Pencarian kata kunci; filter lanjutan jenis kelamin dan status; paginasi; urutan default nama A–Z. |
| AC-05.3 | Aksi baris: Lihat, Ubah, Hapus sesuai izin; hapus massal dari baris terpilih. |
US-06 — Menghapus karyawan (P1)
Sebagai owner, saya ingin menghapus karyawan yang salah dibuat.
| ID | Kriteria penerimaan |
|---|---|
| AC-06.1 | Hapus satuan dan massal memerlukan konfirmasi dan izin delete. |
| AC-06.2 | Bila BE menolak, pesan error tampil sebagai toast. |
US-07 — Riwayat aktivitas (P2)
Sebagai auditor, saya ingin melihat log aktivitas karyawan.
| ID | Kriteria penerimaan |
|---|---|
| AC-07.1 | Log tersedia untuk semua karyawan (di daftar) dan per karyawan (di detail), dengan filter event, pelaku, dan rentang tanggal. |
7. Document Structure
Header (Profil)
| Field | Required | Default | Notes |
|---|---|---|---|
| Kode | Otomatis | Dibuat BE | Read-only |
Status (is_active) | Ya | Belum dipilih (buat) | Aktif / Tidak Aktif |
| Nama Lengkap | Ya | Dari entitas (jika sumber entitas) | Disimpan di entitas |
| Jenis Kelamin | Ya | — | male / female |
| Ya | Dari entitas (jika sumber entitas) | Format email valid | |
| Nomor Telepon | Ya | — | Teks bebas |
Lines (Toko penugasan)
| Field | Required | Default | Notes |
|---|---|---|---|
| Toko | Ya, minimal 1 | — | Dikirim sebagai array id toko (stores: string[]) |
8. Status Lifecycle
| Status | Label UI | Meaning | Editable | Next status |
|---|---|---|---|---|
is_active: true | Aktif | Karyawan bekerja; bisa dipilih di transaksi | Ya | Tidak Aktif, dihapus |
is_active: false | Tidak Aktif | Karyawan tidak bekerja; ditandai di combobox pemilihan | Ya | Aktif, dihapus |
9. Permissions & Actions
Permissions
| Action | Permission | Syarat tambahan |
|---|---|---|
| Lihat daftar dan log semua karyawan | settings:employee:list:any | — |
| Lihat detail karyawan | settings:employee:view:any | — |
| Buat karyawan | settings:employee:create:any | — |
| Ubah profil / toko | settings:employee:update:any | — |
| Hapus karyawan | settings:employee:delete:any | — |
FE menyembunyikan aksi yang tidak diizinkan; BE tetap menolaknya.
10. Business Rules
Aturan bisnis adalah ketentuan yang berlaku di semua layar dan semua aksi, siapa pun yang melakukannya. FE memakainya sebagai validasi di form, BE memakainya sebagai sumber kebenaran; jika keduanya berbeda, perilaku BE yang dianggap benar dan FE menyesuaikan.
- BR-01 Kode karyawan dibuat oleh BE dan tidak bisa diubah.
- BR-02 Status, nama lengkap, jenis kelamin, email, dan telepon wajib diisi.
- BR-03 Karyawan wajib ditugaskan ke minimal satu toko.
- BR-04 Satu entitas maksimal punya satu data karyawan; membuat dari entitas hanya bisa memakai entitas yang belum punya karyawan.
- BR-05 Karyawan hanya bisa dipilih sebagai penanggung jawab transaksi pada toko tempat ia ditugaskan.
- BR-06 Setiap perubahan dicatat di log aktivitas.
11. Edge Cases
Edge case adalah kondisi yang jarang terjadi tetapi pasti muncul di operasional nyata. Perilaku yang diharapkan ditetapkan di sini agar tidak diputuskan sendiri-sendiri saat implementasi.
| ID | Case | Expected behavior |
|---|---|---|
| EC-01 | Karyawan dibuat dari entitas lalu nama/email diubah di wizard | Nilai baru dikirim bersama party_id; apakah data entitas ikut diperbarui ditentukan BE |
| EC-02 | Email karyawan sama dengan email entitas lain | Ditentukan BE (validasi unik); error tampil pada field email |
| EC-03 | Karyawan dicabut dari toko tempat ia menjadi PIC PO | PO yang sudah ada tetap menyimpan PIC tersebut; ia tidak lagi muncul di pilihan PIC toko itu |
| EC-04 | Karyawan dinonaktifkan | Tetap tampil di pilihan dengan penanda status; perilaku terhadap transaksi berjalan ditentukan BE |
| EC-05 | Menghapus karyawan yang menjadi PIC transaksi | Ditentukan BE; bila ditolak, pesan error tampil sebagai toast |
| EC-06 | Toko ditampilkan tanpa alamat pada pilihan toko | Alamat toko belum dikirim BE; placeholder ”-” ditampilkan |
| EC-07 | Tidak ada entitas tanpa karyawan saat memilih “Dari Entitas” | Tabel kosong; pengguna bisa kembali memilih “Dari Awal” |
12. API Contract
| Action | Method | Endpoint | Ref |
|---|---|---|---|
| Daftar karyawan (paginasi, cari, filter) | GET | /api/employees/paginate | US-05 |
| Daftar karyawan (cursor) | GET | /api/employees/cursor | — |
| Detail karyawan | GET | /api/employees/:id | US-03 |
| Buat karyawan dari awal | POST | /api/employees | US-01 |
| Buat karyawan dari entitas | POST | /api/employees/by-party | US-02 |
| Ubah profil karyawan | PUT | /api/employees/:id | US-03 |
| Daftar toko penugasan | GET | /api/employees/:id/stores | US-04 |
| Ubah toko penugasan | POST | /api/employees/:id/stores | US-04 |
| Hapus karyawan | DELETE | /api/employees/:id | US-06 |
| Hapus karyawan massal | DELETE | /api/employees/bulk | US-06 |
| Log aktivitas semua karyawan | GET | /api/employees/activity-logs/cursor | US-07 |
| Log aktivitas satu karyawan | GET | /api/employees/:id/activity-logs/cursor | US-07 |
Entitas tanpa karyawan (filter: doesnt_have=employee) | GET | /api/parties/paginate | US-02 |
| Semua toko (pilihan penugasan) | GET | /api/stores?is_with_address=true | US-04 |
13. Dependencies
PRD terkait
- Entities — identitas karyawan dan sinkronisasi dengan pengguna/pemasok.
- Stores — toko penugasan.
- Users — karyawan yang juga pengguna bisa login dan bertindak sebagai PIC.
- Purchase Order — penanggung jawab dipilih dari karyawan toko.
- Activity Logs — sumber log aktivitas.
Efek ke modul lain
- Pilihan penanggung jawab di transaksi diambil dari karyawan toko (
/api/stores/:id/employees/cursor).