think
16px
820px

Blackbox Testing — Akuisisi PT (PT)

  • Domain: PT
  • Fitur: Akuisisi PT (Pengambilalihan / Peralihan Saham)
  • Role/aktor: notaris (input & pengajuan), verifikator_pt (verifikasi bertahap + voting), admin (akses menyeluruh)
  • Tanggal uji: 2026-08-19
  • Penguji (sesi): Supervisor PT
  • Build/commit: 63c40a17

1. Ringkasan fitur

Akuisisi PT memproses Akta Pengambilalihan (Akta Akuisisi) yang menyatakan peralihan saham dan perubahan pengendalian perseroan. Notaris mengunggah akta, sistem OCR + LLM mengekstraksi field, mencocokkan perseroan dengan data SABH (company lookup), menghitung diff terhadap data lama, lalu menjalankan validasi termasuk kuorum kehadiran RUPS kategori Ps.89 dan jendela pengumuman koran. Berbeda dari Pendirian, flow ini bertahap lewat verifikator: setelah notaris menyetujui seksi perubahan yang muncul dan menekan Kirim, permohonan tercatat COMPLETED pada submission namun antrean verifikasi masuk status MENUNGGU_VERIFIKATOR, dan dapat melalui tahap voting pemegang saham sebelum putusan final. Akuisisi berbagi jalur route dan rule set dengan Perubahan PT (routeFamily "perubahan"), dengan tambahan aturan koran akuisisi dan kuorum Ps.89.

2. Full workflow

2.1 Diagram state

stateDiagram-v2 [*] --> CREATED CREATED --> EXTRACTING: POST /start EXTRACTING --> AWAITING_COMPANY_SELECTION: lookup >1 kandidat SABH AWAITING_COMPANY_SELECTION --> VALIDATING: select-company EXTRACTING --> VALIDATING: lookup 0/1 kandidat (auto) VALIDATING --> READY READY --> COMPLETED: submit (seksi tersetujui) + buat Verifikasi MENUNGGU_VERIFIKATOR COMPLETED --> READY: verifikator REVISE (seksi di-unapprove, submission balik READY) COMPLETED --> [*]: verifikator APPROVE lalu voting lalu final SELESAI COMPLETED --> [*]: verifikator REJECT (DITOLAK)

Catatan: pada submit, kolom submission.status langsung menjadi COMPLETED, sedangkan alur verifikasi berjalan pada baris VerifikasiPerubahan (MENUNGGU_VERIFIKATOR, MENUNGGU_VOTING, DITOLAK, PERBAIKAN, SELESAI). Ini berbeda dari intuisi "MENUNGGU_VERIFIKATOR pada submission" tetapi konsisten dengan alur Perubahan/Penggabungan pada route family yang sama.

2.2 Sequence (aktor - sistem)

sequenceDiagram actor N as Notaris actor V as Verifikator PT participant BE as Backend :47014 N->>BE: Unggah Akta Akuisisi + start BE->>BE: ekstraksi + company lookup + diff + validasi (kuorum Ps.89, koran) N->>BE: (opsional) POST attestations (jalur hukum: jenisPerseroan/caraPengambilalihan/deedType) N->>BE: POST sections/nonpad:peralihanSaham/approve N->>BE: POST submissions/:id/submit BE->>BE: gate seksi tersetujui; status COMPLETED; buat Verifikasi MENUNGGU_VERIFIKATOR V->>BE: GET /verifikator/submissions/:id/verifikasi V->>BE: POST /verifikator/submissions/:id/decide (APPROVE/REJECT/REVISE) BE->>BE: APPROVE -> buat ShareholderVote + MENUNGGU_VOTING; REVISE -> PERBAIKAN; REJECT -> DITOLAK BE-->>N: status akhir COMPLETED / PERBAIKAN / REJECTED

2.3 Peta route & UI

Langkah Route Komponen Elemen interaktif utama Selector
Unggah & klasifikasi /klasifikasi KlasifikasiPage file input (Akta auto-terdeteksi jadi AKTA_AKUISISI) input[type=file]
Ekstraksi (step 2) /akuisisi/:id/extraction AkuisisiExtractionPage auto-start (tanpa testid)
Tinjauan (step 3) /akuisisi/:id/review PtAkuisisiReviewPageV2 konfirmasi field, approve seksi, jalur hukum, panel validasi, tombol Kirim akuisisi-legal-path (kartu jalur hukum); tombol Kirim tanpa testid (OBS-1)
Verifikator /verifikator lalu /verifikator/review/:id VerifikatorDashboardPage, VerifikatorReviewPage Setujui/Tolak/Revisi (bagian dari route family perubahan)
Status /akuisisi/:id/status SubmissionStatusPage (type AKUISISI_PT) ringkasan (tanpa testid)

3. Prasyarat & data uji

ID data Tipe Berkas Deskripsi Ekspektasi sistem
D-POS-AK Positive e2e/data/real-intake/pt/akuisisi/...KARYA-ANAK-KEPRI...Transfer-of-Ownership.pdf (scan 10 halaman) Akta Pengambilalihan PT Karya Anak Kepri No.03 tgl 18-08-2026, peralihan saham ke pemegang saham asing READY; type AKUISISI_PT; kuorum PASS; sejumlah FAIL/WARNING dokumen pendukung & kontak
D-NEG-DOCS Negative (sama, kondisi bawaan) Tanpa AKTA_PEMINDAHAN_HAK & BERITA_ACARA_RUPS, tanpa data kontak pemegang saham REQUIRED_SUPPORTING_DOCS FAIL, PEMEGANG_SAHAM_CONTACT FAIL
D-NEG-KUORUM Negative (butuh BA RUPS/daftar hadir dengan kehadiran < 75%) Kehadiran RUPS di bawah ambang Ps.89 RUPS_ATTENDANCE_QUORUM WARNING (bukan FAIL)

Catatan: data uji Akuisisi sangat minim (satu scan nyata). Corpus sintetis akta-txn-akuisisi-pkr.txt terlalu ringkas (6 baris, tanpa roster/tanggal/kuorum) sehingga tidak membentuk perseroan yang lolos company lookup maupun data kuorum; membangun akta sintetis lengkap yang bertahan di lookup SABH berisiko tinggi dan tidak dikerjakan. Kuorum negatif dan tanggal-akta negatif didokumentasikan dari kode dan dari paritas dengan Perubahan PT (jendela 30 hari, "sudah N hari lalu (maks 30 hari)" FAIL).

4. Matriks skenario uji

ID Tipe Lapisan Langkah ringkas Ekspektasi Hasil aktual Status Bukti
TC-01 Positive API Drive D-POS-AK ke terminal type AKUISISI_PT, READY Sesuai: AKUISISI_PT, READY, klasifikasi 0.9552; 34 rule (21 SKIPPED/9 PASS/2 WARNING/2 FAIL) PASS probe log
TC-02 Aturan API Kuorum RUPS Ps.89 dari akta Ambang ke-1 min 75%; PASS bila terpenuhi Sesuai: "Kehadiran RUPS 100.00% (dari akta), memenuhi kuorum (min. 75%)" PASS PASS probe log
TC-03 Aturan API Dokumen pendukung wajib Diminta AKTA_PEMINDAHAN_HAK + BERITA_ACARA_RUPS Sesuai: REQUIRED_SUPPORTING_DOCS FAIL "belum diunggah: AKTA_PEMINDAHAN_HAK, BERITA_ACARA_RUPS" PASS probe log
TC-04 Aturan API Data kontak pemegang saham Wajib untuk dispatch persetujuan SABH Sesuai: PEMEGANG_SAHAM_CONTACT FAIL untuk 2 pemegang saham PASS probe log
TC-05 Aturan API Peralihan saham field-based SHARES_TRANSFER_BALANCE peringatan bila jenis peralihan tanpa baris terekstrak Sesuai: WARNING "menyebut Peralihan Saham, tapi tidak ada baris peralihan terekstrak" PASS probe log
TC-06 Aturan API Jendela koran akuisisi Tidak ada tanggal koran/RUPS lengkap Sesuai: AKUISISI_KORAN_WINDOW SKIPPED "Tanggal koran atau RUPS tidak tersedia" (severityFloor WARNING, tak pernah FAIL) PASS probe log
TC-07 Aturan API Jendela tanggal akta Akuisisi pakai jendela 30 hari Sesuai: AKTA_DATE_WINDOW PASS "Tanggal akta 2026-08-18 (1 hari lalu)"; jendela 30 hari (paritas Perubahan) PASS probe log
TC-08 Gate API Submit saat seksi belum disetujui Ditolak Sesuai: 400 "Not all sections approved" unapprovedSections ["nonpad:peralihanSaham"] PASS probe log
TC-09 Gate API Atestasi jalur hukum tidak valid Ditolak per-field Sesuai: 400 "jenisPerseroan must be TERTUTUP or TERBUKA" PASS probe log
TC-10 Gate API Atestasi jalur hukum valid Diterima (advisory) Sesuai: 200 {ok:true}; tidak mengubah gate submit PASS probe log
TC-11 Gate API Submit setelah seksi disetujui, FAIL masih ada (Diharapkan tertahan fail-gate) Aktual: 200 COMPLETED walau 2 FAIL belum di-override (lihat BUG-01) FAIL (bug) probe log
TC-12 State API Verifikator decide tanpa notes / decision salah 400 Sesuai: 400 "Notes required"; 400 "Invalid decision" PASS probe log
TC-13 State API Verifikator REVISE (initial) PERBAIKAN, seksi di-unapprove, submission balik READY Sesuai: verifikasi PERBAIKAN, aiRecommendation FAIL; submission.status READY; seksi perlu re-approve PASS probe log
TC-14 State API Verifikator APPROVE (initial) MENUNGGU_VOTING + buat ShareholderVote Sesuai: MENUNGGU_VOTING, 2 vote dibuat (JEREMY LEE, VECNA PROPERTIES), belum direspons PASS probe log
TC-15 State API Decide saat status PERBAIKAN 409 Sesuai: 409 "Status PERBAIKAN tidak dapat dikeputuskan" PASS probe log
TC-16 Positive UI Deep-link /akuisisi/:id/review sebagai notaris Render + kartu jalur hukum tampil Sesuai: render OK, akuisisi-legal-path count 1, 3 radio group tampil PASS artifacts/akuisisi/ui-review.png, ui-legal-path.png

5. Cakupan UI

Route/Elemen Diuji? Perilaku benar? Catatan
/klasifikasi unggah Ya (API) Ya Akta auto-terdeteksi AKTA_AKUISISI (confidence 0.9552)
/akuisisi/:id/extraction Ya (navigasi) Ya Auto-start
/akuisisi/:id/review render Ya Ya Field + panel validasi + approve seksi + jalur hukum
Kartu jalur hukum akuisisi-legal-path Ya Ya 3 radio group (Jenis Perseroan, Cara Pengambilalihan, Bentuk Akta), advisory
Tombol Kirim (gate) Sebagian Ya (untuk gate seksi) Tanpa data-testid (OBS-1); gate hanya seksi, bukan FAIL (BUG-01)
Panel verifikator (Setujui/Tolak/Revisi) Ya (API) Ya decide diuji: APPROVE (voting), REVISE, guard notes/decision/status
Interstitial select-company Tidak (UI) - Tidak terpicu; perseroan nyata resolve tunggal
/akuisisi/:id/status Tidak (UI) - Diverifikasi via API status (COMPLETED)

6. Temuan bug & perbaikan

ID bug Severity Ringkas Reproduksi Ekspektasi Aktual Screenshot Rekomendasi perbaikan
BUG-01 High Submit Akuisisi lolos walau ada rule FAIL belum di-override Drive akta (REQUIRED_SUPPORTING_DOCS + PEMEGANG_SAHAM_CONTACT FAIL), approve seksi, submit Tertahan fail-gate seperti flow v2 lain (422 VALIDATION_FAILED) sampai FAIL diselesaikan/di-override 200 COMPLETED; permohonan naik ke verifikator dengan 2 FAIL belum tertangani probe log Tambahkan checkFailGate pada cabang AKUISISI_PT/PENGGABUNGAN_PT di routes/perubahan.ts (sekitar baris 1256), sebelum transisi COMPLETED, konsisten dengan cabang foreign v2 (baris 1223-1224). Bila memang by-design karena FAIL ini dokumen pendukung yang bisa dilengkapi belakangan, konfirmasikan dan turunkan severity
OBS-1 Low Tombol Kirim akuisisi tanpa testid Buka review akuisisi Selector stabil untuk uji Tombol biasa tanpa data-testid ui-review.png Tambah data-testid="akuisisi-submit-button" (samakan pola pt-finalize-button)
OBS-2 Info Submit langsung set submission COMPLETED Submit akuisisi lolos gate - submission.status COMPLETED sementara verifikasi masih MENUNGGU_VERIFIKATOR probe log Bukan bug; catat agar UI status tidak menandai "selesai final" sebelum verifikator memutus. REVISE mengembalikan submission ke READY dan meng-unapprove seksi
OBS-3 Info Kuorum RUPS terbaca dari recital akta Drive akta tanpa BA RUPS - RUPS_ATTENDANCE_QUORUM memakai aktaKehadiranRatio (fallback) dan PASS 100% min 75% probe log Sesuai desain: BA RUPS lebih otoritatif, recital akta dipakai bila BA RUPS tidak ada. Pesan sudah menandai "(dari akta)"

7. Ringkasan & rekomendasi

  • Total skenario: 16 (PASS 15 / FAIL 1). Satu FAIL (TC-11) adalah bug fungsional BUG-01, bukan kesalahan uji.
  • Cakupan UI: render + kartu jalur hukum akuisisi-legal-path teruji end-to-end di browser; alur verifikator (APPROVE ke voting, REVISE, guard) teruji penuh via API. Interstitial company-selection dan halaman status hanya diverifikasi via API/kode.
  • Bug: High 1 (BUG-01 fail-gate tidak dijalankan pada submit Akuisisi), Med 0, Low 1 (OBS-1), Info 2 (OBS-2, OBS-3).
  • Kuorum RUPS terverifikasi: Akuisisi memakai kategori ps89 (Ps.89 UUPT): RUPS ke-1 min 75%, RUPS ke-2 min 66.67% (2/3), keduanya komparator "paling sedikit". Menghasilkan WARNING (bukan FAIL) bila di bawah ambang, PASS bila terpenuhi, SKIPPED tanpa data kehadiran. Prioritas sumber: roster BA RUPS lalu recital akta lalu SKIPPED. Diamati PASS 100% dari recital akta.
  • Aturan khas Akuisisi: AKUISISI_KORAN_WINDOW (severityFloor WARNING, tak pernah FAIL karena Ps.127(8) mengecualikan akuisisi langsung dari pemegang saham) dan hook forcePeralihanOn yang memaksa jenis peralihan saham. Peralihan saham bersifat field-based: bila jenis peralihan muncul tanpa baris peralihan terekstrak, SHARES_TRANSFER_BALANCE memberi WARNING; REQUIRED_SUPPORTING_DOCS meminta AKTA_PEMINDAHAN_HAK.
  • Jalur hukum (akuisisi-legal-path): tiga pilihan (jenisPerseroan TERTUTUP/TERBUKA; caraPengambilalihan LANGSUNG/MELALUI_DIREKSI; deedType AKTA_NOTARIS/DI_BAWAH_TANGAN). Bersifat advisory penuh, tervalidasi per-field di backend (payload 3-field), tersimpan di akuisisiAttestation, dan TIDAK memblokir submit. Gate submit hanya persetujuan seksi yang muncul (di sini nonpad:peralihanSaham).
  • Gate submit: urutannya adalah type-check lalu READY-check lalu gate seksi (persetujuan seksi yang muncul). Tidak ada gate atestasi wajib (berbeda dari Perubahan yang bergate s1-s5) dan, saat ini, tidak ada fail-gate (BUG-01).
  • Gap/keterbatasan: kuorum negatif dan tanggal-akta negatif belum didorong dengan data nyata karena keterbatasan sampel Akuisisi; keduanya didokumentasikan dari kode/paritas. Rekomendasi lanjutan: siapkan sampel Akuisisi dengan BA RUPS/daftar hadir berkehadiran di bawah 75% untuk membuktikan WARNING ps89 secara end-to-end, dan lengkapi AKTA_PEMINDAHAN_HAK untuk melihat REQUIRED_SUPPORTING_DOCS lolos.