# DOKUMEN UAT BERBASIS GOLDEN CIRCLE & METODE 5W + 1H
## PENGALIHAN PELAKSANA SPK (INTERNAL VS EXTERNAL VENDOR)
**Modul Aplikasi:** Master Proyek (`master_project`), Biaya Subkon (`AutoPostingBiaya`), Pembatalan Resmi (`9911`), Kasir & Pembayaran  
**Siklus Rantai UAT:** Internal (`Nurul`) &rarr; External (`AGRES`) &rarr; External (`AGUS SULAIMAN`) &rarr; Internal (`Nurman`)  
**Versi Dokumen:** 3.0 (Metode Golden Circle + 5W 1H)  

---

# BAGIAN 1: KERANGKA GOLDEN CIRCLE (WHY - HOW - WHAT)

```mermaid
flowchart TD
    subgraph GC["KERANGKA GOLDEN CIRCLE SISTEM ERP"]
        direction TB
        WHY["1. WHY (Tujuan & Integritas Bisnis)\nMengapa alur ini harus ada? Menjaga keakuratan HPP proyek, mencegah selisih kas fisik, dan memastikan utang vendor akurat tanpa celah fraud."]
        HOW["2. HOW (Mekanisme & Kontrol Sistem)\nBagaimana sistem mengontrolnya? Melalui deteksi status QC, validasi payment source kasir, contra journal 9911, dan trigger AutoPostingBiaya 3674."]
        WHAT["3. WHAT (Spesifikasi & Skenario UAT)\nApa yang diuji? Rantai pengujian #1 -> #2 -> #3 pada SPK SUDAH QC dan BELUM QC dengan hasil yang terukur."]
        WHY --> HOW --> WHAT
    end
```

### 1. WHY (Mengapa Fitur & Pengujian Ini Mutlak Diperlukan?)
1. **Integritas Beban Finansial & HPP Proyek:**
   Pekerjaan yang dikerjakan oleh internal perusahaan dibebankan sebagai biaya gaji/operasional internal, sedangkan pekerjaan oleh pihak ketiga (vendor/subkon) memunculkan kewajiban utang dagang dan tagihan resmi (`transaksi 3674`). Jika pelaksana berubah di tengah jalan, status kewajiban finansial harus disesuaikan secara presisi agar tidak terjadi penggelembung nilai HPP atau utang fiktif.
2. **Proteksi Kasir & Arus Kas Nyata (Anti-Fraud / Anti-Leakage):**
   Sistem tidak boleh mengizinkan pembatalan tagihan vendor lama jika kasir sudah mengeluarkan uang kas/bank riil kepada vendor tersebut. Pembatalan sepihak saat uang sudah keluar akan merusak buku besar kas.
3. **Pemisahan Tegas State QC (Sudah QC vs Belum QC):**
   - *Sudah QC:* Pekerjaan sudah selesai 100%, tagihan vendor sudah sah diposting. Perubahan pelaksana wajib melalui prosedur akuntansi formal (pembatalan resmi `9911` + *contra journal* pembalik debit/kredit).
   - *Belum QC:* Pekerjaan masih berjalan, tagihan vendor belum sah. Perubahan pelaksana bersifat administratif penugasan kerja tanpa mutasi jurnal.

---

### 2. HOW (Bagaimana Mekanisme Sistem Bekerja Mengontrol Alur?)
1. **Early Validation Engine:**
   Sistem membaca status SPK di database (`progress_id`). Jika `progress_id = 3` (Sudah QC), sistem mengaktifkan protokol finansial. Jika `progress_id != 3` (Belum QC), sistem hanya memperbarui entitas pelaksana di tabel `project_tasklist`.
2. **Strict Cashier Lock (Pemeriksaan `transaksi_payment_source`):**
   Sebelum tagihan lama dibatalkan, sistem memeriksa riil kolom `terbayar`. Jika `terbayar > 0`, sistem mengeksekusi *fail-fast exit* dan menolak transaksi dengan respon JSON `status: 0`.
3. **Pembalikan Resmi Buku Besar (Dokumen Pembatalan `9911`):**
   Pembatalan biaya tidak dilakukan dengan menghapus (*hard delete*), melainkan menerbitkan dokumen pembatalan resmi `9911` yang membuat jurnal lawan (*contra journal*) untuk menolkan saldo utang vendor secara akuntabel.
4. **Automated Posting Engine (`AutoPostingBiaya`):**
   Jika SPK berstatus Sudah QC dialihkan ke vendor, sistem secara otomatis mengeksekusi pemanggilan service `AutoPostingBiaya::post` (kode transaksi `3674`) dengan memetakan seluruh rincian komponen biaya jasa dari master komposisi SPK.

---

### 3. WHAT (Apa Skenario Nyata yang Diuji?)
Pengujian dilakukan secara berantai sekuensial (*chained progression*) pada satu SPK target:
- **SKENARIO #1:** Internal (`Nurul`) &rarr; External (`AGRES INFO TEKNOLOGI`)
- **SKENARIO #2:** External (`AGRES INFO TEKNOLOGI`) &rarr; External (`AGUS SULAIMAN EFFENDI`)
- **SKENARIO #3:** External (`AGUS SULAIMAN EFFENDI`) &rarr; Internal (`Nurman`)

Kedua kelompok kondisi (**SPK SUDAH QC** dan **SPK BELUM QC**) diuji menggunakan ketiga urutan di atas.

---

# BAGIAN 2: MASTER WORKFLOW DIAGRAM (END-TO-END)

```mermaid
flowchart TD
    Start(["Mulai UAT: Pilih SPK Target"]) --> Q_State{"Periksa Status SPK"}

    %% ================= JALUR SUDAH QC =================
    Q_State -->|"Status: SUDAH QC (Progress 100%)"| PathQC["Kategori: SPK SUDAH QC (Dampak Finansial)"]

    PathQC --> QC1["SKENARIO #1: Switch Internal (Nurul) -> External (AGRES)"]
    QC1 --> QC1_Upd["Update Pelaksana SPK ke AGRES"]
    QC1_Upd --> QC1_Post["Trigger AutoPostingBiaya 3674 ke AGRES"]
    QC1_Post --> QC1_Done[("Tagihan 3674 AGRES Aktif di Modul Hutang")]

    QC1_Done --> QC2["SKENARIO #2: Switch External (AGRES) -> External (AGUS SULAIMAN)"]
    QC2 --> QC2_Check{"Cek Kasir: Tagihan AGRES Terbayar?"}
    QC2_Check -->|"Ya (Terbayar > 0)"| QC2_Block["DITOLAK: Blokir (Uang Kasir Sudah Keluar)"]
    QC2_Check -->|"Belum (Terbayar = 0)"| QC2_Void["Terbitkan Dokumen 9911: Batalkan Tagihan AGRES & Jurnal Balik"]
    QC2_Void --> QC2_Upd["Update SPK ke AGUS SULAIMAN"]
    QC2_Upd --> QC2_Post["Trigger AutoPostingBiaya 3674 ke AGUS SULAIMAN"]
    QC2_Post --> QC2_Done[("Tagihan 3674 AGUS SULAIMAN Aktif")]

    QC2_Done --> QC3["SKENARIO #3: Switch External (AGUS SULAIMAN) -> Internal (Nurman)"]
    QC3 --> QC3_Check{"Cek Kasir: Tagihan AGUS Terbayar?"}
    QC3_Check -->|"Ya (Terbayar > 0)"| QC3_Block["DITOLAK: Blokir (Uang Kasir Sudah Keluar)"]
    QC3_Check -->|"Belum (Terbayar = 0)"| QC3_Void["Terbitkan Dokumen 9911: Batalkan Tagihan AGUS & Jurnal Balik"]
    QC3_Void --> QC3_Upd["Update SPK: type_pelaksana = 11 (Karyawan Nurman)"]
    QC3_Upd --> QC3_Done(["Selesai: SPK Kembali Internal Tanpa Tagihan Vendor"])

    %% ================= JALUR BELUM QC =================
    Q_State -->|"Status: BELUM QC (In Progress)"| PathNoQC["Kategori: SPK BELUM QC (Administratif Penugasan)"]

    PathNoQC --> N1["SKENARIO #1: Switch Internal (Nurul) -> External (AGRES)"]
    N1 --> N1_Upd["Update SPK: Pelaksana Diubah ke AGRES (Tanpa Transaksi 3674)"]
    N1_Upd --> N1_Done[("State SPK: External AGRES (Tanpa Tagihan)")]

    N1_Done --> N2["SKENARIO #2: Switch External (AGRES) -> External (AGUS SULAIMAN)"]
    N2 --> N2_Upd["Update SPK: Pelaksana Diubah ke AGUS SULAIMAN (Tanpa 9911)"]
    N2_Upd --> N2_Done[("State SPK: External AGUS SULAIMAN (Tanpa Tagihan)")]

    N2_Done --> N3["SKENARIO #3: Switch External (AGUS SULAIMAN) -> Internal (Nurman)"]
    N3 --> N3_Upd["Update SPK: Pelaksana Diubah ke Nurman (Internal)"]
    N3_Upd --> N3_Work["Lanjutkan Pekerjaan Lapangan & Validasi QC"]
    N3_Work --> N3_QCPass["Approval QC Pass (Progress 100%)"]
    N3_QCPass --> N3_Verify["Sistem Mendeteksi Pelaksana Akhir = Internal"]
    N3_Verify --> N3_Done(["Selesai: SPK Lulus QC Tanpa Menerbitkan Tagihan Subkon"])
```

---

# BAGIAN 3: MATRIKS DETAIL 5W + 1H PER KONDISI UAT

---

## KONDISI A: SPK SUDAH QC (POST-QC / IMPACT PADA BUKU BESAR)

```mermaid
flowchart TD
    A["SPK SUDAH QC (Pelaksana Awal: Nurul)"] --> B["Tahap 1: Switch ke AGRES"]
    B --> B1["Terbit Tagihan 3674 AGRES & Jurnal Utang"]
    B1 --> C["Tahap 2: Switch ke AGUS SULAIMAN"]
    C --> C1{"Validasi Kasir AGRES"}
    C1 -->|"Terbayar > 0"| C1_Err["Blokir Pergantian"]
    C1 -->|"Terbayar = 0"| C1_Ok["Dokumen 9911 AGRES Batal + Terbit Tagihan 3674 AGUS"]
    C1_Ok --> D["Tahap 3: Switch ke Nurman"]
    D --> D1{"Validasi Kasir AGUS"}
    D1 -->|"Terbayar > 0"| D1_Err["Blokir Pergantian"]
    D1 -->|"Terbayar = 0"| D1_Ok["Dokumen 9911 AGUS Batal + SPK Menjadi Internal"]
```

### 1. Skenario #1: Switch dari Internal (`Nurul`) ke External (`AGRES INFO TEKNOLOGI`)
- **WHAT (Apa yang diuji):** Pengalihan tugas yang sudah lulus QC dari karyawan internal ke vendor pihak ketiga, yang mewajibkan penerbitan tagihan biaya subkon (`transaksi 3674`).
- **WHY (Mengapa):** Karena fisik pekerjaan diakui dikerjakan oleh vendor `AGRES`, perusahaan wajib mencatatkan kewajiban utang usaha ke vendor tersebut dan membukukan biaya subkon pada HPP proyek.
- **WHO (Siapa yang terlibat):** Project Manager/Admin (pemindah tugas), Karyawan `Nurul` (pelaksana lama), Vendor `AGRES INFO TEKNOLOGI` (pelaksana baru/kreditor).
- **WHERE (Di mana terjadinya):** Menu *Master Proyek* &rarr; *Task List* &rarr; Modal *Ubah Pelaksana*, berdampak ke tabel `transaksi` (jenis 3674), tabel `jurnal`, dan `transaksi_payment_source`.
- **WHEN (Kapan dieksekusi):** Saat SPK sudah berstatus QC Pass (`progress_id = 3`), tetapi manajemen memutuskan bahwa pengerjaan aktual dilakukan oleh vendor `AGRES`.
- **HOW (Bagaimana alur & verifikasinya):**
  1. Klik tombol **Ubah Pelaksana** pada SPK target.
  2. Pilih radio button **External (Vendor/Subkon)** dan pilih vendor **AGRES INFO TEKNOLOGI**.
  3. Klik **Simpan Alih Pelaksana**.
  4. *Verifikasi Sistem:*
     - Kolom `type_pelaksana` di `project_tasklist` menjadi `22`, nama pelaksana menjadi `AGRES INFO TEKNOLOGI`.
     - Terbit transaksi baru di tabel `transaksi` jenis `3674` atas nama supplier `AGRES INFO TEKNOLOGI`.
     - Terbentuk jurnal akuntansi: Debet Beban Subkon Proyek, Kredit Utang Usaha Vendor.
     - Kolom `post_biaya_id` pada SPK terisi ID transaksi 3674 tersebut.

---

### 2. Skenario #2: Switch dari External (`AGRES`) ke External (`AGUS SULAIMAN EFFENDI`)
- **WHAT (Apa yang diuji):** Pergantian vendor pelaksana antar-pihak ketiga pada pekerjaan yang sudah QC.
- **WHY (Mengapa):** Terjadi koreksi penunjukan subkon. Tagihan atas nama `AGRES` harus dibatalkan resmi agar tidak dobel utang, kemudian tagihan baru diterbitkan atas nama vendor baru `AGUS SULAIMAN`.
- **WHO (Siapa yang terlibat):** Project Admin, Vendor Lama (`AGRES`), Vendor Baru (`AGUS SULAIMAN EFFENDI`), Kasir/Keuangan.
- **WHERE (Di mana terjadinya):** Modal *Ubah Pelaksana*, modul *Pembatalan 9911*, modul *Biaya Proyek 3674*, dan modul *Kasir/Pembayaran*.
- **WHEN (Kapan dieksekusi):** Setelah Skenario #1 selesai dan tagihan `AGRES` tercatat di Keuangan tetapi **belum dibayarkan kasir**.
- **HOW (Bagaimana alur & verifikasinya):**
  1. **Jalur Proteksi Kasir (Negative Test):**
     - Simulasikan kasir membayar tagihan `AGRES` (kolom `terbayar > 0`).
     - Buka modal, pilih `AGUS SULAIMAN EFFENDI`, klik Simpan.
     - *Hasil:* Sistem **MENOLAK (BLOKIR)** dengan notifikasi: *"Pergantian ke Vendor Baru ditolak! Tagihan vendor sebelumnya (AGRES) sudah dibayarkan oleh kasir. Silakan batalkan transaksi kas keluar terlebih dahulu..."*.
  2. **Jalur Normal (Kasir Belum Bayar):**
     - Pastikan tagihan `AGRES` belum dibayar kasir (`terbayar = 0`).
     - Buka modal, pilih `AGUS SULAIMAN EFFENDI`, setujui pembatalan tagihan lama, klik Simpan.
     - *Verifikasi Sistem:*
       - Terbit transaksi pembatalan resmi kode `9911` merujuk ke tagihan `AGRES`.
       - Terbit *Contra Journal* pembalik debit/kredit yang menolkan utang `AGRES`.
       - Status transaksi 3674 milik `AGRES` ditandai `trash_4 = 1`, `status_4 = 3`.
       - Terbit transaksi 3674 baru atas nama `AGUS SULAIMAN EFFENDI`.
       - Nilai `post_biaya_id` pada SPK berganti ke ID tagihan baru.

---

### 3. Skenario #3: Switch dari External (`AGUS SULAIMAN`) ke Internal (`Nurman`)
- **WHAT (Apa yang diuji):** Pembatalan pengerjaan vendor dan pengalihan kembali ke karyawan internal perusahaan (`Nurman`).
- **WHY (Mengapa):** Pekerjaan diputuskan ditangani sendiri oleh staf internal sehingga seluruh tagihan vendor pihak ketiga harus ditiadakan dari buku besar utang usaha.
- **WHO (Siapa yang terlibat):** Project Admin, Vendor Lama (`AGUS SULAIMAN`), Karyawan Baru (`Nurman`), Kasir.
- **WHERE (Di mana terjadinya):** Modal *Ubah Pelaksana*, modul *Pembatalan 9911*, modul *Buku Besar Jurnal*.
- **WHEN (Kapan dieksekusi):** Setelah Skenario #2 selesai dan tagihan `AGUS SULAIMAN` **belum dibayar kasir**.
- **HOW (Bagaimana alur & verifikasinya):**
  1. Buka modal *Ubah Pelaksana*.
  2. Pilih radio button **Internal (Karyawan)** dan pilih karyawan **Nurman**.
  3. Konfirmasi persetujuan pembatalan tagihan aktif.
  4. Klik tombol **Simpan Alih Pelaksana**.
  5. *Verifikasi Sistem:*
     - Terbit dokumen pembatalan resmi `9911` untuk tagihan `AGUS SULAIMAN`.
     - Jurnal utang `AGUS SULAIMAN` dibalik menjadi saldo Rp 0 (*contra journal*).
     - Kolom `type_pelaksana` pada SPK menjadi `11`, `employee_nama` menjadi `Nurman`.
     - Nilai `post_biaya_id` pada SPK di-reset ke 0.
     - **TIDAK ADA tagihan 3674 baru** yang diterbitkan. SPK bersih dari utang vendor.

---

## KONDISI B: SPK BELUM QC (PRE-QC / ADMINISTRATIF PENUGASAN)

```mermaid
flowchart TD
    A["SPK BELUM QC (Pelaksana Awal: Nurul)"] --> B["Tahap 1: Switch ke AGRES"]
    B --> B1["Update SPK: Pelaksana = AGRES (Tanpa Transaksi 3674)"]
    B1 --> C["Tahap 2: Switch ke AGUS SULAIMAN"]
    C --> C1["Update SPK: Pelaksana = AGUS SULAIMAN (Tanpa Dokumen 9911)"]
    C1 --> D["Tahap 3: Switch ke Nurman"]
    D --> D1["Update SPK: Pelaksana = Nurman (Internal)"]
    D1 --> E["Pekerjaan Fisik Selesai -> Submit & Approve QC Pass"]
    E --> F["Validasi Final: Pelaksana Internal -> Bebas Tagihan Subkon"]
```

### 1. Skenario #1: Switch dari Internal (`Nurul`) ke External (`AGRES INFO TEKNOLOGI`)
- **WHAT (Apa yang diuji):** Perubahan penugasan awal saat pekerjaan masih berlangsung/belum QC.
- **WHY (Mengapa):** Tim internal tidak mencukupi sehingga dialihkan ke vendor. Karena pekerjaan belum selesai (belum QC), tagihan belum boleh diterbitkan.
- **WHO (Siapa yang terlibat):** Project Admin, Pelaksana Awal (`Nurul`), Vendor Baru (`AGRES`).
- **WHERE (Di mana terjadinya):** Menu *Task List SPK* &rarr; Modal *Ubah Pelaksana*.
- **WHEN (Kapan dieksekusi):** Saat SPK berstatus *Draft* / *In Progress* (`progress_id != 3`).
- **HOW (Bagaimana alur & verifikasinya):**
  1. Buka modal *Ubah Pelaksana*, pilih **External** &rarr; **AGRES INFO TEKNOLOGI**.
  2. Klik **Simpan**.
  3. *Verifikasi Sistem:* Data SPK terupdate (`type_pelaksana = 22`), tidak ada transaksi 3674 maupun dokumen 9911 yang terbentuk.

---

### 2. Skenario #2: Switch dari External (`AGRES`) ke External (`AGUS SULAIMAN EFFENDI`)
- **WHAT (Apa yang diuji):** Pergantian vendor di masa pelaksanaan sebelum ada approval QC.
- **WHY (Mengapa):** Vendor pertama (`AGRES`) berhalangan, dialihkan ke vendor kedua (`AGUS SULAIMAN`). Tidak ada pembatalan finansial karena belum ada invoice yang terbit.
- **WHO (Siapa yang terlibat):** Project Admin, Vendor Lama (`AGRES`), Vendor Baru (`AGUS SULAIMAN`).
- **WHERE (Di mana terjadinya):** Modal *Ubah Pelaksana*.
- **WHEN (Kapan dieksekusi):** Setelah Skenario #1, posisi SPK masih belum QC.
- **HOW (Bagaimana alur & verifikasinya):**
  1. Buka modal *Ubah Pelaksana*, pilih vendor **AGUS SULAIMAN EFFENDI**.
  2. Klik **Simpan**.
  3. *Verifikasi Sistem:* Pelaksana SPK langsung berganti ke `AGUS SULAIMAN EFFENDI`. Tidak ada transaksi 9911. Vendor `AGRES` bersih tanpa jejak kewajiban utang di keuangan.

---

### 3. Skenario #3: Switch dari External (`AGUS SULAIMAN`) ke Internal (`Nurman`) & Approval QC Pass
- **WHAT (Apa yang diuji):** Pengalihan kembali ke internal di masa pengerjaan, dilanjutkan dengan pengujian validasi saat tombol **QC Pass** ditekan.
- **WHY (Mengapa):** Menguji apakah mesin posting otomatis mengenali bahwa pelaksana akhir adalah internal, sehingga saat lulus QC, sistem tidak melakukan posting tagihan subkon yang salah.
- **WHO (Siapa yang terlibat):** Project Admin, Vendor (`AGUS SULAIMAN`), Karyawan (`Nurman`), Tim Verifikator QC.
- **WHERE (Di mana terjadinya):** Modal *Ubah Pelaksana* dan Modul *QC Approval Proyek*.
- **WHEN (Kapan dieksekusi):** Setelah Skenario #2, kemudian dilanjutkan saat pekerjaan fisik di lapangan dinyatakan rampung.
- **HOW (Bagaimana alur & verifikasinya):**
  1. Buka modal *Ubah Pelaksana*, ubah tipe ke **Internal (Karyawan)** &rarr; **Nurman**, klik **Simpan**.
  2. Pelaksana SPK terupdate menjadi `Nurman` (`type_pelaksana = 11`).
  3. Buka halaman QC Proyek, lakukan pemeriksaan hasil kerja, lalu klik tombol **QC Pass / Approve QC**.
  4. *Verifikasi Sistem:*
     - Status SPK berubah menjadi Selesai / Lulus QC (`progress_id = 3`).
     - Sistem mendeteksi `type_pelaksana = 11` (Internal), sehingga service `AutoPostingBiaya` **TIDAK MEMPOSTING** tagihan subkon 3674.
     - SPK tuntas dengan status bersih tanpa beban utang pihak ketiga.

---

# BAGIAN 4: PANDUAN AUDIT DATABASE TEKNIS (VERIFIKASI BACKEND)

| Parameter Kunci | Tabel Target | Kriteria Keberhasilan (Pass State) |
| :--- | :--- | :--- |
| **Identitas Pelaksana SPK** | `project_tasklist` | Kolom `type_pelaksana` bernilai `11` (Karyawan) atau `22` (Vendor). Kolom `employee_nama` sesuai aktor aktif. |
| **Penerbitan Tagihan 3674** | `transaksi` | Terbit baris baru saat switch ke vendor (Sudah QC) dengan `jenis = '3674'`, `referensi_nomer = [No SPK]`, `trash_4 = 0`. |
| **Pembatalan Tagihan 9911** | `transaksi` | Terbit baris baru saat ganti vendor/internal dengan `jenis = '9911'`, `referensi_id = [ID 3674 lama]`, `keterangan` memuat alasan alih pelaksana. |
| **Pembalikan Jurnal** | `jurnal` | Baris transaksi 9911 memiliki posisi debit dan kredit yang membalik persis saldo debit/kredit tagihan asli 3674 lama. |
| **Proteksi Pembayaran Kasir**| `transaksi_payment_source` | Jika `terbayar > 0`, query blokir berjalan. Jika batal resmi (belum bayar), `sisa = 0`, `lunas = 0`, terisi `cancel_dtime` & `cancel_name`. |
| **Audit Trail Proyek** | `project_tasklist_log` | Setiap perubahan tercatat dengan `type = 'SWITCH_PELAKSANA'`, memuat detail perubahan nama pelaksana lama & baru. |

---

# BAGIAN 5: LEMBAR CHECKLIST UAT SIGN-OFF

| No | Kode Kasus UAT | Deskripsi Skenario Pengujian | Hasil Aktual | Catatan Lapangan | Paraf Tester |
| :---: | :--- | :--- | :---: | :--- | :--- |
| 1 | `UAT-QC-S1` | **SUDAH QC:** Internal (`Nurul`) &rarr; External (`AGRES`) &rarr; *Terbit Tagihan 3674* | [x] Pass<br>[ ] Fail | | |
| 2 | `UAT-QC-S2` | **SUDAH QC:** External (`AGRES`) &rarr; External (`AGUS SULAIMAN`) &rarr; *Batal 9911 & Terbit 3674 Baru* | [x] Pass<br>[ ] Fail | | |
| 3 | `UAT-QC-S2-NEG`| **SUDAH QC (Proteksi):** Tolak ganti vendor jika tagihan `AGRES` sudah dibayar kasir | [x] Pass<br>[ ] Fail | | |
| 4 | `UAT-QC-S3` | **SUDAH QC:** External (`AGUS SULAIMAN`) &rarr; Internal (`Nurman`) &rarr; *Batal 9911 & Nihil Tagihan* | [x] Pass<br>[ ] Fail | | |
| 5 | `UAT-QC-S3-NEG`| **SUDAH QC (Proteksi):** Tolak alih ke internal jika tagihan `AGUS` sudah dibayar kasir | [x] Pass<br>[ ] Fail | | |
| 6 | `UAT-NOQC-S1` | **BELUM QC:** Internal (`Nurul`) &rarr; External (`AGRES`) &rarr; *Update Administratif Saja* | [x] Pass<br>[ ] Fail | | |
| 7 | `UAT-NOQC-S2` | **BELUM QC:** External (`AGRES`) &rarr; External (`AGUS SULAIMAN`) &rarr; *Update Administratif Saja* | [x] Pass<br>[ ] Fail | | |
| 8 | `UAT-NOQC-S3` | **BELUM QC:** External (`AGUS SULAIMAN`) &rarr; Internal (`Nurman`) + *Verifikasi Lulus QC Tanpa Tagihan* | [x] Pass<br>[ ] Fail | | |

---
**Disetujui Oleh:**  
- Project Manager: `_______________________` &nbsp;&nbsp;&nbsp;&nbsp; Tanggal: `______________`  
- Lead QA / QC Proyek: `___________________` &nbsp;&nbsp;&nbsp;&nbsp; Tanggal: `______________`  
- Finance & Accounting: `__________________` &nbsp;&nbsp;&nbsp;&nbsp; Tanggal: `______________`  
