# BLUEPRINT CETAK BIRU MODUL: KONVERSI VARIAN PRODUK & SUPPLIES
**Modul:** `konversi_varian`  
**Workspace:** `new_san_variant`  
**Standard:** Single Variant Standard & Dual-Write Rollout  
**Tanggal Analisis:** 2026-07-29  

---

## 1. IDENTITAS MODUL

- **Nama Modul:** `konversi_varian`
- **Pola Kompleksitas:** **Transaksi Kompleks** (Konversi Antar Varian Produk Produk A -> Varian B, Konversi Varian Supplies / Bahan Penolong via `_processSelectSuppliesConvertion`, Rebalance Dual-Write Stock Locker `stock_locker_variant` & `stock_locker_supplies_variant`).
- **Jenis Transaksi (`jenisTr`):**
  - `881`  : Konversi Varian Produk (Inter-Variant Conversion e.g. Warna Merah XL -> Hitam L)
  - `7881` : Konversi Varian Supplies (Inter-Variant Auxiliaries Conversion)

---

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

### 2.1 Base Controller & Configuration

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

---

### 2.2 Entry Konversi Varian & Process Handlers

#### [_processSelectProductConvertion.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/konversi_varian/controllers/_processSelectProductConvertion.php) & [_processSelectSuppliesConvertion.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/konversi_varian/controllers/_processSelectSuppliesConvertion.php)
- **Fungsi Variant Conversion Engine**:
  - *Logic*: Pengurangan varian sumber (`variant_id_asal`) dan pembentukan varian target (`variant_id_tujuan`) pada produk sejenis maupun antar-produk.
  - Memasang lock state `hold` pada varian sumber via `ComLockerStockDualWrite` / `ComLockerStockSuppliesDualWrite`.

#### [Create.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/konversi_varian/controllers/Create.php)
- **Fungsi `index()`, `preview()`, `save()`**: Entry draf mutasi konversi antar-varian.

---

### 2.3 Executing & FollowUp Approval

#### [FollowUp.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/konversi_varian/controllers/FollowUp.php)
- **Fungsi `doFollowup()`** *(Execution Variant Conversion)*:
  - *Query & Models*:
    1. **Dual-Write Stock Rebalancing**:
       - Memanggil `ComLockerStockDualWrite::pair()` untuk mengurangi stok `variant_id_asal` (`-active`) dan menambah stok `variant_id_tujuan` (`+active`).
       - Memanggil `ComLockerStockSuppliesDualWrite::pair()` jika berupa konversi varian supplies (`7881`).
    2. **Jurnal Konversi Varian**: Memanggil `ComJurnal` mencatat Persediaan Varian Target (D) vs Persediaan Varian Sumber (K).
    3. **Registry Update**: Log step registrasi di `transaksi_registry`.

---

## 3. IDENTIFIKASI PERBEDAAN DENGAN MOCKUP GLOBAL

| No | Komponen / Fitur Unik | Deskripsi & Perbedaannya dengan Mockup Standar |
|:--:|:----------------------|:------------------------------------------------|
| 1 | **Inter-Variant Converter Engine (`_processSelectProductConvertion`)** | Sub-controller khusus yang memetakan relasi `variant_id_asal` dan `variant_id_tujuan`. |
| 2 | **Dual-Write Variant Locker Sync** | Sinkronisasi mutasi stok bervarian pada `stock_locker_variant` dan `stock_locker_supplies_variant`. |

---

## 4. ARSITEKTUR KODE BARU (THE BLUEPRINT)

### 4.1 Struktur Controller Baru

```
application/modules/konversi_varian/
├── config/
│   ├── coTransaksiCore.php
│   ├── coTransaksiUi.php
│   ├── coTransaksiLayout.php
│   └── coTransaksiValues.php
├── controllers/
│   ├── Modul_Controller.php       # Base controller
│   ├── Create.php                 # Form Variant Conversion Entry
│   ├── FollowUp.php               # Approval & Execution Variant Rebalance
│   ├── Transaksi.php              # Variant Conversion Order List
│   ├── ActivityReport.php         # Laporan Konversi Varian
│   ├── History.php                # Riwayat Konversi Varian
│   ├── Printing.php               # Cetak Voucher Konversi Varian
│   ├── ViewDetails.php            # Modal Detail (Multi-Variant Safe)
│   ├── _processSelectProductConvertion.php # Product Variant Conversion Engine
│   ├── _processSelectSuppliesConvertion.php # Supplies Variant Conversion Engine
│   └── _shoppingCart.php          # Cart Manager
└── views/
    ├── transaksi_modul.php
    ├── shoppingCart.php
    └── printing.php
```

---

### 4.2 Panduan Langkah-demi-Langkah Developer

1. **Langkah 1: Gunakan `ComLockerStockDualWrite` pada `_processSelectProductConvertion.php`**
   - Pastikan mutasi varian sumber -> target memproses `stock_locker_variant` dengan benar.

2. **Langkah 2: Gunakan `ComLockerStockSuppliesDualWrite` untuk Supplies Varian (`7881`)**
   - Pastikan cart key `supplies:{id}:{variant_id}` diproses via dual-write supplies.

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 `konversi_varian` diselesaikan.
  2. File [blueprint_konversi_varian.md](file:///c:/xampp/htdocs/new_san_variant/blueprint_konversi_varian.md) dan `dev-jurnal.md` diterbitkan.
