Blackbox Testing — Pendirian PT (PT)
- Domain: PT
- Fitur: Pendirian PT
- Role/aktor: notaris (input & finalisasi), admin (akses menyeluruh). Tidak ada tahap verifikator (flow terminal self-service).
- Tanggal uji: 2026-08-19
- Penguji (sesi): Supervisor PT
- Build/commit: 63c40a17
1. Ringkasan fitur
Pendirian PT memproses Akta Pendirian Perseroan Terbatas beserta dokumen pendukung (KTP, NPWP, bukti setor modal, surat domisili) untuk menghasilkan permohonan pendirian yang terverifikasi. Notaris mengunggah akta lewat papan Klasifikasi, sistem menjalankan OCR dan ekstraksi LLM, lalu menampilkan halaman tinjauan berisi field terekstraksi dan hasil validasi. Notaris mengonfirmasi tiap field dan menuntaskan lewat tombol Finalisasi. Flow ini terminal: begitu difinalisasi, statusnya langsung COMPLETED tanpa antrean verifikator, karena SABH tidak punya tahap verifikator untuk pendirian.
2. Full workflow
2.1 Diagram state
stateDiagram-v2
[*] --> CREATED
CREATED --> EXTRACTING: POST /start
EXTRACTING --> VALIDATING: OCR + ekstraksi LLM selesai
VALIDATING --> READY: aturan validasi dijalankan
READY --> COMPLETED: Finalisasi (semua field dikonfirmasi, tidak ada FAIL tersisa)
COMPLETED --> [*]
EXTRACTING --> ERROR: kegagalan OCR/ekstraksi akta
2.2 Sequence (aktor - sistem)
sequenceDiagram
actor N as Notaris
participant FE as Frontend
participant BE as Backend :47014
participant OCR as OCR/LLM
N->>FE: Unggah akta di /klasifikasi
FE->>BE: POST /api/klasifikasi/upload
FE->>BE: POST /api/klasifikasi/classify/:fileId
BE->>OCR: OCR halaman + klasifikasi
OCR-->>BE: AKTA_PENDIRIAN (conf 0.98)
FE->>BE: POST /api/submissions (infer PENDIRIAN_PT)
FE->>BE: POST /api/submissions/:id/start
BE->>OCR: ekstraksi field akta (async)
BE->>BE: derive checklist + jalankan validasi
FE->>BE: GET /api/submissions/:id/review-data (poll)
N->>FE: Konfirmasi tiap field, override FAIL bila perlu
FE->>BE: POST /documents/:docId/fields/confirm
N->>FE: Klik Finalisasi
FE->>BE: POST /api/submissions/:id/review/finalize
BE-->>FE: { status: COMPLETED }
2.3 Peta route & UI
| Langkah |
Route |
Komponen |
Elemen interaktif utama |
Selector |
| Unggah & klasifikasi |
/klasifikasi |
KlasifikasiPage |
dropzone/file input, kartu akta tunggal |
input[type=file], single-akta-card |
| Ekstraksi (step 2) |
/pendirian/:id/extraction |
PendirianExtractionPage |
auto-start pipeline, progres |
(tanpa testid stabil) |
| Tinjauan (step 3) |
/pendirian/:id/review |
PtPendirianReviewPageV2 |
konfirmasi field, panel validasi, tombol Finalisasi, banner selesai |
pt-finalize-button, pendirian-pt-completed-banner |
| Status (step 4) |
/pendirian/:id/status |
SubmissionStatusPage |
ringkasan status |
(tanpa testid stabil) |
3. Prasyarat & data uji
| ID data |
Tipe |
Berkas |
Deskripsi |
Ekspektasi sistem |
| D-POS-01 |
Positive |
PT__pendirian__positive__D-POS-01__akta-valid.pdf |
Akta corpus VIRTUE DIGITAL INDONESIA (deed 2020) |
Ekstraksi lolos (READY); finalisasi terblokir karena deed 2020 sudah void + nama terpakai + dokumen kurang |
| D-POS-01F |
Positive (variasi) |
dibuat runtime |
D-POS-01 dengan tanggal digeser + nama diganti |
Membuktikan AKTA_DATE_WINDOW dihitung dari tanggal, NAMA_TERSEDIA dari nama |
| D-TERMINAL |
Positive |
dibuat runtime |
Deed dalam jendela 60 hari + nama unik |
Finalisasi sampai COMPLETED |
| D-NEG-01 |
Negative |
PT__pendirian__negative__D-NEG-01__akta-expired.pdf |
Semua tanggal mundur 40 tahun |
AKTA_DATE_WINDOW FAIL |
| D-NEG-02 |
Negative |
PT__pendirian__negative__D-NEG-02__nik-mismatch.pdf |
Semua NIK di akta dikorupsi (akta saja) |
TIDAK efektif: NIK_KTP_AKTA tetap SKIPPED tanpa KTP (lihat temuan) |
| D-KTP-A |
Positive |
akta + ktpPdf NIK 3172012204810007 |
KTP cocok roster |
NIK_KTP_AKTA PASS |
| D-KTP-B |
Negative |
akta + ktpPdf NIK 9999... nama WILLY ANWAR |
KTP nama cocok, NIK beda |
NIK_KTP_AKTA FAIL |
Bukti tersimpan di e2e/artifacts/pendirian/ (results.json + screenshot UI).
4. Matriks skenario uji
| ID |
Tipe |
Lapisan |
Langkah ringkas |
Ekspektasi |
Hasil aktual |
Status |
Bukti |
| TC-01 |
Positive |
API |
Unggah D-POS-01, klasifikasi, submission, start, poll |
Terklasifikasi AKTA_PENDIRIAN (0.98), type PENDIRIAN_PT, status READY, field terekstraksi |
Sesuai: READY, 13 field akta, 35 hasil validasi |
PASS |
artifacts/pendirian/results.json |
| TC-02 |
Positive |
UI |
Klasifikasi akta tunggal lalu navigasi |
Masuk ke /pendirian/:id/extraction atau kartu akta muncul |
Sesuai |
PASS |
ui-intake.png |
| TC-03 |
Positive |
UI |
Deep-link /pendirian/:id/review saat READY |
Halaman tinjauan render, tombol Finalisasi ada |
Sesuai, Finalisasi disabled |
PASS |
ui-review-gate.png |
| TC-04 |
Gate |
API |
Finalisasi tanpa konfirmasi semua field |
400 UNCONFIRMED_FIELDS (termasuk field NOT_FOUND) |
Sesuai: jangka_waktu_durasi, tahun_buku, singkatan_nama diminta |
PASS |
results.json (finalizeGate) |
| TC-05 |
Gate |
API |
Override AKTA_DATE_WINDOW |
Ditolak (deed void, terkunci) |
422 DATA_VERIFIED_LOCKED |
PASS |
results.json |
| TC-06 |
Gate |
API |
Override PENDIRIAN_NAMA_TERSEDIA |
Boleh dengan alasan |
200 OK |
PASS |
results.json |
| TC-07 |
Gate |
API |
Override PENDIRIAN_REQUIRED_DOCS |
Boleh dengan alasan (lihat temuan OBS-2) |
200 OK |
PASS |
results.json |
| TC-08 |
Positive |
API |
Deed dalam jendela + konfirmasi semua field + override 2 FAIL + finalize |
COMPLETED |
Sesuai: {status: COMPLETED} |
PASS |
log api-pendirian-complete |
| TC-09 |
Positive |
UI |
Buka review submission COMPLETED |
Banner selesai tampil |
Sesuai |
PASS |
ui-completed.png |
| TC-10 |
Negative |
API |
Unggah D-NEG-01 (expired 40th) |
AKTA_DATE_WINDOW FAIL |
Sesuai (2319 hari) |
PASS |
results.json |
| TC-11 |
Negative |
API |
Unggah D-NEG-02 (NIK dikorupsi, akta saja) |
Diharapkan mismatch NIK |
TIDAK muncul: validasi identik D-POS-01 (NIK_KTP_AKTA SKIPPED) |
FAIL (data uji tidak efektif) |
results.json, BUG-01 |
| TC-12 |
Positive |
API |
akta + KTP NIK cocok roster |
NIK_KTP_AKTA PASS |
Sesuai: "1 dari 1 NIK cocok" |
PASS |
log api-pendirian-ktp |
| TC-13 |
Negative |
API |
akta + KTP nama cocok, NIK beda |
NIK_KTP_AKTA FAIL |
Sesuai: "NIK tidak cocok: WILLY ANWAR" |
PASS |
log api-pendirian-ktp |
| TC-14 |
Positive |
API |
Variasi tanggal digeser (D-POS-01F) |
AKTA_DATE_WINDOW mengikuti tanggal terekstraksi |
Sesuai: berubah 2319 hari ke 128 hari |
PASS |
results.json |
Ringkasan validasi kasus 1-akta (D-POS-01): 30 SKIPPED, 2 WARNING (KTP/NPWP WILLY ANWAR belum ada), 3 FAIL (AKTA_DATE_WINDOW, PENDIRIAN_REQUIRED_DOCS, PENDIRIAN_NAMA_TERSEDIA).
5. Cakupan UI (semua yang diakses user)
| Route/Elemen |
Diuji? |
Perilaku benar? |
Catatan |
/klasifikasi unggah akta tunggal |
Ya |
Ya |
Fast-path klasifikasi lalu navigasi ke extraction |
/pendirian/:id/extraction |
Ya (navigasi) |
Ya |
Auto-start pipeline; belum ada testid stabil (rekomendasi) |
/pendirian/:id/review render |
Ya |
Ya |
Field + panel validasi tampil |
| Tombol Finalisasi (gate) |
Ya |
Ya |
disabled saat gate belum siap (ada FAIL / field belum konfirmasi) |
| Banner selesai |
Ya |
Ya |
pendirian-pt-completed-banner muncul setelah COMPLETED |
/pendirian/:id/status |
Tidak |
- |
Belum diuji terpisah (destinasi step 4) |
6. Temuan bug & perbaikan
| ID bug |
Severity |
Ringkas |
Reproduksi |
Ekspektasi |
Aktual |
Screenshot |
Rekomendasi perbaikan |
| BUG-01 |
Low (data uji) |
Negative D-NEG-02 tidak efektif |
Unggah akta dengan NIK dikorupsi tanpa KTP |
NIK_KTP_AKTA menyalakan mismatch |
NIK_KTP_AKTA tetap SKIPPED ("Belum ada KTP WNI yang cocok"); validasi identik positif |
results.json |
Regenerasi D-NEG-02 sebagai paket akta + KTP ber-NIK salah (sudah dibuktikan via D-KTP-B). Perbarui gen-synthetic.ts |
| OBS-2 |
Med (desain) |
Dokumen wajib perseroan bisa di-override |
Override PENDIRIAN_REQUIRED_DOCS dengan alasan |
Aturan keberadaan dokumen biasanya terkunci |
200 OK; notaris bisa finalisasi tanpa Slip Bank/Rekening Koran/Neraca/Surat Keterangan/dst |
results.json |
Sesuai komentar kode ini disengaja (override tercatat dengan alasan), berbeda dari aturan keberadaan yayasan/PP yang hard-lock. Konfirmasikan ke produk apakah harus dikunci seperti REQUIRED_SUPPORTING_DOCS |
| OBS-3 |
Low (reliability) |
Kadang ERROR transient saat proses PDF baru |
Jalankan flow berulang atas PDF sintetis baru |
Selalu READY |
Sekali gagal (submission ERROR) lalu lolos saat diulang |
test-results |
Selidiki kegagalan OCR sesekali; pertimbangkan retry/backoff di pipeline extraction |
Catatan (bukan bug pasti): nama PT unik hasil generate tetap dilaporkan "sudah dipakai (pengajuan Pendirian PT yang sedang berjalan)". excludeSubmissionId sudah benar di fromInFlight; dugaan kuat ini bertabrakan dengan submission "UJI ..." sisa uji sebelumnya di DB lokal (pencocokan pada nama ternormalisasi), bukan self-match. Perlu verifikasi terpisah bila muncul untuk user nyata.
7. Ringkasan & rekomendasi
- Total skenario: 14 (PASS 13 / FAIL 1). Satu FAIL adalah ketidakefektifan data uji (BUG-01), bukan cacat sistem.
- Cakupan UI: 5 dari 6 elemen inti diuji (status step 4 belum diuji terpisah).
- Bug: High 0, Med 1 (OBS-2, sifatnya desain untuk dikonfirmasi), Low 2 (BUG-01, OBS-3).
- Perilaku gate finalisasi terbukti benar: memblokir sampai semua field dikonfirmasi (termasuk field NOT_FOUND) dan tidak ada FAIL tersisa; deed di luar jendela 60 hari tidak bisa di-override (terkunci, sesuai UUPT Pasal 10) sehingga akta lama benar-benar tidak bisa difinalisasi.
- Happy path terminal COMPLETED terbukti di API dan UI menggunakan deed dalam jendela + nama unik.
- Rekomendasi prioritas: (1) klarifikasi kebijakan override dokumen wajib (OBS-2); (2) perbaiki data uji negatif NIK (BUG-01); (3) tambah
data-testid pada halaman extraction untuk uji UI yang stabil.
- Gap/keterbatasan: dokumen pendukung penuh (bukti setor 5 subtipe, domisili, NPWP) belum diuji end-to-end sampai PASS penuh; nama-availability memakai DB SABH read-only sehingga hasil bergantung data registry nyata.