Blackbox Testing — Merger PT (Peleburan + Penggabungan) (PT)
- Domain: PT
- Fitur: Merger PT (dua sub-alur: Peleburan/Konsolidasi dan Penggabungan/Absorpsi)
- Role/aktor: notaris (input & pengajuan), verifikator_pt (verifikasi bertahap), admin (akses menyeluruh)
- Tanggal uji: 2026-08-19
- Penguji (sesi): Supervisor PT (sub-supervisor Merger)
- Build/commit: 63c40a17
1. Ringkasan fitur
Merger PT memproses akta merger dan terpecah di UI menjadi dua sub-alur. Peleburan (Konsolidasi, UUPT Ps.122 jo. Ps.1(10), SABH id_aksi 35) membentuk satu PT baru dari minimal dua PT yang meleburkan diri, sehingga aktanya berisi anggaran dasar PT baru bergaya pendirian dan seluruh kerja registri ada di sisi PT sumber (multi-source lookup). Penggabungan (Merger/Absorpsi, SABH id_aksi 11) adalah satu PT survivor yang menyerap PT lain, sehingga aktanya berbentuk perubahan atas anggaran dasar survivor dan menumpang pipeline serta halaman perubahan. Keduanya bertahap lewat verifikator (membuat VerifikasiPerubahan dengan status MENUNGGU_VERIFIKATOR setelah notaris menekan Kirim) dan memakai kuorum kehadiran RUPS kategori Ps.89 (ke-1 minimal 3/4, ke-2 minimal 2/3). Hasil akhir yang diharapkan: data terekstraksi, PT sumber teridentifikasi di SABH, validasi berjalan, lalu permohonan masuk antrean verifikator.
2. Full workflow
2.1 Diagram state
2.2 Sequence (aktor - sistem)
2.3 Peta route & UI
| Langkah | Route | Komponen | Elemen interaktif utama | Selector |
|---|---|---|---|---|
| Unggah & klasifikasi | /klasifikasi |
KlasifikasiPage | file input, koreksi jenis (userOverride) | tambah-dokumen-input |
| Ekstraksi Peleburan | /peleburan/:id/extraction |
PeleburanExtractionPage | auto-start | (tanpa testid) |
| Tinjauan Peleburan | /peleburan/:id/review |
PeleburanReviewPage | panel PT Sumber (Kelola/Acuan RUPS), kehadiran, koran, tombol "Kirim ke Verifikator" | (tanpa testid, lihat OBS-1) |
| Status Peleburan | /peleburan/:id/status |
PeleburanStatusPage | ringkasan | (tanpa testid) |
| Verifikator Peleburan | /verifikator/peleburan/:id |
VerifikatorPeleburanReviewPage | Setujui/Tolak/Revisi | (perlu cek) |
| Ekstraksi Penggabungan | /perubahan/:id/extraction |
PerubahanExtractionPage | auto-start | (tanpa testid) |
| Tinjauan Penggabungan | /perubahan/:id/review |
PtPerubahanReviewPageV2 (isMerger) | konfirmasi field, atestasi/seksi, panel validasi, tombol Kirim | (tanpa testid) |
| Verifikator Penggabungan | /verifikator lalu /verifikator/review/:id |
VerifikatorDashboardPage, VerifikatorReviewPage | Setujui/Tolak/Revisi | (perlu cek) |
Catatan routing Penggabungan (temuan): tidak ada route /penggabungan khusus. Klasifikasi mendeteksi label "penggabungan", membuat submission PENGGABUNGAN_PT (submission-type-inference.ts:167), lalu KlasifikasiPage mengarahkan ke /perubahan/:id/extraction (KlasifikasiPage.tsx:831-834). flowBasePath memetakan PENGGABUNGAN_PT ke base "perubahan" (destination-for.ts:45-47) dan PtPerubahanReviewPageV2 merender mode merger (isMerger, PtPerubahanReviewPageV2.tsx:258). Jadi Penggabungan sepenuhnya dapat dijalankan lewat UI, bukan gap.
3. Prasyarat & data uji
| ID data | Tipe | Berkas | Deskripsi | Ekspektasi sistem |
|---|---|---|---|---|
| D-POS-PEL | Positive | real-intake/pt/peleburan/4022011252102865_AKTA-PENDIRIAN-PT-DANA-MASTER-LOTARA (1).pdf |
Akta born-digital 32 halaman (judul "Akta Pendirian"), dipakai sebagai pembawa deed; klasifikasi dikoreksi ke AKTA_PELEBURAN (userOverride) | READY sebagai PELEBURAN_PT; roster pemegang saham PT baru terekstrak; 0 PT sumber (deed ini bukan akta peleburan sebenarnya) sehingga MIN_SOURCES FAIL |
| D-POS-PGB | Positive | (berkas sama, userOverride AKTA_PENGGABUNGAN) | Pembawa deed diklasifikasikan ke AKTA_PENGGABUNGAN | READY sebagai PENGGABUNGAN_PT; menumpang review perubahan; kuorum WARNING dari recital akta |
| D-SCAN-PGB | Positive | real-intake/pt/merger/...AKTA-PENDIRIAN-DAN-AKTA-PERUBAHAN...pdf |
Scan 129 halaman, OCR sangat berat | Tidak diuji OCR penuh sesi ini (berat/berisiko timeout), didokumentasikan dari kode + probe ringan |
| D-SRC | Sintetis | input manual panel PT sumber | Nama PT sumber diketik manual (add source) | resolvePeleburanSources melakukan lookup SABH; nama real cocok dan mengembalikan status blokir/registri |
| Kuorum-neg | Negative | recital kehadiran pada deed | Kehadiran RUPS di bawah 3/4 (Ps.89) | RUPS_ATTENDANCE_QUORUM WARNING (bukan FAIL) |
4. Matriks skenario uji
| ID | Tipe | Lapisan | Langkah ringkas | Ekspektasi | Hasil aktual | Status | Bukti |
|---|---|---|---|---|---|---|---|
| TC-01 | Positive | API | Drive D-POS-PEL ke terminal | type PELEBURAN_PT, READY | Sesuai: PELEBURAN_PT, READY; counts FAIL 1 / SKIPPED 21 / PASS 3 | PASS | probe-peleburan |
| TC-02 | Aturan | API | Peleburan tanpa PT sumber | PELEBURAN_MIN_SOURCES FAIL (deed sudah terekstrak) | Sesuai: FAIL "Tidak ada PT sumber teridentifikasi ... minimal 2" | PASS | probe-peleburan |
| TC-03 | Aturan | API | Tambah 1 PT sumber | MIN_SOURCES tetap FAIL "baru 1 sumber", ACUAN SKIPPED | Sesuai persis | PASS | probe-neg2 |
| TC-04 | Aturan | API | Tambah 2 PT sumber (nama real) | MIN_SOURCES PASS; SOURCE_RESOLVED PASS; lookup SABH mengembalikan status | Sesuai: PASS + baris AUTO_SELECTED, status blokir terisi | PASS | probe-sources |
| TC-05 | Aturan | API | Cek blokir PT sumber | PELEBURAN_SOURCE_BLOKIR FAIL bila terblokir | Sesuai: FAIL, menyebut alasan blokir SABH tiap baris | PASS | probe-sources |
| TC-06 | Aturan | API | Tetapkan acuan RUPS 1 baris | PELEBURAN_ACUAN_RUPS PASS | Sesuai: PASS "#1 PT SUMBER SATU MANDIRI" | PASS | probe-sources |
| TC-07 | Aturan | API | Isi tanggal RUPS + koran deed | PELEBURAN_KORAN_WINDOW FAIL bila koran kurang dari 30 hari sebelum RUPS | Sesuai: FAIL "hanya -73 hari sebelum RUPS paling awal" | PASS | probe-sources |
| TC-08 | Aturan | API | Kuorum Peleburan tanpa BA RUPS | RUPS_ATTENDANCE_QUORUM SKIPPED | Sesuai: SKIPPED "Belum ada Berita Acara RUPS" (centang kehadiran deed tidak dihitung tanpa BA RUPS, lihat OBS-3) | PASS | probe-sources |
| TC-09 | Gate | API | Submit Peleburan tanpa approve seksi | 400 SECTIONS_UNAPPROVED | Sesuai: 400 "Semua bagian wajib harus disetujui" | PASS | probe-sources |
| TC-10 | Gate | API | Submit Peleburan saat masih ada FAIL | 422 VALIDATION_FAILED dengan daftar failing | Sesuai: 422 failing [PELEBURAN_KORAN_WINDOW, PELEBURAN_SOURCE_BLOKIR] | PASS | probe-sources |
| TC-11 | Gate | API | Override 2 FAIL lalu submit | 200 COMPLETED + VerifikasiPerubahan MENUNGGU_VERIFIKATOR | Sesuai persis; verifikasi row terbuat | PASS | probe-sources |
| TC-12 | State | API | Add source setelah COMPLETED | 409 WRONG_STATUS | Sesuai: 409 "submission cannot be edited in its current status" | PASS | probe-neg |
| TC-13 | State | API | Submit ulang setelah COMPLETED | 409 WRONG_STATUS | Sesuai: 409 "status is COMPLETED, expected READY" | PASS | probe-neg |
| TC-14 | Guard | API | Pilih kandidat yang tidak ada di lookup baris | 422 INVALID_SELECTION | Sesuai: 422 "Kandidat tidak sesuai dengan hasil pencarian SABH untuk baris ini" | PASS | probe-neg2 |
| TC-15 | Guard | API | review-data pada id tak dikenal | 404 | Sesuai: 404 "Submission not found" | PASS | probe-neg |
| TC-16 | Guard | API | Endpoint peleburan pada submission Penggabungan | 400 "Not a Peleburan PT submission" | Sesuai persis | PASS | probe-pgb2 |
| TC-17 | Positive | API | Drive D-POS-PGB ke terminal | type PENGGABUNGAN_PT, READY, menumpang perubahan | Sesuai: PENGGABUNGAN_PT, READY; review generik + perubahan/review-data 200 | PASS | probe-pgb |
| TC-18 | Aturan | API | Kuorum Penggabungan (Ps.89) via recital akta | RUPS_ATTENDANCE_QUORUM WARNING bila di bawah 3/4 | Sesuai: WARNING "Kehadiran RUPS 53.75% (dari akta), belum memenuhi kuorum (min. 75%)" | PASS | probe-pgb |
| TC-19 | Aturan | API | Penggabungan tanpa PT sumber di akta | PENGGABUNGAN_SOURCES_PRESENT WARNING; SURVIVOR_DISTINCT/SOURCES_SK SKIPPED | Sesuai persis | PASS | probe-pgb |
| TC-20 | Aturan | API | Jendela tanggal akta Penggabungan | AKTA_DATE_WINDOW jendela 30 hari (perubahan) | Sesuai: PASS "Tanggal akta 2026-08-13 (6 hari lalu)" | PASS | probe-pgb3 |
| TC-21 | Gate | API | Submit Penggabungan meski ada PERSEROAN_STATE FAIL | (harapan wajar: terblokir/override) | Aktual: 200 COMPLETED, FAIL diloloskan (tidak ada FAIL gate di arm ini, lihat BUG-01) | FAIL* | probe-pgb2 |
| TC-22 | Positive | UI | Deep-link /peleburan/:id/review sebagai notaris |
Halaman render, tombol Kirim disabled (0 sumber) | Sesuai: render, "Kirim ke Verifikator" disabled | PASS | peleburan-review.png |
| TC-23 | Positive | UI | Deep-link /perubahan/:id/review (Penggabungan) |
Halaman render mode merger | Sesuai render | PASS | penggabungan-review.png |
*TC-21 ditandai FAIL sebagai ekspektasi keamanan gate, bukan kegagalan sistem menjalankan alur; lihat BUG-01.
5. Cakupan UI
| Route/Elemen | Diuji? | Perilaku benar? | Catatan |
|---|---|---|---|
/klasifikasi unggah + koreksi jenis |
Ya (API) | Ya | userOverride mengoreksi klasifikasi ke AKTA_PELEBURAN/AKTA_PENGGABUNGAN; type inference benar |
/peleburan/:id/extraction |
Ya (navigasi) | Ya | Auto-start |
/peleburan/:id/review render |
Ya | Ya | Panel PT Sumber + kehadiran + koran + tombol Kirim |
| Tombol "Kirim ke Verifikator" Peleburan (gate) | Ya | Ya | Disabled saat FAIL/seksi belum lengkap; tanpa data-testid (OBS-1) |
| Panel Kelola PT Sumber / Acuan RUPS | Sebagian (API penuh, UI render) | Ya | Add/edit/select/acuan/delete diuji via API; interaksi dialog UI belum diklik end-to-end |
/perubahan/:id/review (Penggabungan, isMerger) |
Ya | Ya | Menumpang halaman perubahan |
Panel verifikator Peleburan (/verifikator/peleburan/:id) |
Tidak (UI) | - | Route + komponen ada; didokumentasikan dari kode, belum didorong end-to-end |
Panel verifikator Penggabungan (/verifikator/review/:id) |
Tidak (UI) | - | Menumpang verifikator perubahan |
| Interstitial AWAITING_COMPANY_SELECTION Peleburan | Tidak (UI) | - | Terpicu saat ada baris PENDING; diuji via API (resolve loop), tidak dipaksa di UI |
6. Temuan bug & perbaikan
| ID bug | Severity | Ringkas | Reproduksi | Ekspektasi | Aktual | Screenshot | Rekomendasi |
|---|---|---|---|---|---|---|---|
| BUG-01 | Med | Submit Penggabungan/Akuisisi tidak menjalankan FAIL gate | Buat PENGGABUNGAN_PT dengan PERSEROAN_STATE FAIL (survivor terblokir), submit | Submit tertahan sampai FAIL diselesaikan atau di-override (seperti Peleburan) | 200 COMPLETED, FAIL diloloskan tanpa override (perubahan.ts:1256-1322 hanya cek appearing sections) | penggabungan-review.png | Samakan dengan Peleburan: jalankan checkFailGate (block-with-override) pada arm AKUISISI/PENGGABUNGAN sebelum COMPLETED; PERSEROAN_STATE terblokir seharusnya menahan pengajuan |
| OBS-1 | Low | Tombol Kirim Peleburan tanpa testid | Buka review Peleburan | Selector stabil untuk uji | Button biasa "Kirim ke Verifikator" tanpa data-testid |
peleburan-review.png | Tambah data-testid="peleburan-submit-button" (samakan pola dengan pt-finalize-button) |
| OBS-2 | Low | Submit Penggabungan langsung COMPLETED saat tidak ada jenis terdeteksi | Deed tanpa jenis PAD/PPAD/NONPAD | Idealnya ada minimal satu konfirmasi/atestasi | akMissing kosong sehingga langsung COMPLETED (perubahan.ts:1273-1279) | probe-pgb2 | Pertimbangkan minimal satu konfirmasi wajib untuk Penggabungan agar tidak lolos tanpa tinjauan seksi |
| OBS-3 | Info | Centang kehadiran deed Peleburan tidak menghitung kuorum tanpa BA RUPS | Isi kehadiran pemegang saham lalu cek RUPS_ATTENDANCE_QUORUM | Kuorum ikut dihitung dari centang | Tetap SKIPPED "Belum ada Berita Acara RUPS"; rule hanya menghitung roster deed saat hasBaRupsDoc=true (rups-quorum.ts:67, pt-akta-context.ts:407/428) |
probe-sources | Bukan bug: PELEBURAN_RUPS_PER_SOURCE adalah surface RUPS utama Peleburan. Bila kuorum deed-only diinginkan, longgarkan syarat hasBaRupsDoc atau isi recital aktaKehadiranRatio |
7. Ringkasan & rekomendasi
- Total skenario: 23 (PASS 22 / FAIL 1). TC-21 (FAIL gate Penggabungan) ditandai FAIL sebagai ekspektasi keamanan, terkait BUG-01.
- Cakupan UI: render kedua sub-alur + gate Peleburan teruji lewat Playwright; panel verifikator dan interstitial company-selection didokumentasikan dari kode.
- Bug: High 0, Med 1 (BUG-01), Low 2 (OBS-1, OBS-2), 1 info (OBS-3).
- Sub-alur Peleburan: terminal READY sebagai PELEBURAN_PT. Multi-source lookup berjalan penuh (add/edit/select/acuan/delete), status blokir & registri PT sumber terisi dari SABH, gate submit menjalankan section-approval lalu checkFailGate (block-with-override), submit menghasilkan COMPLETED + VerifikasiPerubahan MENUNGGU_VERIFIKATOR. Kuorum Ps.89 terverifikasi (SKIPPED tanpa BA RUPS pada deed ini).
- Sub-alur Penggabungan: terminal READY sebagai PENGGABUNGAN_PT, menumpang halaman dan verifikator perubahan (bukan gap). Aturan khusus PENGGABUNGAN_SOURCES_PRESENT/SURVIVOR_DISTINCT/SOURCES_SK berjalan (WARNING-first). Kuorum Ps.89 menghasilkan WARNING nyata (kehadiran 53.75% di bawah min 75%) via recital akta. Gate submit hanya mengecek appearing sections dan TIDAK menjalankan FAIL gate (BUG-01).
- Perbedaan penting antar sub-alur: Peleburan bergaya pendirian PT baru dengan sisi sumber multi-source dan FAIL gate ber-override; Penggabungan bergaya perubahan atas survivor dengan aturan sumber advisory dan submit tanpa FAIL gate. Kuorum keduanya kategori Ps.89.
- Gap/keterbatasan: alur end-to-end sampai COMPLETED lewat verifikator (putusan APPROVE + kemungkinan voting) belum didorong penuh. Scan 129 halaman (D-SCAN-PGB) tidak di-OCR sesi ini karena berat. Kuorum Peleburan negatif dari BA RUPS nyata belum diuji (deed tidak menyertakan BA RUPS); centang kehadiran deed tidak dihitung tanpa BA RUPS (OBS-3). Rekomendasi lanjutan: siapkan akta peleburan/penggabungan nyata beserta BA RUPS dan bukti pengumuman koran untuk menguji kuorum dan koran-window jalur BA RUPS, serta perbaiki BUG-01 agar Penggabungan sejajar dengan Peleburan.