From fde1ae4ae00275189d1c902b9fcdad3333beb4ee Mon Sep 17 00:00:00 2001 From: andri Date: Mon, 1 Dec 2025 10:22:47 +0000 Subject: [PATCH] Add DOKUMENTASI_FORM.md --- DOKUMENTASI_FORM.md | 173 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 DOKUMENTASI_FORM.md diff --git a/DOKUMENTASI_FORM.md b/DOKUMENTASI_FORM.md new file mode 100644 index 0000000..751e318 --- /dev/null +++ b/DOKUMENTASI_FORM.md @@ -0,0 +1,173 @@ +[cite\_start]Berdasarkan bedah dokumen **Surat Edaran (SE) Musrenbang RKPD 2027**[cite: 114], berikut adalah rancangan spesifikasi API (API Blueprint) untuk sistem **ORARIBET**. + +Rancangan ini difokuskan untuk mengakomodasi alur bisnis, validasi, dan struktur data yang diwajibkan dalam SE tersebut. Anda bisa memberikan *prompt* ini langsung ke AI Copilot untuk mulai *coding*. + +----- + +### **Spesifikasi API Service: Modul Perencanaan (Renja RT)** + +**Base URL:** `/api/v2/perencanaan` + +#### **1. Master Data & Aturan Bisnis** + +[cite\_start]Digunakan untuk mempopulate *dropdown* form dan validasi batasan anggaran sesuai Lampiran II SE[cite: 952]. + + * **Endpoint:** `GET /master/menu-kegiatan` + * **Description:** Mengambil daftar menu kegiatan (Wajib/Pilihan/Tematik) beserta pagu harga dan aturan. + * **Response Body:** + ```json + { + "success": true, + "data": [ + { + "id": 1, + "kategori": "PELAYANAN DASAR", + [cite_start]"sifat": "WAJIB", // [cite: 953] + "menu": "PARENTING", + "sub_menu": "Keluarga dengan anak usia 0-18 tahun", + "pagu_max": 200000, + "satuan_pagu": "per_keluarga_per_tahun", + [cite_start]"opd_pengampu": "DPMP4KB" // [cite: 953] + }, + { + "id": 2, + "kategori": "INFRASTRUKTUR LINGKUNGAN", + "sifat": "PILIHAN", + [cite_start]"menu": "RTLH", // [cite: 969] + "pagu_max": 17500000, + [cite_start]"syarat_dokumen": ["ktp", "kk", "surat_tanah", "foto_kondisi"] // [cite: 970] + } + ] + } + ``` + +#### **2. Modul Profiling RT (Basis Data)** + +[cite\_start]Sesuai Lampiran I, Profil RT wajib diisi sebelum Musrenbang[cite: 197]. Data ini sangat banyak, jadi dibagi per seksi. + + * **Endpoint:** `POST /profil-rt/update` + * **Description:** Menyimpan data profil (Perumahan, Individu, Aset, RTLH). + * **Request Body:** + ```json + { + "tahun_anggaran": 2027, + "kode_rt": "003", + "kode_rw": "006", + "kode_kelurahan": "REJOWINANGUN_SELATAN", + [cite_start]"data_perumahan": { // [cite: 238-272] + "status_lahan": { + "milik_sendiri": 10, + "sewa": 5 + }, + "sumber_air": { + "pdam": 12, + "sumur": 3 + }, + "sanitasi": { + "jamban_sendiri": 15, + "mc_umum": 0 + } + }, + [cite_start]"data_individu": { // [cite: 273-331] + "jumlah_penduduk": { + "laki_laki": 20, + "perempuan": 25 + }, + [cite_start]"disabilitas": { // [cite: 301] + "tuna_daksa": 1, + "tuna_netra": 0 + } + } + } + ``` + +#### **3. Modul Input Usulan (Renja RT)** + +[cite\_start]Ini adalah *core transaction* di mana RT menginput usulan kegiatan senilai Rp 50.000.000[cite: 146]. + + * **Endpoint:** `POST /renja/usulan` + * **Description:** Tambah usulan baru ke dalam keranjang Renja RT. + * **Request Body:** + ```json + { + "id_rt": "RT001", + "tahun": 2027, + [cite_start]"jenis_usulan": "UTAMA", // Enum: UTAMA, CADANGAN [cite: 219] + "kategori_id": 2, // Referensi ke Master Menu + [cite_start]"uraian_kegiatan": "Perbaikan Rumah Tidak Layak Huni Bpk. Fulan", // [cite: 409] + "volume": 1, + "satuan": "Unit", + "harga_satuan": 17500000, // Harus validasi cross-check dengan SSH + "total_biaya": 17500000, + [cite_start]"lokasi_koordinat": "-7.4728, 110.2198", // [cite: 409] + [cite_start]"rujukan_ssh": "Halaman 45, Item A.1", // [cite: 409] + "dokumen_pendukung": { + [cite_start]"surat_izin_lahan": "url_file.pdf", // Wajib jika di lahan pribadi [cite: 204] + [cite_start]"proposal": "url_file.pdf" // Wajib jika Tematik Baru [cite: 214] + } + } + ``` + +#### **4. Modul Validasi Pagu (Logic Checker)** + +Untuk memastikan total usulan tidak melebihi Rp 50 Juta sebelum submit. + + * **Endpoint:** `GET /renja/summary/{id_rt}` + * **Response Body:** + ```json + { + [cite_start]"total_alokasi": 50000000, // [cite: 146] + "total_terpakai": 48500000, + "sisa_anggaran": 1500000, + "status_valid": true, // False jika minus + "detail_per_kategori": { + "pelayanan_dasar": 20000000, + "tematik": 28500000 + }, + [cite_start]"usulan_cadangan_count": 2 // [cite: 219] + } + ``` + +#### **5. Modul Berita Acara (Output)** + +Untuk generate laporan PDF sesuai format lampiran. + + * **Endpoint:** `POST /dokumen/generate-ba` + * **Description:** Generate PDF Berita Acara Musrenbang RT. + * **Request Body:** + ```json + { + "id_transaksi_renja": "TRX-2027-RT001", + [cite_start]"tanggal_musrenbang": "2025-12-10", // [cite: 221] + [cite_start]"jumlah_peserta": 45, // Validasi min 2/3 warga [cite: 393] + "foto_dokumentasi": ["img1.jpg", "img2.jpg"], + "ttd_ketua_rt": "base64_signature", + "ttd_rw": "base64_signature", + [cite_start]"ttd_fasilitator": "base64_signature" // [cite: 410] + } + ``` + +#### **6. Modul Verifikasi (Kelurahan & Kecamatan)** + +Digunakan oleh Kelurahan/Kecamatan untuk *Approval* usulan. + + * **Endpoint:** `POST /verifikasi/approval` + * **Request Body:** + ```json + { + "id_usulan": 12345, + "level_verifikasi": "KELURAHAN", // Enum: KELURAHAN, KECAMATAN, KOTA + "status": "DITOLAK", // Enum: DISETUJUI, DITOLAK + [cite_start]"alasan_penolakan": "Tidak sesuai kriteria teknis RTLH", // Wajib jika ditolak [cite: 500] + [cite_start]"id_usulan_pengganti": 67890 // ID dari Usulan Cadangan jika ada swap [cite: 501] + } + ``` + +----- + +### **Instruksi untuk Copilot/Developer** + +1. [cite\_start]**Validasi Dokumen:** Pastikan pada endpoint `/renja/usulan`, jika kategori kegiatan adalah fisik di tanah bukan aset Pemkot, API wajib me-return error jika `surat_izin_lahan` null[cite: 204]. +2. [cite\_start]**Validasi Waktu:** Endpoint input Renja RT harus dikunci (read-only) setelah Minggu ke-2 Desember 2025[cite: 141]. +3. [cite\_start]**Logika Usulan Cadangan:** Saat verifikasi kelurahan (`/verifikasi/approval`), jika status `DITOLAK`, sistem harus menawarkan pop-up/opsi untuk mengambil data dari `jenis_usulan: CADANGAN`[cite: 501]. +4. **Integrasi Profil:** Data dari endpoint `/profil-rt/update` harus menjadi *baseline*. Misal: Jika di profil tercatat tidak ada RTLH, maka saat input usulan RTLH, berikan *warning* atau *blocker*. \ No newline at end of file