[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*.