Add TambahanForm.md
This commit is contained in:
parent
44e2052eca
commit
609b9d9810
|
|
@ -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.
|
||||
Loading…
Reference in New Issue