USER JOURNEY & ROLE FLOW
eProcure — Alur pengguna per peran
Document Version: 1.9 Date: 19 September 2026 Status: As-built: Head buka paket + roster + desk rekanan; cut SPK; onboarding vendor terkunci Untuk: klien (bisnis, procurement, IT) — peta “siapa mengerjakan apa” Bacaan publik: /alur Acuan peran: seed RBAC Roles.php · menu frontend/src/config/navigation.ts GATE langkah: PHASE1_JOURNEY_CHECKLIST.md Skenario SIT (login vendor → SKT/TDR → SPK): SIT_VENDOR_SKT_SPK.md Aturan bisnis: BRD.md §1.5 (rencana pelaksanaan)
Dokumen ini mengisi kotak business process. BRD menjelaskan aturan; checklist untuk UAT. BPMN formal tidak dibuat kecuali kontrak klien memintanya.
Permission dicek di server. Menu mengikuti permission dan flag PR_AND_FINANCE_ENABLED (frontend/src/config/scope.ts).
0. Rencana pelaksanaan
Dua lapisan. Jangan campur saat demo / UAT.
| Lapisan | Isi | Status |
|---|---|---|
| A. Cut sekarang | Vendor (email → form lengkapi → desk → SKT) → Head buka paket + panitia → Maker isi → Checker → Ketua → Approver → publish → aanwijzing → penawaran → evaluasi → pemenang → SPK | As-built UI |
| B. Sisa di luar cut | Request User ke Head tetap di luar platform. PR in-app belum. | Kebijakan, bukan gap roster |
| C. Parkir | PO, delivery, invoice, pembayaran, kinerja | API ada, UI hide |
Cut UI (A): hide /purchase-requests, /purchase-orders, /invoices (+ setara vendor). Menu Kontrak / SPK tetap. Roster membatasi siapa yang mengedit / publish / unseal per tender.
SoD (A dan B): recommend ≠ approve award. Evaluator teknis ≠ skor harga. Auditor hanya baca. Vendor tidak lihat HPS.
1. Peta peran (wewenang seed)
Role = jenis izin. Bukan “hanya orang ini yang pegang tender X” — itu roster (B).
| Peran | Portal | Tupoksi cut A | Target B |
|---|---|---|---|
| Super Admin | Internal | User, akses, org | Sama |
| Staf Procurement | Internal | Vendor/SKT jika di-assign desk, isi paket sebagai Maker, aanwijzing, Q&A, opening, recommend, terbit SPK | Bisa jadi Maker / Checker / Ketua / Sekretaris per tender; PIC / Checker / Approver SKT per vendor |
| Head / Manager Procurement | Internal | Assign desk rekanan + buka paket + override ranking + audit | Head: buka paket + assign / ganti roster; boleh Approver publish |
| Pemilik Pekerjaan | Internal | Menu PR hide | Request ke Head di luar platform. Di sistem: pantau paket + cek teknis (assignment evaluator) |
| Evaluator Teknis | Internal | CoI + skor/cek dokumen teknis | Slot untuk pemilik pekerjaan yang di-assign ke paket itu |
| Evaluator Komersial | Internal | Skor harga setelah opening | Panitia harga; user hanya pantau |
| Approver Pemenang | Internal | Approve / tolak / return / delegate award | Bukan Approver publish (itu slot roster) |
| Auditor | Internal | Baca + jejak; tidak verify vendor | Sama |
| Admin Vendor | Vendor | Profil, tim, minat, bid, lihat SPK jika menang | Sama |
| User Vendor | Vendor | Sama minus kelola tim | Sama |
Finance dan Legal bukan role seed (BRD §8).
flowchart LR
subgraph Internal
SA[Super Admin]
PA[Procurement Admin]
PM[Procurement Manager]
RQ[Requester]
TE[Technical Evaluator]
CE[Commercial Evaluator]
AP[Approver]
AU[Auditor]
end
subgraph VendorPortal[Portal Vendor]
VA[Vendor Admin]
VU[Vendor User]
end
PA -->|isi paket sebagai Maker| VA
PM -->|buka paket + publish| VA
VA -->|bid| PA
PA -->|assign evaluator| TE
PA -->|assign evaluator| CE
PA -->|recommend| AP
AP -->|approve award| PA
PA -->|SPK| VAKeputusan terkunci (12 Sep 2026)
RBAC seed sudah cukup. Tidak menambah role Spatie. Maker / Checker / Ketua / Sekretaris / Approver publish = slot assignment per tender, diisi orang yang sudah punya role di atas.
- Head / Manager =
procurement_manager(boleh juga Super Admin) - Maker / Checker / Ketua / Sekretaris =
procurement_adminatauprocurement_manager - Approver publish =
approveratauprocurement_manager - Approver pemenang =
approver(sudah ada) - Evaluator teknis =
technical_evaluator(pemilik pekerjaan yang di-assign) - Evaluator komersial =
commercial_evaluator - Pemilik pekerjaan di luar platform =
requester; di dalam = pantau + slot teknis - Finance / Legal tetap bukan role seed
Desk rekanan (hingga TDR/SKT): Head menunjuk PIC + Checker berkas + Approver SKT. Boleh diganti; assignment lama tidak dihapus. Hanya PIC/Checker (atau Head) yang review + catatan revisi. Terbit SKT: Approver SKT, atau PIC jika Approver belum diisi, atau Head. SKT = Tanda Daftar Rekanan (TDR). EPROC_VENDOR_DESK.
Onboarding vendor (terkunci): daftar → verifikasi email (wajib sebelum tulis / kelola Tim pengguna; banner Wajib dibaca) → form lengkapi di /vendor/company (draft/revisi/ditolak, bukan Edit/Download) → submit. Komunikasi proses masuk lonceng navbar + email: submit SKT (ke Head/staf), tugas desk/roster, tolak dokumen/registrasi, ganti dokumen pasca-SKT, terbit SKT, BA aanwijzing/pembukaan, DQ, award. Identitas: nama, bentuk badan, skala, jenis kegiatan, alamat (negara–kode pos), PIC, NPWP/NIB. Keuangan: neraca & laba rugi 3 tahun + unggah scan/PDF/JPG/PNG. Bidang usaha = kategori dari katalog master. Catatan pemeriksa (revisi/tolak) tampil sebagai Wajib dibaca di dashboard dan profil. Beranda /vendor: kartu status + sisa masa SKT, ringkasan paket/SPK, deadline penawaran yang diikuti, linimasa registrasi & ikut tender. Setelah SKT: ganti scan/file di bagian Dokumen (Ganti dokumen / Ganti file); ganti nomor identitas lewat request panitia. Ganti file wajib yang sudah approved menunggu approve ulang sebelum ikut lelang. Navbar publik tanpa Minta demo.
Target B — slot operasional (roster sudah di kode)
Request tidak masuk lewat platform. Pemilik pekerjaan mengirim data kebutuhan ke Head / Manager Procurement di luar sistem (email, memo, rapat). Platform mulai saat Head membuka paket.
| Role operasional | Siapa | Tugas di platform |
|---|---|---|
| Pemilik pekerjaan | User divisi pengusul | Di luar: kirim kebutuhan ke Head. Di dalam: dipantau; di-assign cek teknis; tidak nilai harga |
| Head / Manager Procurement | Pintu masuk sistem | Terima request (luar), review HPS/metode/syarat, buka project, assign & ganti Maker / Checker / Ketua / Sekretaris / Approver publish |
| Maker | 1 orang aktif / tender | Susun paket, jadwal, dokumen; Limited/RFQ: usul vendor undangan |
| Checker | banyak, bisa diganti | Review kelengkapan paket; history wajib |
| Ketua panitia | 1 orang aktif / tender | Sahkan arah paket + usulan vendor; TTD BA (blok 1) |
| Sekretaris | 1 orang aktif / tender | Administrasi panitia; TTD BA (blok 2) |
| Approver publish | banyak, bisa diganti | Izinkan publish; ≠ Maker |
| Approver pemenang | role Approver (sudah ada) | Tetapkan pemenang; ≠ yang recommend |
| Evaluator teknis | pemilik pekerjaan yang di-assign | CoI + cek/skor teknis |
| Evaluator komersial | panitia | Skor harga setelah opening |
Pemilik pekerjaan --(luar platform)--> Head / Manager Procurement
│
▼
Buka project + assign roster
│
Maker · Checker · Ketua · Sekretaris · Approver publish
▼
Tender review → Approval → Publish
▼
Vendor ikut / tidak → aanwijzing → penawaran
▼
User cek teknis · Panitia cek harga
▼
Recommend → Approver pemenang → SPK
| Slot | Jumlah aktif | Ganti | History |
|---|---|---|---|
| Maker | 1 | Ya | Wajib |
| Checker | banyak | Ya | Wajib |
| Ketua panitia | 1 | Ya | Wajib |
| Sekretaris | 1 | Ya | Wajib |
| Approver publish | banyak | Ya | Wajib |
| Evaluator teknis | user pemilik pekerjaan | Ya | Wajib (pola evaluator sudah ada) |
Ganti petugas (pindah divisi): assignment lama ditutup (ended_at, alasan, pengganti) — tidak dihapus. Pengganti lanjut tender yang sama. Jejak aksi tetap atas nama pelaku saat itu. Checker: semua yang masih aktif wajib approve (urutan sebelum Approver). Approver publish: setelah gerbang Checker lulus, salah satu Approver aktif boleh bertindak.
SoD roster: Maker ≠ Checker aktif. Approver publish ≠ Maker. Recommend ≠ Approver pemenang.
Tupoksi paket (draft): Head buka paket di /tenders/new dan wajib tunjuk Maker / Checker / Ketua / Sekretaris / Approver publish di langkah itu. Kartu Roster di manage = ganti petugas atau isi paket lama. Maker update TOR/jadwal/dokumen. Checker / Ketua / Approver publish review saja (setujui atau kembalikan ke Maker dengan catatan). Bukan ubah TOR/jadwal. Publish hanya Head atau Approver publish. Approver tidak membatalkan tender. Jika Maker mengubah paket setelah ada approve, gerbang Checker→Ketua→Approver diulang. Jejak di kartu Roster + audit.
Urutan approve publish (wajib): Checker dulu, baru Ketua, baru Approver. Approver ditolak jika masih ada Checker aktif yang belum approve. Semua Checker aktif harus sudah approve (bukan Approver yang mendahului).
Dokumen finansial / angka penawaran (rahasia)
| Sebelum opening resmi | Setelah sampul dibuka | |
|---|---|---|
| Boleh buka sampul | Hanya Ketua panitia (atau petugas opening yang ditunjuk Head), di sesi pembukaan + BA | — |
| Boleh lihat angka / file harga | Tidak ada, kecuali hook darurat bids.view_commercial_preopen (bukan role default) | Ketua, Checker aktif, Approver pemenang, evaluator komersial, Head, Auditor |
| Tidak boleh | Pemilik pekerjaan, evaluator teknis, vendor lain, Maker (kecuali ia juga Ketua/petugas opening) | Pemilik pekerjaan & evaluator teknis tetap tidak melihat harga (hanya pantau proses) |
Vendor mengunci file penawaran dengan password. Sistem tidak membagikan password ke User. Buka sampul = aksi resmi bids.open + quorum, bukan “minta password ke vendor lewat chat”.
Blok tanda tangan BA (aanwijzing dan pembukaan — pola BRI; milik event itu, tidak dipinjam):
Tanda tangan panitia (wajib 3)
Ketua Sekretaris Divisi Pemilik Project
Tanda tangan PIC vendor peserta
PIC vendor A PIC vendor B …
| Blok | Siapa | Catatan |
|---|---|---|
| 1 | Ketua | Sahkan BA |
| 2 | Sekretaris | Sahkan BA |
| 3 | Divisi Pemilik Project | Saksi acara (pemilik pekerjaan / PIC divisinya). Bukan hak buka sampul harga |
| Bawah | PIC tiap vendor yang mengikuti tender / hadir di event itu | Nama dari daftar hadir event yang sama |
Scan BA bertanda tangan diunggah sebagai bukti event (ba_signed). Nama terang panitia terisi dari roster setelah slot Ketua / Sekretaris / Pemilik Project di-assign.
2. Alur ujung ke ujung
A. Yang dijalankan sekarang (as-built)
flowchart TD
V0[Vendor daftar + verifikasi email] --> V0b[Form lengkapi + dokumen]
V0b --> V1[Submit registrasi]
V1 --> D0[Head tunjuk PIC desk]
D0 --> P0[PIC / Checker review + catatan]
P0 -->|revisi| V0b
P0 --> V1b[Approver / PIC / Head terbit SKT]
T0[Head buka paket + tunjuk panitia] --> T0b[Maker isi TOR jadwal dokumen]
T0b --> T0c[Checker lalu Ketua lalu Approver]
T0c --> T1[Head atau Approver publish]
V1b --> T1
T1 --> V2[Vendor minat + aanwijzing]
T1 --> P1[Klarifikasi tertulis]
V2 --> V3[Submit 3 sampul]
V3 --> O1[Pembukaan + BA]
O1 --> E1[CoI + skor]
E1 --> R1[Recommend per lot]
R1 --> A1{Approver award}
A1 -->|approve| A2[Notifikasi menang / kalah]
A1 -->|reject / return| E1
A2 --> C0[Buat kontrak + terbit SPK]Tidak ada PR di UI. Tidak ada PO / invoice di UI.
B. Pra-publish (roster — as-built)
flowchart TD U[Pemilik pekerjaan kirim data ke Head] -->|luar platform| H[Head / Manager Procurement] H --> R[Review HPS metode syarat] R --> D[Buka paket di sistem + assign panitia] D --> M[Maker isi TOR] M --> V[Checker lalu Ketua lalu Approver] V --> P[Head atau Approver publish]
Langkah GATE (opening, CoI, checklist, SoD ranking): PHASE1_JOURNEY_CHECKLIST.md.
3. Journey Vendor Admin
Menu as-built: Dashboard, Perusahaan, Tim, Keamanan, Tender, Kontrak (SPK). PO / Invoice / Kinerja hide.
flowchart TD
A[Daftar akun] --> A1[Verifikasi email]
A1 --> B[Form lengkapi profil + dokumen]
B --> C[Submit]
C --> D0[Head tunjuk PIC]
D0 --> D{PIC / Checker review}
D -->|catatan revisi| B
D -->|wajib approved| E[Approver / PIC / Head terbit SKT]
E --> Warn[UI: masa berlaku + perpanjang sebelum habis]
Warn --> F[Katalog tender]
F --> G{SKT aktif?}
G -->|kadaluarsa / belum| H[Blok ikut lelang baru]
H --> H1[Perbarui dokumen → vendor pemilik Perpanjang SKT]
H1 --> Warn
G -->|ya| I[Minat]
I --> J[Aanwijzing: hadir dulu]
J --> K[Klarifikasi bila perlu]
K --> L[Unggah 3 sampul + receipt]
L --> M[Pembukaan]
M --> N{Menang?}
N -->|tidak| O[Hasil + catatan]
N -->|ya| P[Lihat SPK]Email: belum verifikasi → simpan/unggah/submit/ikut ditolak. Form: draft/revisi/ditolak langsung lengkapi. SKT: wajib aktif untuk ikut lelang; tidak ada SKT sementara. Banner H-90…H-7 + kadaluarsa di dashboard / perusahaan / tender. Perpanjangan = unggah dokumen lalu PIC/Approver SKT terbit. Bid yang sudah masuk sebelum kadaluarsa tetap diproses. Event: aanwijzing dan pembukaan punya hadir + BA sendiri. Preview PDF = iframe. Vendor User: sama tanpa kelola tim.
Parkir setelah P: PO, delivery, invoice, bayar, kinerja.
4. Journey Requester / pemilik pekerjaan
Request tidak dibuat di platform. Data kebutuhan dikirim ke Head / Manager Procurement di luar sistem.
As-built: menu PR hide. Cek teknis = akun Technical Evaluator yang di-assign.
flowchart TD A[Kirim kebutuhan ke Head] -->|luar platform| B[Head buka paket + assign] B --> C[Login: pantau paket] C --> D[Cek dokumen teknis setelah di-assign] D --> E[Harga hanya dipantau - tidak menilai]
5. Journey Procurement Admin
Menu as-built: Dashboard, Tender, Evaluasi, Award, Kontrak (SPK), Vendor, Antrian registrasi, Laporan, Pengaturan (bila ada izin).
Tidak punya awards.approve — recommend bukan self-approve.
flowchart TD A[Login] --> B0[Ditugaskan desk rekanan] B0 --> B[Review berkas + catatan / terbit SKT] B --> C[Ditugaskan Maker: isi TOR jadwal dokumen] C --> D[Menunggu Checker Ketua Approver] D --> E[Aanwijzing + Q&A] E --> F[Pembukaan + SAH] F --> G[Assign evaluator] G --> H[Recommend] H --> I[Menunggu Approver pemenang] I --> J[Terbit SPK]
Staf tidak membuka paket dan tidak menekan Publish. Admin menjadi Maker/Checker/Ketua hanya di tender yang di-assign.
6. Journey Procurement Manager
Sama operasional Admin (kecuali buka paket), plus override ranking dan audit. Tidak kelola user (itu Super Admin).
As-built: menunjuk dan mengganti Maker / Checker / Ketua / Approver publish; history wajib. Setelah gerbang approve, Head atau slot Approver publish menekan Publish.
flowchart TD
A[Login] --> B[Buka paket + assign panitia]
B --> C[Monitor tender dan vendor]
C --> D{Override ranking?}
D -->|ya| E[Override + alasan]
D -->|tidak| F[Pantau recommend]
E --> F
F --> G[Approver memutuskan award]
G --> H[Pantau terbit SPK]7. Journey Technical Evaluator
Menu: Dashboard, Tender, Evaluasi. Boleh baca /tenders/manage/{id} (paket, Q&A, SAH) tanpa aksi panitia. Tidak skor harga.
flowchart TD A[Ditugaskan ke tender/lot] --> B[Papan evaluasi] B --> C[CoI] C -->|conflict| D[Tidak nilai vendor terkait] C -->|clear| E[Checklist + skor teknis] E --> F[Selesai - menunggu recommend]
Target B: assignee = user pemilik pekerjaan paket itu.
8. Journey Commercial Evaluator
Skor komersial setelah opening. User pemilik pekerjaan tidak memakai peran ini.
flowchart TD A[Ditugaskan] --> B[Tunggu opening] B --> C[CoI] C --> D[Lihat harga] D --> E[Skor komersial] E --> F[Selesai]
9. Journey Approver / Management
Menu as-built: Dashboard, Tender, Award, Kontrak (SPK). Tidak membuka paket, tidak recommend.
SoD: tidak approve award yang ia recommend. Jika di-assign slot Approver publish, boleh menekan Publish setelah Checker → Ketua.
Target: slot Approver publish (multi, bisa diganti) terpisah dari Approver pemenang.
flowchart TD
A[Login] --> B[Antrian award]
B --> C{Keputusan lot}
C -->|approve| D[Pemenang + unsuccessful]
C -->|reject| E[Ranking terbuka]
C -->|return| F[Kembali evaluasi]
C -->|delegate| G[Penerima delegasi]
G --> C10. Journey Auditor
Menu: Dashboard, Tender, Vendor (baca), Kontrak (SPK), Laporan, Audit Trail. Tidak verify vendor.
flowchart TD A[Login] --> B[Laporan] B --> C[Tender / bid / award / SPK] C --> D[Audit trail]
11. Journey Super Administrator
Menu termasuk Pengaturan (user, peran, organisasi).
flowchart TD A[Login] --> B[Master organisasi] B --> C[User + role] C --> D[Kebijakan MFA / numbering]
12. Pasca-SPK (parkir)
API kontrak lanjut (jaminan, addendum, PO, invoice) ada. UI PO / invoice / kinerja hide. Jangan demo sebagai journey aktif.
SPK terbit → (nanti) jaminan → kontrak aktif → PO → delivery → invoice → bayar → kinerja
13. Menu vs peran (as-built cut A)
| Menu | SA | Proc Admin | Proc Mgr | Requester | Tech | Comm | Approver | Auditor | V.Admin | V.User |
|---|---|---|---|---|---|---|---|---|---|---|
| Dashboard | ya | ya | ya | ya | ya | ya | ya | ya | ya | ya |
| Purchase Request | hide | hide | hide | hide | hide | hide | ||||
| Tender | ya | ya | ya | lihat | lihat | lihat | lihat | lihat | portal | portal |
| Evaluasi | ya | ya | ya | skor T | skor C | |||||
| Award | ya | recommend | recommend | decide | ||||||
| Kontrak / SPK | ya | ya | ya | lihat | lihat | portal | portal | |||
| PO / Invoice | hide | hide | hide | hide | hide | hide | hide | |||
| Vendor daftar | ya | ya | verify | lihat | perusahaan | perusahaan | ||||
| Antrian registrasi | ya | ya | ya | |||||||
| Tim vendor | ya | |||||||||
| Laporan | ya | ya | ya | ya | ya | ya | ya | ya | ||
| Audit trail | ya | ya | ya | |||||||
| Pengaturan | ya | sebagian |
hide = PR_AND_FINANCE_ENABLED = false. URL langsung → 403.
14. Peta dokumen
| Kebutuhan | Dokumen |
|---|---|
| Alur & peran (ini) | User journey — publik /alur |
| Aturan + rencana pelaksanaan | BRD §1.5 — publik /brd |
| Desain teknis | TRD |
| API | API.md |
| GATE / UAT | Checklist |
Akhir dokumen