# 🚚 PT. INDOSAN - ERP Web - Modul Distribusi Produksi

> [!IMPORTANT]
> **STATUS FITUR VARIAN: PENGGUNAAN SENTINEL (NON-VARIANT STANDAR)**
> Modul `distribusiproduksi` saat ini beroperasi murni untuk produk non-variant di versi produksi/live PT. INDOSAN. Kode dual-write yang mengarah ke `stock_locker_variant` pada pengiriman/penerimaan produk jadi secara live hanya menulis dengan nilai sentinel **`variant_id = 1`** karena feature flag `singleVariantStandard.enabled` bernilai `false`.

Aturan spesifik untuk pengembangan, alur mutasi persediaan logistik produksi, dan pencatatan serah terima komponen produk jadi PT. INDOSAN.

---

## 1. Kode Transaksi (`jenisTr`) & Alur Langkah

Modul ini menangani transfer dan serah terima stok fisik barang setengah jadi (rakitan) maupun barang jadi ke pabrik perakitan atau Distribution Center (DC).

### 1.1 Distribusi ke Pabrik Perakitan
*   **`9583`**: Stock Distribution (Rakitan ke Pabrik) — Pengiriman barang komponen rakitan dari gudang asal/pusat ke pabrik perakitan.
*   **`9585`**: Stock Reception (Rakitan ke Pabrik) — Konfirmasi penerimaan komponen rakitan oleh pihak pabrik perakitan.

### 1.2 Distribusi ke Distribution Center (DC)
*   **`3683`**: Transfer Stok to DC — Pengiriman stok produk dari gudang pabrik/utama menuju Distribution Center.
*   **`3685`**: Stock Reception (Transfer Stok) — Konfirmasi penerimaan barang oleh Distribution Center.

---

## 2. Alur Mutasi Persediaan & Penguncian Stok (Locker)

### 2.1 Alur Transit Stok (2-Step Verification)
1.  **Pengiriman (Step 1 - `3683` / `9583`):** 
    *   Mengurangi stok di gudang asal dengan status `active`.
    *   Memasukkan stok ke status transit (`moved` atau ditandai dalam locker transit) agar tidak bisa dipakai oleh gudang asal maupun gudang tujuan sebelum serah terima selesai.
    *   Pencatatan mutasi stok wajib menggunakan **`penulisan ganda stock locker`** untuk menulis ke tabel stok utama dan variant.
2.  **Penerimaan (Step 2 - `3685` / `9585`):**
    *   Merilis status transit dari database.
    *   Menambahkan kuantitas ke status `active` di gudang tujuan (pabrik atau DC).

### 2.2 Serial Number Tracking
*   Menggunakan komponen **`ProdukSerialNumberLocker`** dan **`ProdukSerialNumberExtractor`** untuk memvalidasi bahwa serial number fisik yang diterima sama persis dengan yang dikirim dari gudang asal.

---

## 3. Penjurnalan Otomatis (Jurnal Akuntansi)

Karena pengiriman bersifat antar-cabang atau antar-gudang dalam entitas yang sama, modul ini menjurnal mutasi persediaan dalam perjalanan (*Inventory in Transit*):
*   **Saat Pengiriman (`3683`):**
    *   **Debet:** `1010030040` (Persediaan dalam Perjalanan)
    *   **Kredit:** `1010030030` (Persediaan Produk Jadi - Gudang Asal)
*   **Saat Penerimaan (`3685`):**
    *   **Debet:** `1010030030` (Persediaan Produk Jadi - Gudang Tujuan / DC)
    *   **Kredit:** `1010030040` (Persediaan dalam Perjalanan)
*   Menggunakan komponen **`RekeningPembantuAntarcabang`** jika pengiriman melewati batas entitas cabang yang berbeda.

---

## 🛠️ Lampiran Teknis (Hasil Audit Codebase)

### Berkas Konfigurasi Utama:
- `coTransaksiCore.php`

### Kode Transaksi (`jenisTr`) Terdaftar:
- **`3683`**
- **`3683r`**
- **`3683sc`**
- **`3685`**
- **`9583`**
- **`9583r`**
- **`9585`**

### Komponen Bisnis (`components`) Terlibat:
- `FifoAverage`
- `FifoProdukJadi`
- `FifoProdukJadiRakitan`
- `Jurnal`
- `Jurnal_activity`
- `Jurnal_activityMain`
- `LockerStock`
- `LockerStockMutasi`
- `LockerStockProduksi`
- `PriceUpdater`
- `ProdukSerialNumberExtractor`
- `ProdukSerialNumberLocker`
- `Rekening`
- `RekeningPembantuAntarcabang`
- `RekeningPembantuProduk`
- `RekeningPembantuProdukPerSerial`
