# 🚚 PT. INDOSAN - ERP Web - Modul Pindah Gudang

Aturan spesifik untuk pengembangan, alur mutasi persediaan, dan penguncian stok modul `pindahgudang` (transfer antar-gudang / antar-cabang) PT. INDOSAN.

---

## 1. Kode Transaksi (`jenisTr`) & Tipe Mutasi

### 1.1 Mutasi Finished Goods (Produk Jadi)
*   **`587`**: Pindah produk jadi ke gudang rusak / NG (No-Good).
*   **`687`**: Pindah produk jadi ke gudang DC (Distribution Center).
*   **`1587`**: Pindah produk jadi antar-gudang reguler di cabang.
*   **`5587`**: Pindah produk rakitan (pusat).
*   **`6687`**: Pindah produk rakitan (cabang).
*   **`1588`**: Pindah produk untuk kebutuhan proyek.
*   **`2587`**: Konfirmasi Penerimaan (GRN Pindah Gudang) produk jadi di cabang tujuan.

### 1.2 Mutasi Supplies (Perlengkapan)
*   **`1687`**: Pindah persediaan perlengkapan (supplies) antar-gudang di cabang.
*   **`2687`**: Konfirmasi Penerimaan supplies di cabang tujuan.

---

## 2. Alur Mutasi Persediaan & Penguncian (Locker)

Alur pindah gudang dirancang aman menggunakan sistem penguncian stok bertahap untuk menghindari selisih stok (stock mismatch):

### Langkah 1: Request Pindah Gudang (Draft/Pending)
*   **Validasi Awal (Early Check):** Sistem memvalidasi ketersediaan stok fisik asal melalui `pairMakers` (`stokAktive` dan `stokBefore`).
*   **Hold / Transit:** Stok di gudang asal dipindahkan dari status `active` ke `hold` (transit) menggunakan:
    *   `penulisan ganda stock locker` (untuk Finished Goods).
    *   `ComLockerStockSupplies` (untuk Supplies).

### Langkah 2: Pemindaian QR & Otorisasi
*   Admin gudang memindai serial number fisik produk.
*   Sistem memotong/menahan serial number yang sesuai melalui tabel `produk_serial_number_locker` dengan status `hold` menggunakan `serialNumberValidator`.

### Langkah 3: Penerimaan di Gudang Tujuan (GRN Pindah Gudang)
*   Setelah admin gudang tujuan menekan tombol "Terima", sistem akan:
    1.  Merilis stok status `hold` (transit) dari gudang asal menjadi `moved`.
    2.  Menambahkan stok baru dengan status `active` di gudang tujuan.
    3.  Memindahkan serial number produk di database ke gudang tujuan.

---

## 3. Pembatasan & Validasi Lintas Modul
*   **Dilarang Campur Locker:** Modul pemindahan supplies (`1687`/`2687`) wajib menggunakan locker supplies (`ComLockerStockSupplies` / `ComLockerStockMutasiSupplies`) dan **DILARANG** menyentuh locker Finished Goods (`penulisan ganda stock locker`).
*   Gudang asal dan gudang tujuan **TIDAK BOLEH SAMA** (`id <> gudang_id`).

---

## 🛠️ Lampiran Teknis (Hasil Audit Codebase)

### Berkas Konfigurasi Utama:
- `coTransaksiCore.php`

### Kode Transaksi (`jenisTr`) Terdaftar:
- **`1587`**
- **`1587r`**
- **`1687`**
- **`1687r`**
- **`5587`**
- **`5587r`**
- **`5587ra`**
- **`587`**
- **`587r`**
- **`6687`**
- **`6687r`**
- **`687`**
- **`687r`**
### Komponen Bisnis (`components`) Terlibat:
- `FifoAverage`
- `FifoAverageSupplies`
- `FifoProdukJadi`
- `FifoSupplies`
- `JurnalModulDistribusi`
- `LockerStock`
- `LockerStockMutasi`
- `LockerStockMutasiSupplies`
- `LockerStockSupplies`
- `RekeningModulDistribusi`
- `RekeningPembantuProduk`
- `RekeningPembantuProdukModulDistribusi`
- `RekeningPembantuSupplies`