Blackbox Testing — Intake OCR (Apostille & Legalisasi)
- Domain: Apostille & Legalisasi
- Fitur: Intake OCR (Unggah Permohonan)
- Role/aktor: umum (pemohon)
- Tanggal uji: 2026-08-19
- Penguji (sesi): Supervisor Apostille
- Build/commit: 63c40a17 (dev/4)
1. Ringkasan fitur
Halaman intake adalah langkah pertama alur Apostille/Legalisasi. Pemohon memilih negara tujuan, dan layanan (Apostille atau Legalisasi) ditentukan otomatis dari keanggotaan negara itu pada Konvensi Apostille (Den Haag). Pemohon bisa memilih Jalur Reguler atau Jalur Percepatan (khusus Apostille, dengan Kode Voucher), lalu mengunggah SEMUA berkas dalam satu tempat (KTP, surat kuasa bila mewakilkan, dan dokumen yang akan di-apostille/legalisasi). Saat diajukan, sistem membuat submission, menjalankan klasifikasi (fase 1), lalu mengarahkan pemohon ke papan klasifikasi.
2. Full workflow
2.1 Diagram state
stateDiagram-v2
[*] --> CREATED: submit-form
CREATED --> EXTRACTING: fase 1 (klasifikasi)
EXTRACTING --> VALIDATING
VALIDATING --> AWAITING_CLASSIFICATION: identitas dipilah, dokumen di papan
AWAITING_CLASSIFICATION --> [*]: lanjut ke Klasifikasi
2.2 Sequence (aktor - sistem)
sequenceDiagram
actor U as umum
participant FE as Frontend (ApostilleUploadPage)
participant BE as Backend (/api/apostille)
participant OCR as OCR/LLM
U->>FE: Pilih negara tujuan
FE->>FE: serviceForCountry -> Apostille / Legalisasi
U->>FE: (opsi) Jalur Percepatan + Kode Voucher
U->>FE: Unggah berkas (KTP + surat kuasa + dokumen)
U->>FE: Ajukan Permohonan
FE->>BE: POST /submit-form (multipart)
BE->>BE: gate percepatan (window + kuota) bila PERCEPATAN
BE->>OCR: fase 1 klasifikasi (fire-and-forget)
BE-->>FE: { submissionId }
FE->>U: navigasi ke /permohonan/:id/klasifikasi
2.3 Peta route & UI
| Langkah |
Route |
Komponen |
Elemen interaktif utama |
Selector |
| Pilih negara |
/apostille |
ApostilleUploadPage |
SearchableSelect negara |
placeholder "Pilih atau ketik negara tujuan…" |
| Pilih jalur |
/apostille |
ApostilleJalurSelector |
tombol Reguler / Percepatan, input voucher |
[data-testid="fasttrack-card"], aria-pressed |
| Unggah berkas |
/apostille |
ApostilleDocumentsCard |
dropzone + hidden input[type=file], Unduh Template |
input[type=file] |
| Ajukan |
/apostille |
ApostilleUploadPage |
tombol Ajukan Permohonan |
teks "Ajukan Permohonan" |
| Progres unggah |
/apostille |
ApostilleUploadProgress |
bar progres 0-99% |
- |
3. Prasyarat & data uji
| ID data |
Tipe |
Berkas |
Deskripsi |
Ekspektasi sistem |
| D-POS-30 |
Positive |
apostille_elektronik_nosk/ (KTP jpeg + dokumen jpeg) |
Apostille diri sendiri, elektronik |
submit-form 200, sampai AWAITING_CLASSIFICATION |
| D-POS-31 |
Positive |
negara Apostille (US) via UI |
Layanan Apostille terderivasi |
badge "Layanan: Apostille" |
| D-POS-32 |
Positive |
negara non-Hague (MY) via UI |
Layanan Legalisasi terderivasi |
badge "Layanan: Legalisasi" |
| D-NEG-30 |
Negative |
tanpa berkas |
Ajukan tanpa file |
400 NO_DOCS |
| D-NEG-31 |
Negative |
PERCEPATAN di luar jam 06-11 WIB |
Fast-track window tertutup |
409 FASTTRACK_WINDOW |
4. Matriks skenario uji
| ID |
Tipe |
Lapisan |
Langkah ringkas |
Ekspektasi |
Hasil aktual |
Status |
Bukti |
| TC-INT-01 |
Positive |
UI |
Pilih US, cek badge; pindah ke MY, cek badge + fast-track tidak tersedia |
Badge Apostille lalu Legalisasi; fast-track tidak selectable |
Sesuai |
PASS |
intake-service-derive.png |
| TC-INT-02 |
Positive |
UI |
Pilih negara, unggah 2 berkas, Ajukan |
Navigasi ke /klasifikasi |
Sesuai |
PASS |
intake-submitted-to-board.png |
| TC-INT-03 |
Positive |
UI |
Sebelum tambah berkas, cek tombol Ajukan |
Tombol disabled |
Sesuai |
PASS |
apostille-smoke-upload.png |
| TC-INT-04 |
Positive |
API |
POST /submit-form (Apostille, 2 berkas) |
200 + submissionId, status AWAITING_CLASSIFICATION |
Sesuai |
PASS |
intake.spec |
| TC-INT-05 |
Negative |
API |
POST /submit-form tanpa docFile |
400 NO_DOCS |
Sesuai |
PASS |
intake.spec |
| TC-INT-06 |
Negative |
API |
POST /submit-form jalur=PERCEPATAN di luar jam |
409 FASTTRACK_WINDOW |
Sesuai |
PASS |
intake.spec |
| TC-INT-07 |
Positive |
API |
Buka window via app-settings lokal, PERCEPATAN |
200, jalur PERCEPATAN + slaDeadline terisi |
Sesuai |
PASS |
intake.spec |
5. Cakupan UI (semua yang diakses user)
| Route/Elemen |
Diuji? |
Perilaku benar? |
Catatan |
| SearchableSelect negara |
Ya |
Ya |
Ketik untuk memfilter, klik item |
| Badge layanan (Apostille/Legalisasi) |
Ya |
Ya |
Terderivasi dari negara |
| Tombol Jalur Reguler (aria-pressed) |
Ya |
Ya |
Default terpilih |
| Kartu Jalur Percepatan |
Ya |
Ya |
Tidak selectable di luar jam / di Legalisasi |
| Input Kode Voucher |
Sebagian |
- |
Muncul hanya saat Percepatan terpilih (butuh window terbuka; teruji via override lokal) |
| Dropzone unggah + hidden input |
Ya |
Ya |
Batch multi-file |
| Unduh Template (surat kuasa) |
Tidak |
- |
Link statis /templates/format_surat_kuasa.docx |
| Tombol Ajukan Permohonan |
Ya |
Ya |
Disabled sampai negara + berkas ada |
| Panel progres unggah |
Sebagian |
Ya |
Terlihat singkat saat submit |
6. Temuan bug & perbaikan
| ID bug |
Severity |
Ringkas |
Reproduksi |
Ekspektasi |
Aktual |
Screenshot |
Rekomendasi perbaikan |
| - |
- |
Tidak ada bug pada fitur intake |
- |
- |
- |
- |
- |
Catatan non-bug: beberapa elemen kritikal tidak punya data-testid stabil (SearchableSelect negara, input voucher, dropzone). Hanya kartu Percepatan dan badge progres pernyataan yang bertestid. Rekomendasi: tambah data-testid pada picker negara, input voucher, dan dropzone untuk stabilitas Playwright.
7. Ringkasan & rekomendasi
- Total skenario: 7 (PASS 7 / FAIL 0)
- Cakupan UI: 8/9 elemen teruji (Unduh Template tidak diklik)
- Bug: High 0, Med 0, Low 0
- Rekomendasi prioritas: tambah selector stabil untuk elemen intake.
- Gap/keterbatasan: Jendela Jalur Percepatan hanya buka 06.00-11.00 WIB. Pengujian dilakukan sore hari, jadi jalur percepatan happy-path diuji dengan membuka window sementara lewat app-settings LOKAL dev_4 (disetujui user, tanpa restart, dikembalikan setelah uji). Verifikasi pembayaran nyata terhadap SIMPADHU tidak dapat direproduksi (bypass pembayaran dev aktif -> status BYPASSED); ditandai "butuh data/lingkungan".