From 609b9d9810f1ba715758cbbe55445c13d22c1dbd Mon Sep 17 00:00:00 2001 From: andri Date: Tue, 2 Dec 2025 15:11:24 +0000 Subject: [PATCH] Add TambahanForm.md --- TambahanForm.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 TambahanForm.md diff --git a/TambahanForm.md b/TambahanForm.md new file mode 100644 index 0000000..647bac1 --- /dev/null +++ b/TambahanForm.md @@ -0,0 +1,84 @@ +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. \ No newline at end of file