﻿# WORKFLOW MODUL VARIANT_CUTOVER

## 1. Tujuan
Dokumen ini menjadi acuan alur transaksi modul `variant_cutover` untuk memindahkan stok produk parent ke stok varian secara terkendali.

## 2. Referensi Konfigurasi
- `application/modules/variant_cutover/config/coTransaksiUi.php`
- Jenis transaksi utama:
  - `7881` (pusat)
  - `881` (cabang)

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

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

### 3.1 Cutover Cabang (`881`)
1. Step 1
- Label: `#request stock varian cutover (CABANG)`
- Target dokumen: `881r`
- State: `pending approval`

2. Step 2
- Label: `#approve stock varian cutover (CABANG)`
- Source: `881r`
- Target dokumen: `881`
- State: `sent`

### 3.2 Cutover Pusat (`7881`)
1. Step 1
- Label: `#request stock variant cutover (PUSAT)`
- Target dokumen: `7881r`
- State: `pending approval`

2. Step 2
- Label: `#approve stock variant cutover (PUSAT)`
- Source: `7881r`
- Target dokumen: `7881`
- State: `sent`

Catatan:
- Step transaksi tetap 2.
- Perbedaan pusat/cabang ada pada `place`, `userGroup`, dan kebijakan operasional gudang.

## 4. Lifecycle Session Cutover
Session utama transaksi:
- `$_SESSION[$cCode]['main']`
- `$_SESSION[$cCode]['items']` (source parent)
- `$_SESSION[$cCode]['items2']` (list target varian per source)
- `$_SESSION[$cCode]['items2_sum']` (ringkasan distribusi varian)

Urutan lifecycle:
1. Source parent dipilih -> masuk `items`.
2. Sistem menyiapkan kandidat varian target -> `items2`.
3. User isi alokasi qty per varian.
4. Ringkasan alokasi dihitung -> `items2_sum`.
5. Validasi qty source vs total varian.
6. Jika valid, transaksi bisa lanjut approve.

## 5. Rule Alokasi Qty
1. Untuk setiap source parent, total qty varian target harus sama dengan qty source.
2. Tidak boleh ada qty varian negatif.
3. Tidak boleh ada alokasi ke varian yang bukan milik parent source.
4. Jika mismatch, approval harus diblok.

## 6. Rule Stok dan Hold
1. Source stock dibaca dari locker stock aktif sesuai filter transaksi.
2. Saat source dipilih, mekanisme hold/lock source harus mencegah double use.
3. Pada rollback/failure, lock harus dilepas kembali.

## 7. Rule UI
1. Baris source harus tampil dulu sebelum user alokasi varian.
2. Warning `alokasi varian belum lengkap` hanya berlaku pada section target.
3. Pesan cart kosong source tidak boleh dipakai jika source sudah ada.

## 8. Guardrail Approval
Transaksi cutover tidak boleh approve jika salah satu kondisi ini terjadi:
1. source belum ada
2. target varian belum diisi
3. total alokasi tidak balance
4. validasi stok/lock gagal

## 9. Ringkasan
- Modul `variant_cutover` menggunakan 2 step transaksi (`request` -> `approve`) untuk pusat (`7881`) dan cabang (`881`).
- Inti proses ada pada distribusi qty parent ke varian dengan kontrol balance yang ketat.
- Session `items/items2/items2_sum` wajib konsisten sampai approval.
