Core Operations
Status Work Order
StatusBadgeDeskripsiActor
antrianAntrianWO baru dibuat, menunggu mekanik tersediaAdmin / SA
diagnosaDiagnosaMekanik sedang mendiagnosa kerusakan kendaraanMekanik
pengerjaanPengerjaanPekerjaan servis sedang berlangsungMekanik
quality_checkQCQuality check oleh kepala mekanik — wajib sebelum selesaiKepala Mekanik
selesaiSelesaiQC lulus, WO siap diserahkan ke kasirKM / Sistem
diserahkanDiserahkanInvoice lunas, kendaraan sudah diserahkanKasir / Admin
batalBatalWO dibatalkan (bisa dari status apapun, harus ada alasan)Admin
State Diagram — Transisi Status WO

Work Order State Machine

Semua kemungkinan perpindahan status dari awal hingga selesai

stateDiagram-v2 [*] --> antrian : Admin buat WO antrian --> diagnosa : Mekanik mulai diagnosa antrian --> batal : Admin batalkan diagnosa --> pengerjaan : Diagnosa selesai, mulai kerjakan diagnosa --> batal : Admin batalkan pengerjaan --> quality_check : Semua job selesai pengerjaan --> diagnosa : Perlu diagnosa ulang pengerjaan --> batal : Admin batalkan quality_check --> selesai : QC lulus quality_check --> pengerjaan : QC gagal — rework selesai --> diserahkan : Invoice lunas + serah terima selesai --> batal : Admin batalkan (jarang) batal --> [*] diserahkan --> [*]
State Diagram — Status Job Item

WO Job Item State Machine

Status setiap item pekerjaan dalam satu Work Order

stateDiagram-v2 [*] --> waiting : Job dibuat (otomatis dari jasa item) waiting --> running : Mekanik mulai kerjakan running --> paused : Menunggu parts / istirahat paused --> running : Lanjutkan pengerjaan running --> done : Mekanik tandai selesai done --> waiting : KM reject QC — rework (attempts++) done --> [*] : QC lulus
UI Mockup — Daftar Work Order
bengkelpintar.app/work-orders
Operations
Work Order
Quotation
Kasir
Inventory
Parts
Purchase
Work Order
Cabang Utama
AD
Daftar Work Order
🕐
8
Antrian
🔍
3
Diagnosa
🔧
12
Dikerjakan
5
Selesai
+ Buat WO
Filter
WO-2025-001
Honda Jazz • B 1234 ABC • Budi Santoso Regular
Antrian
WO-2025-002
Toyota Avanza • B 5678 DEF • PT. Sinar Abadi Corporate
Diagnosa
WO-2025-003
Suzuki Ertiga • D 9012 GHI • Ahmad Fauzi VIP
Pengerjaan
WO-2025-004
Mitsubishi Xpander • F 3456 JKL • Indira Sari
QC
bengkelpintar.app/work-orders/WO-2025-003
Work Order
Quotation
Kasir
WO-2025-003 Detail
Pengerjaan
MK
Info Kendaraan & Pelanggan
VIP
Pelanggan
Ahmad Fauzi
No. Polisi
D 9012 GHI
Kendaraan
Suzuki Ertiga 2022
KM
45.230 km
Bay / Stall
Bay 3
Est. Selesai
14:00
Job Items
3 items
TipeDeskripsiMekanikStatus
JasaGanti oli mesinRudiDone
JasaCek rem depanRudiRunning
PartsKampas rem depanWaiting
Sequence Diagram — Work Order Lifecycle

WO Sequence — End-to-End

Interaksi antar aktor dari pembuatan WO hingga serah terima kendaraan

sequenceDiagram actor C as Pelanggan participant A as Admin / SA participant S as Sistem participant M as Mekanik participant G as Gudang participant KM as Kep. Mekanik participant K as Kasir C->>A: Datang + keluhan kendaraan A->>S: Buat WO baru (pilih bay, assign mekanik) Note over A,S: Cek AR overdue customer sebelum buat WO S-->>A: WO-XXXX (status: ANTRIAN) S-->>M: Notifikasi WO baru via WebSocket M->>S: Mulai diagnosa S-->>S: Status: DIAGNOSA M->>S: Tambah item jasa & parts ke WO Note over M,S: Setiap jasa → otomatis buat WOJob M->>S: Request parts ke gudang S->>G: Notifikasi Parts Request alt Stok tersedia G-->>S: Approve & siapkan parts S-->>M: Parts siap else Stok habis G->>S: Tandai out of stock S-->>A: Notif → Buat PO ke supplier A->>S: Approve PO S-->>G: PO dikirim supplier Note over G: Tunggu barang tiba G-->>S: Terima barang, approve parts S-->>M: Parts siap end M->>S: Update semua job → done S-->>S: Status: QUALITY_CHECK S-->>KM: Notifikasi QC diperlukan KM->>S: Lakukan QC per job alt QC Lulus S-->>S: Status: SELESAI S-->>K: WO muncul di antrian kasir K->>C: Tampilkan tagihan C-->>K: Bayar (cash/transfer/QRIS) K->>S: Konfirmasi pembayaran lunas S-->>S: Status: DISERAHKAN S-->>A: Kirim invoice email ke pelanggan A->>C: Serah terima kendaraan else QC Gagal KM->>S: Reject job + catatan rework S-->>S: Job status: waiting (attempts++) S-->>M: Notifikasi revisi M->>S: Kerjakan ulang end
Flow Diagram — Alur Work Order Lengkap

Main Work Order Flow

Alur lengkap dari pembuatan WO hingga serah terima kendaraan beserta percabangan

flowchart TD A([Pelanggan Datang]) --> AA{Ada Quotation\ndisetujui?} AA -->|Ya| AB[Import dari Quotation] AA -->|Tidak| AC[Buat WO Baru] AB --> B AC --> B B{Cek AR Overdue\nCustomer} -->|Tidak ada overdue| C[WO Status: ANTRIAN] B -->|Ada overdue > limit| D[Blokir — Perlu\nAlasan Override] D --> C C --> E[Admin: Assign Mekanik\n& Pilih Bay] E --> F[Mekanik: Mulai Diagnosa] F --> G[WO Status: DIAGNOSA] G --> H[Mekanik: Tambah\nItem Jasa & Parts] H --> I{Perlu\nSparepart?} I -->|Ya| J[Buat Parts Request\nke Gudang] J --> K{Stok\nTersedia?} K -->|Ya| L[Gudang: Siapkan\ndan Serahkan Parts] K -->|Tidak| M[Buat Purchase Order\nke Supplier] M --> N[Supplier Kirim\nBarang] N --> L I -->|Tidak| O L --> O[Mekanik: Kerjakan\nSemua Job] O --> P[WO Status: PENGERJAAN] P --> Q{Semua Job\nStatus Done?} Q -->|Belum| P Q -->|Ya| R[WO Status: QUALITY CHECK] R --> S[Kepala Mekanik:\nLakukan QC per Job] S --> T{QC Lulus\nSemua?} T -->|Tidak| U[Job di-reject\nMekanik rework] U --> P T -->|Ya| V[WO Status: SELESAI] V --> W[Kasir: Buat Invoice\nPilih Tipe Bayar] W --> X{Tipe\nPembayaran?} X -->|Tunai / Transfer| Y[Bayar Langsung\nInvoice LUNAS] X -->|Corporate Tempo| Z[Close as Tempo\nAR Piutang] Y --> AA2[WO Status: DISERAHKAN] Z --> AA2 AA2 --> BB([Selesai]) style A fill:#dbeafe,stroke:#3b82f6 style BB fill:#dcfce7,stroke:#16a34a style C fill:#fef3c7,stroke:#f59e0b style G fill:#ede9fe,stroke:#8b5cf6 style P fill:#dbeafe,stroke:#3b82f6 style R fill:#cffafe,stroke:#06b6d4 style V fill:#dcfce7,stroke:#16a34a style D fill:#fee2e2,stroke:#ef4444
Panduan Per Role

🧑‍💼 Admin / Service Advisor

  • Buat WO: Isi data pelanggan, kendaraan, keluhan, bay, dan estimasi selesai
  • Assign mekanik: Pilih dari daftar mekanik aktif (max 3 WO aktif/mekanik)
  • Credit check: Sistem otomatis cek AR overdue customer sebelum buat WO
  • Corporate: Set dueDate = hari ini + term hari sesuai kontrak
  • Serah terima: Konfirmasi setelah kasir mark lunas / close tempo

🔧 Mekanik

  • Mulai diagnosa: Klik "Mulai Diagnosa" di WO yang ditugaskan
  • Tambah item: Tambah jasa servis dan parts yang dibutuhkan ke WO
  • Parts request: Klik "Ajukan Parts Request" jika butuh sparepart
  • Update job: Tandai setiap job sebagai Running → Done setelah selesai
  • Rework: Jika QC gagal, job kembali ke waiting — kerjakan ulang

🔍 Kepala Mekanik (QC)

  • QC trigger: Otomatis masuk queue QC ketika semua job WO berstatus Done
  • Checklist QC: Verifikasi tiap job sesuai standar servis
  • Approve: Klik "Lulus QC" → WO pindah ke status SELESAI
  • Reject: Klik "Gagal QC" + isi catatan → job kembali ke mekanik
  • Larangan: Tidak boleh QC pekerjaan milik sendiri

💳 Kasir

  • Antrian bayar: WO status SELESAI otomatis muncul di antrian kasir
  • Invoice: Sistem auto-generate invoice dari semua item WO
  • Pilih bayar: Tunai, Transfer, QRIS, Debit, atau Split Payment
  • Corporate tempo: Klik "Close as Tempo" → AR posting, dueDate otomatis set
  • Setelah lunas: Invoice email otomatis terkirim ke pelanggan
Aturan & Validasi

📋 Pembuatan WO

  • Nomor WO auto-generate format WO-YYYY-NNNNN
  • Data wajib: nama pelanggan, no. polisi, jenis kendaraan, keluhan
  • Bisa import dari Quotation yang sudah disetujui
  • Bay status maintenance otomatis di-exclude dari picker

📦 Item & Parts

  • Tipe item: parts (stok), jasa (layanan), warranty (tanpa biaya)
  • Setiap item jasa otomatis buat WOJob dengan status waiting
  • Item parts langsung kurangi stok cabang saat WO dibuat
  • WO tidak bisa SELESAI jika ada parts request belum fulfilled

🔍 Quality Check

  • QC wajib dilakukan oleh Kepala Mekanik
  • Tidak boleh QC pekerjaan sendiri
  • QC gagal → job kembali ke waiting, counter attempts +1
  • Banyak rework berpengaruh pada KPI mekanik

🔄 Real-time WebSocket

  • Event wo:created, wo:status_changed, wo:assigned
  • Event wo:job_started, wo:job_done, wo:job_rejected
  • Event wo:ready_to_pay dikirim ke kasir saat semua job done
  • Scoped per cabang — data tidak bocor lintas cabang
Field Khusus: Corporate, PPN, & Bay

📅 dueDate — Tempo Corporate

  • Hanya berlaku untuk customer type corporate
  • dueDate = today + paymentTermDays (dari kontrak customer)
  • Saat close as tempo → posting AR: D/Piutang — K/Penjualan
  • AR aging widget di dashboard monitor piutang jatuh tempo
  • Cron reminder H-3 sebelum jatuh tempo via email/WA

🚫 noPpn — Skip PPN

  • Checkbox per transaksi: WO, Quotation, PO
  • Default false = kena PPN 11%
  • Saat true: total tanpa PPN, posting jurnal juga skip line PPN
  • Use case: customer non-PKP, ekspor, internal

🛠️ Bay Filter — Maintenance

  • Bay status maintenance otomatis disembunyikan dari picker stall
  • Berlaku di 3 form: WO create, WO edit, assign stall
  • Hanya tampil bay available dan occupied (untuk swap)
  • Admin bisa set bay ke maintenance dari halaman master bay

🏢 Parent-Child WO

  • WO bisa punya child WO (untuk fleet / multi-kendaraan)
  • Parent WO tidak bisa SELESAI jika ada child WO belum selesai
  • Laporan bisa di-drill down per child WO
  • Corporate fleet: 1 PO → banyak WO
API Endpoints
MethodEndpointDeskripsiRole
GET/api/work-ordersList WO (filter status, cabang, tanggal)Admin, Kasir
POST/api/work-ordersBuat WO baru (cek AR overdue)Admin
GET/api/work-orders/:idDetail WO + job items + paymentsSemua
PATCH/api/work-orders/:id/statusUbah status WO (validasi state machine)Admin, Mekanik, KM
POST/api/work-orders/:id/itemsTambah item jasa/parts/warrantyAdmin, Mekanik
PATCH/api/work-orders/:id/items/:iidUpdate itemAdmin, Mekanik
DELETE/api/work-orders/:id/items/:iidHapus item (hanya status antrian/diagnosa)Admin
POST/api/work-orders/:id/jobs/:jid/startMulai kerjakan jobMekanik
POST/api/work-orders/:id/jobs/:jid/completeTandai job selesaiMekanik
POST/api/work-orders/:id/qcSubmit hasil QCKepala Mekanik
POST/api/work-orders/:id/cancelBatalkan WO (wajib isi alasan)Admin
POST/api/work-orders/:id/damagesTambah catatan kerusakan (zona, tipe, foto)Admin, Mekanik