﻿# WORKFLOW MODUL KONVERSI

## 1. Tujuan
Dokumen ini menjadi acuan alur kerja modul `konversi` untuk transaksi konversi produk, termasuk support produk varian pada selector dan shopping cart.

## 2. Referensi Konfigurasi
- `application/modules/konversi/config/coTransaksiUi.php`
- Jenis transaksi utama:
  - `1334` (pusat)
  - `334` (cabang)

## 3. Step Transaksi (Sesuai Config)
Workflow transaksi di modul `konversi` adalah 2 step:

1. `request` (step 1)
2. `approve` (step 2)

### 3.1 Konversi Pusat (`1334`)
1. Step 1
- Label: `product conversion request`
- Target dokumen: `1334r`
- State: `pending approval`

2. Step 2
- Label: `product conversion`
- Source: `1334r`
- Target dokumen: `1334`
- State: `sent`

### 3.2 Konversi Cabang (`334`)
1. Step 1
- Label: `conversion request`
- Target dokumen: `334r`
- State: `pending approval`

2. Step 2
- Label: `conversion`
- Source: `334r`
- Target dokumen: `334`
- State: `sent`

Catatan:
- Mode varian/non-varian bukan jumlah step transaksi.
- Step transaksi tetap 2, baik source varian maupun non-varian.

## 4. Kontrak Session Cart
Session utama transaksi:
- `$_SESSION[$cCode]['main']`
- `$_SESSION[$cCode]['items']`
- `$_SESSION[$cCode]['items2']`
- `$_SESSION[$cCode]['items2_sum']`

Aturan:
1. `items` adalah source of truth baris source.
2. View shopping cart membaca `items` apa adanya dari session aktif.
3. Jika ada normalisasi/rebuild, hasil wajib disimpan kembali ke `items` sebelum render.

## 5. Pola Identity Item
### 5.1 Source Non-Varian
- Key session mengikuti pola existing (produk master).
- `item_type=produk`
- `variant_id=0`

### 5.2 Source Varian
- Key session: `variant:{produk_id}:{variant_id}`
- `item_type=variant`
- `variant_id>0`

### 5.3 Dua Varian dari Master yang Sama
Jika source memilih 2 varian dari master produk yang sama, wajib menjadi 2 baris terpisah.

Contoh:
- `variant:1743:15`
- `variant:1743:16`

Larangan:
- Tidak boleh merge dua varian berbeda ke satu baris hanya karena `produk_id` sama.

## 6. Flow Selector ke Shopping Cart
1. User pilih source dari selector.
2. Jika produk non-varian: langsung masuk `items`.
3. Jika produk varian: pilih varian lalu masuk `items` dengan key `variant:{pid}:{vid}`.
4. Shopping cart wajib menampilkan source terlebih dahulu.
5. Pairing target diisi setelah source muncul.

## 7. Flow Pairing Target
1. Target dipilih pada row source (paired item).
2. Nilai target disimpan ke `items2` / `items2_sum` untuk kebutuhan validasi distribusi.
3. Target boleh non-varian atau varian.
4. Validasi dasar:
- source harus ada
- target harus dipilih
- qty target mengikuti rule distribusi source

## 8. Aturan UI Penting
1. Pesan `target belum dipilih` tidak boleh menutupi tabel source.
2. Empty state harus dibedakan:
- source kosong
- source ada tapi target kosong
3. Selector JS/DOM untuk key varian harus aman dari karakter `:`.

## 9. Dampak ke Approval
Dokumen tidak boleh lanjut ke approve jika:
1. source belum ada
2. target belum dipilih
3. rule distribusi qty tidak terpenuhi

## 10. Ringkasan
- Workflow transaksi modul `konversi`: tetap 2 step (`request` -> `approve`).
- Support varian ada di level identity item dan pairing target, bukan tambahan step.
- Session cart wajib konsisten: `view = session`.
