Bab 4 — Sales Order (Penjualan)
4.1 Melihat daftar SO
Menu: Operasi → Penjualan → Daftar SO (/admin/workflow)
| Kolom | Arti |
|---|---|
| Approval | Butuh = menunggu persetujuan (diskon, harga di bawah modal, limit kredit, atau piutang lewat jatuh tempo) |
| Pembayaran | UNPAID / DP / PARTIAL / PAID |
| Progress kirim | Persentase qty terkirim |
| Total | Grand total SO |
Tombol (tergantung hak akses):
- Detail — halaman lengkap SO
- Setujui — jika punya approve & SO butuh approval
- Kirim — halaman delivery
- TTB — penerimaan barang
4.2 Membuat SO baru
- Klik Buat Sales Order.
- Pilih Entity (EITO / ALBATROSS).
- Pilih Customer.
- Tambah item: SKU, qty, harga, diskon per baris.
- Isi diskon order (%) jika ada.
- Isi jatuh tempo / catatan bila perlu.
- Ongkos Kirim (opsional) — biaya pengiriman level SO; untuk pengiriman bertahap, ongkir juga bisa diisi per DO saat buat delivery (lihat §4.4). Total ongkir SO = jumlah ongkir semua DO.
- Simpan.
Catatan SO otomatis tercetak di TTB dan Invoice (bagian Catatan Sales Order).
Validasi penting:
- Stok dicek saat simpan; jika tidak cukup SO tetap bisa dibuat → status Pending Fulfillment + catatan pengadaan.
- Isi Procurement (hari) per item untuk estimasi lead time belanja ulang.
- Modal beli per PO (dari PO diterima, sesuai entity).
- COGS PO terakhir dipakai untuk alert harga di bawah modal.
- Diskon order di atas limit diskon % user → Butuh approval.
- Diskon baris membuat harga di bawah modal → Butuh approval.
- Limit kredit customer terlampaui (proyeksi piutang + SO baru) → Butuh approval, status SO tetap DRAFT.
- Ada SO belum lunas melewati jatuh tempo pada customer yang sama → Butuh approval (termin terlampaui).
- Klaim asuransi (
isInsuranceClaim) → diskon & kredit auto-approved (tanpa antrian persetujuan).
SO dengan status pembayaran PAID atau sisa 0 tidak boleh masuk tagihan gabungan (TAG) baru.
4.3 Persetujuan SO
Menu: Operasi → Persetujuan SO (/admin/workflow/approvals)
Hanya tampil jika role punya Setujui (approve) pada modul Sales Order.
- Lihat antrian SO
needsApproval(badge di menu). - Periksa alasan: diskon vs limit sales, harga baris vs modal/COGS, limit kredit, piutang jatuh tempo.
- Setujui atau Tolak.
SO yang butuh approval disimpan dengan status DRAFT sampai disetujui. Setelah disetujui, SO dapat diproses (kirim, invoice, dll.) sesuai status stok.
4.4 Delivery Order (pengiriman)
Dari detail SO → Delivery / tombol Kirim
- Pilih item & qty (bisa partial).
- Isi Alamat Pengiriman:
- Dropdown — pilih alamat tersimpan customer (label + alamat lengkap tampil di daftar; centang di sisi kiri opsi terpilih). Bisa cari label atau teks alamat.
- Manual — pilih Alamat lain (manual) atau ubah teks di textarea; alamat tercetak di TTB.
- Alamat baru bisa disimpan ke master customer dari form ini (opsional).
- Kelola/edit alamat tersimpan di Master → Customers (bagian Alamat Customer).
- Isi Ongkos kirim untuk DO ini (opsional). Setiap DO bisa punya ongkir berbeda; total ongkir SO otomatis dijumlahkan dari semua DO.
- Simpan DO → langsung lanjut ke halaman TTB (tanpa kembali ke detail SO).
Stok available berkurang saat DO dibuat.
Catatan ongkir:
- DO pertama bisa mewarisi ongkir yang sudah diisi di form SO (jika ada).
- DO berikutnya: isi ongkir sendiri-sendiri (mis. DO-1 Rp 50.000, DO-2 Rp 100.000).
- Ongkir per DO muncul di badge Pengiriman di detail SO dan ditagihkan di invoice TTB yang terkait DO tersebut.
Dashboard Pengiriman (/admin/delivery-dashboard): prioritas DO yang belum TTB (urgency, due date).
4.5 TTB (Goods Receipt)
Saat customer menerima barang:
- Setelah buat DO, sistem membuka halaman Buat TTB otomatis (atau dari detail SO → DO → TTB).
- Konfirmasi qty diterima.
- Simpan TTB.
Setelah TTB tersimpan, di halaman yang sama tersedia Preview TTB, Cetak, dan Download PDF — tidak perlu kembali ke detail SO dulu.
Preview & PDF TTB juga tersedia dari detail SO / DO. TTB menampilkan catatan SO dan alamat pengiriman DO.
4.6 Detail SO — ringkasan harga & catatan
Di halaman Detail SO (/admin/workflow/[id]), kartu ringkasan menampilkan:
| Baris | Keterangan |
|---|---|
| Total Barang | Subtotal item setelah diskon baris |
| Diskon order | Jika ada diskon % level SO |
| Ongkos Kirim (semua DO) | Jumlah ongkir dari seluruh DO |
| Total Barang + Ongkir | Sebelum PPN |
| PPN | Hanya entity EITO |
| Total Tagihan | Grand total SO |
Catatan SO dapat diedit langsung di halaman ini (tombol Simpan Catatan) tanpa membuka form edit SO. Catatan tercetak di TTB dan invoice.
Di bagian Pengiriman (DO & TTB), setiap DO menampilkan badge Ongkir, status TTB, dan badge Invoice (jika sudah terbit) — klik nomor invoice untuk preview/cetak invoice TTB tersebut.
4.7 Invoice
| Tipe customer | Aturan umum |
|---|---|
| Umum | Satu invoice per TTB (invoice parsial). Ongkos kirim mengikuti DO/TTB yang ditagihkan — bukan sekali di invoice pertama. Preview/cetak per badge invoice di bagian Pengiriman, atau lewat TAG |
| Asuransi | Satu invoice per SO (penuh) setelah syarat terpenuhi; cetak setelah ada pembayaran (DP/cicilan) |
Invoice menampilkan catatan SO, NPWP customer (jika diisi di master), dan baris Ongkos Kirim sesuai DO yang ditagihkan.
Entity EITO → invoice include PPN 11%. Kolom DPP pada invoice (preview/PDF) ditampilkan bulat ke atas tanpa desimal (pembulatan tampilan).
Nomor invoice: INV-YYYY-MM-### (urut per bulan).
Invoice bisa dibuat:
- otomatis saat TTB tersimpan (customer umum),
- manual per SO di workflow (asuransi / satu invoice penuh),
- atau massal dari dialog TAG (lihat Bab 7) — untuk customer umum, sistem menerbitkan invoice per TTB yang belum punya invoice.
4.8 Pembayaran customer (per SO)
Dari detail SO — Catat Pembayaran (modul payments, biasanya Finance):
| Jenis | Keterangan |
|---|---|
| DP | Uang muka |
| Cicilan / Termin | Bertahap |
| Pelunasan | Melunasi sisa |
| Refund | Dari retur SO (mengurangi paid) |
Isi metode (Transfer, Cash, EDC, COD), jumlah, bukti transfer (opsional).
DP & limit kredit divalidasi terhadap sisa limit customer.
Jika SO lunas di sini, SO otomatis tidak ikut TAG baru; TAG aktif diselaraskan sistem (reconcile).
4.9 Customer asuransi
- Pelunasan sering setelah semua DO + TTB selesai.
- Laporan piutang: badge Siap ditagih jika siap ditagihkan.
4.10 Retur Sales Order
Menu: Operasi → Penjualan → Retur SO
| Langkah | Keterangan |
|---|---|
| 1. Buat Retur | Pilih SO, qty per item (maks = terkirim − sudah retur) |
| 2. Draft | Nomor SOR-YYYY-MM-### |
| 3. Konfirmasi | Stok kembali (opsional), nilai retur, refund opsional |
- Hanya qty yang sudah terkirim lewat DO.
- Satu SO boleh banyak dokumen retur.
- Tombol Buat Retur di detail SO jika masih ada qty returnable.
4.11 Lacak pengadaan (procurement)
Digunakan saat SO berstatus DRAFT (butuh approval), Pending Fulfillment, atau Confirmed — stok tidak cukup saat SO dibuat atau pengadaan masih berjalan. Sistem menghubungkan PO pembelian ke SO penjualan agar tim purchase dan gudang bisa melacak progress tanpa cek manual.
Board Pengadaan
Menu: Operasi → Penjualan → Board Pengadaan (/admin/procurement)
Atau tombol Board Pengadaan di halaman Daftar SO.
Board menampilkan SO PENDING_FULFILLMENT dan SO DRAFT yang masih kekurangan stok dalam 3 kolom:
| Kolom | Arti |
|---|---|
| Menunggu PO | Belum ada PO terkait, atau PO masih Draft / sudah diterima penuh tetapi stok belum cukup |
| PO In Transit | Ada PO terkait berstatus Dikirim (SENT) atau Diterima sebagian — barang dalam perjalanan / belum masuk semua |
| Siap Kirim | Stok fisik sudah cukup untuk memenuhi sisa qty semua item SO |
Setiap kartu menampilkan customer, progress kirim, target procurement, item yang masih kurang, dan daftar PO terkait (jika ada). Klik nomor SO membuka detail; klik nomor PO membuka detail PO.
Detail SO — panel & badge
Di Detail SO (/admin/workflow/[id]) untuk SO pending fulfillment:
| Elemen UI | Keterangan |
|---|---|
| Badge Siap Kirim (hijau) | Stok cukup untuk kirim sisa order |
| Badge Menunggu PO / PO In Transit | Tahap pengadaan saat stok belum cukup |
| Kartu Alert Pengadaan Stok | Batas waktu procurement & daftar kekurangan per SKU |
| Panel Purchase Order Terkait | Tabel PO yang dikaitkan ke SO ini |
| Tombol Buat PO Pengadaan | Muncul jika stok kurang & belum ada PO terkait (termasuk SO DRAFT yang butuh pengadaan); role perlu create pada Purchase Order |
| Label PO pengadaan terbit | Muncul menggantikan tombol buat PO — berisi link nomor PO yang sudah ada |
| Kartu Pengadaan Selesai — Siap DO | Muncul setelah PO diterima & stok cukup; tombol Buat Delivery Order |
| Kartu Menunggu Penerimaan Barang PO | PO sudah terbit (SENT) tetapi barang belum diterima di gudang |
Alur pengadaan (disarankan)
SO Pending Fulfillment
→ Detail SO → Buat PO Pengadaan
→ Form PO terisi otomatis (entity, item & qty kekurangan stok)
→ Simpan PO (terhubung ke SO) → Kirim ke vendor
→ Terima barang (stok naik)
→ Badge "Siap Kirim" muncul di SO
→ Buat Delivery Order
Catatan:
- Satu SO boleh punya lebih dari satu PO (misalnya belanja bertahap atau vendor berbeda).
- PO yang dibuat manual tanpa tombol dari SO tidak otomatis terhubung — gunakan tombol Buat PO Pengadaan agar lacak di board & panel SO.
- Setelah PO Diterima, cek board / badge — jika masih Menunggu PO, kekurangan stok mungkin belum tertutup (qty PO kurang atau item lain masih short).
Lihat juga Bab 5 — PO dari SO.
4.12 Pembatalan Sales Order
| Role | Perilaku |
|---|---|
| Superadmin | Batalkan langsung dari detail SO (status → CANCELLED) |
| Role lain | Ajukan pembatalan + alasan → menunggu Superadmin |
- Tombol Batalkan SO di detail SO (kecuali sudah dibatalkan / invoiced / sedang menunggu persetujuan).
- Badge Menunggu Persetujuan Batal jika permintaan aktif.
- Superadmin menyetujui/menolak di Operasi → Persetujuan SO → bagian Persetujuan Pembatalan SO / PO.
- Stok yang masih direservasi SO (bukan Pending Fulfillment) dilepas otomatis saat pembatalan disetujui.