Blackbox Testing — Perubahan PT (PT)
- Domain: PT
- Fitur: Perubahan PT
- Role/aktor: notaris (input & pengajuan), verifikator_pt (verifikasi bertahap), admin (akses menyeluruh)
- Tanggal uji: 2026-08-19
- Penguji (sesi): Supervisor PT
- Build/commit: 63c40a17
1. Ringkasan fitur
Perubahan PT memproses Akta Perubahan (Pernyataan Keputusan Rapat/PKR) untuk mengubah data perseroan atau Anggaran Dasar. Notaris mengunggah akta, sistem OCR + LLM mengekstraksi field, mencocokkan perseroan dengan data SABH (company lookup), lalu menghitung diff terhadap data lama dan menjalankan validasi termasuk kuorum kehadiran RUPS. Berbeda dari Pendirian, flow ini bertahap lewat verifikator: setelah notaris menuntaskan atestasi jenis perubahan dan menekan Kirim, permohonan masuk antrean verifikator (MENUNGGU_VERIFIKATOR) dan bisa melalui tahap voting pemegang saham sebelum putusan final.
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 --> MENUNGGU_VERIFIKATOR: submit (atestasi + gate lolos)
MENUNGGU_VERIFIKATOR --> MENUNGGU_VOTING: verifikator APPROVE (butuh voting)
MENUNGGU_VOTING --> MENUNGGU_VERIFIKATOR_FINAL: voting selesai
MENUNGGU_VERIFIKATOR_FINAL --> COMPLETED: putusan final APPROVE
MENUNGGU_VERIFIKATOR --> PERBAIKAN: REVISE
MENUNGGU_VERIFIKATOR --> REJECTED: REJECT
COMPLETED --> [*]
2.2 Sequence (aktor - sistem)
sequenceDiagram
actor N as Notaris
actor V as Verifikator PT
participant BE as Backend :47014
N->>BE: Unggah akta + start
BE->>BE: ekstraksi + company lookup + diff + validasi (kuorum RUPS)
N->>BE: (bila perlu) select-company
N->>BE: POST /submissions/:id/attestations (jenis perubahan)
N->>BE: POST /submissions/:id/submit
BE->>BE: gate: atestasi + seksi + fail-gate; buat VerifikasiPerubahan
V->>BE: GET /verifikator/submissions/:id/verifikasi
V->>BE: POST /verifikator/submissions/:id/decide (APPROVE/REJECT/REVISE)
BE-->>N: status COMPLETED / PERBAIKAN / REJECTED
2.3 Peta route & UI
| Langkah |
Route |
Komponen |
Elemen interaktif utama |
Selector |
| Unggah & klasifikasi |
/klasifikasi |
KlasifikasiPage |
file input |
input[type=file] |
| Ekstraksi (step 2) |
/perubahan/:id/extraction |
PerubahanExtractionPage |
auto-start |
(tanpa testid) |
| Tinjauan (step 3) |
/perubahan/:id/review |
PtPerubahanReviewPageV2 |
konfirmasi field, atestasi jenis, panel validasi, tombol Kirim |
(tombol Kirim tanpa testid, lihat OBS-1) |
| Verifikator |
/verifikator lalu /verifikator/review/:id |
VerifikatorDashboardPage, VerifikatorReviewPage |
Setujui/Tolak/Revisi |
(perlu cek) |
| Status |
/perubahan/:id/status |
SubmissionStatusPage |
ringkasan |
(tanpa testid) |
3. Prasyarat & data uji
| ID data |
Tipe |
Berkas |
Deskripsi |
Ekspektasi sistem |
| D-POS-10 |
Positive |
PT__perubahan__positive__D-POS-10__akta-perubahan.pdf |
Perubahan Pasal 3 genuine (corpus-perubahan-7) |
READY; diff terisi; validasi jalan |
| Real-NONPAD..PAD |
Positive |
e2e/data/real-intake/pt/perubahan/{5 varian}/ |
Scan multi-dokumen (akta + sirkuler + AJB saham + daftar hadir) |
Belum diuji OCR penuh (scan berat) |
| Kuorum-neg |
Negative |
(butuh BA RUPS/daftar hadir dengan kehadiran < ambang) |
Kehadiran di bawah kuorum |
RUPS_ATTENDANCE_QUORUM WARNING |
4. Matriks skenario uji
| ID |
Tipe |
Lapisan |
Langkah ringkas |
Ekspektasi |
Hasil aktual |
Status |
Bukti |
| TC-01 |
Positive |
API |
Drive D-POS-10 ke terminal |
type PERUBAHAN_PT, READY, diff terisi |
Sesuai: READY, 23 SKIPPED/8 PASS/1 WARNING/1 FAIL |
PASS |
probe log |
| TC-02 |
Aturan |
API |
Cek jendela tanggal akta |
Perubahan pakai jendela 30 hari |
Sesuai: "sudah 238 hari lalu (maks 30 hari)" FAIL |
PASS |
probe log |
| TC-03 |
Aturan |
API |
Cek dokumen pendukung |
AKTA_PEMINDAHAN_HAK diminta bila ada peralihan saham |
Sesuai: REQUIRED_SUPPORTING_DOCS WARNING |
PASS |
probe log |
| TC-04 |
Aturan |
API |
Cek kuorum RUPS tanpa data RUPS |
SKIPPED |
Sesuai: RUPS_ATTENDANCE_QUORUM SKIPPED |
PASS |
probe log |
| TC-05 |
Gate |
API |
Submit saat FAIL/atestasi belum ada |
Ditolak |
400 "Attestations not saved" (atestasi jadi gate pertama) |
PASS |
probe log |
| TC-06 |
Gate |
API |
Override AKTA_DATE_WINDOW |
200 (overridable di perubahan, lihat OBS-2) |
200 OK |
PASS |
probe log |
| TC-07 |
Gate |
API |
Submit lagi setelah override |
Tetap tertahan gate atestasi |
400 "Attestations not saved" |
PASS |
probe log |
| TC-08 |
State |
API |
select-company saat bukan AWAITING |
409 |
Sesuai: 409 "Submission is not awaiting company selection" |
PASS |
probe log |
| TC-09 |
Positive |
UI |
Deep-link /perubahan/:id/review |
Halaman render, aksi tergate |
Sesuai render |
PASS |
ui-review.png |
5. Cakupan UI
| Route/Elemen |
Diuji? |
Perilaku benar? |
Catatan |
/klasifikasi unggah |
Ya |
Ya |
Navigasi ke extraction perubahan |
/perubahan/:id/extraction |
Ya (navigasi) |
Ya |
Auto-start |
/perubahan/:id/review render |
Ya |
Ya |
Field + panel validasi + atestasi |
| Tombol Kirim (gate) |
Sebagian |
Ya |
Tanpa data-testid (OBS-1); gate lewat atestasi/seksi/FAIL |
| Panel verifikator (Setujui/Tolak/Revisi) |
Tidak |
- |
Butuh atestasi lengkap dulu; didokumentasikan dari kode |
| Interstitial select-company |
Tidak (UI) |
- |
Diuji di API (409 guard); tidak terpicu data sintetis |
6. Temuan bug & perbaikan
| ID bug |
Severity |
Ringkas |
Reproduksi |
Ekspektasi |
Aktual |
Screenshot |
Rekomendasi |
| OBS-1 |
Low |
Tombol Kirim perubahan tanpa testid |
Buka review perubahan |
Selector stabil untuk uji |
Tombol Button biasa tanpa data-testid |
ui-review.png |
Tambah data-testid="perubahan-submit-button" (samakan pola dengan pt-finalize-button) |
| OBS-2 |
Low (desain) |
AKTA_DATE_WINDOW overridable di Perubahan |
Override pada submission perubahan |
Konsisten dengan Pendirian (terkunci saat tanggal terverifikasi) |
200 OK (kebijakan override men-scope docTypes ke AKTA_PENDIRIAN saja) |
probe log |
Bila perubahan lewat 30 hari juga harus terkunci saat tanggal terverifikasi, tambah AKTA_PERUBAHAN ke docTypes kebijakan; bila memang legacy-overridable, konfirmasikan |
| OBS-3 |
Info |
Urutan gate submit |
Submit tanpa apa-apa |
- |
Gate atestasi mendahului fail-gate (pesan "Attestations not saved" muncul walau FAIL ada) |
probe log |
Bukan bug; catat agar pesan error mengarahkan user ke langkah atestasi lebih dulu |
7. Ringkasan & rekomendasi
- Total skenario: 9 (PASS 9 / FAIL 0).
- Cakupan UI: render + gate teruji; panel verifikator dan interstitial company-selection didokumentasikan dari kode namun belum didorong end-to-end (butuh atestasi lengkap + data registry multi-match).
- Bug: High 0, Med 0, Low 2 (OBS-1, OBS-2), 1 catatan info (OBS-3).
- Aturan kuorum RUPS terverifikasi dari kode: kategori nonAd (Ps.86: ke-1 >1/2, ke-2 min 1/3), ad (Ps.88: ke-1 min 2/3, ke-2 min 3/5), ps89 (Ps.89: ke-1 min 3/4, ke-2 min 2/3). Perubahan bersifat adAware (PAD/PPAD -> ad, NONPAD -> nonAd). Kuorum menghasilkan WARNING (bukan FAIL) bila di bawah ambang, PASS bila terpenuhi, SKIPPED tanpa data RUPS.
- Perbedaan penting vs Pendirian: jendela tanggal akta 30 hari (bukan 60), REQUIRED_SUPPORTING_DOCS jadi WARNING dan field-based (AKTA_PEMINDAHAN_HAK muncul saat ada peralihan saham), flow bertahap lewat verifikator dengan kemungkinan voting.
- Gap/keterbatasan: jalur end-to-end sampai COMPLETED lewat verifikator butuh penyiapan atestasi jenis perubahan + (opsional) voting pemegang saham; belum didorong penuh pada sesi ini. Company lookup tidak terpicu oleh data sintetis (perlu nama yang match banyak entri SABH). Kuorum negatif perlu dokumen BA RUPS/daftar hadir nyata dengan kehadiran di bawah ambang. Rekomendasi lanjutan: pakai varian nyata
perubahan/PAD+NONPAD (ada daftar hadir) untuk uji kuorum dan alur verifikator penuh.