# UAT Checklist — Modul Konversi Varian Produk

## Test Environment
- Web: `\\192.168.5.14\web\san_staging`
- Module: `konversi`
- Transaction types: `1334` (pusat), `334` (cabang)

---

## TC-1: Flow Non-Varian (Regression — M4 Existing)

### TC-1.1: Create Transaksi Non-Varian (1334)
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka `Create/1334/` | Form tampil tanpa error | ☐ |
| 2 | Pilih produk sumber (non-varian) | Produk masuk ke items/source gate | ☐ |
| 3 | Set qty, klik "Proses Konversi" | Konversi HPP jalan | ☐ |
| 4 | Pilih produk target (non-varian) | Produk masuk ke items2/target gate | ☐ |
| 5 | Set qty target, klik "Lanjut" | Redirect ke preview | ☐ |
| 6 | Klik "Simpan" | Transaksi tersimpan, laporan muncul | ☐ |

### TC-1.2: Create Transaksi Non-Varian (334)
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka `Create/334/` | Form tampil tanpa error | ☐ |
| 2-6 | Sama seperti TC-1.1 step 2-6 | Berhasil simpan | ☐ |

### TC-1.3: Follow-Up Non-Varian
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka history, klik follow-up transaksi non-varian | Preview follow-up tampil | ☐ |
| 2 | Klik "Setuju"/Approve | Status berubah, LockerStock release | ☐ |
| 3 | Cek `stock_locker` | Source hold release, target active | ☐ |
| 4 | Cek `fifo_produk_jadi` | FIFO entries created/released | ☐ |

### TC-1.4: Reject Non-Varian
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka history transaksi non-varian yg pending | Tombol reject ada | ☐ |
| 2 | Klik reject | LockerStock di-reverse, stok kembali | ☐ |

---

## TC-2: Flow Varian (New Feature)

### TC-2.1: Create Transaksi Varian (1334)
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka `Create/1334/` dengan produk varian-enabled | `variant_mode_enabled` = true di session | ☐ |
| 2 | Pilih produk sumber (non-varian) | Produk masuk items/source | ☐ |
| 3 | Set qty sumber, klik "Proses Konversi" | HPP source terhitung | ☐ |
| 4 | Pilih produk target **varian** | Dialog muncul: pilih varian + qty per varian | ☐ |
| 5 | Isi qty varian (contoh: Varian A=5, Varian B=5) | Sub-tabel varian tampil di shopping cart | ☐ |
| 6 | Edit qty varian inline (`onblur`) | Qty varian terupdate | ☐ |
| 7 | Total varian == master target qty | Balance OK, validasi lolos | ☐ |
| 8 | Klik "Lanjut" | Redirect ke preview | ☐ |
| 9 | Cek preview — seksi items2_sum tampil varian | True | ☐ |

### TC-2.2: Save Transaksi Varian
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Dari preview varian, klik "Simpan" | Transaksi tersimpan | ☐ |
| 2 | Cek DB `transaksi_data` — `produk_jenis = 'produk_source'` | Data source items masuk | ☐ |
| 3 | Cek DB `transaksi_data` — `produk_jenis = 'produk_target'` | Data target varian masuk, `variant_id` terisi | ☐ |
| 4 | Cek `fifo_produk_jadi` | FIFO source release (non-varian) | ☐ |
| 5 | Cek `fifo_produk_jadi` | FIFO target (non-varian) untuk parent produk | ☐ |
| 6 | Cek `fifo_produk_jadi_varian` | FIFO varian terisi per `variant_id` | ☐ |
| 7 | Cek `stock_locker` | Locker source hold release | ☐ |
| 8 | Cek `stock_locker` (items2_sum) | Locker target parent (.active) | ☐ |
| 9 | Cek `stock_locker_variant` | Locker varian per `variant_id` (.active) | ☐ |
| 10 | Cek `stock_locker_variant` mutate | Mutasi varian tercatat | ☐ |

### TC-2.3: Follow-Up Transaksi Varian
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka history, pilih transaksi varian — klik follow-up | Preview follow-up tampil tanpa error | ☐ |
| 2 | Approve | Processing selesai | ☐ |
| 3 | Cek `stock_locker_variant` setelah approve | Locker varian tetap active (final) | ☐ |

### TC-2.4: Reject Transaksi Varian
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Buka pending transaksi varian — klik reject | Proses rollback jalan | ☐ |
| 2 | Cek `stock_locker_variant` | Locker varian reversed (qty_debet terbalik) | ☐ |
| 3 | Cek `fifo_produk_jadi_varian` | FIFO varian status berubah/rollback | ☐ |

---

## TC-3: Edge Cases

### TC-3.1: Balance Validation
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Pilih target varian, isi qty varian tidak balance (e.g. total varian < master target qty) | Validasi gagal, error pesan | ☐ |
| 2 | Isi qty varian balance | Validasi lolos | ☐ |

### TC-3.2: Mixed (Varian + Non-Varian) dalam Satu Transaksi
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Pilih 2 produk target: satu varian, satu non-varian | Flow berjalan, non-varian tanpa dialog varian | ☐ |
| 2 | Simpan | Data varian + non-varian masuk di tabel masing-masing | ☐ |

### TC-3.3: Back Navigation
| # | Step | Expected | OK? |
|---|------|----------|:---:|
| 1 | Setelah add varian, klik back | Session gates sumber/target tidak corrupt | ☐ |
| 2 | Add ulang, simpan | Berhasil | ☐ |

---

## TC-4: Data Integrity

### TC-4.1: DB Check — Non-Varian
| Tabel | Check | OK? |
|-------|-------|:---:|
| `transaksi_data` | `produk_jenis = 'produk_source'` — `variant_id` = 0/null | ☐ |
| `transaksi_data` | `produk_jenis = 'produk_target'` — data sama seperti sebelum upgrade | ☐ |
| `stock_locker` | Tidak ada data varian di tabel non-varian | ☐ |
| `fifo_produk_jadi` | Tidak ada data varian di tabel non-varian | ☐ |

### TC-4.2: DB Check — Varian
| Tabel | Check | OK? |
|-------|-------|:---:|
| `transaksi_data` | `produk_jenis = 'produk_target'` — `variant_id` terisi > 0 | ☐ |
| `fifo_produk_jadi_varian` | Entries sesuai `variant_id` | ☐ |
| `stock_locker_variant` | Entries sesuai `variant_id`, state = .active | ☐ |

---

## Summary

| Area | Status |
|------|:-----:|
| Non-Varian Regression (M4 existing) | ☐ Pass / ☐ Fail |
| Varian Flow | ☐ Pass / ☐ Fail |
| Edge Cases | ☐ Pass / ☐ Fail |
| Data Integrity | ☐ Pass / ☐ Fail |

**Tester:** _____________ &nbsp;&nbsp; **Date:** _____________
