# Alur Pesanan: Dari Order Sampai Uang Tercatat Dokumen ini menjelaskan **siapa mengerjakan apa, di menu mana, dan status apa** yang berubah — dari pesanan dibuat sampai uangnya terlihat di laporan. Ditulis untuk operator dan pemilik bisnis, bukan untuk tim finance. Semua langkah di bawah diverifikasi terhadap kode backend (`internal/sales`, `internal/distribution`, `internal/finance`) dan UI yang berjalan. Kalau ada yang berbeda dengan layar Anda, itu bug — bukan cara kerja yang berbeda. --- ## 1. Peta singkat ``` Buat pesanan Disetujui? Dibayar? Barang keluar ┌───────────────────────┐ ┌────────────────────┐ ┌──────────────────┐ ┌──────────────────────┐ │ B2B: checkout │ │ ERP → Sales → │ │ Tunai → di kasir│ │ Kirim : ERP → │ │ ERP: Sales → Order │──▶│ Sales Order → │──▶│ Transfer→ bukti │──▶│ Distribusi → Packing │ │ POS: jual langsung │ │ "Setujui (Approve)"│ │ QRIS → Midtrans│ │ Ambil : POS → Ambil │ └───────────────────────┘ └────────────────────┘ └──────────────────┘ │ Toko → Serahkan │ status: draft / status: confirmed → status: invoiced / └──────────────────────┘ pending_approval invoiced paid ``` --- ## 2. Langkah 1 — Pesanan dibuat | Dari mana | Menu | Status setelah disimpan | |---|---|---| | Toko online (B2B) | Katalog → Keranjang → Checkout | `pending_approval` (Menunggu Persetujuan) | | ERP (sales) | **Sales → Sales Order → Buat Order** → "Simpan & Ajukan Order" | `pending_approval` | | ERP (sales, simpan saja) | tombol "Simpan" | `draft` | | Kasir (POS) | Kasir POS → bayar | langsung lunas (`confirmed` + invoice + payment) | Catatan penting: - **Pesanan B2B dan ERP belum dianggap diterima** saat disimpan. Keduanya menunggu persetujuan manusia. Pembayaran (termasuk Midtrans) **tidak** mengubah status ini — uang tercatat, pesanan tetap menunggu persetujuan. - Metode pembayaran ikut tersimpan sebagai penanda `[Metode: …]` di catatan pesanan (cash / transfer / tempo / gateway). Semua layar membacanya dari sana. --- ## 3. Langkah 2 — Persetujuan (gerbang pertama) **Di mana:** ERP → **Sales → Sales Order**. Di bagian atas halaman muncul kotak oranye **"Permintaan Persetujuan Order Masuk"** berisi setiap pesanan yang menunggu, dengan tombol: - **Setujui (Approve)** — pesanan diterima. - **Tolak** — pesanan dibatalkan. - Bisa juga massal: centang beberapa baris → **"Setujui Terpilih"**. Alternatif: buka pesanan → kartu **"Persetujuan Atasan (Approval)"** di halaman detail. **Siapa yang boleh:** pemegang izin `sales.sales-orders.confirm` — **gm, bm, spv**, serta admin/owner. **Sales tidak boleh** menyetujui pesanannya sendiri (pemisahan tugas). **Apa yang terjadi saat disetujui:** 1. Status `pending_approval` → `confirmed`. 2. Sistem otomatis menerbitkan **invoice** (piutang) dan status menjadi `invoiced` ("Ditagih"). 3. Untuk pesanan **kirim ke alamat**, sistem otomatis membuat **Delivery Order**. Untuk pesanan **ambil di toko**, tidak ada DO — barang diserahkan di kasir. > Kalau tombol Setujui tidak muncul padahal Anda atasan: akun Anda belum > memegang izin di atas. Sejak rilis 1.5.0 izin itu diberikan ke gm/bm/spv; > akun lama perlu login ulang agar izin terbaru termuat. --- ## 4. Langkah 3 — Pembayaran (gerbang kedua) | Metode | Siapa yang menagih | Di mana uangnya tercatat | |---|---|---| | **Tunai / COD** | Kasir, saat barang diserahkan | Otomatis saat serah terima: pesanan lunas, invoice lunas | | **Transfer bank** | Pembeli transfer, lalu unggah bukti di B2B → Pembayaran | ERP → **Finance → Piutang & Pembayaran** → verifikasi bukti | | **QRIS / VA / E-wallet** | Pembeli bayar lewat Midtrans | Otomatis (webhook / pengecekan berkala), invoice jadi lunas | **Di mana melihat tagihan yang menunggu dibayar:** ERP → **Finance → Piutang & Pembayaran**. Setiap invoice punya tombol **Bayar**; daftar ini juga yang dipakai kartu "Piutang" di dashboard. **Di mana melihat uang yang sudah masuk:** halaman yang sama, tab **Riwayat Pembayaran**, dan **Finance → Laporan Arus Kas**. Pesanan tunai yang diserahkan kasir: uang **tidak** perlu dicatat manual — serah terima sudah mencatat pelunasan pesanan dan invoice sekaligus. --- ## 5. Langkah 4 — Barang keluar ### A. Kirim ke alamat (kurir) 1. ERP → **Distribusi → Packing Order** → pesanan muncul (pesanan ambil di toko **tidak** muncul di sini). 2. **Mulai** (picking) → siapkan barang → atur pengiriman/kurir. 3. Serahkan ke kurir → **Dikirim**. 4. Kurir menyerahkan → **Selesai/Diterima**, opsional unggah **foto POD** dan nama penerima. 5. Pembeli bisa menekan **"Barang Diterima"** di B2B, opsional melampirkan foto bukti terima. ### B. Ambil sendiri di toko 1. POS → **Ambil Toko**. Hanya pesanan pickup yang tampil. 2. Kartu menampilkan **metode pembayaran** dan status bayar. 3. Tunai → isi uang diterima → **Serahkan Barang** (pesanan & invoice langsung lunas, struk tercetak). 4. Transfer/QRIS → tombol terkunci sampai **lunas**; setelah lunas, **Serahkan Barang** aktif. --- ## 6. Langkah 5 — Uang terlihat di laporan | Yang Anda lihat | Sumbernya | |---|---| | **Net Cashflow** (dashboard) | `payments` (uang masuk) + PO yang sudah dibayar (uang keluar) + kas manual, bulan berjalan | | **Piutang** | invoice berstatus `unpaid`/`partial` | | **Penjualan Hari Ini** | pesanan dengan tanggal order hari ini (di luar yang dibatalkan) | | **Order Aktif** | pesanan berstatus draft / menunggu persetujuan / dikonfirmasi / picking / shipped | Kartu dan tombol **"Lihat Rincian"** selalu membaca data yang sama: angka di kartu = jumlah baris di modal. --- ## 7. Tabel status (arti harfiah) | Status | Arti | Siapa yang menggerakkan | |---|---|---| | `draft` | Baru disimpan, belum diajukan | Sales | | `pending_approval` | Menunggu persetujuan atasan | Atasan (gm/bm/spv/admin/owner) | | `blocked_overdue` | Butuh izin khusus (pelanggan menunggak) | Atasan | | `confirmed` | Disetujui; invoice terbit | Atasan | | `invoiced` | Tagihan terbit, menunggu pembayaran | Pembeli / kasir | | `paid` | Lunas (transfer/QRIS terverifikasi) | Finance / webhook | | `picking` | Sedang dikemas (khusus kirim) | Gudang | | `shipped` | Diserahkan ke kurir | Gudang | | `delivered` | Diterima pembeli / diserahkan kasir | Kurir / kasir / pembeli | | `cancelled` | Dibatalkan | Sales / atasan | --- ## 8. Kalau macet — gejala dan penyebab yang sudah diketahui | Gejala | Penyebab | Perbaikan | |---|---|---| | "Simpan & Ajukan" lalu pesanan hilang, tidak ada tombol Setujui | Hanya admin/owner yang punya izin persetujuan | Sudah diperbaiki: gm/bm/spv mendapat `sales.sales-orders.confirm` (000146) | | "invalid order status" saat Serahkan Barang | Pesanan sudah disetujui sehingga berstatus `invoiced` | Sudah diperbaiki: serah terima menerima `invoiced` | | Pembeli tidak bisa daftar, tombol Daftar diam | Kotak "setujui syarat" tidak menampilkan pesan validasi | Sudah diperbaiki | | Metode pembayaran tidak terlihat di Ambil Toko | Metode hanya disimpan sebagai penanda catatan | Sudah diperbaiki: ditampilkan per kartu | | Angka kas bulan ini muncul di bulan yang salah | Label bulan widget memakai daftar Jan–Des tetap | Sudah diperbaiki: label mengikuti bulan data | --- ## 9. Batas dokumen ini - Angka contoh dan status diuji pada **stack lokal** (data pengembangan), bukan data produksi. - Dokumen menjelaskan **perilaku aplikasi**, bukan kebijakan akuntansi pajak atau pengakuan pendapatan yang mungkin berbeda di laporan keuangan resmi. - Perubahan alur harus memperbarui dokumen ini pada commit yang sama.