Tentu, ini adalah draf **Prompt/Instruksi Komprehensif** yang sudah saya susun ulang agar siap Anda berikan kepada Asisten AI (seperti GitHub Copilot, ChatGPT, atau Junior Developer). Instruksi ini dirancang dengan konteks bahwa aplikasi **"Ora Ribet"** sudah ada dan sudah terkoneksi ke API Teraskota, sehingga fokusnya adalah **menambahkan modul E-Musrenbang** sebagai fitur baru di dalamnya. Silakan copy-paste teks di bawah ini: *** ### Prompt Instruksi Development **Role:** Senior Fullstack Developer **Context:** Kita sudah memiliki aplikasi bernama **"Ora Ribet"** (Backend: [Sebutkan stack Anda, misal: Node.js/Laravel], DB: [MySQL/PostgreSQL]). Aplikasi ini saat ini berfungsi untuk pengajuan bantuan sosial dan sudah terintegrasi dengan **API Teraskota Magelang** (Read-Only) untuk validasi data penduduk. **Task:** Saya ingin menambahkan modul baru bernama **"E-Musrenbang RKPD 2027"** ke dalam aplikasi ini. Modul ini digunakan oleh Ketua RT untuk menginput usulan Rencana Kerja (Renja) RT. Tolong implementasikan fitur ini berdasarkan spesifikasi berikut: --- ### 1. Database Schema Update (New Tables) Karena API Teraskota bersifat *Read-Only*, kita perlu tabel lokal untuk menyimpan master kegiatan dan transaksi usulan RT. Tolong buatkan migration/SQL script untuk tabel berikut: **A. `master_katalog_kegiatan`** (Untuk menyimpan Menu Kegiatan sesuai Lampiran SE) * Columns: `id`, `kategori` (Dasar/Pemberdayaan/Infrastruktur), `menu_kegiatan`, `sub_menu`, `sifat` (WAJIB/PILIHAN), `pagu_biaya` (Decimal), `satuan` (ex: per orang/tahun), `syarat_umur_min` (Int), `syarat_umur_max` (Int), `is_active`. * *Note:* Tabel ini nanti akan kita seed dengan data dari Lampiran II SE. **B. `transaksi_profil_rt`** (Snapshot Data Kondisi RT) * Columns: `id`, `kode_wilayah_rt` (Relasi ke User/Wilayah), `jml_rumah_layak`, `jml_rtlh`, `jml_warga_miskin`, `tahun_anggaran`. **C. `transaksi_usulan_renja`** (Header Usulan) * Columns: `id`, `user_rt_id`, `katalog_id` (FK), `volume`, `total_biaya` (Computed: Volume * Pagu), `lokasi`, `status_lahan` (Pemda/Pribadi - Wajib untuk fisik), `file_izin_lahan` (Path), `status_verifikasi` (Draft/Submitted/Verified). **D. `transaksi_penerima_manfaat`** (Detail By Name By Address) * Columns: `id`, `usulan_id` (FK), `nik`, `nama`, `alamat`. --- ### 2. Business Logic & Validation Rules (Backend) Terapkan aturan validasi ketat berikut di sisi backend (API Endpoint baru): 1. [cite_start]**Budget Cap (Hard Limit):** Total biaya seluruh usulan (`SUM(total_biaya)`) per RT **tidak boleh melebihi Rp 50.000.000**[cite: 42]. Return error jika melebihi. 2. **Hybrid Validation (Internal + External API):** * Saat user menginput NIK penerima manfaat, sistem **WAJIB** memanggil API Teraskota Existing (`https://api.integrasvc.id/qv2k9`) untuk memvalidasi bahwa NIK tersebut benar-benar warga kelurahan setempat. * Jika API return `success: true`, simpan NIK & Nama ke tabel `transaksi_penerima_manfaat`. 3. **Validasi Umur Otomatis:** * Jika `master_katalog_kegiatan` memiliki `syarat_umur_min` (misal: Lansia >= 60 tahun), hitung umur dari NIK. Tolak jika tidak sesuai. 4. **Validasi Menu Wajib:** * User tidak bisa melakukan "Final Submit" jika belum memilih minimal satu kegiatan dengan sifat `WAJIB` (contoh: Operasional RT). --- ### 3. Workflow / User Flow Tolong buatkan alur API/Controller sebagai berikut: 1. **GET /renja/dashboard:** * Tampilkan data profil RT (ambil dari API Teraskota endpoint `pd32v` untuk data *real-time*, lalu simpan snapshot-nya ke tabel lokal `transaksi_profil_rt`). * Tampilkan sisa budget (Rp 50 Juta - Total Usulan tersimpan). 2. **GET /renja/katalog:** * List semua kegiatan dari tabel `master_katalog_kegiatan`. 3. **POST /renja/usulan:** * Input: `katalog_id`, `volume`, `list_nik_penerima` (Array). * Process: Validasi NIK ke API Teraskota -> Cek Budget -> Simpan ke DB. 4. **POST /renja/finalize:** * Mengubah status dari `DRAFT` ke `SUBMITTED`. * Trigger validasi kelengkapan dokumen (misal: surat izin lahan untuk kegiatan fisik). --- ### 4. Data Seeding (Initial Data) Tolong buatkan seeder untuk tabel `master_katalog_kegiatan` dengan contoh data berikut (Sample dari SE): 1. **Pelatihan Barista:** Pagu 3.600.000, Sifat: PILIHAN, Umur: 16-50. 2. **Pemberian Makanan Tambahan (PMT):** Pagu 15.000/orang, Sifat: WAJIB. 3. **Honor Ketua RT:** Pagu 4.800.000, Sifat: WAJIB. 4. **Rehab RTLH:** Pagu 17.500.000, Sifat: PILIHAN, Syarat: Upload Surat Izin Lahan. *** ### Tips Tambahan untuk Anda: Jika Anda menggunakan **Copilot** atau **ChatGPT** di code editor, setelah memasukkan prompt di atas, Anda bisa langsung meminta file spesifik, misalnya: > *"Buatkan file migration Laravel/Node.js untuk struktur database di atas."* > *"Buatkan function controller untuk validasi budget 50 juta."* Prompt ini sudah menjembatani kebutuhan teknis (Database/API) dengan kebutuhan regulasi (Surat Edaran) secara spesifik.