# CHECKLIST PENGUJIAN SIPIUTANG

Versi 1.0.0

Dokumen ini berisi ceklis pengujian penerimaan (*User Acceptance Test*) yang harus dijalankan
setelah instalasi atau pemutakhiran, beserta hasil pengujian otomatis yang sudah dilakukan
tim pengembang.

---

## Daftar Isi

1. [Cara Menjalankan Pengujian Otomatis](#1-cara-menjalankan-pengujian-otomatis)
2. [Hasil Pengujian Otomatis](#2-hasil-pengujian-otomatis)
3. [A. Instalasi & Konfigurasi](#a-instalasi--konfigurasi)
4. [B. Autentikasi & Keamanan](#b-autentikasi--keamanan)
5. [C. Dashboard](#c-dashboard)
6. [D. Skenario Perhitungan Piutang](#d-skenario-perhitungan-piutang)
7. [E. Pembayaran](#e-pembayaran)
8. [F. Revisi Invoice (RF)](#f-revisi-invoice-rf)
9. [G. Potongan & Pajak](#g-potongan--pajak)
10. [H. Import Excel](#h-import-excel)
11. [I. Aging Piutang](#i-aging-piutang)
12. [J. ACP](#j-acp)
13. [K. Penagihan](#k-penagihan)
14. [L. Laporan & Pembuat Laporan](#l-laporan--pembuat-laporan)
15. [M. Ekspor & Pencetakan](#m-ekspor--pencetakan)
16. [N. Data Master](#n-data-master)
17. [O. Persetujuan & Audit](#o-persetujuan--audit)
18. [P. Hak Akses per Peran](#p-hak-akses-per-peran)
19. [Q. Kualitas Data](#q-kualitas-data)
20. [R. Pencadangan](#r-pencadangan)
21. [S. Tampilan & Bahasa](#s-tampilan--bahasa)
22. [T. Kinerja](#t-kinerja)
23. [Formulir Berita Acara](#formulir-berita-acara)

---

## 1. Cara Menjalankan Pengujian Otomatis

Dari baris perintah pada folder aplikasi:

```bash
php tests/test_excel_reader.php    # pembacaan workbook Excel sumber
php tests/test_writers.php         # penulisan berkas XLSX, CSV, dan PDF
php tests/test_scenarios.php       # 19 skenario bisnis + verifikasi integritas
bash tests/smoke.sh superadmin     # seluruh rute HTTP (server harus berjalan)
```

Atau melalui Composer:

```bash
composer uji          # menjalankan tiga rangkaian pengujian
composer uji:rute     # menguji seluruh rute HTTP
composer lint         # memeriksa sintaks seluruh berkas PHP
```

> `test_scenarios.php` menjalankan seluruh perubahannya di dalam satu transaksi dan
> membatalkannya (*rollback*) di akhir, sehingga **data produksi tidak berubah**.
> Meski demikian, jalankan pada basis data pengembangan bila memungkinkan.

---

## 2. Hasil Pengujian Otomatis

Dijalankan pada PHP 8.2 dengan MariaDB dan data hasil konversi
`AR RPP 2026.xlsx` (3.072 invoice, 1.210 customer, 2.281 pembayaran).

### Pembacaan Excel — LULUS

| Pemeriksaan | Hasil |
|---|---|
| Jumlah worksheet terdeteksi | 8 |
| Pemetaan header kolom A–AF | benar |
| Tanggal terdeteksi sebagai tanggal, bukan angka | benar |
| Nomor faktur pajak `04002600029966887` tetap teks | benar |
| Formula bersama (*shared formula*) diperluas | 394 sel rusak terdeteksi (openpyxl: 396) |
| Nilai error `#VALUE!` dikenali | benar |
| Baris data lembar JULI | 143 baris data, 859 baris hantu diabaikan |
| Baris lembar RF | 29 baris |

### Penulisan berkas — LULUS

| Pemeriksaan | Hasil |
|---|---|
| XLSX dapat dibuka kembali dan isinya utuh | benar |
| Nol di depan pada kolom teks dipertahankan | benar |
| Nilai negatif ditulis benar | benar |
| CSV memakai BOM UTF-8 | benar |
| CSV aman dari injeksi formula | benar |
| PDF multi-halaman dengan header berulang | 4 halaman, 60,2 KB |

### 19 skenario bisnis — LULUS (seluruhnya)

| No | Skenario | Hasil |
|---|---|---|
| 1 | Pembayaran penuh | Saldo nol, status LUNAS, hari penagihan terisi |
| 2 | Pembayaran sebagian | Status PEMBAYARAN_SEBAGIAN, sisa saldo benar |
| 3 | Pembayaran bertahap (3 kali) | Tiga alokasi tercatat, tanggal pertama & terakhir benar |
| 4 | Invoice belum jatuh tempo | Status BELUM_JATUH_TEMPO, umur piutang negatif |
| 5 | Invoice terlambat | Umur piutang = selisih hari sejak jatuh tempo |
| 5b | Invoice terlambat lalu dibayar | Hari keterlambatan = tanggal bayar − jatuh tempo |
| 6 | Invoice dibatalkan | Saldo nol, tidak dihitung sebagai pendapatan |
| 7 | Invoice direvisi | Invoice lama digantikan, saldo dinolkan, tautan tersimpan |
| 8 | Invoice pengganti | Hanya invoice pengganti dihitung sebagai pendapatan |
| 9 | Potongan PPh 23 | PPh 23 = tarif × DPP (bukan × bruto) |
| 10 | Potongan lain | Nilai bersih dan saldo memperhitungkan seluruh potongan |
| 11 | Tanggal Excel tidak valid | 12 varian tanggal ditangani; tanggal cadangan dipakai |
| 12 | Invoice duplikat | Terdeteksi dan ditolak, hanya satu baris tersimpan |
| 13 | Formula Excel rusak | Nilai error dinormalkan nol, nilai turunan dihitung ulang |
| 14 | ACP bulanan | Rumus terverifikasi manual |
| 15 | ACP tahunan | 365 hari, perputaran piutang terhitung |
| 16 | Konfigurasi aging kustom | 5 bucket; total identik dengan konfigurasi 4 bucket |
| 17 | Pembuat laporan | 15 operator, 9 agregasi, 7 sumber data, pivot — seluruhnya berfungsi |
| 18 | Ekspor laporan | XLSX, CSV, PDF, dan HTML cetak valid |
| 19 | Pembatasan hak akses | SALES melihat 510 dari 3.087 invoice; COLLECTION 2.344 |

### Verifikasi integritas data — LULUS

| Kode | Pemeriksaan | Hasil |
|---|---|---|
| INT-1 | Nilai bersih konsisten di seluruh invoice aktif | 0 pelanggaran |
| INT-2 | Saldo = nilai bersih − terbayar | 0 pelanggaran |
| INT-3 | DPP + PPN = bruto | 0 pelanggaran |
| INT-4 | Tidak ada invoice LUNAS yang masih bersaldo | 0 pelanggaran |
| INT-5 | Seluruh invoice aktif memiliki jatuh tempo | 0 pelanggaran |
| INT-6 | Tidak ada nilai pembayaran negatif | 0 pelanggaran |
| INT-7 | Seluruh pembayaran teralokasi penuh | 0 pelanggaran |
| INT-8 | `paid_amount` = jumlah alokasi | 0 pelanggaran |
| INT-9 | Invoice yang digantikan tidak dihitung sebagai pendapatan | 0 pelanggaran |
| INT-10 | Invoice non-aktif tidak menyisakan saldo | 0 pelanggaran |
| INT-11 | Rekonstruksi saldo historis = saldo tersimpan | cocok |
| INT-12 | Seluruh tautan revisi valid | 0 pelanggaran |

### Pengujian rute HTTP — LULUS

270 URL diuji untuk masing-masing dari 6 peran (total 1.620 permintaan), mencakup seluruh halaman, seluruh laporan, dan seluruh format ekspor (XLSX, CSV, PDF).

| Peran | Total | Kesalahan | Ditolak (403) |
|---|---|---|---|
| SUPERADMIN | 270 | 0 | 0 |
| FINANCE_AR | 270 | 0 | 10 |
| AUDITOR | 270 | 0 | 46 |
| MANAGEMENT | 270 | 0 | 55 |
| COLLECTION | 270 | 0 | 120 |
| SALES | 270 | 0 | 136 |

Tidak ada HTTP 500, *fatal error*, *warning*, maupun galat SQL pada log aplikasi.

### Rekonsiliasi terhadap workbook Excel

| Butir | Nilai |
|---|---|
| Total bruto menurut sistem | Rp 8.949.764.840 |
| Total bruto menurut Excel | Rp 8.951.353.970 |
| Selisih | Rp 1.589.130 — dua invoice yang tercatat ganda pada dua lembar berbeda |
| Pendapatan ganda yang dicegah (RF) | Rp 137.652.703 DPP (setara Rp 152.794.500 bruto) |
| Invoice yang di Excel keliru berstatus LUNAS | 4 invoice, saldo Rp 9.557.300 |
| Saldo yang dipulihkan ke bucket 46–120 hari | 133 invoice, Rp 214.717.017 |

---

## A. Instalasi & Konfigurasi

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| A-1 | Buka `/install/` | Wizard tampil, langkah 1 aktif | ☐ |
| A-2 | Pemeriksaan kebutuhan | Seluruh butir wajib berstatus OK | ☐ |
| A-3 | Uji koneksi basis data dengan kredensial salah | Muncul pesan kesalahan berbahasa Indonesia | ☐ |
| A-4 | Uji koneksi dengan kredensial benar | Lanjut ke langkah 3 | ☐ |
| A-5 | Pasang struktur + data contoh | Selesai tanpa galat, jumlah invoice ditampilkan | ☐ |
| A-6 | Buat akun administrator | `config/config.php` terbentuk, lanjut ke langkah 5 | ☐ |
| A-7 | Kata sandi lemah ditolak | Muncul pesan syarat kata sandi | ☐ |
| A-8 | Hapus folder `install/` | Folder hilang dari server | ☐ |
| A-9 | Akses `/config/config.php` dari peramban | 403 atau 404, isi berkas tidak tampil | ☐ |
| A-10 | Akses `/storage/logs/` dari peramban | 403 atau 404 | ☐ |

---

## B. Autentikasi & Keamanan

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| B-1 | Login dengan kredensial benar | Masuk ke dashboard | ☐ |
| B-2 | Login dengan kata sandi salah | Pesan kesalahan, tidak masuk | ☐ |
| B-3 | Login akun nonaktif | "Akun Anda tidak aktif. Hubungi administrator." | ☐ |
| B-4 | Gagal login 5 kali berturut-turut | Akun terkunci sementara dengan pesan yang jelas | ☐ |
| B-5 | Login pertama akun baru | Dipaksa mengganti kata sandi sebelum dapat mengakses menu lain | ☐ |
| B-6 | Kata sandi baru sama dengan yang lama | Ditolak | ☐ |
| B-7 | Akses URL tanpa login | Dialihkan ke halaman masuk | ☐ |
| B-8 | Akses menu tanpa hak | Halaman 403 berbahasa Indonesia | ☐ |
| B-9 | Kirim formulir tanpa token CSRF | Permintaan ditolak | ☐ |
| B-10 | Diam 30 menit lalu klik menu | Sesi berakhir, diminta masuk kembali | ☐ |
| B-11 | Klik Keluar | Sesi dihapus, kembali ke halaman masuk | ☐ |
| B-12 | Masukkan `' OR 1=1 --` pada kotak pencarian | Diperlakukan sebagai teks biasa, tidak ada galat SQL | ☐ |
| B-13 | Masukkan `<script>alert(1)</script>` pada catatan | Tersimpan dan ditampilkan sebagai teks, skrip tidak dieksekusi | ☐ |

---

## C. Dashboard

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| C-1 | Buka dashboard | 16 kartu KPI dan seluruh grafik tampil | ☐ |
| C-2 | Angka KPI | Format Rupiah benar, nol ditulis `-` | ☐ |
| C-3 | Ubah filter periode | Seluruh KPI dan grafik ikut berubah | ☐ |
| C-4 | Filter area | Angka menyusut sesuai area terpilih | ☐ |
| C-5 | Klik segmen grafik aging | Membuka daftar invoice pada bucket tersebut | ☐ |
| C-6 | Klik KPI Saldo Piutang | Membuka daftar piutang bersaldo | ☐ |
| C-7 | Ekspor dashboard | Berkas terunduh dan isinya sesuai filter aktif | ☐ |
| C-8 | Total bruto | Rp 8.949.764.840 (pada data contoh) | ☐ |

---

## D. Skenario Perhitungan Piutang

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| D-1 | Buat invoice bruto Rp 11.100.000 | DPP Rp 10.000.000, PPN Rp 1.100.000 | ☐ |
| D-2 | Invoice tanpa potongan | Nilai bersih = bruto | ☐ |
| D-3 | Invoice baru tanpa pembayaran | Status BELUM_JATUH_TEMPO, saldo = nilai bersih | ☐ |
| D-4 | Jatuh tempo | = tanggal kirim + termin | ☐ |
| D-5 | Invoice tanpa tanggal kirim | Jatuh tempo dihitung dari tanggal invoice | ☐ |
| D-6 | Invoice lewat jatuh tempo | Status JATUH_TEMPO/TERLAMBAT, umur piutang positif | ☐ |
| D-7 | Batalkan invoice | Saldo nol, tidak muncul di aging maupun laporan pendapatan | ☐ |
| D-8 | Ubah nilai bruto invoice | Seluruh nilai turunan dihitung ulang otomatis | ☐ |
| D-9 | Hitung Ulang satu invoice | Nilai tetap konsisten | ☐ |
| D-10 | Hitung Ulang seluruh piutang | Selesai tanpa galat, jumlah invoice diproses ditampilkan | ☐ |

---

## E. Pembayaran

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| E-1 | Bayar penuh | Saldo nol, status LUNAS | ☐ |
| E-2 | Bayar sebagian | Status PEMBAYARAN_SEBAGIAN, sisa saldo benar | ☐ |
| E-3 | Bayar tiga kali hingga lunas | Status LUNAS, tiga alokasi tercatat | ☐ |
| E-4 | Total alokasi ≠ nilai pembayaran | Ditolak dengan pesan yang jelas | ☐ |
| E-5 | Satu pembayaran untuk tiga invoice | Ketiga invoice terperbarui | ☐ |
| E-6 | Tombol Saran Alokasi | Terisi otomatis mulai invoice tertua | ☐ |
| E-7 | Balikkan pembayaran | Saldo invoice pulih, riwayat tetap tersimpan | ☐ |
| E-8 | Pembayaran melebihi ambang persetujuan | Muncul permintaan persetujuan | ☐ |
| E-9 | Kelebihan bayar | Ditandai sebagai temuan kualitas data | ☐ |
| E-10 | Cetak bukti pembayaran | PDF terbentuk dan terbaca | ☐ |

---

## F. Revisi Invoice (RF)

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| F-1 | Buat revisi lama → baru | Tersimpan berstatus menunggu | ☐ |
| F-2 | Terapkan revisi | Invoice lama digantikan, saldo nol | ☐ |
| F-3 | Pendapatan setelah revisi | Hanya invoice pengganti yang terhitung | ☐ |
| F-4 | Batalkan penerapan revisi | Invoice lama aktif kembali beserta saldonya | ☐ |
| F-5 | Import lembar RF | Pencocokan otomatis berjalan | ☐ |
| F-6 | RF tanpa pasangan | Berstatus menunggu pencocokan | ☐ |
| F-7 | Tombol Cocokkan Ulang | Mencocokkan kembali data yang tertunda | ☐ |
| F-8 | Celah penomoran RF | Nomor yang terlewat terdeteksi | ☐ |

---

## G. Potongan & Pajak

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| G-1 | PPh 23 pada invoice Rp 11.100.000 | Rp 200.000 (2% × DPP Rp 10.000.000) | ☐ |
| G-2 | PPh 23 dihitung dari DPP | Bukan 2% × bruto (Rp 222.000) | ☐ |
| G-3 | Nilai bersih setelah PPh 23 | Rp 10.900.000 | ☐ |
| G-4 | Tambah potongan lain Rp 250.000 | Nilai bersih dan saldo berkurang | ☐ |
| G-5 | PPh 23 + potongan lain bersamaan | Total potongan = jumlah keduanya | ☐ |
| G-6 | Ubah tarif PPh 23 di Pengaturan | Berlaku untuk invoice berikutnya | ☐ |
| G-7 | Tarif PPh 23 tidak standar | Ditandai pada Kualitas Data | ☐ |

---

## H. Import Excel

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| H-1 | Unggah `AR RPP 2026.xlsx` | Daftar 8 worksheet tampil | ☐ |
| H-2 | Pilih lembar bulan | Pemetaan kolom ditebak otomatis dengan benar | ☐ |
| H-3 | Kolom hasil rumus (UMUR PIUTANG) | Ditandai diabaikan | ☐ |
| H-4 | Pratinjau | 15 baris pertama tampil beserta hasil pembacaannya | ☐ |
| H-5 | Uji coba (*dry run*) | Tidak ada data tersimpan, laporan validasi tampil | ☐ |
| H-6 | Import sungguhan | Jumlah sukses/gagal/duplikat ditampilkan | ☐ |
| H-7 | Baris dengan tanggal `#REF!` | Diterima memakai tanggal cadangan, diberi penanda | ☐ |
| H-8 | Baris tanpa tanggal sama sekali | Ditolak | ☐ |
| H-9 | Nomor invoice duplikat | Dihitung sebagai duplikat, bukan sekadar gagal | ☐ |
| H-10 | Nominal `#DIV/0!` | Dinormalkan menjadi nol | ☐ |
| H-11 | Unduh baris gagal | Berkas Excel berisi baris asli + kolom penjelasan | ☐ |
| H-12 | Import lembar RF | Terdeteksi sebagai jenis revisi | ☐ |
| H-13 | Batalkan batch import | Seluruh data batch terhapus | ☐ |
| H-14 | Riwayat import | Seluruh batch tercatat lengkap | ☐ |

---

## I. Aging Piutang

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| I-1 | Buka Aging Piutang | 4 bucket bawaan tampil | ☐ |
| I-2 | Total seluruh bucket | Sama dengan saldo piutang di dashboard | ☐ |
| I-3 | Ubah pengelompokan ke area | Total tetap sama | ☐ |
| I-4 | Mundurkan tanggal pelaporan | Angka berubah sesuai posisi tanggal tersebut | ☐ |
| I-5 | Buat konfigurasi 5 bucket | Tersimpan dan dapat dipilih | ☐ |
| I-6 | Bandingkan total 4 vs 5 bucket | Nilainya identik | ☐ |
| I-7 | Klik angka bucket | Daftar invoice di dalamnya tampil | ☐ |
| I-8 | Invoice lunas | Tidak muncul di aging | ☐ |
| I-9 | Hapus konfigurasi default | Ditolak dengan penjelasan | ☐ |

---

## J. ACP

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| J-1 | ACP metode finansial, satu bulan | Angka tampil beserta rincian penyusunnya | ☐ |
| J-2 | Verifikasi manual rumus | (Rata-rata piutang ÷ penjualan kredit) × hari | ☐ |
| J-3 | ACP metode operasional | Menampilkan rata-rata, median, min, maks, % tepat waktu | ☐ |
| J-4 | ACP tahunan | Periode 365 hari | ☐ |
| J-5 | Tren bulanan | Berhenti di bulan berjalan, tidak memproyeksi ke depan | ☐ |
| J-6 | Tetapkan target ACP | Tersimpan dan tampil sebagai indikator | ☐ |
| J-7 | ACP di bawah target | Indikator hijau | ☐ |
| J-8 | ACP di atas target + toleransi | Indikator merah | ☐ |
| J-9 | ACP per area/sales | Rincian per dimensi tampil | ☐ |
| J-10 | Perbandingan periode | Bulan, kuartal, dan YTD tampil | ☐ |

---

## K. Penagihan

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| K-1 | Buka Worklist | 7 kategori beserta jumlah dan nilainya | ☐ |
| K-2 | Buka satu kategori | Daftar invoice sesuai kategori | ☐ |
| K-3 | Catat tindak lanjut | Tersimpan dan muncul di riwayat | ☐ |
| K-4 | Catat janji bayar | Tersimpan dan tampil di menu Janji Bayar | ☐ |
| K-5 | Janji bayar lewat tanpa pembayaran | Berubah menjadi ingkar | ☐ |
| K-6 | Janji bayar dipenuhi | Berubah menjadi dipenuhi | ☐ |
| K-7 | Ubah status penagihan | Tersimpan dan tampil di daftar | ☐ |
| K-8 | Ekspor worklist | Berkas sesuai filter aktif | ☐ |

---

## L. Laporan & Pembuat Laporan

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| L-1 | Buka seluruh 25 laporan siap pakai | Semuanya tampil tanpa galat | ☐ |
| L-2 | Terapkan filter pada laporan | Data menyusut sesuai filter | ☐ |
| L-3 | Buat laporan kustom sederhana | Hasil tampil | ☐ |
| L-4 | Tambah pengelompokan dan subtotal | Subtotal dan grand total benar | ☐ |
| L-5 | Grand total | Sama dengan jumlah seluruh baris | ☐ |
| L-6 | Uji seluruh 15 operator filter | Semuanya berfungsi | ☐ |
| L-7 | Uji seluruh 9 fungsi agregasi | Semuanya berfungsi | ☐ |
| L-8 | Aktifkan mode pivot | Tabel silang terbentuk | ☐ |
| L-9 | Tambahkan grafik | Grafik tampil sesuai data | ☐ |
| L-10 | Simpan template | Tersimpan dan dapat dimuat kembali utuh | ☐ |
| L-11 | Duplikasi template | Salinan terbentuk | ☐ |
| L-12 | Bagikan template | Pengguna lain dapat membukanya | ☐ |
| L-13 | Ganti sumber data | Katalog kolom ikut berganti | ☐ |

---

## M. Ekspor & Pencetakan

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| M-1 | Ekspor Excel | Berkas terbuka di Microsoft Excel/LibreOffice | ☐ |
| M-2 | Format Rupiah di Excel | Tampil sebagai angka, bukan teks | ☐ |
| M-3 | Nomor faktur pajak di Excel | Nol di depan tetap ada | ☐ |
| M-4 | Ekspor CSV | Terbuka benar di Excel Indonesia (BOM UTF-8) | ☐ |
| M-5 | Ekspor PDF | Header berulang di tiap halaman, nomor halaman benar | ☐ |
| M-6 | PDF landscape | Orientasi sesuai pilihan | ☐ |
| M-7 | Cetak HTML | Pratinjau cetak rapi, menu tidak ikut tercetak | ☐ |
| M-8 | Ekspor menghormati filter | Isi berkas = isi layar | ☐ |
| M-9 | Ekspor menghormati kolom tersembunyi | Kolom yang disembunyikan tidak ikut | ☐ |
| M-10 | Ekspor data besar (>10.000 baris) | Selesai tanpa kehabisan memori | ☐ |

---

## N. Data Master

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| N-1 | Buka seluruh 16 entitas master | Semuanya tampil | ☐ |
| N-2 | Tambah data master | Tersimpan | ☐ |
| N-3 | Kode duplikat | Ditolak dengan pesan yang jelas | ☐ |
| N-4 | Ubah data master | Tersimpan, perubahan tercatat di audit | ☐ |
| N-5 | Nonaktifkan data master | Tidak muncul lagi pada pilihan baru | ☐ |
| N-6 | Hapus master yang masih dipakai | Ditolak atau dihapus lunak dengan aman | ☐ |
| N-7 | Tambah pemetaan nilai | Import berikutnya memakai pemetaan tersebut | ☐ |
| N-8 | Ekspor data master | Berkas terbentuk | ☐ |

---

## O. Persetujuan & Audit

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| O-1 | Picu transaksi yang butuh persetujuan | Permintaan muncul di kotak masuk | ☐ |
| O-2 | Buka rincian permintaan | Data entitas terkait tampil | ☐ |
| O-3 | Setujui permintaan | Tindakan tertunda dijalankan | ☐ |
| O-4 | Tolak tanpa alasan | Ditolak, alasan wajib diisi | ☐ |
| O-5 | Tolak dengan alasan | Tersimpan, transaksi tidak dijalankan | ☐ |
| O-6 | Buka Log Aktivitas | Seluruh perubahan tercatat | ☐ |
| O-7 | Rincian log | Nilai lama dan nilai baru tampil berdampingan | ☐ |
| O-8 | Kata sandi di log | Tersamarkan, tidak terbaca | ☐ |
| O-9 | Ekspor log | Berkas terbentuk | ☐ |

---

## P. Hak Akses per Peran

Uji dengan masuk memakai masing-masing akun.

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| P-1 | SUPERADMIN | Seluruh menu terlihat dan dapat diakses | ☐ |
| P-2 | FINANCE_AR | Tidak dapat mengakses Pengguna dan Pencadangan | ☐ |
| P-3 | AUDITOR | Dapat melihat semua, tidak ada tombol ubah/hapus/setujui | ☐ |
| P-4 | MANAGEMENT | Dashboard dan laporan terlihat, transaksi tidak dapat diubah | ☐ |
| P-5 | COLLECTION | Hanya melihat invoice penugasannya | ☐ |
| P-6 | SALES | Hanya melihat invoice portofolionya | ☐ |
| P-7 | SALES membuka URL invoice milik sales lain | Ditolak atau tidak ditemukan | ☐ |
| P-8 | Akun cakupan terbatas tanpa tautan master | Peringatan tampil, data kosong (mode ketat) | ☐ |
| P-9 | Menu tersembunyi sesuai peran | Menu tanpa hak tidak tampil sama sekali | ☐ |
| P-10 | Buat peran baru dengan hak terbatas | Berlaku sesuai yang ditentukan | ☐ |

---

## Q. Kualitas Data

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| Q-1 | Buka Kualitas Data | 20 pemeriksaan dijalankan | ☐ |
| Q-2 | Setiap temuan | Menampilkan jumlah, nilai, tingkat, dan saran | ☐ |
| Q-3 | Klik satu temuan | Daftar invoice terkait tampil | ☐ |
| Q-4 | Rekonsiliasi Excel | Selisih terhadap nilai Excel asli tampil | ☐ |
| Q-5 | Perbaikan otomatis | Hanya memperbaiki yang aman, hasilnya dilaporkan | ☐ |
| Q-6 | Ekspor temuan | Berkas terbentuk | ☐ |

---

## R. Pencadangan

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| R-1 | Cadangkan Sekarang | Berkas terbentuk dan muncul di daftar | ☐ |
| R-2 | Unduh berkas cadangan | Berkas terunduh dan ukurannya wajar | ☐ |
| R-3 | Isi berkas cadangan | Memuat `CREATE TABLE` dan `INSERT INTO` | ☐ |
| R-4 | Jalankan `database/backup.php` dari CLI | Berhasil, ringkasan tampil | ☐ |
| R-5 | Retensi otomatis | Berkas terlama terhapus sesuai pengaturan | ☐ |
| R-6 | Pulihkan ke basis data uji coba | Jumlah data cocok | ☐ |
| R-7 | Hapus berkas cadangan | Terhapus dari daftar dan dari disk | ☐ |

---

## S. Tampilan & Bahasa

| No | Butir uji | Hasil yang diharapkan | ✓ |
|---|---|---|---|
| S-1 | Seluruh menu dan tombol | Berbahasa Indonesia | ☐ |
| S-2 | Seluruh pesan validasi | Berbahasa Indonesia | ☐ |
| S-3 | Judul dan header laporan | Berbahasa Indonesia | ☐ |
| S-4 | Isi berkas PDF dan Excel | Berbahasa Indonesia | ☐ |
| S-5 | Halaman 403, 404, dan 500 | Berbahasa Indonesia | ☐ |
| S-6 | Format Rupiah | `Rp 1.250.000`, negatif dalam kurung, nol sebagai `-` | ☐ |
| S-7 | Format tanggal | `DD-MM-YYYY` | ☐ |
| S-8 | Nama bulan | Januari–Desember | ☐ |
| S-9 | Tampilan di layar 1366×768 | Tanpa gulir horizontal berlebihan | ☐ |
| S-10 | Tampilan di tablet | Menu samping dapat diciutkan | ☐ |
| S-11 | Tampilan di ponsel | Tabel dapat digulir, tombol dapat ditekan | ☐ |
| S-12 | Cetak halaman | Menu dan tombol tidak ikut tercetak | ☐ |

---

## T. Kinerja

| No | Butir uji | Target | ✓ |
|---|---|---|---|
| T-1 | Muat dashboard | < 2 detik | ☐ |
| T-2 | Daftar piutang 50 baris | < 1,5 detik | ☐ |
| T-3 | Laporan aging | < 2 detik | ☐ |
| T-4 | Ekspor Excel 3.000 baris | < 10 detik | ☐ |
| T-5 | Ekspor PDF 500 baris | < 15 detik | ☐ |
| T-6 | Import 500 baris Excel | < 60 detik | ☐ |
| T-7 | Hitung Ulang seluruh piutang | < 5 menit untuk 3.000 invoice | ☐ |
| T-8 | Pencadangan basis data | < 60 detik | ☐ |

---

## Formulir Berita Acara

```
BERITA ACARA PENGUJIAN PENERIMAAN SISTEM
SIPIUTANG v1.0.0

Nama sistem      : ................................................
Alamat (URL)     : ................................................
Tanggal pengujian: ................................................

Pelaksana pengujian:
  Nama           : ................................................
  Jabatan        : ................................................

Ringkasan hasil:
  Jumlah butir uji dijalankan  : ............
  Jumlah lulus                 : ............
  Jumlah tidak lulus           : ............
  Jumlah tidak dapat diuji     : ............

Catatan temuan:
  ................................................................
  ................................................................
  ................................................................

Kesimpulan:
  [ ] Diterima tanpa catatan
  [ ] Diterima dengan catatan (temuan ditindaklanjuti kemudian)
  [ ] Belum dapat diterima

        Pelaksana                          Mengetahui
                                    Manajer Keuangan / IT


  (........................)        (........................)
   Tanggal: ..............           Tanggal: ..............
```

---

*Dokumen ini merupakan bagian dari paket SIPIUTANG v1.0.0.*
