# BLUEPRINT CETAK BIRU MODUL: PINDAH GUDANG (STOCK TRANSFER)
**Modul:** `pindahgudang`  
**Workspace:** `new_san_variant`  
**Standard:** Single Variant Standard & Dual-Write Rollout  
**Tanggal Analisis:** 2026-07-29  

---

## 1. IDENTITAS MODUL

- **Nama Modul:** `pindahgudang`
- **Pola Kompleksitas:** **Transaksi Kompleks** (Transfer Stok Antar-Gudang & Antar-Cabang, Inter-Warehouse In-Transit State, Dual-Write Stock Rebalancing Gudang Asal <-> Gudang Tujuan, & Transfer Supplies via `_processSelectSupplies`).
- **Jenis Transaksi (`jenisTr`):**
  - `587` : Transfer Stok Kirim (Pengiriman Barang Antar-Gudang)
  - `687` : Transfer Stok Terima (Penerimaan Barang Antar-Gudang)
  - `1587`: Transfer Antar-Cabang Kirim
  - `1687`: Transfer Antar-Cabang Terima
  - `5587`: Transfer Supplies Kirim
  - `6687`: Transfer Supplies Terima

---

## 2. DAFTAR FUNGSI & LOGIKA BISNIS (REVERSE ENGINEERING)

### 2.1 Base Controller & Configuration

#### [Modul_Controller.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/pindahgudang/controllers/Modul_Controller.php)
- **Fungsi `__construct()`**: Load config `coTransaksiUi`, `coTransaksiCore`, `coTransaksiLayout`, `coTransaksiValues`.

---

### 2.2 Entry Transfer & Warehouse Selection Engine

#### [Create.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/pindahgudang/controllers/Create.php)
- **Fungsi `index()`, `preview()`, `save()`**: Entry form pemilihan Gudang Asal (`gudang_id_asal`), Gudang Tujuan (`gudang_id_tujuan`), & daftar item barang bervarian yang dipindahkan.

---

### 2.3 Executing & FollowUp Approval

#### [FollowUp.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/pindahgudang/controllers/FollowUp.php)
- **Fungsi `doFollowup()`** *(Execution Stock Transfer)*:
  - *Query & Models*:
    1. **Stock Rebalancing**:
       - Pada Pengiriman (`587` / `1587`): Kurangi stok active gudang asal (`-active`) dan tambahkan stok transit (`+hold` / `in-transit`) via `ComLockerStockDualWrite::pair()`.
       - Pada Penerimaan (`687` / `1687`): Kurangi stok transit (`-hold`) dan tambahkan stok active gudang tujuan (`+active`) via `ComLockerStockDualWrite::pair()`.
    2. **Jurnal Transfer**: Memanggil `ComJurnal` mencatat Persediaan Dalam Perjalanan / Persediaan Gudang Tujuan (D) vs Persediaan Gudang Asal (K).
    3. **Registry Update**: Record log di `transaksi_registry`.

---

## 3. IDENTIFIKASI PERBEDAAN DENGAN MOCKUP GLOBAL

| No | Komponen / Fitur Unik | Deskripsi & Perbedaannya dengan Mockup Standar |
|:--:|:----------------------|:------------------------------------------------|
| 1 | **Dual-Warehouse Rebalancing (`ComLockerStockDualWrite`)** | Pengelolaan stok 2 tempat sekaligus (Gudang Asal & Gudang Tujuan) untuk stok barang & varian. |
| 2 | **Inter-Branch Transit Transfer (`viewIncompleteStepAntarCabang`)** | Pengelolaan status transaksi transfer antar-cabang yang membutuhkan konfirmasi terima dari cabang penerima. |

---

## 4. ARSITEKTUR KODE BARU (THE BLUEPRINT)

### 4.1 Struktur Controller Baru

```
application/modules/pindahgudang/
├── config/
│   ├── coTransaksiCore.php
│   ├── coTransaksiUi.php
│   ├── coTransaksiLayout.php
│   └── coTransaksiValues.php
├── controllers/
│   ├── Modul_Controller.php       # Base controller
│   ├── Create.php                 # Form Stock Transfer Entry
│   ├── FollowUp.php               # Approval & Reception Execution
│   ├── Transaksi.php              # Transfer Order List
│   ├── ActivityReport.php         # Laporan Pindah Gudang
│   ├── History.php                # Riwayat Transfer
│   ├── Printing.php               # Cetak Surat Jalan Pindah Gudang
│   ├── ViewDetails.php            # Modal Detail (Multi-Variant Safe)
│   └── _shoppingCart.php          # Cart Manager
└── views/
    ├── transaksi_modul.php
    ├── shoppingCart.php
    └── printing.php
```

---

### 4.2 Panduan Langkah-demi-Langkah Developer

1. **Langkah 1: Terapkan Dual-Write Stock Rebalancing pada `FollowUp.php`**
   - Pastikan `ComLockerStockDualWrite::pair()` meng-update stok Gudang Asal dan Gudang Tujuan secara simetris.

2. **Langkah 2: Verifikasi Status In-Transit Antar-Cabang**
   - Pastikan transaksi kirim tidak langsung menambah stok gudang tujuan sebelum dilakukan proses terima (`687`/`1687`).

3. **Langkah 3: Verifikasi PHP 5.6 & Update UAT Checklist**
   - Lakukan linting `C:\xampp\php\php.exe -l` dan update `docs/uat-checklist.md`.

---

### 5. KESIMPULAN & STATUS EKSEKUSI

- 🟢 **Pekerjaan Selesai (Completed & Verified)**:
  1. Blueprint modul `pindahgudang` diselesaikan.
  2. File [blueprint_pindahgudang.md](file:///c:/xampp/htdocs/new_san_variant/blueprint_pindahgudang.md) dan `dev-jurnal.md` diterbitkan.
