# Rencana Pengujian Pengguna (UAT Plan) Modul Pembelian (FG Purchasing - 466)

Rencana UAT ini ditujukan untuk memvalidasi stabilitas kode pasca refactoring besar-besaran terhadap controller `Create.php` dan `FollowUp.php`. Pengujian ini dibagi menjadi UAT Mandiri (oleh AI/Sistem) dan UAT Manual (oleh Manusia/QA).

---

## 1. Skenario UAT Mandiri (Automated Self-UAT)

Pengujian ini menggunakan skrip PHP CLI mandiri untuk menguji integrasi fungsional Controller, Library, Helper, dan Database secara langsung tanpa antarmuka web.

### 1.1 Persiapan Lingkungan Pengujian
*   **Database Aktif**: `new_san_variant` (Koneksi ke IP: `192.168.5.10` / port default).
*   **Akses Command Line**: Jalankan perintah dari root workspace `w:/new_san_variant`.

### 1.2 Skrip Simulasi Siklus Transaksi
*   **Skrip Lokasi**: `application/modules/pembelian/tests/uat_pembelian_test.php` *(atau dijalankan melalui bootstrap CI CLI)*.
*   **Langkah Eksekusi Otomatis**:
    1.  **Draf Pembuatan**: Skrip menginisiasi sesi `cCode` dengan memuat master dan detail pembelian Finished Goods (jenisTr `466`), kemudian memicu `$c->libpembeliancreatesave->processSave($c)` untuk menyimpan draf.
        *   *Kriteria Kelulusan*: Record baru tersimpan di tabel `transaksi` dengan tipe `466r` dan `status = 0`. Record snapshot tersimpan di `transaksi_registry` (data serialized base64).
    2.  **Persetujuan PO (Step 2)**: Skrip memicu `$c->libpembelianfollowupdofollowup->processDoFollowup($c)` dengan target step 2.
        *   *Kriteria Kelulusan*: Kolom `status` pada record `transaksi` berubah menjadi `1` (PO Aktif). Record tanda tangan ditambahkan di `transaksi_sign`.
    3.  **Penerimaan Gudang (Step 3 / GRN)**: Skrip memicu approval untuk naik ke target step 3.
        *   *Kriteria Kelulusan*:
            *   Record `transaksi` dengan tipe `467` (Goods Received Note) terbentuk.
            *   Jumlah barang ditambahkan secara riil ke tabel `stock_locker` dan `stock_locker_variant` menggunakan `ComLockerStockDualWrite::pair()`.
            *   Antrean HPP FIFO baru terbentuk di tabel FIFO produk jadi.
    4.  **Realisasi PPN (Step 4)**: Skrip memicu approval naik ke step 4.
        *   *Kriteria Kelulusan*: Kewajiban hutang dagang (`piutang pembelian` di loker) dan PPN Masukan (`ppn in` di loker) tercatat dalam status aktif.

---

## 2. Skenario UAT Pengguna (Manual Human UAT)

Pengujian manual ini dilakukan oleh pengguna melalui peramban (browser) untuk memvalidasi interaksi UI.

### 2.1 Skenario A: Pembuatan Draf (Pre-Purchase Order)
*   **Prasyarat (Pre-requisite)**: Login menggunakan akun dengan hak akses Purchasing Staff (userGroup: `c_purchasing`).
*   **Langkah Pengujian**:
    1.  Buka menu Pembelian dan pilih **"FG purchasing"**.
    2.  Pilih Supplier riil aktif: **`ATMI SOLO, PT`** (atau **`BOOIL SAFES CO., LTD`**).
    3.  Cari produk aktif riil yang terasosiasi:
        *   Jika memilih ATMI SOLO: Cari **`D2-A`** (*Steel filing cabinet 2 drawer*) atau **`D4-A`** (*Steel filing cabinet 4 drawer*).
        *   Jika memilih BOOIL SAFES: Cari **`B28D`** (*ALPEN B28D*) atau **`B41D`** (*ALPEN B41D*).
    4.  Masukkan kuantitas `5 Unit` (misal harga otomatis terisi default dari histori supplier), lalu klik "Tambah ke Keranjang".
    5.  Klik tombol **"Simpan Rencana Pembelian"** (Save).
*   **Hasil yang Diharapkan (Expected Result)**:
    *   Tampil notifikasi sukses bertuliskan "Transaksi berhasil disimpan".
    *   Pengguna dialihkan ke halaman pratinjau nota PO.
    *   Status transaksi di menu list tercatat sebagai **"PRE PURCHASE PO - Pending Approval"** berwarna merah.

### 2.2 Skenario B: Approval Purchase Order
*   **Prasyarat (Pre-requisite)**: Login menggunakan akun Purchasing Supervisor (userGroup: `c_purchasing_adm`).
*   **Langkah Pengujian**:
    1.  Buka menu **"FollowUp Pembelian"**.
    2.  Temukan dokumen draf dari Skenario A (`466r.-1.xxxx`).
    3.  Klik tombol **"Detail"** untuk memastikan kecocokan jumlah item dan harga.
    4.  Klik tombol **"Approved Purchasing"** (Approve PO).
*   **Hasil yang Diharapkan (Expected Result)**:
    *   Jendela popup approval tertutup otomatis.
    *   Status dokumen berubah menjadi **"PURCHASE ORDER - Purchased"** berwarna oranye.
    *   Nomor nota berubah dari `466r.*` menjadi `466.*`.

### 2.3 Skenario C: Penerimaan Barang Gudang (GRN)
*   **Prasyarat (Pre-requisite)**: Login menggunakan akun Staff Gudang (userGroup: `c_gudang`).
*   **Langkah Pengujian**:
    1.  Buka menu **"FollowUp Pembelian"** &rarr; cari nomor PO dari Skenario B.
    2.  Klik tombol **"Receive & Make GRN"**.
    3.  Isi kolom "Kuantitas Diterima" sebanyak `5 Unit` (sesuai barang fisik yang sampai).
    4.  Klik **"Submit Penerimaan"**.
*   **Hasil yang Diharapkan (Expected Result)**:
    *   Layar memuat ulang secara otomatis.
    *   Status transaksi berubah menjadi **"GOODS RECEIVED NOTE - GRN Made"** berwarna hijau.
    *   Lakukan pengecekan database pada tabel `stock_locker` dan `stock_locker_variant` untuk produk tersebut; jumlah stok riil harus bertambah `+5 Unit` secara instan.

### 2.4 Skenario D: Otorisasi Pajak & Keuangan
*   **Prasyarat (Pre-requisite)**: Login menggunakan akun Staff Finance (userGroup: `c_finance`).
*   **Langkah Pengujian**:
    1.  Buka menu **"FollowUp Pembelian"** &rarr; cari dokumen GRN dari Skenario C.
    2.  Klik tombol **"Approve PPN Masukan"**.
    3.  Input nomor seri faktur pajak masukan dari vendor, lalu klik **"Approve"**.
*   **Hasil yang Diharapkan (Expected Result)**:
    *   Transaksi ditutup dengan status **"Approved"**.
    *   Kewajiban hutang dagang resmi terbentuk di modul Hutang (Account Payable).
