think
16px
820px

Blackbox Testing — Perbaikan Data PT (PT)

  • Domain: PT
  • Fitur: Perbaikan Data PT
  • Role/aktor: notaris (penyusun Surat Keterangan, atestasi, pengajuan), verifikator_pt (verifikasi bertahap), admin (akses menyeluruh)
  • Tanggal uji: 2026-08-19
  • Penguji (sesi): Supervisor PT
  • Build/commit: 63c40a17

1. Ringkasan fitur

Perbaikan Data PT mengoreksi data perseroan yang sudah terdaftar di SABH tanpa akta perubahan baru, berdasarkan Surat Keterangan/Pernyataan Perbaikan yang dibuat notaris. Notaris memilih PT dan transaksi SABH yang dikoreksi, menyusun daftar koreksi per bidang (misalnya format NPWP, alamat, modal, roster pemegang saham/direksi), lalu sistem membandingkan nilai Lama terhadap snapshot SABH dan nilai Baru terhadap dokumen pendukung. Berbeda dari flow akta, intake utamanya berbasis formulir: Surat Keterangan dibuat lewat generator, divalidasi mode draft, di-generate menjadi PDF, lalu di-seed menjadi submission Perbaikan berstatus READY. Setelah notaris menuntaskan atestasi enam butir, menyetujui tiap bagian, dan menuntaskan gate finalisasi, permohonan masuk antrean verifikator (IN_VERIFICATION) yang memutus Setujui/Tolak/Revisi.

2. Full workflow

2.1 Diagram state

stateDiagram-v2 [*] --> SK_DRAFT: buat Surat Keterangan SK_DRAFT --> SK_GENERATED: generate (gate draft, FAIL blokir) SK_GENERATED --> READY: from-keterangan (seed Perbaikan) READY --> IN_VERIFICATION: submit (gate lolos) IN_VERIFICATION --> COMPLETED: verifikator APPROVE IN_VERIFICATION --> READY: verifikator REVISE (reset atestasi/approval/override) IN_VERIFICATION --> REJECTED: verifikator REJECT COMPLETED --> [*] note right of READY Jalur intake alternatif (multipart POST /api/perbaikan): CREATED --> EXTRACTING --> VALIDATING --> READY. Saat ini gagal karena Surat Pernyataan tidak di-OCR sebelum ekstraksi (lihat BUG-01). end note

2.2 Sequence (aktor - sistem)

sequenceDiagram actor N as Notaris actor V as Verifikator PT participant BE as Backend :47014 participant SABH as SABH DB (read-only) N->>BE: POST /surat-keterangan (pilih PT + transaksi) BE->>SABH: loadPtSnapshot (oldData beku) N->>BE: PATCH /surat-keterangan/:id (daftar koreksi) N->>BE: GET /surat-keterangan/:id/validations (mode draft) N->>BE: POST /surat-keterangan/:id/generate (gate FAIL blokir) N->>BE: POST /perbaikan/from-keterangan/:skId (seed READY) BE->>BE: cross-validate (mode submission, dynamic per-koreksi) N->>BE: PATCH validations/:id/override (bila perlu) N->>BE: POST sections/:fieldKey/approve N->>BE: POST attestations (enam butir) N->>BE: POST /perbaikan/:id/submit (gate empat kelas blocker) BE->>BE: buat VerifikasiPerbaikan, status IN_VERIFICATION V->>BE: POST /perbaikan/:id/verifikasi/advisory (opsional, LLM) V->>BE: POST /perbaikan/:id/verifikasi/decide (APPROVE/REJECT/REVISE) BE-->>N: status COMPLETED / READY (revisi) / REJECTED

2.3 Peta route & UI

Langkah Route Komponen Elemen interaktif utama Selector
Daftar Surat Keterangan (entry) /perbaikan/keterangan SuratKeteranganListPage Buat baru, buka detail, buat Perbaikan (tanpa testid, lihat OBS-2)
Generator SK /perbaikan/keterangan/new SuratKeteranganGeneratorPage PtPicker, editor koreksi, panel validasi, generate (tanpa testid)
Detail SK /perbaikan/keterangan/:id SuratKeteranganDetailPage pratinjau PDF, buat Perbaikan (tanpa testid)
Pilih PT (jalur upload) /perbaikan/:id/select-pt PerbaikanSelectPtPage PtPicker, Lanjutkan ke Tinjauan (tanpa testid)
Unggah dokumen pendukung /perbaikan/:id/upload PerbaikanUploadPage dropzone, checklist required-docs, Lanjut (tanpa testid)
Tinjauan /perbaikan/:id/review PtPerbaikanReviewPageV2 konfirmasi bagian, atestasi, panel validasi, Kirim Perbaikan perbaikan-attestation-card (kartu atestasi); tombol Kirim tanpa testid (OBS-2)
Status /perbaikan/:id/status PerbaikanStatusPage ringkasan (tanpa testid)
Verifikator /verifikator/perbaikan/:id VerifikatorPerbaikanReviewPage Setujui/Tolak/Revisi, advisory (tanpa testid)

3. Prasyarat & data uji

ID data Tipe Berkas Deskripsi Ekspektasi sistem
D-POS-30 Positive (API) PT Agencytama, transaksi 4024050615200259, koreksi NPWP valid SK generated lalu seed READY; koreksi format NPWP Draft PASS, generate 200, seed READY
D-NEG-31 Negative (API) koreksi NPWP "123" NPWP di bawah 15 digit PERBAIKAN_NPWP_FORMAT FAIL, generate 409
D-NEG-32 Negative (submission) NPWP tanpa dokumen NPWP diunggah Dokumen pendukung wajib belum ada PERBAIKAN_DOC_REQUIRED_PRESENT FAIL, submit terblokir
Real-scan Positive/OCR e2e/data/real-intake/pt/perbaikan/ (Surat Pernyataan + Surat Kuasa + Surat Permohonan PT Agencytama) Scan asli untuk jalur multipart Jalur multipart gagal di select-company (BUG-01)

4. Matriks skenario uji

ID Tipe Lapisan Langkah ringkas Ekspektasi Hasil aktual Status Bukti
TC-01 Positive API Cari PT Agencytama di SABH Ketemu perseroanId 1135652 Sesuai: satu kandidat AGENCYTAMA MARITIM NUSANTARA PASS probe log
TC-02 Positive API Snapshot transaksi 4024050615200259 Roster + modal + KBLI terisi Sesuai: 4 pemegang saham, 1 direksi, 1 komisaris, modal terisi PASS probe log
TC-03 Positive API Buat SK + patch koreksi NPWP valid, cek validasi draft 3 PASS, 3 SKIPPED, tidak blokir Sesuai: pass 3 / skipped 3 / blocked false PASS probe log
TC-04 Negative API Patch NPWP "123", cek validasi draft PERBAIKAN_NPWP_FORMAT FAIL, blocked Sesuai: fail 1, "NPWP harus 15-16 digit", blocked true PASS probe log
TC-05 Gate API Generate SK saat ada FAIL 409 validation_failed Sesuai: HTTP 409, error validation_failed, blocked true PASS probe log
TC-06 Positive API Generate SK setelah NPWP valid 200, docx + pdf dihasilkan Sesuai: HTTP 200, pdfPath terisi PASS probe log
TC-07 Positive API Seed Perbaikan dari SK generated 201 submissionId, status READY Sesuai: READY, 1 koreksi NPWP, oldData terisi PASS probe log
TC-08 State API Seed dari SK yang sama lagi 409 SK_ALREADY_USED + existingSubmissionId Sesuai: 409, code SK_ALREADY_USED PASS probe log
TC-09 State API Seed dari SK berstatus DRAFT 400 not yet GENERATED Sesuai: 400 "not yet GENERATED" PASS probe log
TC-10 Aturan API Cek validasi submission mode pada seed DOC_REQUIRED FAIL (tanpa dokumen NPWP), LAMA_VS_SABH PASS Sesuai: DOC_REQUIRED FAIL, SIMPLE_LAMA_VS_SABH PASS PASS probe log
TC-11 Gate API Submit tanpa apa-apa 409 dengan blocker SECTION_NOT_APPROVED, ATTESTATION_INCOMPLETE, UNRESOLVED_FAIL_VALIDATION Sesuai persis PASS probe log
TC-12 Gate API Section approve NPWP saat FAIL scoped belum di-override 409 unresolved_fail Aktual: 200 OK (guard per-section tidak menyala, lihat BUG-02) FAIL probe log
TC-13 Gate API Override DOC_REQUIRED FAIL lalu submit lengkap (approve + 6 atestasi) 200, status IN_VERIFICATION Sesuai: 200, IN_VERIFICATION, verifikasi MENUNGGU_VERIFIKATOR PASS probe log
TC-14 State API Mutasi atestasi saat IN_VERIFICATION 409 WRONG_STATUS Sesuai: 409, code WRONG_STATUS PASS probe log
TC-15 State API Submit ulang saat IN_VERIFICATION 409 WRONG_STATUS Sesuai: 409 "hanya dapat dikirim dari status READY" PASS probe log
TC-16 Negative API Verifikator decide tanpa note/verifikatorId 400 validation Sesuai: 400, issues note + verifikatorId wajib PASS probe log
TC-17 Positive API Verifikator APPROVE status COMPLETED, verifikasi SELESAI Sesuai: COMPLETED, SELESAI, decision APPROVE PASS probe log
TC-18 State API Decide ulang setelah final Ditolak Sesuai: 409 SUBMISSION_LOCKED (lock global COMPLETED mendahului guard ALREADY_DECIDED, lihat OBS-3) PASS probe log
TC-19 Positive API Verifikator advisory (LLM) Objek saran terstruktur Sesuai: 200, keys ringkasan/kekuatanPermohonan/perhatian/rekomendasi/... PASS probe log
TC-20 Positive API Verifikator REVISE status READY, atestasi + approval + override direset Sesuai: READY, verifikasi PERBAIKAN, 6 atestasi false, section unapproved, override kosong PASS probe log
TC-21 Negative API Multipart POST /perbaikan tanpa surat_pernyataan 400 file required Sesuai: 400 "surat_pernyataan_perbaikan file is required" PASS probe log
TC-22 Negative API Multipart upload scan asli lalu select-company Jalur OCR sampai READY Aktual: 500 di select-company (Surat Pernyataan rawText NULL, lihat BUG-01), submission tersangkut EXTRACTING FAIL probe log
TC-23 Positive UI Buka /perbaikan/keterangan sebagai notaris Halaman render Sesuai render PASS ui-keterangan-list.png
TC-24 Positive UI Buka /perbaikan/:id/review submission READY Render + kartu atestasi tampil Sesuai: perbaikan-attestation-card visible PASS ui-review.png
TC-25 Positive UI Buka /verifikator/perbaikan/:id submission IN_VERIFICATION Render panel verifikator Sesuai render PASS ui-verifikator.png

5. Cakupan UI

Route/Elemen Diuji? Perilaku benar? Catatan
/perbaikan/keterangan daftar SK Ya (render) Ya Entry point; navigasi ke generator/detail/review lewat tombol tanpa testid
/perbaikan/keterangan/new generator Sebagian Ya (via API) Editor koreksi + validasi draft diuji di API (TC-03..06); UI belum diklik penuh
/perbaikan/keterangan/:id detail Tidak - Pratinjau PDF; belum didorong di UI
/perbaikan/:id/select-pt Tidak (UI) - Bagian jalur upload; select-company diuji di API
/perbaikan/:id/upload Tidak (UI) - Unggah dokumen pendukung lewat /api/submissions/:id/upload + required-docs
/perbaikan/:id/review render Ya Ya Kartu atestasi (perbaikan-attestation-card) tampil; panel validasi + bagian koreksi
Tombol Kirim Perbaikan (gate) Sebagian Ya Tanpa data-testid (OBS-2); gate lewat approval/atestasi/FAIL diuji di API
Panel verifikator (Setujui/Tolak/Revisi) Ya (render) Ya Keputusan APPROVE/REJECT/REVISE diuji end-to-end di API (TC-17/20)

6. Temuan bug & perbaikan

ID bug Severity Ringkas Reproduksi Ekspektasi Aktual Screenshot Rekomendasi perbaikan
BUG-01 High Jalur intake multipart (POST /api/perbaikan) gagal end-to-end 1. Upload Surat Pernyataan scan via multipart 2. select-company select-company memproses OCR lalu READY 500 di select-company; Surat Pernyataan tidak pernah di-OCR (rawText NULL) sehingga runSuratPernyataanExtraction melempar; submission tersangkut EXTRACTING probe log Tambahkan pass OCR untuk SURAT_PERNYATAAN_PERBAIKAN sebelum ekstraksi LLM (mirip runSupportingDocExtraction), atau tolak upload multipart bila jalur belum siap. Catatan: UI tidak memakai jalur ini (selalu lewat generator SK), jadi dampak ke user saat ini kecil, tapi endpoint publik terbuka dan meninggalkan status kotor
BUG-02 Med Guard FAIL per-bagian di section-approve tidak menyala 1. Seed READY dengan DOC_REQUIRED FAIL 2. POST sections/NPWP/approve tanpa override 409 unresolved_fail 200 OK, filter membaca details.correctionId/details.fieldKeys top-level, padahal persistResults menyimpan correctionId di dalam details.instances[] sehingga tidak pernah cocok probe log Samakan bentuk baca: filter di endpoint approve harus menelusuri details.instances[].correctionId (bukan details.correctionId). Gate submit tetap menangkap via UNRESOLVED_FAIL_VALIDATION, jadi bukan bypass, tapi UX approve menyesatkan
OBS-2 Low Tombol Kirim Perbaikan dan tombol daftar SK tanpa data-testid Buka review/daftar SK Selector stabil untuk uji Tombol Button biasa; hanya kartu atestasi punya perbaikan-attestation-card ui-review.png Tambah data-testid="perbaikan-submit-button" dan testid pada tombol daftar SK, samakan pola dengan pt-finalize-button
OBS-3 Info Decide ulang setelah final ditolak oleh lock global, bukan guard handler Decide APPROVE lalu decide lagi Ditolak 409 SUBMISSION_LOCKED (middleware COMPLETED-lock) mendahului guard ALREADY_DECIDED di handler probe log Bukan bug: dua-duanya memblokir. Catat agar pesan konsisten bila submission belum COMPLETED (mis. setelah REJECT, guard ALREADY_DECIDED yang menangani)
OBS-4 Info Audit verifikator tidak muncul di endpoint logs Decide lalu GET verifikasi/logs auditEvents berisi keputusan decisionLogs terisi, auditEvents kosong (decide memakai recordAuditEvent tingkat submission, bukan VerifikasiPerbaikanAuditEvent; hanya advisory menulis ke tabel itu) probe log Bila panel verifikator perlu menampilkan riwayat keputusan di auditEvents, tulis juga VerifikasiPerbaikanAuditEvent pada decide; jika cukup dari decisionLogs, biarkan

Severity: High = blokir alur/kehilangan data/salah hasil; Med = salah perilaku tapi ada workaround; Low = kosmetik/teks.

7. Ringkasan & rekomendasi

  • Total skenario: 25 (PASS 23 / FAIL 2). Dua FAIL adalah temuan nyata: BUG-01 (jalur multipart) dan BUG-02 (guard section-approve).
  • Cakupan UI: tiga surface utama (daftar Surat Keterangan, review notaris dengan kartu atestasi, review verifikator) render dan terbukti lewat Playwright. Editor generator dan halaman upload diuji dari sisi API/kode, belum diklik penuh di UI.
  • Bug: High 1 (BUG-01), Med 1 (BUG-02), Low 1 (OBS-2), 2 catatan info (OBS-3, OBS-4).
  • Alur end-to-end terbukti penuh lewat jalur generator SK: buat SK, koreksi, validasi draft, generate (dengan gate FAIL), seed READY, override + approve + atestasi enam butir, submit ke IN_VERIFICATION, lalu verifikator APPROVE (COMPLETED) dan REVISE (kembali READY dengan reset). Semua dijalankan dengan data SABH nyata (PT Agencytama, transaksi 2024).
  • Perbedaan penting vs flow akta lain: intake berbasis formulir (bukan akta-first), validator memancarkan aturan dinamis per-koreksi plus rollup, dan snapshot SABH ("Lama") dibekukan saat SK dibuat. NPWP/email-telp adalah koreksi khusus Perseroan; varian EMAIL_NO_TELP bersifat eksklusif (tidak boleh digabung bidang lain).
  • Gap/keterbatasan: (1) Jalur multipart POST /api/perbaikan belum jalan (BUG-01), perlu OCR pass pada Surat Pernyataan sebelum bisa dipakai untuk uji OCR scan asli end-to-end. (2) Guard FAIL per-bagian (BUG-02) perlu perbaikan pembacaan details. (3) Company lookup di flow ini adalah pilihan manual lewat PtPicker (bukan interstitial AWAITING_COMPANY_SELECTION seperti Perubahan), jadi tidak ada state multi-match yang perlu diuji. (4) Enforcement role verifikator dalam mode shadow di lingkungan ini, sehingga guard 403 hanya tercatat would-deny; perlu SECURITY_ENFORCE=on untuk uji penolakan role sebenarnya.