Skenario: Mekanik Mulai Job WO di Pagi Hari
Rudi (mekanik) mulai shift pagi. Lihat antrian WO, ambil WO-2026-0142 (ganti oli + servis ringan), update status ke pengerjaan, request parts ke gudang, kerjakan, lapor selesai untuk QC.
UI — Antrian Job Mekanik (mobile-friendly)
Bengkel
Pintar
Pintar
Antrian Saya
Parts Request
Riwayat Job
WO-2026-0142 — Toyota Avanza B 1234 ABC
Bay 2 — AktifCustomerBpk. Andi
ServiceGanti Oli + Servis Ringan
KomplainMesin agak kasar
Estimasi45 menit
▶ Mulai Pengerjaan
📦 Request Parts
WO-2026-0145 — Honda Brio
Antri
Tune up + ganti busi. Estimasi 60 menit.
Sequence — Mulai → Request Parts → Selesai
sequenceDiagram
participant M as Mekanik (Rudi)
participant APP as App
participant DB as DB
participant WS as WebSocket
participant G as Gudang
participant K as Kepala Mekanik
M->>APP: Login pagi → buka /mekanik/queue
APP->>DB: SELECT WorkOrder WHERE assignedTo=Rudi AND status IN (antrian,pengerjaan)
DB-->>APP: 3 WO
APP-->>M: Tampilkan antrian
M->>APP: Tap "Mulai Pengerjaan" WO-0142
APP->>DB: UPDATE WorkOrder status=pengerjaan, startedAt=now
APP->>WS: publish wo:job_started → branch:1
WS-->>K: Notifikasi job mulai
M->>APP: Request parts (Oli 4L + Filter Oli)
APP->>DB: INSERT PartsRequest status=pending
APP->>WS: publish parts:requested → role:gudang:1
WS-->>G: Notifikasi minta parts
G->>APP: Approve & siapkan parts
APP->>DB: UPDATE PartsRequest status=approved, BranchStock -= qty
APP->>WS: publish parts:approved → user:Rudi
WS-->>M: Notifikasi parts siap
M->>APP: Mark "Selesai pengerjaan"
APP->>DB: UPDATE WorkOrder status=quality_check, finishedAt=now
APP->>WS: publish wo:job_done → role:karu:1
WS-->>K: Notifikasi siap QC
Langkah Detail
1. Login & Antrian
- Mekanik login pakai PIN/biometric di tablet bay
- Default landing:
/mekanik/queue - Antrian sort by priority (booking > walk-in)
- Real-time update via WebSocket — booking baru otomatis muncul
2. Mulai Pengerjaan
- Tombol "Mulai" → POST
/api/workorders/:id/jobs/start - Backend: status WO ke
pengerjaan, setstartedAt - Bay otomatis di-mark
occupied+ WS eventbay:occupied - Karu (kepala mekanik) dapet notif lewat WebSocket
3. Request Parts
- Tap "Request Parts" → form pilih item dari katalog branch
- POST
/api/parts-requests→ statuspending - WS event ke role gudang cabang itu — gudang siap-siap
- Auto-approve kalau nominal < threshold (default Rp 500rb)
4. Selesai → QC
- Mark "Selesai" → status WO ke
quality_check - Karu cek hasil. Kalau lolos → status
selesai - Kalau ada masalah → status balik ke
pengerjaan+ catatrework(kena KPI) - Jika lolos QC → kasir terima notif untuk close payment
Tabel & Event yang Tersentuh
Tabel: WorkOrder, WorkOrderItem, MechanicAssignment, PartsRequest, BranchStock, Bay
WS Events: wo:job_started, parts:requested, parts:approved, wo:job_done, bay:occupied, bay:free
Audit log: setiap perubahan status WO + parts request