# 📋 Dokumen Skenario & Checklist UAT (User Acceptance Testing)
## Modul: Master Project (588) — Standardisasi 3 Kolom Finansial Wajib

---

### 📌 Ringkasan Fitur yang Diuji
Standardisasi 3 pilar angka finansial pada seluruh siklus hidup modul **Master Project (588)**:
1. **HPP Modal**: Modal riil pengadaan barang/jasa dari Supplier / Master Data dasar (`hpp` / `hrg_hpp` / `hpp_supplier` / `nilai`).
2. **Harga Budget**: Plafon batas anggaran belanja internal yang dialokasikan Sales/Estimator untuk tim Purchasing/Pengadaan (`harga_budget`).
3. **Harga Jual Project**: Harga resmi yang ditawarkan dan ditagihkan kepada Customer / Klien (`harga`).

---

## 🏷️ Matrix Pengujian & Skenario UAT

### 1. 🛒 Tahap Penawaran / Shopping Cart (Draft Proyek)
| No | Skenario Pengujian | Langkah Pengujian | Hasil yang Diharapkan (Expected Result) | Hasil Aktual | Status |
| :---: | :--- | :--- | :--- | :--- | :---: |
| **1.1** | **Tampilan 3 Kolom pada Tabel Material** | Buka form pembuatan penawaran proyek, lalu tambahkan item material (barang fisik). | Tabel material menampilkan 3 kolom harga: <br>1. **`HPP Modal`** <br>2. **`Harga Budget`** <br>3. **`Harga Jual`** | | [ ] Pass<br>[ ] Fail |
| **1.2** | **Tampilan 3 Kolom pada Tabel Biaya / Jasa** | Tambahkan item jasa/biaya pada form penawaran. | Tabel biaya menampilkan 3 kolom harga: <br>1. **`HPP Biaya`** <br>2. **`Budget Biaya`** <br>3. **`Harga Jual`** | | [ ] Pass<br>[ ] Fail |
| **1.3** | **Live Calculation Footer Real-Time** | Ubah angka `Harga Budget`, `Harga Jual`, atau `Qty` pada baris material/biaya. | Baris ringkasan footer langsung ter-update otomatis tanpa refresh: <br>• *Total HPP (Modal)* = $\sum(\text{HPP} \times \text{Qty})$ <br>• *Total Budget Anggaran* = $\sum(\text{Budget} \times \text{Qty})$ <br>• *Total Rincian Item (Jual)* = $\sum(\text{Jual} \times \text{Qty})$ <br>• *Estimasi Laba Kotor* = $\text{Total Jual} - \text{Total HPP}$ | | [ ] Pass<br>[ ] Fail |
| **1.4** | **Proteksi Nilai Jual < HPP Modal** | Masukkan `Harga Jual` lebih kecil daripada `HPP Modal` pada salah satu item. | Sistem memunculkan dialog konfirmasi (*SweetAlert warning*) bahwa harga jual di bawah modal sebelum mengizinkan penyimpanan. | | [ ] Pass<br>[ ] Fail |
| **1.5** | **Dukungan Input Angka Nol (0)** | Masukkan angka `0` pada kolom `Harga Budget` atau `Harga Jual`. | Nilai `0` tetap tersimpan dan terhitung (tidak hilang/ter-reset ke nilai default). | | [ ] Pass<br>[ ] Fail |

---

### 2. 🔍 Tahap Review Transaksi & Approval Kickoff (FollowUp)
| No | Skenario Pengujian | Langkah Pengujian | Hasil yang Diharapkan (Expected Result) | Hasil Aktual | Status |
| :---: | :--- | :--- | :--- | :--- | :---: |
| **2.1** | **Ringkasan Eksekutif Atas (Preview)** | Buka menu FollowUp / Approval untuk proyek yang diajukan. | Tabel Ringkasan Eksekutif atas menampilkan kolom: <br>`No` \| `Project Desc` \| `Qty` \| `Total HPP (Modal)` \| `Total Budget` \| `Total Jual Project` \| `Estimasi Profit` \| `Margin %`. | | [ ] Pass<br>[ ] Fail |
| **2.2** | **Mini Table Detail Material & Biaya** | Klik/buka rincian breakdown accordion per produk pada halaman preview. | Mini table material dan jasa menyajikan kolom `HPP Modal/Biaya`, `Harga/Budget Biaya`, `Harga Jual`, serta footer subtotal 3 pilar. | | [ ] Pass<br>[ ] Fail |
| **2.3** | **Footer Box Accordion** | Periksa bagian sub-box ringkasan bawah pada halaman preview. | Menampilkan 3 pilar finansial: <br>1. *Total Jual Project* <br>2. *Total Budget Anggaran* <br>3. *Total HPP (Modal)*. | | [ ] Pass<br>[ ] Fail |
| **2.4** | **Eksekusi Approval & Persistensi DB** | Klik tombol **Setujui / Approve Kickoff Project**. | 1. Transaksi berhasil diapprove tanpa error. <br>2. Nilai `harga_budget` tersimpan sah ke tabel database `project_komposisi`, `project_komposisi_workoder`, dan `project_komposisi_sub_workoder`. | | [ ] Pass<br>[ ] Fail |

---

### 3. 📊 Tahap Proyek Berjalan & Monitoring RAB (MasterData)
| No | Skenario Pengujian | Langkah Pengujian | Hasil yang Diharapkan (Expected Result) | Hasil Aktual | Status |
| :---: | :--- | :--- | :--- | :--- | :---: |
| **3.1** | **Tabel Ringkasan Anggaran Master Proyek** | Buka halaman detail master proyek aktif (`MasterData/data/{id}`). | Tabel *Ringkasan Anggaran* memuat kolom: <br>`No` \| `Rencana Kerja` \| `Qty` \| `Total HPP` \| `Total Budget` \| `Total Rincian` \| `Nilai Kontrak`. | | [ ] Pass<br>[ ] Fail |
| **3.2** | **Baris Total Budget pada Footer MasterData** | Periksa footer tabel Ringkasan Anggaran. | Terdapat baris **`Total Budget Anggaran:`** di samping `Total Modal (HPP)`, `Total Rincian Item (Jual)`, dan `Nilai Kontrak Project`. | | [ ] Pass<br>[ ] Fail |
| **3.3** | **Modal Dialog Item Editor (Revisi BOM)** | Buka tombol *Edit Setting RAB / Tambah Item* pada proyek yang di-unlock. | Saat menambah/mengedit material atau biaya di modal dialog, field `Harga Budget` terisi nilai yang sesuai dan tersimpan saat disubmit. | | [ ] Pass<br>[ ] Fail |

---

### 4. 🛡️ Integritas Data & Kompatibilitas Sistem
| No | Skenario Pengujian | Langkah Pengujian | Hasil yang Diharapkan (Expected Result) | Hasil Aktual | Status |
| :---: | :--- | :--- | :--- | :--- | :---: |
| **4.1** | **Kompatibilitas PHP 5.6 & CI3** | Jalankan seluruh alur transaksi dari penawaran s.d. master project. | Tidak muncul PHP error, warning, notice, atau layar putih (*blank page*). | | [ ] Pass<br>[ ] Fail |
| **4.2** | **Preservasi Data Proyek Lama (Backward Compatibility)** | Buka proyek lama yang dibuat sebelum standardisasi 3 kolom. | Proyek lama tetap dapat dibuka normal (jika `harga_budget` lama bernilai 0, sistem fallback menampilkan `harga` jual sebagai estimasi budget). | | [ ] Pass<br>[ ] Fail |

---

## ✍️ Lembar Tanda Tangan & Persetujuan UAT

| Peran | Nama Terang | Tanggal Pengujian | Tanda Tangan / Status |
| :--- | :--- | :--- | :---: |
| **Tester / QA** | | | [ ] Approved / [ ] Rejected |
| **Product Owner / Estimator** | | | [ ] Approved / [ ] Rejected |
| **Developer / Engineer** | | | [ ] Approved / [ ] Rejected |
