# Panduan Pembaruan Sistem ERP Penjualan
## Fitur: Mekanisme Pemisahan Pesanan Otomatis (Partial Fulfillment & Backorder Management)

---

## 1. Latar Belakang & Masalah Sistem Saat Ini
Saat ini, sistem meloloskan pesanan (*Sales Order*) tanpa validasi stok otomatis (**unlinked inventory validation**). Hal ini menimbulkan dampak negatif bagi bisnis:
* **Operasional:** Kekacauan alur kerja gudang (*bottleneck*), selisih stok (*ghost stock*), dan pembengkakan biaya kirim akibat pengiriman parsial yang tidak terencana.
* **Finansial:** Memicu pembelian panik (*panic buying*) dengan harga mahal, gangguan arus kas (*cash flow*), dan biasnya data *forecasting*.
* **Kepuasan Pelanggan:** Terjadi ingkar janji waktu pengiriman (*overpromising*) dan lonjakan komplain ke tim *Customer Service*.

---

## 2. Alur Logika Baru (Sistem Diusulkan)
Ketika pengguna melakukan **Submit Pesanan (Sales Order)**, sistem wajib melakukan pengecekan stok secara *real-time* dan memecah pesanan menjadi dua bagian jika terjadi kelangkaan stok:
[ SUBMIT SALES ORDER ]|< Cek Ketersediaan Stok? >/                        
(Ada Stok)        |[ Lanjut ke Packing List ]                
(Tidak Ada Stok)|  [ Masuk ke Antrean Pembelian ](Siap Kirim)                       (Backorder / Procurement)
---

## 3. Spesifikasi Teknis Pembaruan Sistem (Wajib Diimplementasikan)

### A. Mekanisme Pemisahan Dokumen (Splitting Mechanics)
Sistem wajib menjaga keterkaitan data antara dokumen induk dan pecahan agar tidak membingungkan pengguna:
* **Nomor Referensi Induk:** Nomor pesanan asli (contoh: `SO-2026-001`) tetap disimpan sebagai induk riwayat.
* **Penomoran Pecahan:** 
  * Bagian stok siap kirim otomatis diubah menjadi `SO-2026-001A` (Status: *Ready for Packing*).
  * Bagian stok kosong otomatis diubah menjadi `SO-2026-001B` (Status: *Backorder / Hold for Procurement*).

### B. Validasi Stok Akurat: Available to Promise (ATP)
Validasi jangan hanya membaca data stok fisik mati di gudang, melainkan harus menggunakan rumus **Stok Alokasi**:
* **Rumus:** `Stok ATP = Stok Fisik Gudang - Stok yang Sudah Dipesan Orang Lain (Reserved)`
* Sistem harus mengunci (*lock*) jumlah stok begitu status pesanan berubah menjadi pecahan `A` agar tidak terjadi penjualan ganda (*double selling*).

### C. Modul Konfirmasi Konsumen (Customer Preferences)
Sebelum pesanan otomatis dipecah, sistem harus memunculkan pop-up opsi tindakan untuk tim Sales berdasarkan persetujuan pelanggan:
1. **Ship Partial:** Izinkan pecah pesanan (Kirim yang ada dulu, sisanya menyusul).
2. **Ship Complete:** Tahan seluruh pesanan hingga barang pecahan `B` selesai dibeli dan siap dikirim bersamaan.
3. **Cancel Backorder:** Kirim barang yang ada saja, sisa barang yang kosong langsung dibatalkan dari pesanan.

### D. Batas Toleransi Waktu Pembelian (Lead Time Filter)
Sistem wajib membatasi rekomendasi pembelian berdasarkan waktu tunggu barang datang (*lead time*):
* Jika *lead time* barang kosong melebihi batas toleransi perusahaan (misal: > 14 hari), sistem harus memunculkan peringatan (*warning notification*) agar sales dapat bernegosiasi ulang atau menawarkan produk substitusi kepada pelanggan.

### E. Alokasi Otomatis Barang Datang (Cross-Docking Lock)
Ketika tim *purchasing* berhasil mendatangkan barang dan gudang melakukan input Penerimaan Barang (*Goods Receipt* / GRN):
* Sistem wajib mendeteksi dokumen pecahan `B` (`SO-2026-001B`) yang sedang menggantung.
* Stok baru tersebut harus langsung **dikunci secara otomatis** untuk pesanan lama tersebut. Stok baru tidak boleh diambil oleh pesanan baru lain yang masuk belakangan.

---

## 4. Rencana Pengujian (UAT Checklist)
Sebelum pembaruan diluncurkan ke *production server*, tim QA wajib memastikan:
- [ ] Sistem berhasil memecah 1 Sales Order menjadi 2 kode unik saat stok kurang.
- [ ] Stok ATP berkurang seketika saat pesanan berstatus *Ready for Packing*.
- [ ] Opsi *Ship Complete* berhasil menahan pengiriman dokumen ke bagian gudang.
- [ ] Barang masuk dari supplier otomatis mengunci antrean *backorder* yang paling lama menggantung (*FIFO Backorder Allocation*).