# 🛒 PT. INDOSAN - ERP Web - Modul Pembelian (Lokal)

Aturan spesifik untuk pengembangan, alur mutasi, dan penjurnalan modul `pembelian` lokal PT. INDOSAN.

---

## 1. Kode Transaksi (`jenisTr`) & Alur Langkah

### 1.1 FG Purchasing (Pembelian Produk Lokal) — `466`
*   **Step 1 (`466r`):** PRE PURCHASE ORDER (Penyusunan pengajuan PO oleh Purchasing).
*   **Step 2 (`466`):** PURCHASE ORDER (Persetujuan PO oleh Purchasing Adm).
*   **Step 3 (`467r`):** PRE GOODS RECEIVED NOTE (Persiapan penerimaan barang oleh gudang. Serial number diekstrak menggunakan `ProdukSerialNumberExtractor`).
*   **Step 4 (`467`):** GOODS RECEIVED NOTE (Penerimaan barang fisik ke gudang oleh admin gudang. Stok bertambah).

### 1.2 Supplies Purchasing (Pembelian Perlengkapan) — `461`
*   **Step 1 (`461ro`):** SUPPLIES PURCHASE PRE ORDER.
*   **Step 2 (`461r`):** SUPPLIES PURCHASE ORDER (Persetujuan PO perlengkapan).
*   **Step 3 (`461`):** SUPPLIES GOODS RECEIVED (Barang masuk ke persediaan perlengkapan).

### 1.3 Transaksi Pendukung Lainnya
*   **`468` / `468r` / `468a`**: Trade-in Purchasing (Pembelian tukar tambah / barang bekas).
*   **`967` / `967r` / `967sc`**: FG Purchases Return (Retur pembelian produk lokal).

---

## 2. Alur Mutasi Persediaan & Validasi

### 2.1 Penerimaan Barang (GRN - Step 4)
*   **Finished Goods (FG):**
    *   Setiap produk masuk dicatat ke dalam persediaan produk riil (`8020` / `1010030030`) melalui komponen `RekeningPembantuProdukRiil` dan `RekeningPembantuProduk`.
    *   Gudang tujuan merujuk pada `gudangTujuanID`.
*   **Supplies (Perlengkapan):**
    *   Penerimaan barang supplies wajib diposting ke rekening pembantu perlengkapan menggunakan akun **`1010030010`** (bukan produk biasa).

### 2.2 Ekstraksi Serial Number
*   Pada langkah Pre-GRN (`467r`), sistem memanggil komponen `ProdukSerialNumberExtractor` untuk mendeteksi serial number barang yang dipindai dan menyiapkannya ke dalam bucket session (`items3_sum` -> `items7_sum`).

---

## 3. Penjurnalan Otomatis (GRN - `467`)

### 3.1 Jurnal Pembelian Standard (PPN Aktif)
*   **Debet:** `1010030030` (Persediaan Produk)
*   **Debet:** `1010040050` (PPN Masukan belum ada faktur)
*   **Kredit:** `2010010` (Hutang Dagang Supplier)
*   **Kredit:** `1010050030` (Pemakaian Uang Muka PO - jika menggunakan PO Target / Uang Muka)

### 3.2 Jurnal Diskon / Promo Supplier (Trade-In / Free Product)
*   **Debet:** `1010020030` (Piutang Supplier)
*   **Kredit:** `7010150` (Laba lain-lain / Selisih Persediaan)

---

## 🛠️ Lampiran Teknis (Hasil Audit Codebase)

### Berkas Konfigurasi Utama:
- `coTransaksiCore.php`

### Kode Transaksi (`jenisTr`) Terdaftar:
- **`111`**
- **`112`**
- **`11763`**
- **`1763`**
- **`1961`**
- **`1967`**
- **`3113`**
- **`3463`**
- **`3463o`**
- **`3463ro`**
- **`461`**
- **`461r`**
- **`461ro`**
- **`466`**
- **`466r`**
- **`467`**
- **`961`**
- **`961r`**
- **`967`**
- **`967r`**
- **`9763`**
### Komponen Bisnis (`components`) Terlibat:
- `FifoAverage`
- `FifoAverageSupplies`
- `FifoProdukJadi`
- `FifoSupplies`
- `Jurnal`
- `Jurnal_activity`
- `Jurnal_activityMain`
- `LockerStock`
- `LockerStockMutasi`
- `LockerStockMutasiSupplies`
- `LockerStockSupplies`
- `LockerTransaksi`
- `LockerValue`
- `PaymentAntiSource`
- `PaymentSource`
- `PriceProduk`
- `PriceProdukLastPurchase`
- `PriceProdukPerSupplier`
- `PriceSupplies`
- `Rekening`
- `RekeningPembantuAntarcabang`
- `RekeningPembantuHpp`
- `RekeningPembantuProduk`
- `RekeningPembantuProdukRiil`
- `RekeningPembantuProjek`
- `RekeningPembantuSubSupplier`
- `RekeningPembantuSupplier`
- `RekeningPembantuSupplierJenis`
- `RekeningPembantuSupplierSubJenis`
- `RekeningPembantuSupplies`
- `RekeningPembantuSuppliesRiil`
- `Signature`
- `TransaksiItemReturnUpdate`
- `TransaksiStepUpdater`