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.
- Pilih cara simpan (lihat di bawah).
Draft & autosave (pencatatan bertahap)
| Cara | Apa yang terjadi | Kapan dipakai |
|---|---|---|
| Autosave browser | Form tersimpan otomatis di browser (tanpa klik). Jika tab tertutup, buka form lagi → Lanjutkan / Buang | Sedang mengisi, takut kehilangan data |
| Simpan Draft | SO tersimpan di server sebagai Draft Kerja (customer wajib, item boleh kosong). Tidak reserve stok, belum masuk approval/DO/invoice | Isi bertahap, lanjut di detail SO |
| Buat / Ajukan | Submit penuh (≥1 item). Stok direservasi jika cukup, atau masuk Pending Fulfillment / antrian approval | Data sudah lengkap |
Draft Kerja di detail SO:
- Buka SO dari daftar (status tampil Draft Kerja).
- Lengkapi item lewat Edit Item bila perlu.
- Klik Ajukan Draft → sistem reserve stok / set status operasional / masuk approval jika perlu.
- Sebelum diajukan: tidak bisa buat DO atau cetak invoice.
Beda dengan DRAFT menunggu approval: Draft Kerja = belum diajukan. DRAFT + badge Butuh = sudah diajukan tapi menunggu Superadmin/approver.
Catatan SO otomatis tercetak di TTB dan Invoice (bagian Catatan Sales Order). Catatan internal [Pengadaan]… tidak ditampilkan di invoice setelah DO selesai.
Validasi penting:
- Stok dicek saat ajukan / buat penuh; 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.
Edit item SO (tambah / batalkan spare part)
Gunakan ini jika setelah SO dibuat ada spare part yang ditambah atau dibatalkan (qty dikurangi / baris dihapus).
Syarat:
| Boleh | Tidak boleh |
|---|---|
| Invoice belum diterbitkan | Sudah ada invoice / status INVOICED |
| Status bukan CANCELLED | SO dibatalkan |
| Role punya hak update Sales Order | — |
Langkah:
- Buka Detail SO (
/admin/workflow/[id]). - Di kartu Item & Progress Pengiriman, klik Edit Item.
- Sesuaikan baris:
- Ubah qty / harga / diskon pada baris yang sudah ada.
- Hapus baris (ikon tempat sampah) — hanya jika qty terkirim = 0.
- Tambah Item — pilih SKU baru, isi qty & harga.
- Klik Simpan Item. Total tagihan dihitung ulang otomatis.
Aturan penting:
- Qty baru tidak boleh lebih kecil dari qty yang sudah dikirim (DO). Contoh: order 10, terkirim 4 → qty minimal 4.
- Baris yang sudah ada pengiriman tidak bisa dihapus; turunkan qty sampai sama dengan qty terkirim, atau batalkan alur DO terkait dulu.
- Reserved stock (stok dipesan) ikut disesuaikan saat simpan (kecuali SO masih Pending Fulfillment).
- Jika sudah ada pembayaran dan total baru lebih kecil dari yang sudah dibayar, simpan ditolak — sesuaikan pembayaran dulu.
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 masih ada kekurangan stok yang belum tercakup di PO aktif; role perlu create pada Purchase Order |
| Tombol Buat PO Pengadaan Lanjutan | Muncul jika SO sudah punya PO tetapi masih ada sisa kekurangan (qty/item belum tercover) |
| Label / link PO aktif | Daftar nomor PO pengadaan yang sudah terbit (bisa lebih dari satu) |
| Kartu Pengadaan Selesai — Siap DO | Muncul setelah stok cukup; tombol Buat Delivery Order |
| Kartu Menunggu Penerimaan Barang PO | PO sudah terbit (SENT) tetapi barang belum diterima di gudang |
Multi PO / PO Pengadaan Lanjutan
Sistem mengizinkan lebih dari satu PO pengadaan untuk satu SO selama masih ada kekurangan.
Cara hitung template item:
Qty di form PO = sisa demand SO − stok tersedia − qty yang sudah ada di PO aktif
- PO status CANCELLED tidak dihitung.
- Jika kekurangan sudah tercukup oleh PO aktif → tombol buat PO hilang / API template menolak (409) dengan pesan PO yang sudah ada.
- Cocok untuk: beda vendor, belanja bertahap, atau PO pertama qty-nya kurang.
Alur pengadaan (disarankan)
SO Pending Fulfillment
→ Detail SO → Buat PO Pengadaan
→ Form PO terisi otomatis (entity, item & qty kekurangan tersisa)
→ Simpan Draft / Buat PO → Kirim ke vendor
→ [Jika masih kurang] Buat PO Pengadaan Lanjutan (beda vendor / qty sisa)
→ Terima barang (stok naik)
→ Badge "Siap Kirim" muncul di SO
→ Buat Delivery Order
Catatan:
- Satu SO boleh punya lebih dari satu PO (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) → buat PO Lanjutan.
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 reserved (belum terkirim) dilepas otomatis saat pembatalan disetujui.
- Qty yang sudah di-DO dikembalikan ke Available saat pembatalan (dianggap barang kembali ke gudang / SO salah). Mutasi tercatat sebagai ADJUSTMENT.
- SO Pending Fulfillment / draft kerja tidak menahan reserved saat dibuat.