# PANDUAN PELAKSANAAN USER ACCEPTANCE TESTING (UAT)
## MODUL MASTER_PROJECT (METODE GOLDEN CIRCLE & 5W+1H)

Dokumen ini memuat panduan lengkap, terstruktur, dan siap pakai untuk pelaksanaan User Acceptance Testing (UAT) pada modul **`master_project`**. Pendekatan pengujian disusun menggunakan integrasi kerangka kerja **Golden Circle** (*Why ➔ How ➔ What*) dan **5W + 1H** (*Why, How, Where, When, Who, What*).

---

## DIAGRAM KERANGKA KERJA PENGUJIAN

```
                  ┌──────────────────────────────────────────────┐
                  │                   1. WHY                     │
                  │   Mengapa UAT ini mutlak diperlukan?         │
                  │   (Purpose, Nilai Bisnis, Mitigasi Risiko)   │
                  └──────────────────────┬───────────────────────┘
                                         │
                  ┌──────────────────────▼───────────────────────┐
                  │                   2. HOW                     │
                  │   Bagaimana strategi & metodologinya?        │
                  │   (How, Where, When & Aturan Validasi)       │
                  └──────────────────────┬───────────────────────┘
                                         │
                  ┌──────────────────────▼───────────────────────┐
                  │                   3. WHAT                    │
                  │   Apa saja yang diuji & siapa pelakunya?     │
                  │   (Who, What - Matriks Skenario & Artefak)   │
                  └──────────────────────────────────────────────┘
```

---

## 1. THE "WHY" (Mengapa UAT Ini Mutlak Dilakukan?)

### 1.1 Latar Belakang & Tujuan
Modul `master_project` merupakan inti operasional bisnis proyek yang mengintegrasikan tiga pilar utama:
1. **Aspek Finansial:** Rencana Anggaran Biaya (RAB), estimasi HPP, nilai kontrak, PPN, dan realisasi biaya aktual.
2. **Aspek Operasional:** Work Order (WO), pembagian fase/area pekerjaan, pembagian tim, milestone/tasklist, dan kendali mutu (*Quality Control*).
3. **Aspek Logistik & Inventori:** Alokasi kebutuhan material proyek, integrasi stok gudang, dan transaksi pengeluaran material (`5882`).

### 1.2 Mitigasi Risiko Bisnis
UAT ini wajib dilaksanakan untuk memitigasi risiko-risiko krusial berikut:
* **Mencegah Kebocoran Anggaran (*Cost Overrun*):** Memastikan rumus kalkulasi RAB, DPP, PPN, dan margin laba berjalan akurat tanpa ada deviasi atau galat pembulatan desimal.
* **Mencegah Selisih Stok (*Stock Discrepancy*):** Memastikan material yang diambil tidak melebihi kuota alokasi proyek (*over-allocation*) dan stok gudang terpotong secara tepat dan konsisten.
* **Menghindari Konflik Concurrency:** Memastikan dua petugas tidak memproses, menyunting, atau mengeluarkan material pada proyek yang sama secara bersamaan tanpa mekanisme penguncian (*locker*).
* **Menjamin Akuntabilitas Lapangan:** Setiap progres fisik dan hasil inspeksi mutu (QC) tercatat dengan riwayat user dan waktu yang sah sebelum proyek ditutup (*closed*).

---

## 2. THE "HOW" (Bagaimana Strategi, Lokasi, dan Jadwal Pengujian?)

### 2.1 HOW (Metodologi & Mekanisme Pengujian)
Pengujian dilakukan menggunakan pendekatan **End-to-End Role-Based Testing** yang meniru siklus hidup nyata sebuah proyek dari awal hingga penutupan, dengan berpedoman pada prinsip:
1. **Validasi Awal (*Early Validation / Fail-Fast*):** Sistem harus segera menolak input yang tidak valid (misalnya kuantitas minus, alokasi melebihi batas, atau stok gudang tidak mencukupi) sebelum memproses transaksi database.
2. **Penguncian Transaksi (*Locker Mechanism*):** Sistem wajib memvalidasi lock aktif (`MdlLockerTransaksi`) pada transaksi pengeluaran material agar tidak terjadi eksekusi ganda (*double transaction*).
3. **Integritas Data Relasional:** Data tersimpan pada tabel master (`MdlProdukProject`) harus selalu sinkron dengan data rincian di tabel anak (`MdlProjectWorkOrder`, `MdlProjectKomposisi`, `MdlProjectKomponenBiayaDetailsRab`).

### 2.2 WHERE (Di Mana Pengujian Dilakukan?)
* **Lingkungan Pengujian (*Test Environment*):** Server **Staging / UAT** yang terpisah dari database produksi (menggunakan data master kloning: customer, material, biaya, dan saldo awal stok gudang).
* **Pemetaan Berkas & Endpoint Modul:**
  * Master Proyek, Tim, WO, RAB, Tasklist: `application/modules/master_project/controllers/MasterData.php`
  * Transaksi Realisasi & Pengeluaran Material: `application/modules/master_project/controllers/Create.php` dan `_shoppingCart.php`
  * Approval & Otorisasi Transaksi: `application/modules/master_project/controllers/FollowUp.php`
  * Editor Item & Komponen Biaya: `application/modules/master_project/controllers/_projectItemEditor.php` dan `_processSelectBiaya.php`
  * Dashboard & Monitoring Proyek: `application/modules/master_project/controllers/ViewDetails.php`
  * Cetak Dokumen SPK / BAST: `application/modules/master_project/controllers/Printing.php`
  * Laporan Aktivitas: `application/modules/master_project/controllers/ActivityReport.php`

### 2.3 WHEN (Kapan Jadwal Pelaksanaan?)
Pelaksanaan UAT dirancang dalam 4 fase terstruktur:

| Fase | Waktu | Aktivitas Utama | Output |
|---|---|---|---|
| **Fase 1: Pre-UAT** | H-2 s/d H-1 | Setup server staging, pembersihan data sampah, pembuatan akun tester per role, dan briefing skenario. | Lingkungan & data uji siap. |
| **Fase 2: Eksekusi UAT** | Hari H s/d H+2 | Pengujian skenario end-to-end oleh user lintas departemen sesuai matriks pengujian. | Log temuan (*Issue Tracker*). |
| **Fase 3: Bug Triage & Fix** | H+3 s/d H+4 | Developer memperbaiki temuan kategori *Blocker* dan *Major*, dilanjutkan verifikasi ulang (*re-test*). | Bug terverifikasi tuntas. |
| **Fase 4: Sign-Off** | H+5 | Evaluasi menyeluruh, pengisian Berita Acara UAT, dan persetujuan rilis ke produksi. | Dokumen Sign-Off ditandatangani. |

---

## 3. THE "WHAT" (Apa yang Diuji, Siapa yang Menguji, dan Apa Deliverables-nya?)

### 3.1 WHO (Siapa Saja yang Terlibat?)

| Peran Tester | Akun / Hak Akses | Tanggung Jawab Pengujian |
|---|---|---|
| **Project Manager / SPV** | `o_project_spv` | Inisiasi proyek, menyusun RAB, membagi WO, menugaskan tim kerja. |
| **Tim Pelaksana Lapangan** | Pelaksana Proyek | Mengisi log progres harian, melaporkan kendala tasklist. |
| **Quality Control (QC)** | Petugas QC | Melakukan inspeksi mutu, verifikasi checklist, approval *Pass/Reject*. |
| **Petugas Gudang** | `o_gudang` | Memproses transaksi pengeluaran material (`5882`), verifikasi ketersediaan stok fisik. |
| **Finance / Akuntansi** | `o_finance` | Memeriksa akurasi PPN, HPP, estimasi laba kotor, dan verifikasi akhir *closing*. |
| **QA / Test Coordinator** | Developer / QA | Memfasilitasi jalannya UAT, mencatat issue log, dan memandu skenario teknis. |

---

### 3.2 WHAT (Matriks Skenario & Kasus Uji Rinci)

#### Skenario 1: Inisiasi Master Proyek & Data Kontrak
*Komponen: `MasterData.php`, `MdlProdukProject`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 1.1 | Input Proyek Baru | Masukkan nama proyek, pilih customer, tanggal mulai-selesai, nilai kontrak, tarif PPN, dan gudang proyek. | Proyek tersimpan dengan nomor registrasi unik dan status awal *Draft/Active*. | [ ] |
| 1.2 | Validasi Field Mandatori | Kosongkan field wajib (misal: customer atau nama proyek), lalu tekan simpan. | Sistem menolak simpan (*fail-fast*) dan memunculkan pesan peringatan yang jelas. | [ ] |
| 1.3 | Edit Data Proyek | Perbarui nilai kontrak atau tanggal target penyelesaian. | Data master terbarui dengan benar tanpa merusak data relasi yang sudah terbentuk. | [ ] |

#### Skenario 2: Pembentukan Tim & Pengendalian Hak Akses (*Teamwork*)
*Komponen: `MasterData.php`, `MdlTimWorkProject`, helper `he_project`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 2.1 | Penunjukan SPV & Anggota | Tambahkan Project SPV dan beberapa karyawan sebagai anggota tim pelaksana. | Daftar tim muncul di tab Teamwork lengkap dengan role masing-masing. | [ ] |
| 2.2 | Batasan Hak Akses | Login sebagai user di luar tim proyek yang tidak memiliki hak akses `o_project_spv`. | User tersebut tidak dapat mengedit konfigurasi, menghapus data, atau merubah RAB proyek. | [ ] |
| 2.3 | Pergantian Anggota Tim | Hapus salah satu anggota tim proyek dan ganti dengan personel baru. | Daftar tim ter-update dengan benar pada riwayat penugasan. | [ ] |

#### Skenario 3: Struktur Work Order (WO) & Ruangan/Area
*Komponen: `MasterData.php`, `MdlProjectWorkOrder`, `MdlProjectWorkOrderSub`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 3.1 | Buat SPK/WO Utama | Tambahkan Work Order baru untuk proyek terkait. | WO terdaftar dengan nomor urut dan target pengerjaan yang sesuai. | [ ] |
| 3.2 | Buat Sub-WO / Room / Fase | Bagi pekerjaan ke dalam beberapa sub-fase atau ruangan/lokasi kerja. | Hierarki WO ➔ Sub-WO / Room terbentuk dengan rapi dan dapat dipilih pada tahap alokasi material. | [ ] |

#### Skenario 4: Penyusunan Komposisi Material & Anggaran RAB
*Komponen: `MdlProjectKomposisi`, `MdlProjectKomponenBiayaDetailsRab`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 4.1 | Alokasi Material/Barang | Pilih item material/produk, tentukan kuantitas alokasi (*allocation quota*) per WO/Room. | Item terdaftar dengan kuantitas rencana, harga satuan, dan subtotal yang akurat. | [ ] |
| 4.2 | Input Komponen Biaya | Masukkan komponen biaya (upah kerja, sewa alat, akomodasi, subkontraktor). | Komponen biaya masuk ke dalam kalkulasi anggaran proyek. | [ ] |
| 4.3 | Validasi Kalkulasi Finansial | Periksa kalkulasi Total RAB vs Nilai Kontrak vs Estimasi HPP vs Margin laba. | Formula perhitungan (Subtotal, DPP, PPN, dan Estimasi Profit) menghitung secara presisi. | [ ] |

#### Skenario 5: Manajemen Tasklist, Progres Fisik & Quality Control (QC)
*Komponen: `MdlTasklistProject`, `MdlTasklistProjectLog`, `MdlTasklistProjectQc`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 5.1 | Buat Milestone / Tasklist | Tambahkan daftar tugas per fase beserta bobot persentase (%). | Total bobot seluruh tasklist terakumulasi (mencapai total 100%). | [ ] |
| 5.2 | Update Progres & Task Log | Input progres harian, catatan kendala lapangan, dan tanggal laporan. | Persentase progres proyek ter-update, log riwayat tercatat dengan timestamp dan user pembuat. | [ ] |
| 5.3 | Verifikasi & Inspeksi QC | Jalankan fungsi QC pada task yang selesai; lakukan *Pass* atau *Reject*. | Jika *Pass*, task selesai; jika *Reject*, task kembali ke status perbaikan/rework. | [ ] |

#### Skenario 6: Realisasi Pengeluaran Material (Transaksi `5882`)
*Komponen: `Create.php`, `_shoppingCart.php`, `_projectItemEditor.php`, `FollowUp.php`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 6.1 | Tarik Item Alokasi WO | Buka transaksi realisasi pengeluaran proyek (`5882`), pilih item dari alokasi WO. | Shopping cart menampilkan alokasi rencana, qty yang sudah diambil, dan sisa alokasi yang valid. | [ ] |
| 6.2 | Ambil Sesuai Kuota Alokasi | Input jumlah pengambilan yang sama atau lebih kecil dari sisa alokasi. | Transaksi tersimpan, stok gudang berkurang, dan kuota sisa alokasi terpotong. | [ ] |
| 6.3 | Uji Melebihi Kuota (*Over-take*) | Coba masukkan kuantitas yang melebihi sisa jatah alokasi yang diizinkan. | Sistem menolak proses (*validation error*) dan tidak mengizinkan simpan. | [ ] |
| 6.4 | Uji Ketersediaan Stok Fisik | Ambil barang yang alokasinya tersedia, tetapi stok fisik di gudang bernilai 0. | Sistem mencegah transaksi karena stok fisik gudang tidak mencukupi (*locker stock check*). | [ ] |

#### Skenario 7: Cetak Dokumen, Dashboard & Closing Proyek
*Komponen: `Printing.php`, `ViewDetails.php`, `ActivityReport.php`*

| No | Kasus Uji | Langkah Pengujian | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| 7.1 | Dashboard Monitoring Proyek | Buka ringkasan proyek pada controller `ViewDetails.php`. | Semua metrik (realisasi biaya vs RAB, persentase progres fisik, sisa alokasi) tampil konsisten. | [ ] |
| 7.2 | Cetak Dokumen Proyek | Cetak SPK, lembar kerja, atau Berita Acara (BAST) via `Printing.php`. | Format cetak rapi, informasi data proyek lengkap, dan tidak ada error PHP/layout terpotong. | [ ] |
| 7.3 | Closing / Penyelesaian Proyek | Eksekusi penutupan proyek saat pekerjaan dan administrasi tuntas. | Status proyek berubah menjadi *Closed*, alokasi terkunci, dan rekapitulasi margin final terbentuk. | [ ] |

---

### 3.3 Pengujian Kasus Khusus (*Edge Cases & Concurrency*)

1. **Uji Penguncian Transaksi Ganda (*Locker Check*):**
   * Buka transaksi pengeluaran material yang sama oleh dua user secara bersamaan di browser berbeda.
   * Pastikan user kedua mendapatkan peringatan transaksi sedang dikunci oleh user pertama.
2. **Uji Pembatalan / Void Transaksi:**
   * Batalkan (*trash/void*) transaksi pengeluaran material yang belum final.
   * Pastikan stok gudang dan saldo sisa alokasi kembali utuh (*rollback* sempurna).

---

## 4. DELIVERABLES & ARTEFAK UAT

### 4.1 Format Lembar Temuan Kendala (*Defect & Issue Tracker*)

Setiap kendala yang ditemukan selama UAT wajib dicatat dengan format berikut:

| No | ID Kasus | Deskripsi Kendala | Langkah Reproduksi | Kategori Bug | Status | PIC Solusi |
|---|---|---|---|---|---|---|
| 1 | UAT-6.3 | Sistem tidak memblokir saat input qty > sisa alokasi | Input 15 pada alokasi sisa 10 | **Blocker** | Open | Developer |
| 2 | UAT-7.2 | Logo perusahaan pada cetak SPK pecah | Buka Printing -> Cetak SPK | **Minor** | Open | Developer |

*Kategori Keparahan Bug:*
* **Blocker:** Alur bisnis berhenti total, data finansial/stok rusak, atau terjadi error fatal (500).
* **Major:** Fitur utama tidak berjalan sesuai aturan bisnis, namun terdapat cara alternatif (*workaround*).
* **Minor:** Fitur berjalan tetapi ada kendala minor pada fungsional pendukung.
* **Cosmetic:** Masalah tata letak tampilan, typo teks, atau keselarasan warna UI.

---

### 4.2 Format Berita Acara UAT (*Sign-Off Document*)

```
                           BERITA ACARA SERAH TERIMA UAT
                               MODUL MASTER_PROJECT

Pada hari ini, .................... tanggal ..... .................... 20..., bertempat di ......................................., 
telah dilaksanakan User Acceptance Testing (UAT) untuk modul master_project dengan hasil:

[   ] DITERIMA TANPA CATATAN (Siap Rilis ke Produksi)
[   ] DITERIMA DENGAN CATATAN (Perbaikan minor diselesaikan sebelum Go-Live)
[   ] DITOLAK (Wajib dilakukan perbaikan major dan UAT ulang)

Catatan Tambahan:
...................................................................................................................................
...................................................................................................................................

Demikian Berita Acara ini dibuat dan ditandatangani oleh perwakilan pihak-pihak terkait:


   Project Manager / SPV            Petugas Gudang                 Bagian Finance
  


( ............................ )   ( ............................ )   ( ............................ )



      Lead Developer                       QA / Test Coordinator



( ............................ )                 ( ............................ )
```
