# 🛍️ PT. Everest - ERP Web - Modul Penjualan (Lokal)

Aturan spesifik untuk pengembangan, alur mutasi persediaan, dan penjurnalan modul `penjualan` (lokal/retail) PT. Everest.

---

## 1. Kode Transaksi (`jenisTr`) & Alur Langkah

### 1.1 Retail Sales (Penjualan Produk Lokal) — `582`
*   **Step 1 (`582spo`):** SALES ORDER (Admin/Seller menyusun draf SO).
*   **Step 2 (`582so`):** SALES (Persetujuan SO & otorisasi limit piutang/diskon oleh Supervisor).
*   **Step 3 (`582pkd`):** PRE PACKING (Admin gudang memproses packing barang dan memindai serial number).
*   **Step 4 (`582spd`):** PACKING LIST (Barang disiapkan untuk pengiriman/shipment).
*   **Step 5 (`582`):** INVOICE (Penerbitan invoice tagihan resmi oleh Finance, piutang terbentuk).

### 1.2 Transaksi Pendukung Lainnya
*   **`5822` / `5822spo` / `5822so`**: Sales Support Mode (Dukungan Admin Penjualan).
*   **`5823` / `5823spo` / `5823so`**: POS Mode (Penjualan langsung kasir cabang).
*   **`982` / `982r`**: Retur penjualan produk lokal.

---

## 2. Alur Mutasi Persediaan & Validasi

### 2.1 Alokasi Stok (Pre-Packing - Step 3)
*   **Hold Stock:** Saat barang masuk ke tahap packing (`582pkd`), jumlah stok dipindahkan dari status `active` ke `hold` menggunakan **`ComLockerStockDualWrite`** untuk mencegah agar barang tersebut tidak terjual ke transaksi lain.
*   **Pelepasan Stok (GRN/Shipment):** Setelah pengiriman dikonfirmasi, stok `hold` dilepas dan dikurangi secara permanen (`moved` atau status keluar).

### 2.2 Validasi Limit Kredit & Point Member
*   Sistem memvalidasi batas limit kredit (*credit limit*) customer melalui model `ComRekeningPembantuCustomerDetail`. Jika limit terlampaui, transaksi harus tertahan di Step 1/2 hingga disetujui Supervisor.
*   Perhitungan point transaksi dihitung otomatis saat pembuatan Invoice (Step 5).

---

## 3. Penjurnalan Otomatis (Invoice - `582`)

### 3.1 Pengakuan Penjualan & Piutang
*   **Debet:** `1010020010` (Piutang Dagang Customer)
*   **Kredit:** `4010110` (Pendapatan Penjualan Produk)
*   **Kredit:** `2010040050` (PPN Keluaran - jika PPN aktif)

### 3.2 Pengakuan Harga Pokok Penjualan (HPP)
*   **Debet:** `5010110` (Harga Pokok Penjualan - HPP)
*   **Kredit:** `1010030030` (Persediaan Produk)
*   *Valuasi HPP menggunakan metode average yang diperoleh dari history harga perolehan.*
