# QA Checklist Integrasi Varian di Estimates

## Tujuan
Memastikan alur Estimates untuk produk varian dan non-varian berjalan konsisten, aman, dan tidak merusak alur lama.

## Prasyarat
- Tabel `rise_estimate_items` sudah memiliki kolom:
  - `variant_id`
  - `variant_sku`
  - `variant_label`
  - `variant_snapshot`
- Data master tersedia:
  - minimal 1 produk tanpa varian
  - minimal 1 produk dengan 2+ varian aktif
  - minimal 1 varian nonaktif
- User QA punya akses membuat dan mengubah Estimate.

## Skenario Uji

| ID | Skenario | Langkah Uji | Hasil Diharapkan |
|---|---|---|---|
| EV-01 | Tambah item non-varian | Buka estimate -> Add item -> pilih produk non-varian -> isi qty -> simpan | Baris item tersimpan normal, tanpa data varian |
| EV-02 | Tambah item varian (1 varian) | Add item -> pilih produk varian -> isi qty di mini tabel untuk 1 varian -> simpan | 1 baris item tersimpan dengan `variant_id` terisi |
| EV-03 | Tambah item varian (multi varian sekali submit) | Add item -> pilih produk varian -> isi qty pada 2+ varian -> simpan | Terbentuk beberapa baris item (per varian) dalam 1 submit |
| EV-04 | Merge varian yang sama | Pastikan estimate sudah punya baris untuk varian X -> Add item lagi varian X -> simpan | Tidak membuat baris baru; quantity pada baris varian X bertambah |
| EV-05 | Varian berbeda tidak merge | Add item produk sama tapi varian Y (berbeda dari X) | Dibuat baris terpisah untuk varian Y |
| EV-06 | Validasi qty bulk | Add item produk varian -> semua qty varian = 0 -> simpan | Submit ditolak, muncul pesan `please_input_variant_quantity` |
| EV-07 | Validasi edit mode varian | Edit baris item varian -> kosongkan dropdown varian -> simpan | Submit ditolak, muncul pesan `please_select_variant` |
| EV-08 | Harga ikut parent | Tambah item varian apa pun | `rate` dan `rate_netto` mengikuti harga parent item, bukan harga varian |
| EV-09 | Validasi pasangan item-variant (server-side) | Kirim request tampered: `item_id` A + `variant_id` milik item B | Ditolak dengan pesan `invalid_variant_for_item` |
| EV-10 | Varian nonaktif | Coba pilih/submit varian nonaktif (via request manual) | Ditolak, tidak tersimpan |
| EV-11 | Pencarian SKU varian | Ketik SKU varian di kolom pencarian item | Produk parent muncul di suggestion |
| EV-12 | Tampilan baris estimate | Simpan item varian -> lihat tabel item estimate | Label varian tampil di bawah judul item |
| EV-13 | Preview dan PDF | Buka preview / generate PDF untuk estimate berisi varian | Label varian tampil pada output dokumen |
| EV-14 | Backward compatibility | Buka estimate lama (sebelum fitur varian), edit item non-varian | Tetap bisa disimpan tanpa error/regresi |

## Verifikasi Data DB (spot check)
- Jalankan query pada estimate yang baru diuji:

```sql
SELECT id, estimate_id, item_id, quantity, rate, rate_netto, total,
       variant_id, variant_sku, variant_label
FROM rise_estimate_items
WHERE estimate_id = :estimate_id
ORDER BY id ASC;
```

- Untuk item varian:
  - `variant_id` tidak null
  - `variant_sku`/`variant_label` terisi
  - `rate` sama dengan harga parent
- Untuk item non-varian:
  - kolom varian null

## Kriteria Lulus
- Semua skenario EV-01 s.d. EV-14 lulus.
- Tidak ada error 500/JS error pada add/edit item estimate.
- Nilai total estimate tetap akurat setelah merge varian.
