Blackbox Testing - Pendirian PP (PP)
- Domain: PP
- Fitur: Pendirian PP (Perseroan Perorangan)
- Role/aktor: perseroan (input, unggah, tinjau, finalisasi). Tidak ada tahap verifikator untuk Pendirian.
- Tanggal uji: 2026-08-19
- Penguji (sesi): Supervisor PP
- Build/commit: 63c40a17
1. Ringkasan fitur
Pendirian PP mengubah pendaftaran Perseroan Perorangan yang tadinya isi formulir manual menjadi unggah dokumen lalu proses otomatis. Pemohon (role perseroan) mengunggah Surat Pernyataan Pendirian PP beserta KTP dan NPWP pemilik. Sistem menjalankan OCR dan LLM, mengekstrak field perseroan, alamat, identitas pemilik, kontak, KBLI, serta daftar Pemilik Manfaat (Beneficial Owner). Berbeda dengan alur PT, sumbernya adalah Surat Pernyataan (bukan akta notaris) dan ada lapisan atestasi Pemilik Manfaat. Hasil akhir yang diharapkan: submission berstatus COMPLETED dengan paket ekstraksi tervalidasi yang bisa diunduh.
2. Full workflow
2.1 Diagram state
stateDiagram-v2
[*] --> CREATED
CREATED --> EXTRACTING: POST /start
EXTRACTING --> VALIDATING
VALIDATING --> READY: ekstraksi selesai + validasi awal (mode draft)
EXTRACTING --> ERROR: dok wajib kurang (KTP/NPWP) atau OCR gagal
READY --> READY: edit field / KBLI / BO -> re-validate (mode submission)
READY --> COMPLETED: POST /finalize (3 gate lolos)
COMPLETED --> [*]
2.2 Sequence (aktor - sistem)
sequenceDiagram
actor U as perseroan
participant FE as Frontend
participant BE as Backend :47014
participant OCR as OCR/LLM
U->>FE: Unggah SP + KTP + NPWP di papan Klasifikasi
FE->>BE: POST /api/klasifikasi/upload (per file)
U->>FE: klik "Unggah dan Identifikasi Dokumen"
FE->>BE: POST /api/klasifikasi/classify/:fileId
U->>FE: klik "Lanjut ke Ekstraksi"
FE->>BE: POST /api/submissions (files[]) -> type PENDIRIAN_PP
FE->>BE: POST /api/submissions/:id/start
BE->>OCR: ekstraksi async (SP, KTP, NPWP)
BE-->>FE: poll GET /api/submissions/:id/status (READY)
U->>FE: Tinjau: perbaiki field FAIL, konfirmasi field/KBLI/BO, setujui pernyataan
FE->>BE: PATCH fields, PATCH kbli, POST kriteria/confirm, POST sections/pernyataan/approve
U->>FE: klik Finalisasi
FE->>BE: POST /api/pp/pendirian/:id/finalize -> COMPLETED
U->>FE: Unduh paket
FE->>BE: GET /api/pp/pendirian/:id/packet (zip)
2.3 Peta route & UI
| Langkah |
Route |
Komponen |
Elemen interaktif utama |
Selector |
| Unggah |
/pp/pendirian/klasifikasi |
KlasifikasiPage (labelType pendirian_pp) |
dropzone, kartu file, tombol "Unggah dan Identifikasi Dokumen", "Buat Surat Pernyataan", "Template kosong", "Contoh terisi" |
input[type=file], tambah-dokumen-input |
| Papan |
/pp/pendirian/klasifikasi |
ClassificationBoard |
lane per dokumen, override label, tombol "Lanjut ke Ekstraksi" |
teks tombol |
| Ekstraksi |
/pp/pendirian/:id/extraction |
PendirianExtractionPage |
progress 0/3, checklist SP/KTP/NPWP, "Tambah Dokumen", "Kembali ke Unggah", "Lanjut ke Tinjauan" |
teks tombol |
| Tinjau |
/pp/pendirian/:id/review |
PpPendirianReviewPageV2 |
panel validasi, kartu field + edit + konfirmasi, roster KBLI (edit/konfirmasi), kartu Pemilik Manfaat (kriteria Grup A/B, konfirmasi), checkbox Pernyataan, tombol Finalisasi |
kartu atestasi, pernyataan-progress |
| Selesai |
/pp/pendirian/:id/review (COMPLETED) |
idem |
Unduh paket |
- |
3. Prasyarat & data uji
Data nyata: e2e/data/real-intake/pp/Pendirian PP/{1 BO, 2 BO} (Surat Pernyataan born-digital + KTP scan + NPWP scan). Semua data nyata bersifat positive; negative diturunkan lewat edit field via API.
| ID data |
Tipe |
Berkas |
Deskripsi |
Ekspektasi sistem |
| D-PP-1BO |
Positive |
maju_jaya_pendirian.pdf + ktp1.jpg + npwp1.jpeg |
SP 1 pemilik manfaat |
Ekstraksi lengkap, 1 identity match, siap finalisasi setelah koreksi nama+KBLI |
| D-PP-2BO |
Positive |
maju_jaya_pendirian.pdf + 2 KTP + 2 NPWP |
SP 2 pemilik manfaat |
2 identity match, keduanya name-match |
| D-PP-SINGLE |
Positive |
surat-pernyataan-pendirian-PT-AAA-ANUGRAH.pdf |
SP tunggal born-digital |
Lihat temuan klasifikasi (BUG-02) |
| D-NEG-modal0 |
Negative |
edit field modal="0" |
Modal di bawah rentang |
PP_MODAL_RANGE FAIL |
| D-NEG-modalmax |
Negative |
edit field modal="6000000000" |
Modal di atas Rp5 miliar |
PP_MODAL_RANGE FAIL |
| D-NEG-email |
Negative |
edit field email="bukan-email" |
Format email salah |
PP_EMAIL_FORMAT FAIL |
| D-NEG-telp |
Negative |
edit field telepon="12345" |
Format telepon salah |
PP_PHONE_FORMAT FAIL |
| D-NEG-namaPT |
Negative |
edit namaPerseroan="PT Coba Coba Sekali" |
Nama diawali PT |
PP_NAMA_FILTER FAIL |
| D-NEG-nama2kata |
Negative |
edit namaPerseroan="Ab" |
Kurang dari 3 kata |
PP_NAMA_PERSEROAN_RULES FAIL |
| D-NEG-SPonly |
Negative |
hanya SP (tanpa KTP/NPWP) |
Dokumen wajib kurang |
Status ERROR (hard stop) |
4. Matriks skenario uji
| ID |
Tipe |
Lapisan |
Langkah ringkas |
Ekspektasi |
Hasil aktual |
Status |
Bukti |
| TC-01 |
Positive |
UI+API |
Unggah D-PP-1BO, klasifikasi, ekstraksi |
type PENDIRIAN_PP, status READY, 19 rule ter-evaluasi |
READY dalam ~25 detik; 1 identity match nik=true |
PASS |
ui-01..03, pp-pendirian-1bo.log |
| TC-02 |
Positive |
API |
Koreksi nama (buang PT) + KBLI 47711->47712, konfirmasi semua, setujui pernyataan, finalisasi |
COMPLETED |
200 COMPLETED |
PASS |
pp-complete-1bo.log |
| TC-03 |
Positive |
API |
Unggah D-PP-2BO |
2 identity match, PP_BO_IDENTITY_COMPLETE PASS (2 BO) |
READY, 2 match, keduanya name-match |
PASS |
pp-pendirian-2bo.log |
| TC-04 |
Positive |
API |
Unduh paket submission COMPLETED |
zip berisi extraction/validation/audit/dokumen |
zip 7 berkas, dokumen asli ikut |
PASS |
packet-1bo.zip |
| TC-05 |
Negative |
API |
Finalisasi saat pernyataan belum disetujui |
409 SECTIONS_NOT_APPROVED |
409 code SECTIONS_NOT_APPROVED |
PASS |
pp-gate-probe.log |
| TC-06 |
Negative |
API |
Setujui pernyataan, finalisasi tanpa konfirmasi field |
409 HAS_UNCONFIRMED |
409 count 30 |
PASS |
pp-gate-probe.log |
| TC-07 |
Negative |
API |
Semua terkonfirmasi tapi KBLI 47711 tak resolve, finalisasi |
409 HAS_FAIL [PP_KBLI_RESOLVE] |
409 failing PP_KBLI_RESOLVE |
PASS |
pp-gate-probe.log |
| TC-08 |
Negative |
API |
Set kriteria BO campur grup [216,242] |
400 PP_BO_KRITERIA_VALID |
400 "tidak boleh dicampur" |
PASS |
probe log |
| TC-09 |
Negative |
API |
Set kriteria BO id tak dikenal [999] |
400 PP_BO_KRITERIA_VALID |
400 "Kriteria tidak dikenal: 999" |
PASS |
probe log |
| TC-10 |
Negative |
API |
Edit NIK BO yang sudah match dokumen |
409 BO_IDENTITY_LOCKED |
409 BO_IDENTITY_LOCKED |
PASS |
probe log |
| TC-11 |
Negative |
API |
Edit field BO non-allowlist (isFounder) |
400 field not editable |
400 "field not editable: isFounder" |
PASS |
probe log |
| TC-12 |
Negative |
API |
Hapus BO pendiri (founder) |
400 CANNOT_DELETE_FOUNDER |
400 CANNOT_DELETE_FOUNDER |
PASS |
probe log |
| TC-13 |
Negative |
API |
Konfirmasi BO id tidak ada |
404 not found |
404 "Pemilik Manfaat entry not found" |
PASS |
probe log |
| TC-14 |
Negative |
API |
Edit modal="0" dan "6000000000" |
PP_MODAL_RANGE FAIL |
keduanya FAIL "di luar rentang" |
PASS |
pp-field-neg.log |
| TC-15 |
Negative |
API |
Edit email="bukan-email" |
PP_EMAIL_FORMAT FAIL |
FAIL "Format email tidak valid" |
PASS |
pp-field-neg.log |
| TC-16 |
Negative |
API |
Edit telepon="12345" |
PP_PHONE_FORMAT FAIL |
FAIL "harus berformat 08.../62.../+62..." |
PASS |
pp-field-neg.log |
| TC-17 |
Negative |
API |
Edit namaPerseroan="PT ..." |
PP_NAMA_FILTER FAIL |
FAIL "tidak boleh diawali PT" |
PASS |
pp-field-neg.log |
| TC-18 |
Negative |
API |
Edit namaPerseroan="Ab" |
PP_NAMA_PERSEROAN_RULES FAIL |
FAIL "minimal 3 kata" |
PASS |
pp-field-neg.log |
| TC-19 |
Negative |
API |
Unggah hanya SP (tanpa KTP) |
ERROR "KTP pemilik wajib" |
ERROR persis |
PASS |
pp-intake-neg.log |
| TC-20 |
Negative |
API |
Unggah SP+KTP (tanpa NPWP) |
ERROR "NPWP pemilik wajib" |
ERROR persis |
PASS |
pp-intake-neg.log |
| TC-21 |
Negative |
API |
Unggah KTP+NPWP tanpa SP |
bukan PENDIRIAN_PP |
inferSubmissionType -> PENDIRIAN_PT lalu ERROR |
PASS (lihat BUG-04) |
pp-intake-neg.log |
| TC-22 |
Positive |
UI |
Papan sampai halaman ekstraksi via UI |
navigasi Unggah -> Ekstraksi, checklist 3 dok |
tercapai, screenshot |
PASS |
ui-02a/02b/03 |
| TC-23 |
Positive |
UI |
Halaman Tinjau menampilkan semua seksi + panel validasi + Finalisasi |
seksi Data/Alamat/Identitas/KBLI/Pemilik Manfaat/Pernyataan tampil |
tampil lengkap |
PASS |
ui-05-review-direct |
| TC-24 |
Negative |
API |
Mutasi field setelah COMPLETED |
ditolak terkunci |
409/lock SUBMISSION_LOCKED |
PASS |
terminal probe |
Ringkasan validasi pada data nyata (mode draft, sebelum koreksi): 14 PASS, 2 FAIL (PP_NAMA_FILTER karena nama SP "PT MAJU JAYA PEROERANGAN", PP_KBLI_RESOLVE karena kode 47711), 1 WARNING (PP_NIK_FORMAT terbaca 15 digit), 1 SKIPPED (PP_DECLARATIONS_PRESENT), sisanya PASS. PP_BO_KRITERIA_VALID SKIPPED di mode draft dan ter-evaluasi (PASS) di mode submission - sesuai desain.
5. Cakupan UI (semua yang diakses user)
| Route/Elemen |
Diuji? |
Perilaku benar? |
Catatan |
/pp/pendirian/klasifikasi dropzone + intake |
Ya |
Ya |
3 file terunggah, kartu preview tampil |
| Tombol "Unggah dan Identifikasi Dokumen" |
Ya |
Ya |
Menjalankan klasifikasi |
| Papan klasifikasi (lane per dok) |
Ya |
Ya |
SP/KTP/NPWP terpetakan |
| Tombol "Lanjut ke Ekstraksi" |
Ya |
Ya |
Membuat submission + navigasi |
| "Buat Surat Pernyataan" / Template / Contoh |
Sebagian |
Ya (endpoint) |
Endpoint template-surat & contoh-surat 200 (belum tekan tombol UI) |
/pp/pendirian/:id/extraction progress+checklist |
Ya |
Ya |
0/3 lalu naik; "Tambah Dokumen", "Kembali ke Unggah" hadir |
| Tombol "Lanjut ke Tinjauan" |
Ya |
Ya |
disabled saat masih ekstraksi |
/pp/pendirian/:id/review seksi field + edit |
Ya |
Ya |
edit + konfirmasi berjalan |
| Roster KBLI (edit kode, konfirmasi) |
Ya |
Ya |
edit 47711->47712 re-resolve |
| Kartu Pemilik Manfaat (kriteria Grup A/B, konfirmasi) |
Ya |
Ya |
kriteria + confirm |
| Checkbox Pernyataan (atestasi) + progress |
Ya |
Ya |
gate approval pernyataan |
| Tombol Finalisasi (gate) |
Ya |
Ya |
3 gate berlapis |
| Unduh paket (COMPLETED) |
Ya |
Ya |
zip valid |
6. Temuan bug & perbaikan
| ID bug |
Severity |
Ringkas |
Reproduksi |
Ekspektasi |
Aktual |
Screenshot |
Rekomendasi perbaikan |
| BUG-01 |
Med |
Master KBLI dev_4 tidak memuat kode 47711 (tetangga 47712/47713/47714 ada) |
Unggah SP dengan KBLI 47711; jalankan validasi |
Kode KBLI 2020 yang sah lolos resolve |
PP_KBLI_RESOLVE FAIL "Kode KBLI tidak dikenali: 47711" |
pp-pendirian-1bo.log |
Re-seed tabel m_kbli ke KBLI 2020 lengkap; aturan validasi sendiri sudah benar (menolak kode yang tidak ada di master). Sifatnya data/lingkungan, bukan logika aplikasi |
| BUG-02 |
Med |
Classifier tidak konsisten pada Surat Pernyataan Pendirian PP |
Unggah surat-pernyataan-pendirian-PT-AAA-ANUGRAH.pdf lewat smoke |
Terklasifikasi SURAT_PERNYATAAN_PENDIRIAN_PP |
Terklasifikasi BUKTI_TRANSFER-SURAT_PERNYATAAN_SETOR (conf 0.9999). SP maju_jaya justru benar |
smoke-pp-single.log |
Di lane pinned pendirian_pp, paksa label SP ke SURAT_PERNYATAAN_PENDIRIAN_PP atau perbaiki contoh latih classifier. User masih bisa override manual, jadi tidak memblokir |
| BUG-03 |
Low |
PP_DECLARATIONS_PRESENT SKIPPED saat model OCR tidak mengekstrak 3 pernyataan |
Unggah SP nyata; lihat validationResults |
Idealnya memverifikasi teks pernyataan ada |
SKIPPED "Pernyataan tidak diekstrak oleh model OCR kustom" |
review-engine-1bo.json |
Atestasi tetap dijamin oleh gate approval "pernyataan" (3 checkbox), jadi risiko rendah. Pertimbangkan menandai eksplisit bahwa verifikasi teks pernyataan dilewati |
| BUG-04 |
Low |
KTP+NPWP tanpa SP diam-diam disimpulkan PENDIRIAN_PT lalu ERROR |
POST /api/submissions dengan hanya KTP+NPWP |
Ditolak sebagai bukan Pendirian PP yang valid |
type PENDIRIAN_PT, ERROR "Akta Pendirian tidak ditemukan" |
pp-intake-neg.log |
Di UI dicegah oleh checklist dokumen wajib (SP required), jadi user biasa tidak mengalaminya. Pertimbangkan pesan lebih jelas pada lane pinned bila SP hilang |
Catatan: tidak ada bug High. Alur inti Pendirian PP berjalan penuh sampai COMPLETED dan paket valid.
7. Ringkasan & rekomendasi
- Total skenario: 24 (PASS 24 / FAIL 0). Semua gate finalisasi, aturan validasi (positive dan negative), serta CRUD Pemilik Manfaat tercakup.
- Cakupan UI: 13/13 kelompok elemen diuji (happy path end-to-end via papan sampai ekstraksi, plus halaman Tinjau lengkap).
- Bug: High 0, Med 2 (BUG-01 master KBLI, BUG-02 classifier SP), Low 2 (BUG-03 pernyataan SKIPPED, BUG-04 inferensi tanpa SP).
- Rekomendasi prioritas: (1) re-seed master KBLI agar kode sah tidak ter-flag; (2) kunci label SP pada lane pinned pendirian_pp supaya klasifikasi tidak menyesatkan user.
- Gap/keterbatasan: negative case diturunkan lewat edit field (data nyata semuanya positive). Klik tombol "Buat Surat Pernyataan"/Template/Contoh di UI belum ditekan langsung (endpoint sudah diverifikasi 200). OCR cepat (~20-25 detik/submission) sehingga cakupan API luas bisa dijalankan.