Skip to content

Manajemen Permohonan

Modul Manajemen Permohonan adalah modul inti dalam sistem TrueDignity yang mengelola seluruh siklus hidup permohonan layanan notaris dan PPAT, mulai dari pembuatan, verifikasi, pelaksanaan tugas, hingga penyelesaian. Modul ini menyediakan fitur untuk mengelola daftar permohonan, prioritas mingguan, dan detail permohonan secara komprehensif.

Spesifikasi Perilaku & Alur

Skenario 1.1.1: Pengguna dengan Izin Valid

Skenario ini menggambarkan bagaimana pengguna dengan izin PERMOHONAN mengakses dashboard permohonan.

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan, Then dashboard menampilkan halaman dengan tab untuk navigasi ke daftar permohonan atau prioritas mingguan. Tab default adalah daftar permohonan.

Skenario 1.1.2: Navigasi ke Daftar Permohonan

Skenario ini menunjukkan tampilan daftar permohonan dengan fitur pencarian dan filter.

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan, Then dashboard menampilkan daftar permohonan dengan query tersedia (page, size, by [nama, nomor, status], dan search). Setiap item permohonan harus menampilkan sisa waktu, waktu yang telah berlalu, dan tugas aktif.

Catatan Penting:

  • Active task adalah tugas yang belum selesai di mana tugas sebelumnya sudah selesai
  • Contoh struktur tugas dengan linked list menggunakan nextId
  • Item daftar permohonan harus menampilkan: remaining time, passed time, dan active task

Skenario 1.1.3.1: Navigasi ke Prioritas Mingguan

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan#weekly, Then dashboard menampilkan prioritas mingguan menggunakan 2 panel untuk menampilkan riwayat dan daftar permohonan terkait. Layout mengikuti Material Design 3 Layout.

Skenario 1.1.3.2: Mengelola Prioritas Mingguan

AktorUser & Sistem
RincianGiven user membaca weekly-priority saat ini, When user membuat weekly-priority berikutnya, Then tampilkan form rentang tanggal dengan nilai awal minggu depan dari Senin hingga Jumat. When user menghapus order dari weekly-priority yang ada, Then hapus order dari prioritas. When user menambahkan order ke weekly-priority, Then tampilkan order yang belum dipilih dari weekly-priority manapun, And timpa weekly-priority order.

Skenario 1.1.4: Membuat Permohonan Baru

Diagram ini menggambarkan alur pembuatan permohonan baru dengan form bertahap.

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan/create, Then halaman permohonan menampilkan form dengan indikator stepper untuk setiap bagian (daftar layanan yang dapat dipilih, umum, objek pajak, pihak terkait, tugas, tagihan, dan direktori).

Tahapan Form Permohonan:

  1. Pilih Layanan - Memilih jenis layanan (Notaris/PPAT)
  2. Informasi Umum - Data dasar permohonan (pemohon, petugas, alasan hak, bentuk hukum)
  3. Objek Pajak - Informasi objek pajak (jika berlaku)
  4. Pihak Terkait (Penghadap) - Identitas pihak-pihak yang terlibat dengan peran masing-masing
  5. Tugas - Daftar tugas yang akan dilakukan
  6. Tagihan - Informasi biaya dan tagihan
  7. Direktori Berkas - Dokumen-dokumen yang diperlukan

Skenario 1.1.5: Detail Permohonan

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan/detail?id=xxx, Then halaman permohonan menampilkan detail informasi permohonan dalam layout terpisah (umum, objek pajak, pihak terkait, tugas, tagihan, dan direktori).

Skenario 1.1.6.1: Update Detail Permohonan Terverifikasi

AktorUser & Sistem
RincianGiven user memiliki izin PERMOHONAN yang diatur ke true, When user mengakses /permohonan/detail?id=xxx, Then halaman permohonan menampilkan detail informasi permohonan dalam layout terpisah kemungkinan menggunakan tab (umum, objek pajak, pihak terkait, tugas, tagihan, dan direktori).

Skenario 1.1.6.2: Verifikasi Permohonan Baru

Diagram ini menunjukkan alur verifikasi permohonan baru dan assignment ke weekly priority.

AktorUser & Sistem
RincianGiven user telah menerima order baru yang belum terverifikasi, When user mengakses /permohonan/detail?id=xxx, Then halaman permohonan menampilkan detail informasi permohonan dalam layout terpisah. When user memverifikasi order And mengubah status selain yang ada dalam enumerasi [MENUNGGU_DISETUJUI, TIDAK_VALID], Then halaman permohonan menanyakan prioritas mingguan mana yang harus dipilih untuk order ini, And menampilkan prioritas mingguan yang dapat dipilih.

Skenario 1.1.7.1: Navigasi ke Daftar Permohonan VIP

Skenario ini menggambarkan tampilan daftar permohonan VIP yang memiliki prioritas tinggi.

AktorUser & Sistem
RincianGiven user telah membuat order VIP, When user mengakses /permohonan#vip, Then halaman permohonan menampilkan daftar order VIP (sisa waktu, estimasi, status, tugas aktif) dengan query tersedia (page, size, by [nama, nomor, status], dan search).

Catatan:

  • Order VIP ditampilkan dengan indikator khusus untuk membedakan dari order regular
  • Tampilan harus mencakup: remaining time, estimation, status, dan active task
  • Filter dan search menggunakan parameter yang sama dengan order list regular

Skenario 1.1.7.2: Menambahkan Permohonan ke Daftar VIP

Skenario ini menjelaskan cara menambahkan permohonan baru atau existing ke daftar VIP.

AktorUser & Sistem
RincianGiven user telah membuat order regular, When user mengakses /permohonan#vip And user mengklik "Tambahkan Permohonan", Then permohonan menampilkan pilihan "Permohonan Baru / Pilih Permohonan". If user memilih "Pilih Permohonan", sistem mengganti tabel VIP saat ini dengan tabel order regular yang memungkinkan user memilih beberapa order atau menambahkan satu order. Ketika user puas dengan pilihan mereka dan melanjutkan, sistem menampilkan modal yang menampilkan order terpilih dengan layout card. Else sistem akan mengarahkan user ke /permohonan/create?vip=true.

Alur Detail:

  1. Pilih Permohonan Existing:

    • Tabel VIP diganti dengan tabel order regular
    • User dapat memilih multiple atau single order
    • Setelah konfirmasi, modal menampilkan preview order terpilih dalam card layout
    • Order yang dipilih ditandai sebagai VIP
  2. Buat Permohonan Baru:

    • Redirect ke /permohonan/create?vip=true
    • Form creation dengan flag VIP aktif
    • Permohonan otomatis masuk ke daftar VIP setelah dibuat

Skenario 1.1.8.1: Navigasi ke Daftar Permohonan Terlambat

Skenario ini menampilkan daftar permohonan yang melewati deadline (overdue).

AktorUser & Sistem
RincianGiven user memiliki order yang terlambat (overdue), When user mengakses /permohonan#overdue, Then halaman permohonan menampilkan daftar order terlambat dengan query tersedia (page, size, by [nama, nomor, status], dan search).

Catatan:

  • Order overdue adalah order yang melewati tenggat_waktu
  • Tampilan harus menyoroti berapa lama order telah terlambat
  • Filter status tetap tersedia untuk menampilkan status order terlambat (DALAM_PROSES, MENUNGGU_DISETUJUI, dll)

Skenario 1.1.8.2: Memindahkan Permohonan Terlambat ke Arsip

Skenario ini menjelaskan proses memindahkan order terlambat ke arsip.

AktorUser & Sistem
RincianGiven user memiliki order yang terlambat (overdue), When user mengakses /permohonan#overdue And user memilih beberapa atau satu order And user puas dengan pilihan mereka dan melanjutkan, Then permohonan menampilkan modal yang menampilkan order terpilih dengan layout card.

Alur Arsip:

  1. User memilih single atau multiple overdue orders
  2. Sistem menampilkan preview dalam modal dengan card layout
  3. User mengkonfirmasi untuk memindahkan ke arsip
  4. Status order diubah menjadi SELESAI atau status arsip lainnya
  5. Order dipindahkan dari daftar overdue ke daftar arsip

Skenario 1.1.9.1: Navigasi ke Daftar Arsip Permohonan

Skenario ini menampilkan daftar permohonan yang telah selesai dan diarsipkan.

AktorUser & Sistem
RincianGiven user memiliki order yang telah diarsipkan (dengan status selesai), When user mengakses /permohonan#archive, Then halaman permohonan menampilkan daftar order yang diarsipkan dengan query tersedia (page, size, by [nama, nomor], dan search).

Catatan:

  • Arsip menampilkan order dengan status SELESAI
  • Filter by hanya mencakup nama dan nomor (status tidak tersedia karena semua order selesai)
  • Order arsip bersifat read-only
  • Sistem harus menyediakan fitur untuk restore order dari arsip jika diperlukan

Skenario 1.2.1: Pengguna Tanpa Izin Valid

AktorUser & Sistem
RincianGiven user tidak memiliki izin PERMOHONAN, When user mengakses /permohonan secara manual, Then dashboard menampilkan halaman yang menginformasikan user tentang akses tidak sah.

Skenario 1.2.2: Sidebar untuk Pengguna Tanpa Izin

AktorUser & Sistem
RincianGiven user tidak memiliki izin PERMOHONAN, When user mengakses situs di mana saja, Then sidebar mengecualikan item menu /permohonan.

Skenario 2.1.1: Lihat Antrian Permohonan Baru

Skenario ini menampilkan daftar permohonan yang menunggu persetujuan.

AktorOfficer & Sistem
RincianGiven pemohon atau officer membuat permohonan baru dan officer memiliki izin akses PERMOHONAN, When officer membuka menu permohonan tertunda /permohonan#pending, Then sistem mengembalikan permohonan dengan status MENUNGGU_DISETUJUI. Note: Permohonan seharusnya belum memiliki nomor_permohonan pada tahap ini.

Karakteristik Antrian Pending:

  • Status: MENUNGGU_DISETUJUI atau TIDAK_VALID
  • Belum memiliki nomor urut (nomor_permohonan)
  • Diurutkan berdasarkan created_at terbaru
  • Menampilkan: nomor referensi, pemohon, layanan, tanggal dibuat, status

Skenario 2.1.2: Lihat Ringkasan Permohonan Baru

Skenario ini menampilkan preview/ringkasan data permohonan baru.

AktorOfficer & Sistem
RincianGiven officer telah memperoleh daftar permohonan pending, When officer menekan tombol untuk melihat detail/ringkasan, Then sistem menampilkan modal atau drawer dengan ringkasan data permohonan (pemohon, layanan, pihak-pihak, dokumen yang dilampirkan) tanpa mengubah status.

Informasi Ringkasan yang Ditampilkan:

  • Data pemohon lengkap
  • Layanan yang diminta
  • Pihak-pihak terkait (jika ada)
  • Daftar dokumen yang dilampirkan
  • Status kelengkapan dokumen

Skenario 2.1.3: Tautan Detail Permohonan

AktorOfficer & Sistem
RincianGiven officer berada di menu permohonan pending dan melihat ringkasan, When officer menekan tombol "Lihat Detail Lengkap" atau icon detail, Then sistem menavigasi ke halaman detail permohonan /permohonan/detail?id=xxx dengan mode verifikasi.

Skenario 2.1.4: Terima atau Tolak Permohonan

Skenario ini menunjukkan workflow approval/rejection permohonan.

AktorOfficer & Sistem
RincianGiven officer berada di halaman detail permohonan dengan status MENUNGGU_DISETUJUI, When officer menekan tombol "Terima" untuk menyetujui atau "Tolak" untuk menolak, Then sistem menampilkan modal konfirmasi. If officer menekan tombol terima: sistem mengubah status menjadi DALAM_PROSES dan menampilkan dialog untuk memilih weekly priority. If officer menekan tolak: sistem meminta alasan penolakan dan mengubah status menjadi TIDAK_VALID.

Workflow Terima:

  1. Officer klik "Terima Permohonan"
  2. Modal konfirmasi ditampilkan
  3. Officer konfirmasi
  4. Status berubah ke DALAM_PROSES
  5. Dialog weekly priority ditampilkan
  6. Nomor permohonan otomatis di-generate

Workflow Tolak:

  1. Officer klik "Tolak Permohonan"
  2. Modal konfirmasi dengan field "Alasan Penolakan" ditampilkan
  3. Officer isi alasan dan konfirmasi
  4. Status berubah ke TIDAK_VALID
  5. Keterangan penolakan disimpan
  6. Notifikasi dikirim ke pemohon

Skenario 2.2.1: Lihat Daftar Permohonan Umum

Skenario ini menampilkan daftar permohonan yang aktif (bukan pending, VIP, terlambat, atau arsip).

AktorOfficer & Sistem
RincianGiven officer telah login dan memiliki izin akses PERMOHONAN, When officer membuka menu permohonan umum /permohonan#general, Then sistem menampilkan daftar permohonan dengan status aktif (selain yang tertunda, VIP, terlambat, atau arsip). Daftar ini menampilkan: nomor permohonan, layanan, pemohon, status, tenggat waktu, dan active task.

Filter & Search untuk General List:

  • Search by nomor, nama pemohon, nama layanan
  • Filter by status (DALAM_PROSES, SELESAI, DIBATALKAN)
  • Filter by tanggal pembuatan
  • Pagination dan sorting

Skenario 2.3.1: Lihat Daftar Prioritas Mingguan

Skenario ini menampilkan daftar weekly priority dengan order yang tergabung di dalamnya.

AktorOfficer & Sistem
RincianGiven officer telah login dan memiliki izin akses PERMOHONAN, When officer membuka menu prioritas mingguan /permohonan#weekly-priorities, Then sistem menampilkan daftar permohonan yang termasuk dalam prioritas mingguan saat ini atau minggu yang dipilih. Tampilan menggunakan 2 panel: panel kiri menampilkan daftar prioritas, panel kanan menampilkan orders dalam prioritas yang dipilih.

Layout Weekly Priorities:

  • Panel Kiri: Daftar minggu dengan status (current/past/future), tanggal range, jumlah orders
  • Panel Kanan: Daftar orders dengan status, active task, remaining time
  • Action: Buat prioritas baru, edit, hapus

Skenario 2.3.2: Menambahkan Daftar Prioritas Baru

AktorOfficer & Sistem
RincianGiven officer telah login dan memiliki izin akses PERMOHONAN, When officer menekan tombol "Tambah Prioritas" dan mengisi form prioritas baru (tanggal mulai Senin, tanggal selesai Jumat), Then sistem menyimpan prioritas baru dan menambahkannya ke daftar prioritas mingguan. Minggu baru akan ditampilkan di panel kiri.

Skenario 2.3.3: Menambahkan Permohonan Aktif ke Daftar Prioritas

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar permohonan aktif (general list atau daftar lain), When officer memilih satu atau beberapa permohonan dan menekan tombol "Tambahkan ke Prioritas Mingguan", Then sistem menampilkan dialog untuk memilih prioritas mingguan, kemudian menambahkan permohonan tersebut ke prioritas yang dipilih.

Skenario 2.3.4: Memindahkan Permohonan ke Prioritas Lain

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar prioritas mingguan, When officer memindahkan permohonan dari satu prioritas ke prioritas lain (misalnya dengan drag and drop atau menu context), Then sistem memperbarui urutan prioritas permohonan tersebut dan menampilkan update secara real-time.

Skenario 2.3.5: Menghapus Permohonan dari Prioritas Mingguan

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar prioritas mingguan, When officer menekan tombol hapus pada salah satu permohonan dalam prioritas, Then sistem menampilkan konfirmasi penghapusan. Setelah dikonfirmasi, permohonan dihapus dari prioritas mingguan (tetapi permohonan tetap ada di daftar general).

Skenario 2.4.2: Menambahkan Permohonan Aktif ke Daftar VIP

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar permohonan aktif, When officer memilih satu atau beberapa permohonan dan menekan tombol "Tambahkan ke VIP", Then sistem menandai permohonan tersebut dengan flag isVIP=true dan menampilkan konfirmasi. Permohonan akan muncul di daftar VIP /permohonan#vip.

Skenario 2.4.3: Menghapus Permohonan dari Daftar VIP

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar VIP /permohonan#vip, When officer menekan tombol hapus pada salah satu permohonan dalam daftar VIP, Then sistem menampilkan konfirmasi penghapusan. Setelah dikonfirmasi, flag isVIP diubah menjadi false dan permohonan berpindah ke daftar general.

Skenario 2.5.2: Mengarsipkan Permohonan Terlambat

Scenario detail untuk archiving dengan konfirmasi multi-select.

AktorOfficer & Sistem
RincianGiven officer sedang melihat daftar permohonan terlambat /permohonan#overdue, When officer memilih satu atau beberapa permohonan untuk diarsipkan, And officer menekan tombol "Arsipkan", Then sistem menampilkan modal konfirmasi dengan preview card layout dari permohonan yang akan diarsipkan. Setelah dikonfirmasi, status berubah menjadi SELESAI dan isArchived=true, archived_at diisi dengan timestamp saat ini.

Skenario 3.1.1: Navigasi ke Formulir Permohonan Baru

AktorOfficer & Sistem
RincianGiven officer telah login dan memiliki izin akses PERMOHONAN, When officer menekan tombol "Permohonan Baru" atau "Buat Permohonan" di halaman permohonan, Then sistem menavigasi ke formulir permohonan baru di /permohonan/create dengan stepper indicator.

Skenario 3.2.1: Submenu Pelayanan

Skenario ini menampilkan langkah pertama dalam proses pembuatan permohonan.

AktorOfficer & Sistem
RincianGiven officer berada di formulir permohonan baru di submenu pelayanan, When sistem menginisiasi komponen (onMounted), Then sistem memuat daftar pelayanan yang memiliki atribut isPublic=true dari backend dan menampilkannya dalam list dengan kolom pencarian. Pelayanan diurutkan berdasarkan nama atau kategori.

Fitur Submenu Pelayanan:

  • List semua pelayanan publik (isPublic=true)
  • Search box untuk mencari nama pelayanan
  • Filter by kategori (NOTARIS/PPAT)
  • Menampilkan: nama, kategori, deskripsi singkat
  • Loading state saat fetch data

Skenario 3.2.1.1: Mencari Pelayanan

AktorOfficer & Sistem
RincianGiven officer berada pada submenu pelayanan dan memiliki izin akses PERMOHONAN, When officer mengetik nama pelayanan pada kolom pencarian, Then sistem menampilkan daftar pelayanan yang namanya sesuai dengan yang diketik officer secara real-time (dengan debounce untuk performa).

Skenario 3.2.1.2: Memilih Pelayanan

Skenario ini menunjukkan apa yang terjadi saat officer memilih layanan.

AktorOfficer & Sistem
RincianGiven officer berada di submenu pelayanan dan memiliki izin akses PERMOHONAN, When officer menekan salah satu pelayanan, Then sistem akan: (1) Update state halaman dengan pelayanan yang dipilih, (2) Secara otomatis melengkapi tenggat waktu permohonan berdasarkan default durasi layanan, (3) Load daftar tugas (tugasLayanan) yang default untuk layanan tersebut, (4) Load daftar syarat berkas (syaratBerkas) yang diperlukan, (5) Load daftar biaya default (biayaLayanan), (6) Pindah ke submenu berikutnya atau tampilkan preview di pane kanan.

Skenario 3.3: Submenu Data Umum

AktorOfficer & Sistem
RincianGiven officer telah memilih pelayanan dan memiliki izin akses PERMOHONAN, When officer membuka submenu data umum, Then sistem menampilkan form untuk mengisi data umum permohonan. Fields yang ditampilkan: pemohon (pilih dari daftar identitas atau input baru), petugas yang ditugaskan, alasan hak, bentuk hukum, tenggat waktu (pre-filled dari layanan), dan keterangan tambahan.

Skenario 3.3.1: Mengisi Data Umum Permohonan

AktorOfficer & Sistem
RincianGiven officer berada di submenu data umum, When officer mengisi semua field yang diperlukan dalam data umum (pemohon, petugas, alasan hak, bentuk hukum), Then sistem menyimpan data umum ke state aplikasi dan memvalidasi kelengkapan data. Jika ada field yang kosong/invalid, tampilkan error message. Jika valid, enable tombol "Lanjut" untuk pindah ke submenu berikutnya.

Skenario 3.4: Submenu Objek Pajak

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan submenu data umum, When officer membuka submenu objek pajak, Then sistem menampilkan form untuk menambahkan detail objek pajak yang terkait dengan permohonan. Fields: lokasi objek, luas tanah, luas bangunan, harga, NJOP, NOP, tanggal SSP, tanggal SSB. Form ini optional (jika layanan memerlukan).

Skenario 3.4.1: Menambahkan Detail Objek Pajak

AktorOfficer & Sistem
RincianGiven officer berada di submenu objek pajak, When officer mengisi informasi detail objek pajak seperti lokasi, nilai, dan karakteristik objek, Then sistem menyimpan data objek pajak ke state dan memvalidasi kelengkapan informasi (validasi numeric untuk luas dan harga, validasi format untuk NOP/NJOP). Jika valid, enable tombol "Lanjut".

Skenario 3.5: Submenu Pihak-Pihak

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan submenu objek pajak, When officer membuka submenu pihak-pihak, Then sistem menampilkan form untuk melengkapi data pemohon (sudah pre-filled dari data umum), pihak pertama, pihak kedua, dan pihak-pihak lainnya jika diperlukan. Masing-masing pihak bisa dipilih dari daftar identitas yang ada atau input identitas baru.

Skenario 3.5.1: Melengkapi Data Pemohon

AktorOfficer & Sistem
RincianGiven officer berada di submenu pihak-pihak, When officer memilih atau mengisi data pemohon dari daftar identitas yang tersedia, Then sistem menyimpan data pemohon (sudah ada dari data umum) dan menampilkan informasi pihak yang terpilih (nama, NIK, status verifikasi).

Skenario 3.5.2: Melengkapi Data Pihak Pertama dan Kedua

AktorOfficer & Sistem
RincianGiven officer telah melengkapi data pemohon, When officer mengisi data pihak pertama dan pihak kedua (jika diperlukan), Then sistem menyimpan data semua pihak yang terlibat dalam permohonan ke state aplikasi. Setiap pihak harus memiliki role yang jelas (PIHAK_PERTAMA, PIHAK_KEDUA, dll). Validasi memastikan pihak pertama dan kedua tidak boleh sama dengan pemohon.

Skenario 3.6: Submenu Tugas

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan submenu pihak-pihak, When officer membuka submenu tugas, Then sistem menampilkan daftar tugas yang diperlukan berdasarkan pelayanan yang dipilih di awal. Masing-masing tugas ditampilkan dengan checkbox untuk konfirmasi, dan field untuk menetapkan petugas pelaksana serta tenggat waktu tugas.

Skenario 3.6.1: Melengkapi Daftar Tugas

AktorOfficer & Sistem
RincianGiven officer berada di submenu tugas, When officer menetapkan petugas dan tenggat waktu untuk setiap tugas (atau gunakan default), Then sistem menyimpan penugasan ke state aplikasi dan memvalidasi kelengkapan penugasan (setiap tugas harus memiliki petugas yang ditugaskan). Jika ada tugas yang belum ditugaskan, tampilkan error. Jika valid, enable tombol "Lanjut".

Skenario 3.7: Submenu Tagihan

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan submenu tugas, When officer membuka submenu tagihan, Then sistem menampilkan rincian biaya permohonan dan tugas berdasarkan pelayanan yang dipilih. Tampilkan: daftar komponen biaya dengan nominal, total biaya, siklus tagihan, jangka waktu pembayaran, dan tenggat waktu pembayaran.

Skenario 3.7.1: Melengkapi Biaya Permohonan

AktorOfficer & Sistem
RincianGiven officer berada di submenu tagihan, When officer mengonfirmasi atau menyesuaikan biaya permohonan dan tugas (tambah/kurang/hapus komponen biaya), Then sistem menyimpan data tagihan ke state aplikasi dan menghitung total biaya secara otomatis. Validasi memastikan nominal tidak boleh negatif. Jika valid, enable tombol "Lanjut".

Skenario 3.8: Submenu Dokumen

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan submenu tagihan, When officer membuka submenu dokumen, Then sistem menampilkan daftar syarat berkas yang diperlukan berdasarkan pelayanan yang dipilih. Setiap syarat menampilkan: nama dokumen, deskripsi, apakah perlu scan, apakah perlu pernyataan, dan status (kosong/terisi/diverifikasi).

Skenario 3.8.1: Melengkapi Syarat Berkas

AktorOfficer & Sistem
RincianGiven officer berada di submenu dokumen, When officer mengunggah dokumen yang diperlukan sesuai dengan syarat berkas (atau mark sebagai terisi manual), Then sistem memvalidasi dan menyimpan dokumen, serta menandai kelengkapan persyaratan. Status berubah dari KOSONG menjadi TERISI. Jika semua syarat telah terpenuhi, sistem memungkinkan melanjutkan ke tahap berikutnya.

Skenario 3.9: Menyelesaikan Permohonan

Skenario akhir dari pembuatan permohonan.

AktorOfficer & Sistem
RincianGiven officer telah menyelesaikan semua submenu dan memiliki izin akses PERMOHONAN, When officer menekan tombol "Selesaikan Permohonan", Then sistem memvalidasi kelengkapan semua data dari semua submenu. If ada data yang tidak lengkap, tampilkan error message dan scroll ke submenu yang bermasalah. If semua data valid, sistem: (1) Menyimpan permohonan dengan status MENUNGGU_DISETUJUI, (2) Tidak generate nomor_permohonan (akan di-generate saat approval), (3) Mengirimkan permohonan ke antrian persetujuan, (4) Menampilkan success message, (5) Mengarahkan ke halaman baru untuk memilih weekly priority (opsional), (6) Redirect ke detail permohonan yang baru dibuat.

Skenario 4.2: Submenu Pelayanan

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Pelayanan", Then sistem menampilkan detail pelayanan yang dipilih untuk permohonan ini, termasuk: nama pelayanan, kategori, deskripsi, syarat berkas default, tugas default, dan biaya default. Submenu ini bersifat read-only kecuali dalam mode edit (jika permohonan masih dalam status MENUNGGU_DISETUJUI).

Skenario 4.3: Submenu Data Umum

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Data Umum", Then sistem menampilkan dan memungkinkan edit data umum permohonan (nomor permohonan, tanggal, pemohon, petugas, alasan hak, bentuk hukum, tenggat waktu, keterangan). Mode view/edit dapat di-toggle tergantung status permohonan dan izin officer.

Skenario 4.4: Submenu Objek Pajak

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Objek Pajak", Then sistem menampilkan detail objek pajak yang terkait dengan permohonan (jika ada). Menampilkan: lokasi, luas tanah, luas bangunan, harga, NJOP, NOP, tanggal SSP, tanggal SSB. Mode edit tersedia jika status memungkinkan.

Skenario 4.5: Submenu Pihak-Pihak

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Pihak-Pihak", Then sistem menampilkan data pemohon, pihak pertama, pihak kedua, dan pihak-pihak lainnya dengan role masing-masing. Menampilkan: nama, NIK, status verifikasi, dan role dalam permohonan.

Skenario 4.6: Submenu Tugas

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Tugas", Then sistem menampilkan daftar tugas dengan petugas, tenggat waktu, dan status masing-masing tugas. Tampilkan juga keterkaitan antar tugas (linked list dengan nextId). Mode edit memungkinkan perubahan petugas dan tenggat waktu (jika status permohonan masih aktif).

Skenario 4.7: Submenu Tagihan

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Tagihan", Then sistem menampilkan rincian biaya permohonan dan tugas dengan detail: komponen biaya, nominal, status pembayaran, tenggat waktu, dan total tagihan. Menampilkan juga history pembayaran jika ada.

Skenario 4.8: Submenu Dokumen

AktorOfficer & Sistem
RincianGiven officer telah membuka halaman detail permohonan, When officer membuka submenu "Dokumen", Then sistem menampilkan syarat berkas dan dokumen yang sudah diunggah. Menampilkan: nama dokumen, deskripsi, status (kosong/terisi/diverifikasi), link untuk download dokumen yang terisi, dan tombol untuk mengunggah dokumen baru atau update dokumen yang ada (jika mode edit aktif).

Detail Teknis & Perancangan

Abstraksi & Objek Inti

Modul ini berinteraksi dengan objek-objek inti berikut:

Rincian Abstraksi Modul Manajemen Permohonan

ObjekAnggotaTipe Data/Keterangan
Order (Permohonan)Properti:
idstring (ID unik permohonan)
nomor_permohonanint (Nomor urut permohonan)
pemohonIdstring (ID pemohon/applicant)
layananIdint (ID layanan yang diminta)
statusenum (MENUNGGU_DISETUJUI, TIDAK_VALID, DALAM_PROSES, SELESAI, DIBATALKAN)
ownerIdstring (ID kantor pemilik)
petugasIdstring (ID petugas yang ditugaskan)
weeklyPriorityIdstring (ID prioritas mingguan)
isVIPboolean (Penanda permohonan VIP)
isArchivedboolean (Penanda permohonan diarsipkan)
alasan_hakstring (Dasar penugasan)
bentukHukumstring (Bentuk hukum dokumen)
tenggat_waktudate (Deadline permohonan)
created_atdate (Tanggal pembuatan)
archived_atdate? (Tanggal pengarsipan)
Metode:
getActiveTask()Mendapatkan tugas aktif saat ini. Kembali: Task.
getRemainingTime()Menghitung sisa waktu hingga deadline. Kembali: duration.
getPassedTime()Menghitung waktu yang telah berlalu. Kembali: duration.
isOverdue()Mengecek apakah permohonan terlambat. Kembali: boolean.
updateStatus(newStatus: string)Mengubah status permohonan. Kembali: boolean.
assignToWeeklyPriority(priorityId: string)Menugaskan ke prioritas mingguan. Kembali: boolean.
markAsVIP()Menandai permohonan sebagai VIP. Kembali: boolean.
archive()Memindahkan permohonan ke arsip. Kembali: boolean.
restore()Mengembalikan permohonan dari arsip. Kembali: boolean.
PermohonanIdentitasProperti:
identitasIdstring (ID identitas)
permohonanIdstring (ID permohonan)
peranenum (PIHAK_PERTAMA, PIHAK_KEDUA, PIHAK_KETIGA, SAKSI)
Metode:
assignRole(role: string)Menentukan peran identitas dalam permohonan. Kembali: boolean.
removeFromOrder()Menghapus identitas dari permohonan. Kembali: boolean.
Task (Tugas)Properti:
idint (ID unik tugas)
namastring (Nama tugas)
permohonanIdstring (ID permohonan terkait)
statusTugasenum (BELUM_DIMULAI, SEDANG_DIKERJAKAN, SELESAI, DIBATALKAN)
pelaksanaIdstring (ID pelaksana tugas)
nextIdint? (ID tugas berikutnya dalam chain)
firstboolean (Apakah tugas pertama)
tenggat_waktudate? (Deadline tugas)
biayafloat? (Biaya terkait tugas)
Metode:
markAsDone()Menandai tugas sebagai selesai. Kembali: boolean.
assignTo(userId: string)Menugaskan ke user tertentu. Kembali: boolean.
getNextTask()Mendapatkan tugas berikutnya. Kembali: Task?.
isActive()Mengecek apakah tugas aktif (tugas sebelumnya selesai). Kembali: boolean.
WeeklyPriorityProperti:
idstring (ID unik prioritas mingguan)
startDatedate (Tanggal mulai - Senin)
endDatedate (Tanggal selesai - Jumat)
officeIdstring (ID kantor)
created_atdate (Tanggal pembuatan)
Metode:
create(startDate: date, endDate: date)Membuat prioritas mingguan baru. Kembali: WeeklyPriority.
addOrder(orderId: string)Menambahkan permohonan ke prioritas. Kembali: boolean.
removeOrder(orderId: string)Menghapus permohonan dari prioritas. Kembali: boolean.
getOrders()Mendapatkan semua permohonan dalam prioritas. Kembali: Order[].
Berkas (Registry)Properti:
idint (ID unik berkas)
namastring (Nama berkas)
keteranganstring (Deskripsi berkas)
statusenum (KOSONG, TERISI, DIVERIFIKASI)
JenisBerkasenum (MASUK, KELUAR)
permohonanIdstring (ID permohonan terkait)
scanboolean (Apakah perlu scan)
pernyataanboolean (Apakah perlu pernyataan)
authorIdstring (ID pembuat entry)
Metode:
create()Membuat entry berkas baru. Kembali: Berkas.
updateStatus(newStatus: string)Mengubah status berkas. Kembali: boolean.
delete()Menghapus entry berkas. Kembali: boolean.
ObjekPajakProperti:
idint (ID objek pajak)
permohonanIdstring (ID permohonan)
letakObjekstring (Lokasi objek)
luasTanahfloat (Luas tanah dalam m²)
luasBangunanfloat (Luas bangunan dalam m²)
hargafloat (Harga objek)
njopfloat (Nilai Jual Objek Pajak)
nopstring (Nomor Objek Pajak)
sspdate (Tanggal SSP)
ssbdate (Tanggal SSB)
Metode:
calculateTax()Menghitung pajak berdasarkan NJOP. Kembali: float.
update()Memperbarui informasi objek pajak. Kembali: boolean.

Diagram Kelas (Class Diagram)

Diagram ini menunjukkan struktur kelas inti dan relasinya dalam modul manajemen permohonan.


ERD (Entity-Relationship Diagram)

Diagram ini merepresentasikan struktur database untuk modul ini dan hubungannya dengan entitas lain.


Endpoint API

Modul ini menggunakan endpoint API berikut:

MethodEndpointDeskripsi
GET/office/admin/orderMendapatkan daftar permohonan dengan pagination dan filter
GET/office/admin/order/{id}Mendapatkan detail permohonan spesifik
POST/office/admin/orderMembuat permohonan baru
PATCH/office/admin/order/{id}/detailMemperbarui detail permohonan
PUT/office/admin/order/{id}/subjectMemperbarui daftar identitas/penghadap
PUT/office/admin/order/{id}/taskMemperbarui daftar tugas
PUT/office/admin/order/{id}/feeMemperbarui daftar biaya
POST/office/admin/order/{id}/registryMenambahkan berkas ke permohonan
DELETE/office/admin/order/{id}Menghapus permohonan dan data terkait
GET/office/admin/serviceMendapatkan daftar layanan
GET/office/admin/service/{id}Mendapatkan detail layanan
GET/office/admin/subjectMendapatkan daftar identitas
DELETE/office/admin/registry/{id}Menghapus berkas dari registry

Parameter Query untuk /office/admin/order:

  • page (number): Nomor halaman
  • size (number): Jumlah item per halaman
  • sort (string): Field untuk sorting (e.g., tanggal)
  • direction (string): Arah sorting (asc, desc)
  • search (string): Term pencarian
  • by (string): Field untuk pencarian (nomor, nama, status)

Rencana Pengujian (Test Cases)

NamaVerifikasi Akses dengan Izin Valid
DeskripsiMemastikan bahwa pengguna dengan izin PERMOHONAN dapat mengakses halaman permohonan dan melihat daftar permohonan.
Langkah-langkah1. Login sebagai user dengan izin PERMOHONAN = true.
2. Akses /permohonan.
3. Verifikasi tampilan dashboard.
Hasil yang Diharapkan1. User berhasil mengakses halaman.
2. Dashboard menampilkan tab "Order List" dan "Weekly Priorities".
3. Tab default adalah "Order List".
4. Daftar permohonan ditampilkan dengan pagination.
NamaVerifikasi Akses Tanpa Izin
DeskripsiMemastikan bahwa pengguna tanpa izin PERMOHONAN tidak dapat mengakses halaman permohonan.
Langkah-langkah1. Login sebagai user dengan izin PERMOHONAN = false.
2. Akses /permohonan secara manual.
3. Cek sidebar menu.
Hasil yang Diharapkan1. User diarahkan ke halaman unauthorized.
2. Sidebar tidak menampilkan menu item /permohonan.
3. Pesan error ditampilkan.
NamaPembuatan Permohonan Baru Lengkap
DeskripsiMemastikan bahwa user dapat membuat permohonan baru dengan semua data yang diperlukan.
Langkah-langkah1. Akses /permohonan/create.
2. Pilih layanan "PERJANJIAN KAWIN".
3. Isi form untuk 7 tahapan (service, general, tax object, parties, tasks, bill, directories).
4. Submit permohonan.
Hasil yang Diharapkan1. Form stepper menampilkan 7 tahapan.
2. Data layanan terpilih memuat syarat berkas, tugas, dan biaya default.
3. Permohonan berhasil dibuat dengan status MENUNGGU_DISETUJUI.
4. User diarahkan ke halaman detail permohonan.
5. Nomor permohonan otomatis di-generate.
NamaVerifikasi Permohonan dan Assignment ke Weekly Priority
DeskripsiMemastikan bahwa ketika user memverifikasi permohonan dan mengubah status, sistem meminta assignment ke weekly priority.
Langkah-langkah1. Buka detail permohonan dengan status MENUNGGU_DISETUJUI.
2. Verifikasi data permohonan.
3. Ubah status menjadi DALAM_PROSES.
4. Sistem menampilkan dialog weekly priority.
Hasil yang Diharapkan1. Dialog weekly priority muncul.
2. Daftar weekly priority yang tersedia ditampilkan.
3. User memilih priority.
4. Status permohonan berubah menjadi DALAM_PROSES.
5. Permohonan ditambahkan ke weekly priority yang dipilih.
NamaUpdate Tugas dalam Permohonan
DeskripsiMemastikan bahwa user dapat menambahkan, mengubah, dan menghapus tugas dalam permohonan.
Langkah-langkah1. Buka detail permohonan.
2. Navigasi ke tab "Tugas".
3. Tambahkan tugas baru "Verifikasi Dokumen Tambahan".
4. Ubah nama tugas existing.
5. Hapus tugas yang tidak diperlukan.
6. Simpan perubahan.
Hasil yang Diharapkan1. Tugas baru berhasil ditambahkan.
2. Tugas existing berhasil diubah.
3. Tugas terhapus dari daftar.
4. API PUT /office/admin/order/{id}/task dipanggil.
5. Perubahan tersimpan dan ditampilkan.
NamaMenampilkan Active Task dalam Order List
DeskripsiMemastikan bahwa sistem menampilkan active task dengan benar berdasarkan linked list tugas.
Langkah-langkah1. Buat permohonan dengan 3 tugas (A → B → C).
2. Tandai tugas A sebagai selesai.
3. Akses order list.
4. Periksa active task yang ditampilkan.
Hasil yang Diharapkan1. Tugas A memiliki status SELESAI.
2. Active task yang ditampilkan adalah tugas B.
3. Tugas B memiliki statusTugas = BELUM_DIMULAI.
4. Remaining time dan passed time ditampilkan dengan akurat.
NamaFilter dan Search Permohonan
DeskripsiMemastikan bahwa fitur filter dan search bekerja dengan benar untuk semua parameter.
Langkah-langkah1. Akses /permohonan.
2. Search by nomor: "818".
3. Filter by status: "DALAM_PROSES".
4. Filter by nama: "WAGINEM".
5. Ubah sort direction menjadi asc.
Hasil yang Diharapkan1. Search by nomor menampilkan permohonan dengan nomor 818.
2. Filter status menampilkan hanya permohonan DALAM_PROSES.
3. Filter nama menampilkan permohonan terkait "WAGINEM".
4. Urutan permohonan berubah sesuai direction.
5. Pagination tetap berfungsi dengan filter aktif.
NamaMengelola Weekly Priority
DeskripsiMemastikan bahwa user dapat membuat, menambahkan order, dan menghapus order dari weekly priority.
Langkah-langkah1. Akses /permohonan#weekly.
2. Buat weekly priority baru dengan range minggu depan.
3. Tambahkan 3 permohonan ke priority.
4. Hapus 1 permohonan dari priority.
5. Pindahkan 1 permohonan ke priority lain.
Hasil yang Diharapkan1. Weekly priority baru terbuat dengan date range Senin-Jumat.
2. 3 permohonan berhasil ditambahkan.
3. 1 permohonan terhapus dari priority.
4. Permohonan yang dipindahkan muncul di priority baru.
5. History priority ditampilkan di panel kiri.
NamaDelete Permohonan dengan Data Terkait
DeskripsiMemastikan bahwa penghapusan permohonan juga menghapus data terkait (tagihan dan berkas) jika diminta.
Langkah-langkah1. Buat permohonan lengkap dengan tagihan dan berkas.
2. Delete permohonan dengan parameter tagihan=true&berkas=true.
3. Verifikasi penghapusan.
Hasil yang Diharapkan1. Permohonan terhapus dari database.
2. Tagihan terkait terhapus.
3. Semua berkas terkait terhapus.
4. Response API menampilkan "Permohonan berhasil dihapus beserta data terkait".
5. Permohonan tidak muncul lagi di order list.
NamaMenambahkan Permohonan Existing ke Daftar VIP
DeskripsiMemastikan bahwa user dapat menambahkan permohonan existing ke daftar VIP.
Langkah-langkah1. Akses /permohonan#vip.
2. Klik "Tambahkan Permohonan".
3. Pilih "Pilih Permohonan".
4. Tabel diganti dengan regular order list.
5. Pilih 2 permohonan dari daftar.
6. Klik continue/confirm.
7. Verifikasi modal preview dengan card layout.
Hasil yang Diharapkan1. Tabel VIP diganti dengan regular order table.
2. User dapat memilih multiple orders.
3. Modal menampilkan 2 permohonan dalam card layout.
4. Setelah konfirmasi, orders ditandai dengan isVIP=true.
5. Orders muncul di daftar VIP.
6. Order list regular tidak lagi menampilkan orders tersebut di VIP section.
NamaMembuat Permohonan Baru sebagai VIP
DeskripsiMemastikan bahwa user dapat membuat permohonan baru langsung sebagai VIP.
Langkah-langkah1. Akses /permohonan#vip.
2. Klik "Tambahkan Permohonan".
3. Pilih "Permohonan Baru".
4. Sistem redirect ke /permohonan/create?vip=true.
5. Isi form lengkap dan submit.
Hasil yang Diharapkan1. User diarahkan ke form creation dengan query parameter vip=true.
2. Form menampilkan indikator VIP.
3. Permohonan berhasil dibuat dengan isVIP=true.
4. Permohonan langsung muncul di /permohonan#vip.
5. Nomor permohonan otomatis di-generate.
NamaNavigasi dan Filter Permohonan Overdue
DeskripsiMemastikan bahwa sistem menampilkan daftar permohonan yang terlambat dengan benar.
Langkah-langkah1. Buat 3 permohonan dengan deadline yang sudah terlewat.
2. Akses /permohonan#overdue.
3. Verifikasi daftar overdue.
4. Filter by status "DALAM_PROSES".
5. Search by nomor permohonan.
Hasil yang Diharapkan1. Sistem menampilkan 3 permohonan overdue.
2. Setiap item menampilkan berapa lama sudah terlambat.
3. Filter by status berfungsi dengan benar.
4. Search menampilkan permohonan yang dicari.
5. UI menyoroti/highlight permohonan overdue dengan warna berbeda.
NamaMemindahkan Multiple Overdue Orders ke Arsip
DeskripsiMemastikan bahwa user dapat memindahkan beberapa permohonan overdue ke arsip sekaligus.
Langkah-langkah1. Akses /permohonan#overdue.
2. Pilih 3 permohonan overdue.
3. Klik action untuk mengarsipkan.
4. Sistem menampilkan modal preview dengan card layout.
5. Konfirmasi pengarsipan.
Hasil yang Diharapkan1. User dapat memilih multiple orders.
2. Modal menampilkan preview 3 orders dalam card layout.
3. Setelah konfirmasi, status orders berubah ke SELESAI.
4. Field isArchived diset ke true.
5. Field archived_at diisi dengan timestamp saat ini.
6. Orders tidak muncul lagi di /permohonan#overdue.
7. Orders muncul di /permohonan#archive.
NamaNavigasi dan Pencarian Arsip Permohonan
DeskripsiMemastikan bahwa user dapat melihat dan mencari permohonan yang sudah diarsipkan.
Langkah-langkah1. Pastikan ada permohonan yang sudah diarsipkan.
2. Akses /permohonan#archive.
3. Verifikasi tampilan arsip.
4. Search by nama "WAGINEM".
5. Search by nomor "818".
Hasil yang Diharapkan1. Sistem menampilkan daftar archived orders.
2. Semua orders memiliki status SELESAI.
3. Filter by status tidak tersedia (hanya nama dan nomor).
4. Search by nama menampilkan hasil yang relevan.
5. Search by nomor menampilkan permohonan spesifik.
6. UI menampilkan mode read-only untuk archived orders.
NamaRestore Permohonan dari Arsip
DeskripsiMemastikan bahwa user dapat mengembalikan permohonan dari arsip ke status aktif.
Langkah-langkah1. Akses /permohonan#archive.
2. Pilih 1 permohonan dari arsip.
3. Klik action "Restore".
4. Konfirmasi restore.
5. Verifikasi permohonan kembali ke order list.
Hasil yang Diharapkan1. User dapat memilih archived order.
2. Action "Restore" tersedia di UI.
3. Modal konfirmasi ditampilkan.
4. Setelah konfirmasi, isArchived diset ke false.
5. archived_at di-clear atau di-null.
6. Status dikembalikan ke status sebelum diarsipkan.
7. Order tidak muncul lagi di /permohonan#archive.
8. Order muncul kembali di order list sesuai statusnya.
NamaVIP Order dengan Remaining Time dan Estimasi
DeskripsiMemastikan bahwa daftar VIP menampilkan sisa waktu, estimasi, dan active task dengan akurat.
Langkah-langkah1. Buat 2 VIP orders dengan deadline berbeda.
2. Tandai beberapa tugas sebagai selesai.
3. Akses /permohonan#vip.
4. Verifikasi tampilan data.
Hasil yang Diharapkan1. Daftar VIP menampilkan 2 orders.
2. Remaining time dihitung dari tenggat_waktu - now().
3. Passed time dihitung dari now() - created_at.
4. Active task menampilkan tugas yang belum selesai dengan previous task selesai.
5. Status order ditampilkan dengan jelas.
6. UI menampilkan indikator VIP yang menonjol.