unipo-ui 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/index.mjs +53 -4
- package/dist/EditorBlok-CarZErBW.d.cts +155 -0
- package/dist/EditorBlok-CarZErBW.d.ts +155 -0
- package/dist/admisi-LKPO7LCR.js +11 -0
- package/dist/admisi-U6YYQGBB.cjs +20 -0
- package/dist/akademik-3DFVHKUD.cjs +20 -0
- package/dist/akademik-IXTTJMVD.js +11 -0
- package/dist/akses-AUPQD6YN.cjs +20 -0
- package/dist/akses-V5XIMBWT.js +11 -0
- package/dist/arsip-23P44PGP.cjs +20 -0
- package/dist/arsip-NZFZOTY7.js +11 -0
- package/dist/cbt-4N6COVIN.js +11 -0
- package/dist/cbt-GMQSR7TP.cjs +20 -0
- package/dist/chunk-3O5ELKBH.cjs +18 -0
- package/dist/chunk-3O5ELKBH.cjs.map +1 -0
- package/dist/chunk-BCHB7R6D.cjs +614 -0
- package/dist/chunk-BCHB7R6D.cjs.map +1 -0
- package/dist/chunk-BRARGLUX.js +462 -0
- package/dist/chunk-BRARGLUX.js.map +1 -0
- package/dist/chunk-CIVK5JDV.cjs +150 -0
- package/dist/chunk-CIVK5JDV.cjs.map +1 -0
- package/dist/{chunk-SJ4DJOMZ.js → chunk-DHQFANBE.js} +178 -1557
- package/dist/chunk-DHQFANBE.js.map +1 -0
- package/dist/chunk-JSUHAYQ4.js +15 -0
- package/dist/chunk-JSUHAYQ4.js.map +1 -0
- package/dist/chunk-LTADAXBH.cjs +510 -0
- package/dist/chunk-LTADAXBH.cjs.map +1 -0
- package/dist/chunk-NCRYPHOJ.cjs +2276 -0
- package/dist/chunk-NCRYPHOJ.cjs.map +1 -0
- package/dist/chunk-PC4G2C4M.js +1007 -0
- package/dist/chunk-PC4G2C4M.js.map +1 -0
- package/dist/chunk-PYMN25WD.js +2176 -0
- package/dist/chunk-PYMN25WD.js.map +1 -0
- package/dist/chunk-PYYLKWNZ.js +537 -0
- package/dist/chunk-PYYLKWNZ.js.map +1 -0
- package/dist/chunk-QHVQ6R55.cjs +1059 -0
- package/dist/chunk-QHVQ6R55.cjs.map +1 -0
- package/dist/chunk-TITKMSUS.cjs +2186 -0
- package/dist/chunk-TITKMSUS.cjs.map +1 -0
- package/dist/chunk-UA6AUXMY.js +122 -0
- package/dist/chunk-UA6AUXMY.js.map +1 -0
- package/dist/crm-C4XGSG6O.js +11 -0
- package/dist/crm-LTVCDNMK.cjs +20 -0
- package/dist/dasbor-OJLMSFTF.cjs +20 -0
- package/dist/dasbor-Y3UPFYFE.js +11 -0
- package/dist/editor.cjs +2050 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.d.cts +202 -0
- package/dist/editor.d.ts +202 -0
- package/dist/editor.js +1986 -0
- package/dist/editor.js.map +1 -0
- package/dist/edom-3GZUUB7H.cjs +20 -0
- package/dist/edom-K4Y2NV4K.js +11 -0
- package/dist/fakultas-DJRUVJBV.js +11 -0
- package/dist/fakultas-VVAQOPUX.cjs +20 -0
- package/dist/filter-D54KALbB.d.cts +436 -0
- package/dist/filter-D54KALbB.d.ts +436 -0
- package/dist/helpdesk-LV65LM5V.js +11 -0
- package/dist/helpdesk-S7GAHYXG.cjs +20 -0
- package/dist/humas-7BMMJ3WF.js +11 -0
- package/dist/humas-H56JFUW6.cjs +20 -0
- package/dist/ikon.cjs +125 -0
- package/dist/ikon.cjs.map +1 -0
- package/dist/ikon.d.cts +140 -0
- package/dist/ikon.d.ts +140 -0
- package/dist/ikon.js +6 -0
- package/dist/ikon.js.map +1 -0
- package/dist/iku-CJG75NAT.cjs +20 -0
- package/dist/iku-XFGUJ6CX.js +11 -0
- package/dist/index.cjs +601 -313
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +192 -2
- package/dist/index.d.ts +192 -2
- package/dist/index.js +128 -4
- package/dist/index.js.map +1 -1
- package/dist/induk-BGTGKRLL.js +11 -0
- package/dist/induk-DLYDMZAM.cjs +20 -0
- package/dist/integrasi-4VXNGA3V.cjs +20 -0
- package/dist/integrasi-IP3WWDO7.js +11 -0
- package/dist/kalender-NZH7F2LO.js +11 -0
- package/dist/kalender-SD7EUASC.cjs +20 -0
- package/dist/karier-BDPZONV6.cjs +20 -0
- package/dist/karier-VHUJKKD6.js +11 -0
- package/dist/katalog.cjs +1806 -0
- package/dist/katalog.cjs.map +1 -0
- package/dist/katalog.d.cts +650 -0
- package/dist/katalog.d.ts +650 -0
- package/dist/katalog.js +1721 -0
- package/dist/katalog.js.map +1 -0
- package/dist/kelulusan-3QCPPC3D.js +11 -0
- package/dist/kelulusan-X7DYJN6T.cjs +20 -0
- package/dist/kemahasiswaan-JNCMH3HR.js +11 -0
- package/dist/kemahasiswaan-MQYXEVKE.cjs +20 -0
- package/dist/kerjasama-KYHEBSLX.cjs +20 -0
- package/dist/kerjasama-QSZ5X4OB.js +11 -0
- package/dist/keu-6H5WH6A4.js +11 -0
- package/dist/keu-MIJRVMGW.cjs +20 -0
- package/dist/kurikulum-SRO7TJYI.cjs +20 -0
- package/dist/kurikulum-XT7PZJOK.js +11 -0
- package/dist/layanan-H25JKJKC.js +11 -0
- package/dist/layanan-XR75P7YX.cjs +20 -0
- package/dist/lms-2ZCH273D.cjs +20 -0
- package/dist/lms-MFXFO2AZ.js +11 -0
- package/dist/lppm-B7ECUONV.js +11 -0
- package/dist/lppm-QEQKZXCY.cjs +20 -0
- package/dist/master-GKTTAKLF.cjs +20 -0
- package/dist/master-ZG4SPPDU.js +11 -0
- package/dist/mbkm-737Q4WFQ.js +11 -0
- package/dist/mbkm-GMNFIFDS.cjs +20 -0
- package/dist/notifikasi-FMA26M4I.js +11 -0
- package/dist/notifikasi-QDCYIX7G.cjs +20 -0
- package/dist/pddikti-RJVYY2J4.cjs +20 -0
- package/dist/pddikti-VF2PXDKA.js +11 -0
- package/dist/{content-DaJPx5LX.d.cts → pemeliharaan-D5S-1lqW.d.ts} +38 -434
- package/dist/{content-DaJPx5LX.d.ts → pemeliharaan-Dr0HSxvZ.d.cts} +38 -434
- package/dist/perpustakaan-5RL33XG2.js +11 -0
- package/dist/perpustakaan-JXZW43MJ.cjs +20 -0
- package/dist/pilih-BEes_D3n.d.cts +205 -0
- package/dist/pilih-CEKqXMUS.d.ts +205 -0
- package/dist/pmb-EGTWW2ZH.cjs +20 -0
- package/dist/pmb-G7EAFJ3R.js +11 -0
- package/dist/portal-5LCG6IP3.cjs +20 -0
- package/dist/portal-NYR3OIU4.js +11 -0
- package/dist/portal-api-BJLO6AGI.js +11 -0
- package/dist/portal-api-Q6B3X6ZV.cjs +20 -0
- package/dist/profil-FA2WXZR5.js +11 -0
- package/dist/profil-J4DRC6LS.cjs +20 -0
- package/dist/referensi-HNYOJGNX.js +11 -0
- package/dist/referensi-VOT5BRCL.cjs +20 -0
- package/dist/registry.json +996 -4
- package/dist/repositori-4GHBDDQA.js +11 -0
- package/dist/repositori-JRDIIPDJ.cjs +20 -0
- package/dist/rpl-4RGI6RNL.js +11 -0
- package/dist/rpl-NBVCZHQF.cjs +20 -0
- package/dist/sarpras-TAF4M2NQ.js +11 -0
- package/dist/sarpras-TXNUAX4Y.cjs +20 -0
- package/dist/scss/components/_animasi.scss +280 -0
- package/dist/scss/components/_editor.scss +1093 -0
- package/dist/scss/components/_ikon.scss +339 -0
- package/dist/scss/components/_katalog.scss +662 -0
- package/dist/scss/components/_konten-blok.scss +413 -0
- package/dist/scss/components/_pilih-berkas.scss +156 -0
- package/dist/scss/components/_platform.scss +364 -0
- package/dist/scss/index.scss +7 -0
- package/dist/sdm-5YKAAV3T.js +11 -0
- package/dist/sdm-IN64PE3T.cjs +20 -0
- package/dist/siakad.cjs +1487 -3078
- package/dist/siakad.cjs.map +1 -1
- package/dist/siakad.d.cts +84 -196
- package/dist/siakad.d.ts +84 -196
- package/dist/siakad.js +473 -2307
- package/dist/siakad.js.map +1 -1
- package/dist/spmi-AXZ5B3EJ.cjs +20 -0
- package/dist/spmi-LMUM2XER.js +11 -0
- package/dist/tracer-UBUAIJEK.js +11 -0
- package/dist/tracer-WWVIA55Q.cjs +20 -0
- package/dist/ui-unipo.css +3505 -0
- package/dist/ui-unipo.min.css +1 -1
- package/package.json +35 -3
- package/src/components/animasi.tsx +186 -0
- package/src/components/modal.tsx +113 -0
- package/src/components/overlays.tsx +6 -1
- package/src/components/pemeliharaan.tsx +152 -0
- package/src/components/platform.tsx +94 -0
- package/src/editor/EditorBerita.tsx +297 -0
- package/src/editor/EditorBlok.tsx +367 -0
- package/src/editor/Kanvas.tsx +322 -0
- package/src/editor/Penyisip.tsx +185 -0
- package/src/editor/TeksSebaris.tsx +190 -0
- package/src/editor/blok/Media.tsx +132 -0
- package/src/editor/blok/Tata.tsx +115 -0
- package/src/editor/blok/Teks.tsx +182 -0
- package/src/editor/blok/index.tsx +212 -0
- package/src/editor/blok/props.ts +24 -0
- package/src/editor/index.ts +10 -0
- package/src/editor/konteks.tsx +58 -0
- package/src/editor/render.ts +232 -0
- package/src/editor/tipe.ts +225 -0
- package/src/ikon/ilustrasi.tsx +283 -0
- package/src/ikon/index.ts +7 -0
- package/src/ikon/kotak.tsx +30 -0
- package/src/ikon/unipo.tsx +326 -0
- package/src/index.ts +8 -0
- package/src/katalog/aturan.ts +515 -0
- package/src/katalog/data/id.ts +749 -0
- package/src/katalog/data/indeks.json +1 -0
- package/src/katalog/data/muat.ts +47 -0
- package/src/katalog/ikon.tsx +11 -0
- package/src/katalog/index.ts +13 -0
- package/src/katalog/isian.tsx +408 -0
- package/src/katalog/katalog.tsx +138 -0
- package/src/katalog/kelola.tsx +690 -0
- package/src/katalog/modul.tsx +336 -0
- package/src/katalog/tampil.tsx +147 -0
- package/src/katalog/tipe.ts +141 -0
- package/src/katalog/wizard.tsx +155 -0
- package/src/lib/platform.ts +91 -0
- package/src/siakad/index.ts +3 -0
- package/src/siakad/media-editor.ts +67 -0
- package/src/siakad/pemeliharaan.tsx +118 -0
- package/src/siakad/pilih-berkas.tsx +292 -0
- package/src/siakad/provider.tsx +2 -0
- package/dist/chunk-DEF5CA7C.cjs +0 -3648
- package/dist/chunk-DEF5CA7C.cjs.map +0 -1
- package/dist/chunk-SJ4DJOMZ.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
// src/katalog/data/modul/akademik.json
|
|
3
|
+
var key = "akademik";
|
|
4
|
+
var resources = [{ id: "/v1/akademik/batas/{jenis}", tag: "Akademik: Batas waktu input", title: "Batas waktu input", base: "/v1/akademik/batas/{jenis}", item: "/v1/akademik/batas/{jenis}/{id}", key: "id", actions: ["postAkademikBatasByJenisById", "postAkademikBatasByJenisByIdKunci"], children: [] }, { id: "/v1/akademik/jadwal", tag: "Akademik: Jadwal dan kelas", title: "Jadwal dan kelas", base: "/v1/akademik/jadwal", item: "/v1/akademik/jadwal/{idj}", key: "idj", create: "postAkademikJadwal", actions: ["postAkademikJadwalByIdj", "postAkademikJadwalByIdjTim"], children: [], extra: ["getAkademikJadwal"] }, { id: "/v1/akademik/kartu-identitas", tag: "Akademik: Dokumen dan laporan", title: "Dokumen dan laporan", base: "/v1/akademik/kartu-identitas", item: "/v1/akademik/kartu-identitas/{username}", key: "username", get: "getAkademikKartuIdentitasByUsername", actions: [], children: [] }, { id: "/v1/akademik/kelas", tag: "Akademik: Jadwal dan kelas", title: "Jadwal dan kelas", base: "/v1/akademik/kelas", item: "/v1/akademik/kelas/{idk}", key: "idk", create: "postAkademikKelas", actions: ["postAkademikKelasByIdk", "postAkademikKelasByIdkHapus"], children: [], extra: ["getAkademikKelas"] }, { id: "/v1/akademik/krs/persetujuan", tag: "Akademik: Persetujuan KRS", title: "Persetujuan KRS", base: "/v1/akademik/krs/persetujuan", item: "/v1/akademik/krs/persetujuan/{nim}", key: "nim", create: "postAkademikKrsPersetujuan", get: "getAkademikKrsPersetujuanByNim", actions: ["postAkademikKrsPersetujuanByNim", "postAkademikKrsPersetujuanByNimHapusMk", "postAkademikKrsPersetujuanByNimPesan"], children: [], extra: ["getAkademikKrsPersetujuan"] }, { id: "/v1/akademik/nilai/kelas", tag: "Akademik: Nilai", title: "Nilai", base: "/v1/akademik/nilai/kelas", item: "/v1/akademik/nilai/kelas/{idj}", key: "idj", get: "getAkademikNilaiKelasByIdj", actions: ["postAkademikNilaiKelasByIdj", "postAkademikNilaiKelasByIdjUmumkan"], children: [], extra: ["getAkademikNilaiKelas"] }, { id: "/v1/akademik/pengajuan", tag: "Akademik: Pengajuan status", title: "Pengajuan status akademik", base: "/v1/akademik/pengajuan", item: "/v1/akademik/pengajuan/{id}", key: "id", list: "getAkademikPengajuan", create: "postAkademikPengajuan", get: "getAkademikPengajuanById", update: "putAkademikPengajuanById", del: "deleteAkademikPengajuanById", actions: ["postAkademikPengajuanByIdSetujui", "postAkademikPengajuanByIdTolak", "postAkademikPengajuanByIdBatalkan"], children: ["/v1/akademik/pengajuan/{id}/berkas"] }, { id: "/v1/akademik/pengajuan/{id}/berkas", tag: "Akademik: Pengajuan status", title: "Pengajuan status akademik", base: "/v1/akademik/pengajuan/{id}/berkas", item: "/v1/akademik/pengajuan/{id}/berkas/{uuid}", key: "uuid", list: "getAkademikPengajuanByIdBerkas", create: "postAkademikPengajuanByIdBerkas", get: "getAkademikPengajuanByIdBerkasByUuid", del: "deleteAkademikPengajuanByIdBerkasByUuid", actions: [], children: [], parent: "/v1/akademik/pengajuan" }, { id: "/v1/akademik/presensi/kelas", tag: "Akademik: Presensi dan jurnal", title: "Presensi dan jurnal", base: "/v1/akademik/presensi/kelas", item: "/v1/akademik/presensi/kelas/{idj}", key: "idj", get: "getAkademikPresensiKelasByIdj", actions: ["postAkademikPresensiKelasByIdj", "getAkademikPresensiKelasByIdjKartuAbsensi"], children: ["/v1/akademik/presensi/kelas/{idj}/mahasiswa", "/v1/akademik/presensi/kelas/{idj}/pertemuan"] }, { id: "/v1/akademik/presensi/kelas/{idj}/mahasiswa", tag: "Akademik: Presensi dan jurnal", title: "Presensi dan jurnal", base: "/v1/akademik/presensi/kelas/{idj}/mahasiswa", item: "/v1/akademik/presensi/kelas/{idj}/mahasiswa/{id}", key: "id", actions: ["postAkademikPresensiKelasByIdjMahasiswaById"], children: [], parent: "/v1/akademik/presensi/kelas" }, { id: "/v1/akademik/presensi/kelas/{idj}/pertemuan", tag: "Akademik: Presensi dan jurnal", title: "Presensi dan jurnal", base: "/v1/akademik/presensi/kelas/{idj}/pertemuan", item: "/v1/akademik/presensi/kelas/{idj}/pertemuan/{id}", key: "id", get: "getAkademikPresensiKelasByIdjPertemuanById", actions: ["postAkademikPresensiKelasByIdjPertemuanById", "postAkademikPresensiKelasByIdjPertemuanByIdHapus"], children: [], parent: "/v1/akademik/presensi/kelas" }, { id: "/v1/dosen", tag: "Dosen", title: "Dosen", base: "/v1/dosen", item: "/v1/dosen/{nidn}", key: "nidn", list: "getDosen", get: "getDosenByNidn", actions: [], children: ["/v1/dosen/{nidn}/jadwal", "/v1/dosen/{nidn}/mahasiswa-bimbingan"] }, { id: "/v1/dosen/{nidn}/jadwal", tag: "Jadwal", title: "Jadwal mengajar dosen", base: "/v1/dosen/{nidn}/jadwal", list: "getDosenByNidnJadwal", actions: [], children: [], parent: "/v1/dosen" }, { id: "/v1/dosen/{nidn}/mahasiswa-bimbingan", tag: "Dosen", title: "Mahasiswa bimbingan akademik", base: "/v1/dosen/{nidn}/mahasiswa-bimbingan", list: "getDosenByNidnMahasiswaBimbingan", actions: [], children: [], parent: "/v1/dosen" }, { id: "/v1/jadwal", tag: "Jadwal", title: "Jadwal kuliah", base: "/v1/jadwal", item: "/v1/jadwal/{idj}", key: "idj", list: "getJadwal", get: "getJadwalByIdj", actions: ["getJadwalByIdjPeserta", "getJadwalByIdjPresensi"], children: [] }, { id: "/v1/jadwal-ujian", tag: "Jadwal", title: "Jadwal ujian", base: "/v1/jadwal-ujian", list: "getJadwalUjian", actions: [], children: [] }, { id: "/v1/keuangan/biaya", tag: "Keuangan", title: "Master biaya per prodi dan periode", base: "/v1/keuangan/biaya", list: "getKeuanganBiaya", actions: [], children: [] }, { id: "/v1/keuangan/pembayaran", tag: "Keuangan", title: "Transaksi pembayaran", base: "/v1/keuangan/pembayaran", list: "getKeuanganPembayaran", actions: [], children: [] }, { id: "/v1/kurikulum", tag: "Akademik", title: "Ringkasan kurikulum per prodi", base: "/v1/kurikulum", list: "getKurikulum", actions: [], children: [] }, { id: "/v1/lulusan", tag: "Lulusan", title: "Lulusan dan mahasiswa keluar", base: "/v1/lulusan", list: "getLulusan", actions: [], children: [] }, { id: "/v1/mahasiswa", tag: "Mahasiswa", title: "Mahasiswa", base: "/v1/mahasiswa", item: "/v1/mahasiswa/{nim}", key: "nim", list: "getMahasiswa", get: "getMahasiswaByNim", actions: ["getMahasiswaByNimStatusSemester", "getMahasiswaByNimKrs", "postMahasiswaByNimKrs", "getMahasiswaByNimKhs", "getMahasiswaByNimTranskrip", "getMahasiswaByNimJadwal", "getMahasiswaByNimPresensi", "getMahasiswaByNimKeuangan", "getMahasiswaByNimKelulusan"], children: ["/v1/mahasiswa/{nim}/krs/pesan", "/v1/mahasiswa/{nim}/tugas-akhir"] }, { id: "/v1/mahasiswa/{nim}/krs/pesan", tag: "KRS", title: "Pesan konsultasi KRS dengan dosen PA", base: "/v1/mahasiswa/{nim}/krs/pesan", list: "getMahasiswaByNimKrsPesan", create: "postMahasiswaByNimKrsPesan", actions: [], children: [], parent: "/v1/mahasiswa" }, { id: "/v1/mahasiswa/{nim}/tugas-akhir", tag: "Lulusan", title: "Tugas akhir/skripsi", base: "/v1/mahasiswa/{nim}/tugas-akhir", list: "getMahasiswaByNimTugasAkhir", actions: [], children: [], parent: "/v1/mahasiswa" }, { id: "/v1/mata-kuliah", tag: "Akademik", title: "Mata kuliah", base: "/v1/mata-kuliah", list: "getMataKuliah", actions: [], children: [] }, { id: "/v1/wisuda", tag: "Lulusan", title: "Periode wisuda", base: "/v1/wisuda", list: "getWisuda", actions: [], children: [] }];
|
|
5
|
+
var ops = { getMahasiswa: { id: "getMahasiswa", m: "GET", path: "/v1/mahasiswa", tag: "Mahasiswa", sum: "Cari mahasiswa", ds: "Token dosen otomatis dibatasi ke mahasiswa bimbingannya; token mahasiswa tidak boleh memakai endpoint ini.", sc: ["mahasiswa:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "angkatan", in: "query", s: { t: "string", ex: "2024" }, ds: "Tahun masuk (4 digit)" }, { nm: "semester_masuk", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261" }, ds: "Periode masuk" }, { nm: "status", in: "query", s: { t: "string", ex: "A" }, ds: "Kode status aktif (A, C, N, L, D, K, ...)" }, { nm: "nidn_pa", in: "query", s: { t: "string" }, ds: "NIDN dosen pembimbing akademik" }, { nm: "kelas", in: "query", s: { t: "string" }, ds: "Kode kelas" }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari NIM (awalan) atau nama" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "MahasiswaRingkas" }, getMahasiswaByNim: { id: "getMahasiswaByNim", m: "GET", path: "/v1/mahasiswa/{nim}", tag: "Mahasiswa", sum: "Profil mahasiswa", ds: "Objek `pribadi` (NIK, tanggal lahir, alamat, kontak) hanya ada bila token punya scope `mahasiswa:pii`.", sc: ["mahasiswa:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Mahasiswa" }, getMahasiswaByNimStatusSemester: { id: "getMahasiswaByNimStatusSemester", m: "GET", path: "/v1/mahasiswa/{nim}/status-semester", tag: "Mahasiswa", sum: "Riwayat status per semester dan cuti", ds: "Status: A aktif, N non-aktif, C cuti (t_mahasiswa_status).", sc: ["mahasiswa:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getMahasiswaByNimKrs: { id: "getMahasiswaByNimKrs", m: "GET", path: "/v1/mahasiswa/{nim}/krs", tag: "KRS", sum: "KRS mahasiswa", ds: "Default periode aktif. `tahun_id=semua` untuk semua periode. `status_krs` T = disetujui.", sc: ["krs:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: 'Periode, atau "semua"' }], r: "object", it: "Krs" }, postMahasiswaByNimKrs: { id: "postMahasiswaByNimKrs", m: "POST", path: "/v1/mahasiswa/{nim}/krs", tag: "KRS", sum: "Ambil (simpan) KRS", ds: "Hanya token pengguna mahasiswa itu sendiri, pada periode aktif. Kirim `id` mata kuliah dan `idj` kelas dari\n`/krs/penawaran`. Server menghitung ulang batas SKS dan menolak mata kuliah/kelas yang tidak ditawarkan,\nbelum memenuhi prasyarat, atau penuh. Penyimpanan memakai logika yang sama dengan halaman web.", sc: ["krs:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], b: { ct: "application/json", ref: "KrsAmbilRequest", s: { t: "object", pr: { mata_kuliah: { t: "array", i: { t: "object", pr: { id: { t: "integer" }, idj: { t: "integer" } }, rq: ["id"] } } }, rq: ["mata_kuliah"] }, rq: 1 }, r: "object", it: "KrsAmbilResponse" }, getMahasiswaByNimKrsPenawaran: { id: "getMahasiswaByNimKrsPenawaran", m: "GET", path: "/v1/mahasiswa/{nim}/krs/penawaran", tag: "KRS", sum: "Mata kuliah yang bisa diambil (form Ambil KRS)", ds: "Hanya token pengguna mahasiswa itu sendiri. Menjalankan pemeriksaan yang sama dengan halaman Ambil KRS:\nstatus aktif, kelas, persetujuan PA, masa KRS, administrasi/pembayaran, cuti, batas SKS, dan prasyarat.\nBila `boleh_ambil` false, `alasan` dan `pesan` menjelaskan sebabnya.", sc: ["krs:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "KrsPenawaran" }, getMahasiswaByNimKrsPesan: { id: "getMahasiswaByNimKrsPesan", m: "GET", path: "/v1/mahasiswa/{nim}/krs/pesan", tag: "KRS", sum: "Pesan konsultasi KRS dengan dosen PA", sc: ["krs:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }], r: "list", it: "Objek" }, postMahasiswaByNimKrsPesan: { id: "postMahasiswaByNimKrsPesan", m: "POST", path: "/v1/mahasiswa/{nim}/krs/pesan", tag: "KRS", sum: "Kirim pesan konsultasi KRS", ds: "Hanya bila fitur konsultasi PA aktif untuk periode/prodi mahasiswa.", sc: ["krs:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], b: { ct: "application/json", ref: "PesanRequest", s: { t: "object", pr: { pesan: { t: "string", max: 2e3 } }, rq: ["pesan"] }, rq: 1 }, r: "object" }, getMahasiswaByNimKhs: { id: "getMahasiswaByNimKhs", m: "GET", path: "/v1/mahasiswa/{nim}/khs", tag: "Nilai", sum: "KHS dan IPS/IPK", ds: "Dengan `tahun_id`: KHS satu periode. Tanpa `tahun_id`: semua periode. Nilai, IPS, dan IPK dihitung dengan fungsi\nyang sama dengan halaman KHS (nilai yang belum divalidasi tidak ditampilkan: `nilai_ditampilkan` false).", sc: ["nilai:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }], r: "object", it: "Khs" }, getMahasiswaByNimTranskrip: { id: "getMahasiswaByNimTranskrip", m: "GET", path: "/v1/mahasiswa/{nim}/transkrip", tag: "Nilai", sum: "Transkrip (nilai terbaik per mata kuliah) dan IPK", ds: "Sama dengan halaman transkrip sementara.", sc: ["nilai:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Transkrip" }, getMahasiswaByNimJadwal: { id: "getMahasiswaByNimJadwal", m: "GET", path: "/v1/mahasiswa/{nim}/jadwal", tag: "Jadwal", sum: "Jadwal kuliah mahasiswa", ds: "Dari KRS periode yang diminta (default periode aktif).", sc: ["jadwal:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }], r: "object", it: "JadwalMahasiswa" }, getMahasiswaByNimPresensi: { id: "getMahasiswaByNimPresensi", m: "GET", path: "/v1/mahasiswa/{nim}/presensi", tag: "Presensi", sum: "Presensi mahasiswa", ds: "Rekap per mata kuliah dan detail pertemuan.", sc: ["presensi:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }, { nm: "kode_mk", in: "query", s: { t: "string" }, ds: "Kode mata kuliah" }], r: "object", it: "Objek" }, getMahasiswaByNimKeuangan: { id: "getMahasiswaByNimKeuangan", m: "GET", path: "/v1/mahasiswa/{nim}/keuangan", tag: "Keuangan", sum: "Tagihan dan pembayaran mahasiswa", ds: "Sama dengan halaman Riwayat Keuangan: tagihan, dibayar, potongan, dan sisa per jenis biaya per periode.", sc: ["keuangan:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }], r: "object", it: "Keuangan" }, getMahasiswaByNimTugasAkhir: { id: "getMahasiswaByNimTugasAkhir", m: "GET", path: "/v1/mahasiswa/{nim}/tugas-akhir", tag: "Lulusan", sum: "Tugas akhir/skripsi", ds: "Judul, jadwal seminar/ujian, pembimbing, penguji, dan nilai.", sc: ["lulusan:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "list", it: "Objek" }, getMahasiswaByNimKelulusan: { id: "getMahasiswaByNimKelulusan", m: "GET", path: "/v1/mahasiswa/{nim}/kelulusan", tag: "Lulusan", sum: "Status kelulusan/keluar dan pendaftaran wisuda", sc: ["lulusan:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getDosen: { id: "getDosen", m: "GET", path: "/v1/dosen", tag: "Dosen", sum: "Cari dosen", ds: "Objek `pribadi` hanya dengan scope `dosen:pii` (token dosen: hanya dirinya).", sc: ["dosen:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "status", in: "query", s: { t: "string" }, ds: "Kode status aktif" }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari NIDN (awalan) atau nama" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Dosen" }, getDosenByNidn: { id: "getDosenByNidn", m: "GET", path: "/v1/dosen/{nidn}", tag: "Dosen", sum: "Profil dosen", sc: ["dosen:read"], pa: [{ nm: "nidn", in: "path", s: { t: "string", rf: { l: "/v1/dosen", k: "nidn", d: "/v1/dosen/{nidn}" } }, rq: 1, ds: "NIDN" }], r: "object", it: "Dosen" }, getDosenByNidnJadwal: { id: "getDosenByNidnJadwal", m: "GET", path: "/v1/dosen/{nidn}/jadwal", tag: "Jadwal", sum: "Jadwal mengajar dosen", ds: "Termasuk kelas di mana dosen menjadi anggota tim pengajar.", sc: ["jadwal:read"], pa: [{ nm: "nidn", in: "path", s: { t: "string", rf: { l: "/v1/dosen", k: "nidn", d: "/v1/dosen/{nidn}" } }, rq: 1, ds: "NIDN" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode (default aktif)" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Jadwal" }, getDosenByNidnMahasiswaBimbingan: { id: "getDosenByNidnMahasiswaBimbingan", m: "GET", path: "/v1/dosen/{nidn}/mahasiswa-bimbingan", tag: "Dosen", sum: "Mahasiswa bimbingan akademik (PA)", sc: ["mahasiswa:read"], pa: [{ nm: "nidn", in: "path", s: { t: "string", rf: { l: "/v1/dosen", k: "nidn", d: "/v1/dosen/{nidn}" } }, rq: 1, ds: "NIDN" }, { nm: "status", in: "query", s: { t: "string" }, ds: "Kode status aktif" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "MahasiswaRingkas" }, getMataKuliah: { id: "getMataKuliah", m: "GET", path: "/v1/mata-kuliah", tag: "Akademik", sum: "Mata kuliah (kurikulum per periode)", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode kurikulum" }, { nm: "semester", in: "query", s: { t: "string" }, ds: "Semester (1-14)" }, { nm: "status", in: "query", s: { t: "string" }, ds: "kode_status (A = aktif)" }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari kode (awalan) atau nama" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Objek" }, getKurikulum: { id: "getKurikulum", m: "GET", path: "/v1/kurikulum", tag: "Akademik", sum: "Ringkasan kurikulum per prodi (SKS wajib/pilihan/total)", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }], r: "list", it: "Objek" }, getJadwal: { id: "getJadwal", m: "GET", path: "/v1/jadwal", tag: "Jadwal", sum: "Jadwal kuliah", ds: "Default periode aktif.", sc: ["jadwal:read"], pa: [{ nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }, { nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "nidn", in: "query", s: { t: "string", rf: { l: "/v1/dosen", k: "nidn", d: "/v1/dosen/{nidn}" } }, ds: "NIDN pengampu/tim" }, { nm: "kode_mk", in: "query", s: { t: "string" }, ds: "Kode mata kuliah" }, { nm: "kelas", in: "query", s: { t: "string" }, ds: "Kode kelas" }, { nm: "hari", in: "query", s: { t: "string" }, ds: "Kode hari" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Jadwal" }, getJadwalByIdj: { id: "getJadwalByIdj", m: "GET", path: "/v1/jadwal/{idj}", tag: "Jadwal", sum: "Detail jadwal kuliah", sc: ["jadwal:read"], pa: [{ nm: "idj", in: "path", s: { t: "string", rf: { l: "/v1/jadwal", k: "idj", d: "/v1/jadwal/{idj}" } }, rq: 1, ds: "ID jadwal" }], r: "object", it: "Jadwal" }, getJadwalByIdjPeserta: { id: "getJadwalByIdjPeserta", m: "GET", path: "/v1/jadwal/{idj}/peserta", tag: "Jadwal", sum: "Peserta kelas", ds: "Mahasiswa yang KRS-nya memakai jadwal ini. Token dosen: hanya kelas yang diajarnya.", sc: ["krs:read"], pa: [{ nm: "idj", in: "path", s: { t: "string", rf: { l: "/v1/jadwal", k: "idj", d: "/v1/jadwal/{idj}" } }, rq: 1, ds: "ID jadwal" }], r: "object", it: "Objek" }, getJadwalByIdjPresensi: { id: "getJadwalByIdjPresensi", m: "GET", path: "/v1/jadwal/{idj}/presensi", tag: "Presensi", sum: "Presensi dosen (berita acara) satu kelas", sc: ["presensi:read"], pa: [{ nm: "idj", in: "path", s: { t: "string", rf: { l: "/v1/jadwal", k: "idj", d: "/v1/jadwal/{idj}" } }, rq: 1, ds: "ID jadwal" }], r: "object", it: "Objek" }, getJadwalUjian: { id: "getJadwalUjian", m: "GET", path: "/v1/jadwal-ujian", tag: "Jadwal", sum: "Jadwal ujian (UTS/UAS)", sc: ["jadwal:read"], pa: [{ nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }, { nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "kode_mk", in: "query", s: { t: "string" }, ds: "Kode mata kuliah" }, { nm: "ujian", in: "query", s: { t: "string" }, ds: "Jenis ujian" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Objek" }, getKeuanganBiaya: { id: "getKeuanganBiaya", m: "GET", path: "/v1/keuangan/biaya", tag: "Keuangan", sum: "Master biaya per prodi dan periode", sc: ["keuangan:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }], r: "list", it: "Objek" }, getKeuanganPembayaran: { id: "getKeuanganPembayaran", m: "GET", path: "/v1/keuangan/pembayaran", tag: "Keuangan", sum: "Transaksi pembayaran", ds: "Untuk aplikasi keuangan/bank. Tidak untuk token mahasiswa/dosen.", sc: ["keuangan:read"], pa: [{ nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }, { nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "nim", in: "query", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, ds: "NIM" }, { nm: "kode_biaya", in: "query", s: { t: "string" }, ds: "Kode biaya" }, { nm: "dari", in: "query", s: { t: "string", f: "date" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string", f: "date" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Objek" }, getLulusan: { id: "getLulusan", m: "GET", path: "/v1/lulusan", tag: "Lulusan", sum: "Daftar lulusan dan mahasiswa keluar", ds: "Dari t_mahasiswa_status_lulus_do. Status: L lulus, D drop out, K keluar, dll.", sc: ["lulusan:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", ex: "86206", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", p: "^\\d{5}$", ex: "20261", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Periode" }, { nm: "status", in: "query", s: { t: "string" }, ds: "Kode status" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "list", it: "Objek" }, getWisuda: { id: "getWisuda", m: "GET", path: "/v1/wisuda", tag: "Lulusan", sum: "Periode wisuda", sc: ["lulusan:read"], r: "list", it: "Objek" }, getAkademikSaya: { id: "getAkademikSaya", m: "GET", path: "/v1/akademik/saya", tag: "Akademik: Jadwal dan kelas", sum: "Hak akses akademik saya", ds: "Apakah pemilik token pengelola akademik (ADMIN, BAK, PROGDI, OPERATOR, peran akademik:kelola), dosen, prodi yang boleh dikelola, dan tahun aktif.", sc: ["akademik:read"], r: "object", it: "Objek" }, getAkademikJadwalReferensi: { id: "getAkademikJadwalReferensi", m: "GET", path: "/v1/akademik/jadwal/referensi", tag: "Akademik: Jadwal dan kelas", sum: "Referensi form jadwal", ds: "Mata kuliah, kelas, ruang, hari, jam, dosen aktif, kampus, periode untuk satu prodi.", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, getAkademikJadwal: { id: "getAkademikJadwal", m: "GET", path: "/v1/akademik/jadwal", tag: "Akademik: Jadwal dan kelas", sum: "Daftar jadwal kuliah prodi", ds: "Jadwal per periode dengan jam, dosen + tim, peserta, bisa_dihapus. Semester pendek = periode berakhiran 3 (mis. 20253).", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikJadwal: { id: "postAkademikJadwal", m: "POST", path: "/v1/akademik/jadwal", tag: "Akademik: Jadwal dan kelas", sum: "Tambah jadwal", ds: 'Body: {"kode_mk", "kelas", "ruang", "kapasitas", "hari", "jamke", "nidn"}. Lewat JadwalKuliahService (validasi bentrok ruang/dosen dan jadwal ganda sama dengan web; ditolak 409 dengan pesan).', sc: ["akademik:write"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikJadwalHapus: { id: "postAkademikJadwalHapus", m: "POST", path: "/v1/akademik/jadwal/hapus", tag: "Akademik: Jadwal dan kelas", sum: "Hapus jadwal", ds: 'Body: {"id": [12, 13]}. Jadwal yang sudah dipakai KRS dilewati.', sc: ["akademik:write"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikJadwalSalin: { id: "postAkademikJadwalSalin", m: "POST", path: "/v1/akademik/jadwal/salin", tag: "Akademik: Jadwal dan kelas", sum: "Salin jadwal dari periode lain", ds: 'Body: {"sumber": "20242"}. Lewat JadwalKuliahService::salin.', sc: ["akademik:write"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikJadwalByIdj: { id: "postAkademikJadwalByIdj", m: "POST", path: "/v1/akademik/jadwal/{idj}", tag: "Akademik: Jadwal dan kelas", sum: "Ubah jadwal", ds: "Body sama dengan tambah jadwal.", sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikJadwalByIdjTim: { id: "postAkademikJadwalByIdjTim", m: "POST", path: "/v1/akademik/jadwal/{idj}/tim", tag: "Akademik: Jadwal dan kelas", sum: "Atur dosen pengampu (tim dosen)", ds: 'Body: {"nidn": ["0905011", ...]} (kosong = hapus tim).', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, getAkademikKelas: { id: "getAkademikKelas", m: "GET", path: "/v1/akademik/kelas", tag: "Akademik: Jadwal dan kelas", sum: "Data kelas prodi", ds: "m_kelas + jumlah jadwal dan mahasiswa.", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikKelas: { id: "postAkademikKelas", m: "POST", path: "/v1/akademik/kelas", tag: "Akademik: Jadwal dan kelas", sum: "Tambah kelas", ds: 'Body: {"kelas": "A", "kode_kelas": "01", "kampus": "01"}.', sc: ["akademik:write"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikKelasByIdk: { id: "postAkademikKelasByIdk", m: "POST", path: "/v1/akademik/kelas/{idk}", tag: "Akademik: Jadwal dan kelas", sum: "Ubah kelas", ds: "Body sama dengan tambah kelas.", sc: ["akademik:write"], pa: [{ nm: "idk", in: "path", s: { t: "string" }, rq: 1, ds: "ID kelas" }, { nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, postAkademikKelasByIdkHapus: { id: "postAkademikKelasByIdkHapus", m: "POST", path: "/v1/akademik/kelas/{idk}/hapus", tag: "Akademik: Jadwal dan kelas", sum: "Hapus kelas", ds: "Ditolak bila kelas masih dipakai jadwal/mahasiswa.", sc: ["akademik:write"], pa: [{ nm: "idk", in: "path", s: { t: "string" }, rq: 1, ds: "ID kelas" }, { nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Kode prodi (wajib bila berwenang di lebih dari satu prodi; boleh juga di body)" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif (boleh juga di body)" }], r: "object", it: "Objek" }, getAkademikKrsPersetujuan: { id: "getAkademikKrsPersetujuan", m: "GET", path: "/v1/akademik/krs/persetujuan", tag: "Akademik: Persetujuan KRS", sum: "Antrian persetujuan KRS", ds: "Mahasiswa aktif dengan status KRS (belum, menunggu, disetujui) + ringkasan. Dosen: mahasiswa bimbingan PA-nya.", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Batasi ke satu prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }, { nm: "status", in: "query", s: { t: "string" }, ds: "belum|menunggu|disetujui" }, { nm: "q", in: "query", s: { t: "string" }, ds: "NIM atau nama" }, { nm: "angkatan", in: "query", s: { t: "string" }, ds: "Tahun masuk" }, { nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }], r: "object" }, postAkademikKrsPersetujuan: { id: "postAkademikKrsPersetujuan", m: "POST", path: "/v1/akademik/krs/persetujuan", tag: "Akademik: Persetujuan KRS", sum: "Setujui KRS banyak mahasiswa", ds: 'Body: {"nim": ["..."], "tahun_id": "20261"} (maks. 200). Lewat view_insert_krs_terima (sama dengan menu Terima KRS).', sc: ["akademik:write"], r: "object", it: "Objek" }, getAkademikKrsPersetujuanByNim: { id: "getAkademikKrsPersetujuanByNim", m: "GET", path: "/v1/akademik/krs/persetujuan/{nim}", tag: "Akademik: Persetujuan KRS", sum: "KRS satu mahasiswa", ds: "Mata kuliah diambil + jadwal, batas SKS, riwayat IPS, pesan PA.", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }], r: "object", it: "Objek" }, postAkademikKrsPersetujuanByNim: { id: "postAkademikKrsPersetujuanByNim", m: "POST", path: "/v1/akademik/krs/persetujuan/{nim}", tag: "Akademik: Persetujuan KRS", sum: "Setujui/batalkan KRS", ds: 'Body: {"setuju": true|false, "tahun_id"}.', sc: ["akademik:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, postAkademikKrsPersetujuanByNimHapusMk: { id: "postAkademikKrsPersetujuanByNimHapusMk", m: "POST", path: "/v1/akademik/krs/persetujuan/{nim}/hapus-mk", tag: "Akademik: Persetujuan KRS", sum: "Hapus mata kuliah dari KRS", ds: 'Body: {"idkrs": 123}. Ditolak bila sudah bernilai.', sc: ["akademik:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, postAkademikKrsPersetujuanByNimPesan: { id: "postAkademikKrsPersetujuanByNimPesan", m: "POST", path: "/v1/akademik/krs/persetujuan/{nim}/pesan", tag: "Akademik: Persetujuan KRS", sum: "Kirim pesan konsultasi KRS", ds: 'Body: {"pesan": "...", "tahun_id"}.', sc: ["akademik:write"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getAkademikNilaiKelas: { id: "getAkademikNilaiKelas", m: "GET", path: "/v1/akademik/nilai/kelas", tag: "Akademik: Nilai", sum: "Kelas untuk input nilai", ds: "Peserta dan jumlah bernilai per kelas. Dosen: kelas yang diampu/tim.", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Batasi ke satu prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }], r: "object", it: "Objek" }, getAkademikNilaiKelasByIdj: { id: "getAkademikNilaiKelasByIdj", m: "GET", path: "/v1/akademik/nilai/kelas/{idj}", tag: "Akademik: Nilai", sum: "Tabel nilai kelas", ds: "Komposisi penilaian (persen Harian/Tugas/UTS/UAS), nilai per komponen, nilai akhir, distribusi, skala, batas input.", sc: ["akademik:read"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, postAkademikNilaiKelasByIdj: { id: "postAkademikNilaiKelasByIdj", m: "POST", path: "/v1/akademik/nilai/kelas/{idj}", tag: "Akademik: Nilai", sum: "Simpan komposisi dan nilai kelas", ds: 'Body: {"persen": {"Harian": 10, "Tugas": 20, "UTS": 30, "UAS": 40}, "nilai": [{"idkrs": 1, "jenis": "UTS", "ke": 1, "nilai": 80}]}. Lewat KrsNilaiService; nilai akhir dihitung ulang (HitungNilaiAngka). Hanya dalam batas tanggal input nilai.', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, postAkademikNilaiKelasByIdjUmumkan: { id: "postAkademikNilaiKelasByIdjUmumkan", m: "POST", path: "/v1/akademik/nilai/kelas/{idj}/umumkan", tag: "Akademik: Nilai", sum: "Umumkan nilai kelas", ds: 'Kirim notifikasi ke kotak masuk peserta yang nilainya sudah masuk. Body opsional: {"pesan": "..."}. Tidak mengubah nilai.', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, getAkademikBatas: { id: "getAkademikBatas", m: "GET", path: "/v1/akademik/batas", tag: "Akademik: Batas waktu input", sum: "Batas waktu input per prodi", ds: "jenis: krs, krs_dosen, krs_mhs, nilai, nilai_dosen, ta, uji_ta, wd. Baris dari m_bataskrs*/m_batas_* (dibuat SIAKAD saat popup batas waktu dibuka).", sc: ["akademik:read"], pa: [{ nm: "jenis", in: "query", s: { t: "string" }, ds: "Bawaan nilai" }, { nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Batasi ke satu prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }], r: "object", it: "Objek" }, postAkademikBatasByJenisById: { id: "postAkademikBatasByJenisById", m: "POST", path: "/v1/akademik/batas/{jenis}/{id}", tag: "Akademik: Batas waktu input", sum: "Ubah batas waktu", ds: 'Body: {"mulai": "2026-12-01", "selesai": "2026-12-20", "terima_krs": "Y|N" (khusus krs_mhs)}. Lewat TahunRepository::ubahBatas, sama dengan menu Tahun Akademik.', sc: ["akademik:write"], pa: [{ nm: "jenis", in: "path", s: { t: "string", ex: "nilai" }, rq: 1, ds: "krs|krs_dosen|krs_mhs|nilai|nilai_dosen|ta|uji_ta|wd" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID baris batas" }], r: "object", it: "Objek" }, postAkademikBatasByJenisByIdKunci: { id: "postAkademikBatasByJenisByIdKunci", m: "POST", path: "/v1/akademik/batas/{jenis}/{id}/kunci", tag: "Akademik: Batas waktu input", sum: "Kunci input (tutup sekarang)", ds: "Tanggal selesai diisi kemarin sehingga input (mis. nilai) langsung tertutup. Buka lagi dengan mengubah batas.", sc: ["akademik:write"], pa: [{ nm: "jenis", in: "path", s: { t: "string", ex: "nilai" }, rq: 1, ds: "krs|krs_dosen|krs_mhs|nilai|nilai_dosen|ta|uji_ta|wd" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID baris batas" }], r: "object", it: "Objek" }, getAkademikPresensiKelasByIdj: { id: "getAkademikPresensiKelasByIdj", m: "GET", path: "/v1/akademik/presensi/kelas/{idj}", tag: "Akademik: Presensi dan jurnal", sum: "Presensi dan jurnal kelas", ds: "Pertemuan (tanggal, jam, dosen, bahasan/jurnal) dan rekap hadir/izin/sakit/alpa per mahasiswa.", sc: ["akademik:read"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, postAkademikPresensiKelasByIdj: { id: "postAkademikPresensiKelasByIdj", m: "POST", path: "/v1/akademik/presensi/kelas/{idj}", tag: "Akademik: Presensi dan jurnal", sum: "Catat pertemuan dan presensi", ds: 'Body: {"tanggal": "2026-11-15", "jam": 3, "jam_selesai": 4, "lama": 2, "bahasan": "...", "nidn": "(pengelola, opsional)", "mahasiswa": [{"nim": "...", "status": "H|I|S|A"}]}. Tanpa "mahasiswa": semua peserta dicatat hadir (PresensiDosenService). Dengan "mahasiswa": status per mahasiswa (PresensiInputDosenService). Untuk dosen, tanggal selalu hari ini seperti halaman web.', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, getAkademikPresensiKelasByIdjPertemuanById: { id: "getAkademikPresensiKelasByIdjPertemuanById", m: "GET", path: "/v1/akademik/presensi/kelas/{idj}/pertemuan/{id}", tag: "Akademik: Presensi dan jurnal", sum: "Detail pertemuan", ds: "Jurnal pertemuan dan status tiap mahasiswa.", sc: ["akademik:read"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID pertemuan (iddm)" }], r: "object", it: "Objek" }, postAkademikPresensiKelasByIdjPertemuanById: { id: "postAkademikPresensiKelasByIdjPertemuanById", m: "POST", path: "/v1/akademik/presensi/kelas/{idj}/pertemuan/{id}", tag: "Akademik: Presensi dan jurnal", sum: "Ubah pertemuan / jurnal", ds: 'Body: {"tanggal", "jam", "jam_selesai", "lama", "bahasan", "jenis_presensi"}. Lewat PresensiDosenService::ubahPertemuan.', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID pertemuan (iddm)" }], r: "object", it: "Objek" }, postAkademikPresensiKelasByIdjPertemuanByIdHapus: { id: "postAkademikPresensiKelasByIdjPertemuanByIdHapus", m: "POST", path: "/v1/akademik/presensi/kelas/{idj}/pertemuan/{id}/hapus", tag: "Akademik: Presensi dan jurnal", sum: "Hapus pertemuan", ds: "Menghapus presensi dosen dan presensi mahasiswa pertemuan itu (PresensiDosenService::hapusPertemuan).", sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID pertemuan (iddm)" }], r: "object", it: "Objek" }, postAkademikPresensiKelasByIdjMahasiswaById: { id: "postAkademikPresensiKelasByIdjMahasiswaById", m: "POST", path: "/v1/akademik/presensi/kelas/{idj}/mahasiswa/{id}", tag: "Akademik: Presensi dan jurnal", sum: "Ubah status presensi mahasiswa", ds: 'Body: {"status": "H|I|S|A"}. Lewat PresensiInputDosenService::update.', sc: ["akademik:write"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }, { nm: "id", in: "path", s: { t: "string" }, rq: 1, ds: "ID presensi mahasiswa (idpm)" }], r: "object", it: "Objek" }, getAkademikPresensiKelasByIdjKartuAbsensi: { id: "getAkademikPresensiKelasByIdjKartuAbsensi", m: "GET", path: "/v1/akademik/presensi/kelas/{idj}/kartu-absensi", tag: "Akademik: Presensi dan jurnal", sum: "Kartu absensi kelas", ds: "Data untuk mencetak kartu/daftar hadir: peserta, pertemuan, status tiap pertemuan.", sc: ["akademik:read"], pa: [{ nm: "idj", in: "path", s: { t: "string" }, rq: 1, ds: "ID jadwal kuliah (t_jadwal.idj)" }], r: "object", it: "Objek" }, getAkademikMahasiswaByNimRingkasan: { id: "getAkademikMahasiswaByNimRingkasan", m: "GET", path: "/v1/akademik/mahasiswa/{nim}/ringkasan", tag: "Akademik: Dokumen dan laporan", sum: "Ringkasan akademik mahasiswa", ds: "Status per periode, SKS/IP per periode, IPK (nilai_ipk), PA, dan data pindahan/transfer (asal PT, SKS diakui, mata kuliah konversi).", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getAkademikMahasiswaByNimKartuUjian: { id: "getAkademikMahasiswaByNimKartuUjian", m: "GET", path: "/v1/akademik/mahasiswa/{nim}/kartu-ujian", tag: "Akademik: Dokumen dan laporan", sum: "Kartu ujian", ds: "UTS/UAS yang sedang berlangsung + izin cetak (pembayaran, presensi UAS; KartuUjianMahasiswaService) dan jadwal ujian mata kuliah KRS.", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }], r: "object", it: "Objek" }, getAkademikMahasiswaByNimKtm: { id: "getAkademikMahasiswaByNimKtm", m: "GET", path: "/v1/akademik/mahasiswa/{nim}/ktm", tag: "Akademik: Dokumen dan laporan", sum: "Kartu tanda mahasiswa (KTM)", ds: "Data KTM: identitas, prodi/fakultas, angkatan, status, masa berlaku (dari batas studi). Foto lewat /foto.", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getAkademikMahasiswaByNimFoto: { id: "getAkademikMahasiswaByNimFoto", m: "GET", path: "/v1/akademik/mahasiswa/{nim}/foto", tag: "Akademik: Dokumen dan laporan", sum: "Foto mahasiswa", ds: "File foto (images/avatar) untuk KTM.", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object" }, getAkademikMahasiswaByNimTranskripSementara: { id: "getAkademikMahasiswaByNimTranskripSementara", m: "GET", path: "/v1/akademik/mahasiswa/{nim}/transkrip-sementara", tag: "Akademik: Dokumen dan laporan", sum: "Transkrip sementara", ds: "Transkrip nilai terbaik (sama dengan /v1/mahasiswa/{nim}/transkrip) + kop perguruan tinggi, prodi, predikat sementara (m_predikat).", sc: ["akademik:read"], pa: [{ nm: "nim", in: "path", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, rq: 1, ds: "NIM" }], r: "object", it: "Objek" }, getAkademikKartuIdentitasByUsername: { id: "getAkademikKartuIdentitasByUsername", m: "GET", path: "/v1/akademik/kartu-identitas/{username}", tag: "Akademik: Dokumen dan laporan", sum: "Kartu identitas dosen/pegawai", ds: "Data kartu identitas dari m_dosen/m_karyawan + sdm_pegawai. Pemilik atau pengelola akademik.", sc: ["akademik:read"], pa: [{ nm: "username", in: "path", s: { t: "string", rf: { l: "pengguna", k: "username" } }, rq: 1, ds: "NIDN atau NIK" }], r: "object", it: "Objek" }, getAkademikLaporan: { id: "getAkademikLaporan", m: "GET", path: "/v1/akademik/laporan", tag: "Akademik: Dokumen dan laporan", sum: "Laporan akademik per prodi", ds: "Status mahasiswa, KRS, nilai terisi + distribusi, kelas dan pertemuan untuk satu periode. Pengelola akademik.", sc: ["akademik:read"], pa: [{ nm: "prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Batasi ke satu prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Bawaan tahun aktif" }], r: "object", it: "Objek" }, getAkademikPengajuan: { id: "getAkademikPengajuan", m: "GET", path: "/v1/akademik/pengajuan", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: daftar", ds: "Mahasiswa mengajukan cuti, aktif kembali, non-aktif, mengundurkan diri, atau pindah kelas/kampus/prodi; pengelola akademik (ADMIN, BAK, PROGDI, OPERATOR) memutuskan. Persetujuan cuti, non-aktif, dan mengundurkan diri langsung dicatat ke status SIAKAD lewat service halaman web (sama dengan menu Mahasiswa Cuti, Non Aktif, dan Keluar); jenis lain ditandai disetujui untuk ditindaklanjuti operator. Pengelola melihat semua; pengguna lain hanya miliknya sendiri (nim).", sc: ["akademik:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "nim", in: "query", s: { t: "string", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "jenis", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "status", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "tercatat_siakad", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di nim, alasan" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "AkademikPengajuan" }, postAkademikPengajuan: { id: "postAkademikPengajuan", m: "POST", path: "/v1/akademik/pengajuan", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: tambah", ds: "Pengelola, atau pengguna untuk datanya sendiri (nim diisi otomatis); pemilik hanya bisa mengubah/menghapus bila status diajukan.", sc: ["akademik:write"], b: { ct: "application/json", ref: "AkademikPengajuanInput", s: { t: "object", pr: { nim: { t: "string", ds: "m_mahasiswa.NIM", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, jenis: { t: "string", e: ["cuti", "aktif_kembali", "non_aktif", "mengundurkan_diri", "pindah_kelas", "pindah_kampus", "pindah_prodi"] }, tanggal_mulai: { t: "string", f: "date" }, tanggal_akhir: { t: "string", f: "date" }, tujuan: { t: "string", max: 20 }, alasan: { t: "string" }, catatan: { t: "string", ds: "(hanya pengelola)" } }, rq: ["nim", "jenis"] }, rq: 1 }, r: "object", it: "AkademikPengajuan" }, getAkademikPengajuanById: { id: "getAkademikPengajuanById", m: "GET", path: "/v1/akademik/pengajuan/{id}", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: detail", ds: "Mahasiswa mengajukan cuti, aktif kembali, non-aktif, mengundurkan diri, atau pindah kelas/kampus/prodi; pengelola akademik (ADMIN, BAK, PROGDI, OPERATOR) memutuskan. Persetujuan cuti, non-aktif, dan mengundurkan diri langsung dicatat ke status SIAKAD lewat service halaman web (sama dengan menu Mahasiswa Cuti, Non Aktif, dan Keluar); jenis lain ditandai disetujui untuk ditindaklanjuti operator. Pengelola melihat semua; pengguna lain hanya miliknya sendiri (nim).", sc: ["akademik:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "AkademikPengajuan" }, putAkademikPengajuanById: { id: "putAkademikPengajuanById", m: "PUT", path: "/v1/akademik/pengajuan/{id}", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: ubah", ds: "Pengelola, atau pengguna untuk datanya sendiri (nim diisi otomatis); pemilik hanya bisa mengubah/menghapus bila status diajukan. Kolom yang tidak dikirim tidak berubah.", sc: ["akademik:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "AkademikPengajuanInput", s: { t: "object", pr: { nim: { t: "string", ds: "m_mahasiswa.NIM", rf: { l: "/v1/mahasiswa", k: "nim", d: "/v1/mahasiswa/{nim}" } }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, jenis: { t: "string", e: ["cuti", "aktif_kembali", "non_aktif", "mengundurkan_diri", "pindah_kelas", "pindah_kampus", "pindah_prodi"] }, tanggal_mulai: { t: "string", f: "date" }, tanggal_akhir: { t: "string", f: "date" }, tujuan: { t: "string", max: 20 }, alasan: { t: "string" }, catatan: { t: "string", ds: "(hanya pengelola)" } }, rq: ["nim", "jenis"] }, rq: 1 }, r: "object", it: "AkademikPengajuan" }, deleteAkademikPengajuanById: { id: "deleteAkademikPengajuanById", m: "DELETE", path: "/v1/akademik/pengajuan/{id}", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: hapus", ds: "Pengelola, atau pengguna untuk datanya sendiri (nim diisi otomatis); pemilik hanya bisa mengubah/menghapus bila status diajukan.", sc: ["akademik:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getAkademikPengajuanByIdBerkas: { id: "getAkademikPengajuanByIdBerkas", m: "GET", path: "/v1/akademik/pengajuan/{id}/berkas", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: daftar lampiran", ds: "Siapa pun yang boleh melihat barisnya.", sc: ["akademik:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "list", it: "PusatBerkas" }, postAkademikPengajuanByIdBerkas: { id: "postAkademikPengajuanByIdBerkas", m: "POST", path: "/v1/akademik/pengajuan/{id}/berkas", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: unggah lampiran", ds: 'Multipart field "berkas" (atau JSON berkas_base64 + nama_file), opsional jenis dan keterangan. PDF, gambar, dokumen Office/ODF, CSV, TXT, ZIP; maksimal PUSAT_DATA_MAKS_MB (bawaan 20 MB). Pengelola, atau pengguna untuk datanya sendiri (nim diisi otomatis); pemilik hanya bisa mengubah/menghapus bila status diajukan.', sc: ["akademik:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "multipart/form-data", ref: "PusatBerkasInput", s: { t: "object", pr: { berkas_id: { t: "string", f: "uuid", ds: "Alternatif file: UUID berkas dari /v1/berkas (mis. hasil unggah bertahap)" }, berkas: { t: "string", f: "binary" }, jenis: { t: "string", ds: "Mis. lampiran, bukti, laporan" }, keterangan: { t: "string" }, berkas_base64: { t: "string", ds: "Alternatif JSON" }, nama_file: { t: "string" } } }, rq: 1 }, r: "object", it: "PusatBerkas" }, getAkademikPengajuanByIdBerkasByUuid: { id: "getAkademikPengajuanByIdBerkasByUuid", m: "GET", path: "/v1/akademik/pengajuan/{id}/berkas/{uuid}", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: unduh lampiran", sc: ["akademik:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "object" }, deleteAkademikPengajuanByIdBerkasByUuid: { id: "deleteAkademikPengajuanByIdBerkasByUuid", m: "DELETE", path: "/v1/akademik/pengajuan/{id}/berkas/{uuid}", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: hapus lampiran", ds: "Pengelola, atau pengguna untuk datanya sendiri (nim diisi otomatis); pemilik hanya bisa mengubah/menghapus bila status diajukan.", sc: ["akademik:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "none" }, postAkademikPengajuanByIdSetujui: { id: "postAkademikPengajuanByIdSetujui", m: "POST", path: "/v1/akademik/pengajuan/{id}/setujui", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: Setujui (cuti, non-aktif, dan mengundurkan diri langsung dicatat ke SIAKAD)", ds: "Pengelola modul. Status harus diajukan, menjadi disetujui.", sc: ["akademik:write"], tr: { dari: ["diajukan"], ke: "disetujui" }, oleh: "pengelola", pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "AkademikPengajuanSetujuiInput", s: { t: "object", pr: { catatan: { t: "string", max: 1e3 } } }, rq: 1 }, r: "object", it: "AkademikPengajuan" }, postAkademikPengajuanByIdTolak: { id: "postAkademikPengajuanByIdTolak", m: "POST", path: "/v1/akademik/pengajuan/{id}/tolak", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: Tolak", ds: "Pengelola modul. Status harus diajukan, menjadi ditolak.", sc: ["akademik:write"], tr: { dari: ["diajukan"], ke: "ditolak" }, oleh: "pengelola", pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "AkademikPengajuanTolakInput", s: { t: "object", pr: { catatan: { t: "string", max: 1e3 } }, rq: ["catatan"] }, rq: 1 }, r: "object", it: "AkademikPengajuan" }, postAkademikPengajuanByIdBatalkan: { id: "postAkademikPengajuanByIdBatalkan", m: "POST", path: "/v1/akademik/pengajuan/{id}/batalkan", tag: "Akademik: Pengajuan status", sum: "Pengajuan status akademik: Batalkan pengajuan (oleh mahasiswa)", ds: "Pemilik data atau pengelola. Status harus diajukan, menjadi dibatalkan.", sc: ["akademik:write"], tr: { dari: ["diajukan"], ke: "dibatalkan" }, oleh: "pemilik_atau_pengelola", pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/akademik/pengajuan", k: "id", d: "/v1/akademik/pengajuan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "AkademikPengajuan" } };
|
|
6
|
+
var mandiri = ["getMahasiswaByNimKrsPenawaran", "getAkademikSaya", "getAkademikJadwalReferensi", "postAkademikJadwalHapus", "postAkademikJadwalSalin", "getAkademikBatas", "getAkademikMahasiswaByNimRingkasan", "getAkademikMahasiswaByNimKartuUjian", "getAkademikMahasiswaByNimKtm", "getAkademikMahasiswaByNimFoto", "getAkademikMahasiswaByNimTranskripSementara", "getAkademikLaporan"];
|
|
7
|
+
var skema = { MahasiswaRingkas: { t: "object", pr: { nim: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, kode_prodi: { t: "string", n: 1 }, nama_prodi: { t: "string", n: 1 }, kode_jenjang: { t: "string", n: 1 }, jenis_kelamin: { t: "string", n: 1, ds: "L/P" }, tahun_masuk: { t: "string", n: 1 }, semester_masuk: { t: "string", n: 1 }, kelas: { t: "string", n: 1 }, status_aktif: { t: "string", n: 1, ds: "Kode status (lihat /v1/referensi/kode/05)" }, status_aktif_label: { t: "string", n: 1 }, nidn_pa: { t: "string", n: 1 } } }, Mahasiswa: { t: "object", pr: { nim: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, kode_pt: { t: "string", n: 1 }, kode_fakultas: { t: "string", n: 1 }, kode_prodi: { t: "string", n: 1 }, nama_prodi: { t: "string", n: 1 }, kode_jenjang: { t: "string", n: 1 }, jenis_kelamin: { t: "string", n: 1 }, agama: { t: "string", n: 1 }, status_masuk: { t: "string", n: 1, ds: "B baru, P pindahan" }, tahun_masuk: { t: "string", n: 1 }, semester_masuk: { t: "string", n: 1 }, tanggal_masuk: { t: "string", n: 1, f: "date" }, batas_studi: { t: "string", n: 1 }, kelas: { t: "string", n: 1 }, shift: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, status_aktif: { t: "string", n: 1 }, status_aktif_label: { t: "string", n: 1 }, nidn_pa: { t: "string", n: 1 }, nirm: { t: "string", n: 1 }, npm: { t: "string", n: 1 }, konsentrasi: { t: "string", n: 1 }, tanggal_lulus: { t: "string", n: 1, f: "date" }, yudisium: { t: "string", n: 1 }, no_sk_yudisium: { t: "string", n: 1 }, tanggal_sk_yudisium: { t: "string", n: 1, f: "date" }, no_ijazah: { t: "string", n: 1 }, tanggal_beri_ijazah: { t: "string", n: 1, f: "date" }, asal: { t: "object", pr: { nama_sekolah: { t: "string", n: 1 }, tahun_lulus_sekolah: { t: "string", n: 1 }, nama_pt: { t: "string", n: 1 }, nim: { t: "string", n: 1 }, nama_prodi: { t: "string", n: 1 }, sks_diakui: { t: "integer", n: 1 } } }, pribadi: { t: "object", ds: "Hanya dengan scope mahasiswa:pii", pr: { nik: { t: "string", n: 1 }, nisn: { t: "string", n: 1 }, npwp: { t: "string", n: 1 }, tempat_lahir: { t: "string", n: 1 }, tanggal_lahir: { t: "string", n: 1, f: "date" }, warga_negara: { t: "string", n: 1 }, status_sipil: { t: "string", n: 1 }, email: { t: "string", n: 1 }, hp: { t: "string", n: 1 }, telepon: { t: "string", n: 1 }, alamat: { t: "object", pr: { jalan: { t: "string", n: 1 }, rt: { t: "string", n: 1 }, rw: { t: "string", n: 1 }, dusun: { t: "string", n: 1 }, desa: { t: "string", n: 1 }, kecamatan: { t: "string", n: 1 }, kode_kabupaten: { t: "string", n: 1 }, kode_propinsi: { t: "string", n: 1 }, kode_pos: { t: "string", n: 1 } } }, jenis_tinggal: { t: "string", n: 1 } } } } }, Objek: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, Krs: { t: "object", pr: { nim: { t: "string", n: 1 }, tahun_id: { t: "string", n: 1 }, jumlah_sks: { t: "integer", n: 1 }, mata_kuliah: { t: "array", i: { t: "object", pr: { idkrs: { t: "integer", n: 1 }, tahun_id: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, sks: { t: "integer", n: 1 }, kelas: { t: "string", n: 1 }, idj: { t: "integer", n: 1 }, status_krs: { t: "string", n: 1, ds: "T = disetujui" }, disetujui: { t: "boolean" }, hari: { t: "string", n: 1 }, jam_ke: { t: "integer", n: 1 }, ruang: { t: "string", n: 1 }, nidn_dosen: { t: "string", n: 1 }, ujian: { t: "object" } } } } } }, KrsAmbilResponse: { t: "object", pr: { nim: { t: "string", n: 1 }, tahun_id: { t: "string", n: 1 }, batas_sks: { t: "integer", n: 1 }, melebihi_batas_sks: { t: "boolean" }, tersimpan: { t: "array", i: { t: "object", pr: { kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, nim: { t: "string", n: 1 }, hari: { t: "string", n: 1 }, jamke: { t: "string", n: 1 } } } }, sudah_ada: { t: "array", i: { t: "object", pr: { kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, nim: { t: "string", n: 1 }, hari: { t: "string", n: 1 }, jamke: { t: "string", n: 1 } } } }, kelas_belum_terpilih_atau_penuh: { t: "array", i: { t: "object", pr: { kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, nim: { t: "string", n: 1 }, hari: { t: "string", n: 1 }, jamke: { t: "string", n: 1 } } } }, bentrok: { t: "array", i: { t: "object", pr: { kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, nim: { t: "string", n: 1 }, hari: { t: "string", n: 1 }, jamke: { t: "string", n: 1 } } } }, sks_terambil: { t: "integer", n: 1 }, pesan: { t: "array", i: { t: "string" } } } }, KrsPenawaran: { t: "object", pr: { nim: { t: "string", n: 1 }, tahun_id: { t: "string", n: 1 }, boleh_ambil: { t: "boolean" }, alasan: { t: "string", n: 1, ds: "Sebab bila boleh_ambil false" }, mode: { t: "string", n: 1, ds: "standar, uma, atau umsb" }, batas_sks: { t: "integer", n: 1 }, ips_sebelumnya: { t: "number", n: 1 }, sks_terambil: { t: "integer", n: 1 }, mata_kuliah: { t: "array", i: { t: "object", pr: { id: { t: "integer", n: 1, ds: "ID mata kuliah, dikirim saat ambil KRS" }, kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, sks: { t: "integer", n: 1 }, dosen: { t: "string", n: 1 }, sudah_diambil: { t: "boolean" }, bisa_dipilih: { t: "boolean" }, keterangan: { t: "string", n: 1, ds: "Mis. prasyarat belum lulus" }, nilai_sebelumnya: { t: "string", n: 1 }, pilih_kelas: { t: "boolean", ds: "true: wajib mengirim idj" }, kelas: { t: "array", i: { t: "object" } } } } }, pesan: { t: "array", i: { t: "string" } } } }, Khs: { t: "string" }, Transkrip: { t: "object", pr: { nim: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, kode_prodi: { t: "string", n: 1 }, mata_kuliah: { t: "array", i: { t: "object", pr: { kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, tahun_id: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, sks: { t: "integer", n: 1 }, nilai_huruf: { t: "string", n: 1 }, bobot: { t: "number", n: 1 }, mutu: { t: "number", n: 1 } } } }, jumlah_sks: { t: "integer", n: 1 }, jumlah_mutu: { t: "number", n: 1 }, ipk: { t: "object", pr: { sks: { t: "integer", n: 1, ds: "Jumlah SKS yang dihitung" }, nilai: { t: "number", n: 1, ds: "Indeks prestasi (2 desimal)" } } } } }, JadwalMahasiswa: { t: "object", pr: { nim: { t: "string", n: 1 }, tahun_id: { t: "string", n: 1 }, jadwal: { t: "array", i: { t: "object", pr: { idj: { t: "integer", n: 1, ds: "ID jadwal" }, tahun_id: { t: "string", n: 1, ds: "Periode", ex: "20261" }, kode_prodi: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, kelas: { t: "string", n: 1 }, kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, sks: { t: "integer", n: 1 }, hari: { t: "string", n: 1, ds: "Kode hari" }, jam_ke: { t: "integer", n: 1 }, jam_mulai: { t: "string", n: 1, ex: "07:30:00" }, jam_selesai: { t: "string", n: 1 }, ruang: { t: "string", n: 1 }, nama_ruang: { t: "string", n: 1 }, kapasitas: { t: "integer", n: 1 }, dosen: { t: "object" }, tim_pengajar: { t: "array", i: { t: "object" } } } } } } }, Keuangan: { t: "object", pr: { nim: { t: "string", n: 1 }, mode_tagihan: { t: "string", n: 1, ds: "tagihan_mahasiswa (per NIM) atau biaya_prodi" }, periode: { t: "array", i: { t: "object", pr: { tahun_id: { t: "string", n: 1 }, item: { t: "array", i: { t: "object" } }, ringkasan: { t: "object" } } } }, ringkasan: { t: "object", pr: { tagihan: { t: "number", n: 1 }, dibayar: { t: "number", n: 1 }, potongan: { t: "number", n: 1 }, sisa: { t: "number", n: 1 } } } } }, Dosen: { t: "object", pr: { nidn: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, nama_lengkap: { t: "string", n: 1, ds: "Dengan gelar" }, gelar_depan: { t: "string", n: 1 }, gelar_belakang: { t: "string", n: 1 }, nip: { t: "string", n: 1 }, kode_fakultas: { t: "string", n: 1 }, kode_prodi: { t: "string", n: 1 }, nama_prodi: { t: "string", n: 1 }, kode_jenjang: { t: "string", n: 1 }, jenis_kelamin: { t: "string", n: 1 }, status_aktif: { t: "string", n: 1 }, status_pegawai: { t: "string", n: 1 }, ikatan_kerja: { t: "string", n: 1 }, pendidikan: { t: "string", n: 1 }, pangkat_golongan: { t: "string", n: 1 }, jabatan_akademik: { t: "string", n: 1 }, jabatan_fungsional: { t: "string", n: 1 }, jabatan_struktural: { t: "string", n: 1 }, mulai_masuk: { t: "string", n: 1, f: "date" }, pribadi: { t: "object", ds: "Hanya dengan scope dosen:pii", pr: { nik: { t: "string", n: 1 }, npwp: { t: "string", n: 1 }, agama: { t: "string", n: 1 }, tempat_lahir: { t: "string", n: 1 }, tanggal_lahir: { t: "string", n: 1, f: "date" }, email: { t: "string", n: 1 }, hp: { t: "string", n: 1 }, telepon: { t: "string", n: 1 }, alamat: { t: "object", pr: { jalan: { t: "string", n: 1 }, rt: { t: "string", n: 1 }, rw: { t: "string", n: 1 }, dusun: { t: "string", n: 1 }, desa: { t: "string", n: 1 }, kecamatan: { t: "string", n: 1 }, kode_kabupaten: { t: "string", n: 1 }, kode_propinsi: { t: "string", n: 1 }, kode_pos: { t: "string", n: 1 } } } } } } }, Jadwal: { t: "object", pr: { idj: { t: "integer", n: 1, ds: "ID jadwal" }, tahun_id: { t: "string", n: 1, ds: "Periode", ex: "20261" }, kode_prodi: { t: "string", n: 1 }, semester: { t: "integer", n: 1 }, kelas: { t: "string", n: 1 }, kode_mk: { t: "string", n: 1 }, nama_mk: { t: "string", n: 1 }, sks: { t: "integer", n: 1 }, hari: { t: "string", n: 1, ds: "Kode hari" }, jam_ke: { t: "integer", n: 1 }, jam_mulai: { t: "string", n: 1, ex: "07:30:00" }, jam_selesai: { t: "string", n: 1 }, ruang: { t: "string", n: 1 }, nama_ruang: { t: "string", n: 1 }, kapasitas: { t: "integer", n: 1 }, dosen: { t: "object", pr: { nidn: { t: "string", n: 1 }, nama: { t: "string", n: 1 } } }, tim_pengajar: { t: "array", i: { t: "object", pr: { nidn: { t: "string", n: 1 }, nama: { t: "string", n: 1 } } } } } }, AkademikPengajuan: { t: "object", ds: "Pengajuan status akademik (tabel akd_pengajuan)", pr: { id: { t: "integer" }, nim: { t: "string", ds: "m_mahasiswa.NIM" }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi (hanya baca)", ro: 1 }, tahun_id: { t: "string", ds: "m_tahun.tahun_id" }, jenis: { t: "string", e: ["cuti", "aktif_kembali", "non_aktif", "mengundurkan_diri", "pindah_kelas", "pindah_kampus", "pindah_prodi"] }, tanggal_mulai: { t: "string", f: "date" }, tanggal_akhir: { t: "string", f: "date" }, tujuan: { t: "string", max: 20 }, alasan: { t: "string" }, status: { t: "string", e: ["diajukan", "disetujui", "ditolak", "dibatalkan"], ds: "(hanya baca)", ro: 1 }, catatan: { t: "string", ds: "(hanya pengelola)" }, tercatat_siakad: { t: "boolean", ds: "(hanya baca)", ro: 1 }, hasil_siakad: { t: "string", ds: "(hanya baca)", ro: 1 }, diputus_oleh: { t: "string", max: 60, ds: "(hanya baca)", ro: 1 }, diputus_at: { t: "string", max: 30, ds: "(hanya baca)", ro: 1 }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, PusatBerkas: { t: "object", pr: { uuid: { t: "string" }, jenis: { t: "string" }, nama: { t: "string" }, mime: { t: "string" }, ukuran: { t: "integer" }, sha256: { t: "string" }, keterangan: { t: "string", n: 1 }, diunggah_oleh: { t: "string" }, created_at: { t: "string", f: "date-time" } } } };
|
|
8
|
+
var akademik_default = { key, resources, ops, mandiri, skema };
|
|
9
|
+
|
|
10
|
+
export { akademik_default as default, key, mandiri, ops, resources, skema };
|
|
11
|
+
//# sourceMappingURL=akademik-IXTTJMVD.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
// src/katalog/data/modul/akses.json
|
|
7
|
+
var key = "akses";
|
|
8
|
+
var resources = [{ id: "/v1/rbac/akses-live", tag: "RBAC: Akses database live", title: "Pengajuan akses live", base: "/v1/rbac/akses-live", list: "getRbacAksesLive", actions: [], children: [] }, { id: "/v1/rbac/aplikasi", tag: "RBAC: Aplikasi", title: "Aplikasi", base: "/v1/rbac/aplikasi", item: "/v1/rbac/aplikasi/{id}", key: "id", list: "getRbacAplikasi", create: "postRbacAplikasi", get: "getRbacAplikasiById", update: "putRbacAplikasiById", del: "deleteRbacAplikasiById", actions: ["postRbacAplikasiByKodeIzin"], children: [] }, { id: "/v1/rbac/db-dev/salinan", tag: "RBAC: Database development", title: "Riwayat salinan", base: "/v1/rbac/db-dev/salinan", item: "/v1/rbac/db-dev/salinan/{id}", key: "id", list: "getRbacDbDevSalinan", create: "postRbacDbDevSalinan", get: "getRbacDbDevSalinanById", actions: ["postRbacDbDevSalinanByIdBatal"], children: [] }, { id: "/v1/rbac/izin", tag: "RBAC: Izin", title: "Izin", base: "/v1/rbac/izin", item: "/v1/rbac/izin/{id}", key: "id", list: "getRbacIzin", create: "postRbacIzin", get: "getRbacIzinById", update: "putRbacIzinById", del: "deleteRbacIzinById", actions: [], children: [] }, { id: "/v1/rbac/jabatan", tag: "RBAC: Pemetaan", title: "Peran untuk jabatan", base: "/v1/rbac/jabatan", item: "/v1/rbac/jabatan/{id}", key: "id", list: "getRbacJabatan", create: "postRbacJabatan", get: "getRbacJabatanById", del: "deleteRbacJabatanById", actions: [], children: [] }, { id: "/v1/rbac/klien-api", tag: "RBAC: Klien API", title: "Klien API", base: "/v1/rbac/klien-api", item: "/v1/rbac/klien-api/{id}", key: "id", list: "getRbacKlienApi", create: "postRbacKlienApi", get: "getRbacKlienApiById", update: "patchRbacKlienApiById", del: "deleteRbacKlienApiById", actions: ["postRbacKlienApiByIdSecret", "postRbacKlienApiByIdAksesLive"], children: [] }, { id: "/v1/rbac/level", tag: "RBAC: Pemetaan", title: "Peran untuk level lama", base: "/v1/rbac/level", item: "/v1/rbac/level/{id}", key: "id", list: "getRbacLevel", create: "postRbacLevel", get: "getRbacLevelById", del: "deleteRbacLevelById", actions: [], children: [] }, { id: "/v1/rbac/log-api", tag: "RBAC: Log API", title: "Log permintaan API", base: "/v1/rbac/log-api", list: "getRbacLogApi", actions: [], children: [] }, { id: "/v1/rbac/pengguna", tag: "RBAC: Hak akses efektif", title: "Hak akses efektif", base: "/v1/rbac/pengguna", item: "/v1/rbac/pengguna/{username}", key: "username", get: "getRbacPenggunaByUsername", actions: [], children: [] }, { id: "/v1/rbac/penugasan", tag: "RBAC: Penugasan", title: "Penugasan peran", base: "/v1/rbac/penugasan", item: "/v1/rbac/penugasan/{id}", key: "id", list: "getRbacPenugasan", create: "postRbacPenugasan", get: "getRbacPenugasanById", update: "putRbacPenugasanById", del: "deleteRbacPenugasanById", actions: ["postRbacPenugasanByIdCabut"], children: [] }, { id: "/v1/rbac/peran", tag: "RBAC: Peran", title: "Peran", base: "/v1/rbac/peran", item: "/v1/rbac/peran/{id}", key: "id", list: "getRbacPeran", create: "postRbacPeran", get: "getRbacPeranById", update: "putRbacPeranById", del: "deleteRbacPeranById", actions: ["putRbacPeranByIdIzin"], children: [] }, { id: "/v1/rbac/peran-izin", tag: "RBAC: Peran", title: "Izin peran", base: "/v1/rbac/peran-izin", item: "/v1/rbac/peran-izin/{id}", key: "id", list: "getRbacPeranIzin", create: "postRbacPeranIzin", get: "getRbacPeranIzinById", del: "deleteRbacPeranIzinById", actions: [], children: [] }];
|
|
9
|
+
var ops = { getLingkungan: { id: "getLingkungan", m: "GET", path: "/v1/lingkungan", tag: "Lingkungan data", sum: "Database yang dipakai aplikasi ini", ds: "Aplikasi (klien API) baru memakai **database development** (salinan data live yang disamarkan) sampai akses live disetujui admin\ndi Pustikom. `lingkungan` = database request ini, `lingkungan_klien` = hak aplikasi. Setiap jawaban API juga membawa header\n`X-Siakad-Lingkungan: live|development`. Aplikasi yang sudah live bisa tetap memakai development dengan mengirim header\n`X-Siakad-Lingkungan: development` saat meminta token (token itu terikat ke development).", r: "object", it: "Objek" }, postLingkunganPengajuanLive: { id: "postLingkunganPengajuanLive", m: "POST", path: "/v1/lingkungan/pengajuan-live", tag: "Lingkungan data", sum: "Ajukan akses database live", ds: 'Body `{"alasan": "Aplikasi sudah selesai diuji ..."}` (min. 10 karakter). Admin menyetujui atau menolak dari Pustikom. Bila sudah ada pengajuan yang menunggu, pengajuan itu yang dikembalikan.', b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "Objek" }, getRbacSaya: { id: "getRbacSaya", m: "GET", path: "/v1/rbac/saya", tag: "RBAC: Hak akses efektif", sum: "Hak akses saya", ds: "Peran yang sedang dipegang pemilik token (dari level lama, penugasan, dan jabatan), izin efektif (pola `*` sudah diuraikan\nmenjadi kode di katalog) beserta lingkup unitnya, aplikasi yang boleh dimasuki (izin `<aplikasi>.akses`), scope API, dan\nlevel SIAKAD yang setara. `?aplikasi=lms` membatasi ke satu aplikasi. Dipakai SSO untuk klaim `roles`/`permissions`.", sc: ["rbac:read"], pa: [{ nm: "aplikasi", in: "query", s: { t: "string", ex: "lms" }, ds: "Kode aplikasi" }], r: "object", it: "RbacHakAkses" }, getRbacPenggunaByUsername: { id: "getRbacPenggunaByUsername", m: "GET", path: "/v1/rbac/pengguna/{username}", tag: "RBAC: Hak akses efektif", sum: "Hak akses pengguna", ds: "Sama dengan /saya untuk pengguna lain. Untuk pengelola hak akses dan token aplikasi (client_credentials) ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "username", in: "path", s: { t: "string", ex: "1619109401", rf: { l: "pengguna", k: "username" } }, rq: 1, ds: "Username SIAKAD" }, { nm: "aplikasi", in: "query", s: { t: "string", ex: "lms" }, ds: "Kode aplikasi" }], r: "object", it: "RbacHakAkses" }, postRbacCek: { id: "postRbacCek", m: "POST", path: "/v1/rbac/cek", tag: "RBAC: Hak akses efektif", sum: "Cek izin", ds: 'Memeriksa satu atau beberapa izin: `{"izin": "lms.kelas.kelola", "unit": "55201"}` atau `{"izin": ["a", "b"], "username": "..."}`.\n\n* Tanpa `unit`, hanya izin global yang dihitung; kirim `"di_mana_saja": true` untuk menerima izin di unit mana pun.\n* `unit` = ID unit, kode unit, kode prodi, atau kode fakultas; izin unit induk (mis. fakultas) berlaku untuk prodinya.\n* `username` lain hanya untuk pengelola hak akses dan token aplikasi.', sc: ["rbac:read"], b: { ct: "application/json", ref: "RbacCekInput", s: { t: "object", pr: { izin: { t: "string", ex: "lms.kelas.kelola" }, unit: { t: "string", ex: "55201" }, username: { t: "string", rf: { l: "pengguna", k: "username" } }, di_mana_saja: { t: "boolean" } }, rq: ["izin"] }, rq: 1 }, r: "object", it: "RbacCek" }, getRbacPemegang: { id: "getRbacPemegang", m: "GET", path: "/v1/rbac/pemegang", tag: "RBAC: Hak akses efektif", sum: "Siapa pemegang izin", ds: "Peran yang memberi izin ini (termasuk warisan), level lama yang dipetakan ke peran itu, pejabat aktif, dan penugasan aktif. `unit` membatasi ke pemegang yang kewenangannya mencakup unit tersebut. Untuk pengelola hak akses dan token aplikasi (mis. menentukan penyetuju).", sc: ["rbac:read"], pa: [{ nm: "izin", in: "query", s: { t: "string" }, rq: 1, ds: "Kode izin" }, { nm: "unit", in: "query", s: { t: "string" }, ds: "Unit (ID, kode, kode prodi/fakultas)" }], r: "object", it: "Objek" }, getRbacKatalog: { id: "getRbacKatalog", m: "GET", path: "/v1/rbac/katalog", tag: "RBAC: Aplikasi", sum: "Katalog izin per aplikasi", ds: "Aplikasi aktif beserta izinnya, dan daftar peran aktif. `?aplikasi=` membatasi ke satu aplikasi.", sc: ["rbac:read"], pa: [{ nm: "aplikasi", in: "query", s: { t: "string", ex: "lms" }, ds: "Kode aplikasi" }], r: "object", it: "Objek" }, postRbacAplikasiByKodeIzin: { id: "postRbacAplikasiByKodeIzin", m: "POST", path: "/v1/rbac/aplikasi/{kode}/izin", tag: "RBAC: Aplikasi", sum: "Daftarkan izin aplikasi", ds: 'Aplikasi mendaftarkan seluruh katalog izinnya sendiri (token aplikasi milik klien `client_id_api` aplikasi itu, atau admin).\nBody: `{"izin": [{"kode": "lms.kelas.kelola", "nama": "Kelola kelas", "jenis": "aksi", "grup": "Kelas", "berlingkup": true}]}`.\nKode wajib diawali kode aplikasi. Izin yang sudah ada diperbarui; izin aplikasi itu yang tidak dikirim lagi dinonaktifkan.', sc: ["rbac:write"], pa: [{ nm: "kode", in: "path", s: { t: "string", ex: "lms", rf: { l: "/v1/rbac/aplikasi", k: "kode", d: "/v1/rbac/aplikasi/{kode}" } }, rq: 1, ds: "Kode aplikasi" }], b: { ct: "application/json", ref: "RbacDaftarIzinInput", s: { t: "object", pr: { izin: { t: "array", i: { t: "object", pr: { kode: { t: "string" }, nama: { t: "string" }, jenis: { t: "string", e: ["akses", "aksi", "menu", "data"] }, grup: { t: "string" }, keterangan: { t: "string" }, berlingkup: { t: "boolean" } }, rq: ["kode", "nama"] } } }, rq: ["izin"] }, rq: 1 }, r: "object", it: "Objek" }, putRbacPeranByIdIzin: { id: "putRbacPeranByIdIzin", m: "PUT", path: "/v1/rbac/peran/{id}/izin", tag: "RBAC: Peran", sum: "Atur seluruh izin peran", ds: 'Mengganti daftar izin peran sekaligus: `{"izin": ["lms.akses", "lms.kelas.*"]}`. Hanya admin.', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacAturIzinInput", s: { t: "object", pr: { izin: { t: "array", i: { t: "string" } } }, rq: ["izin"] }, rq: 1 }, r: "object", it: "RbacPeran" }, postRbacSinkron: { id: "postRbacSinkron", m: "POST", path: "/v1/rbac/sinkron", tag: "RBAC: Aplikasi", sum: "Sinkron katalog", ds: "Menambah aplikasi, izin, dan peran bawaan yang belum ada; izin scope API dari katalog scope terbaru; izin <modul>:kelola untuk modul pusat data. Aman diulang; perubahan admin tidak ditimpa. Sama dengan `php artisan rbac:sinkron`.", sc: ["rbac:admin"], r: "object", it: "Objek" }, getRbacKlienApi: { id: "getRbacKlienApi", m: "GET", path: "/v1/rbac/klien-api", tag: "RBAC: Klien API", sum: "Daftar klien API", ds: "Semua klien API SIAKAD (aplikasi integrasi) tanpa secret. Hanya admin (level ADMIN atau izin rbac:admin) dengan token pengguna.", sc: ["rbac:admin"], r: "list", it: "RbacKlienApi" }, postRbacKlienApi: { id: "postRbacKlienApi", m: "POST", path: "/v1/rbac/klien-api", tag: "RBAC: Klien API", sum: "Buat klien API", ds: 'Membuat klien API baru. `client_secret` hanya muncul sekali di jawaban ini, simpan di server aplikasi.\nBody: `{"name": "LMS", "scopes": ["krs:read"], "allow_user_login": false, "sso_audience": "lms", "allowed_ips": [], "allowed_origins": [], "prodi": [], "rate_limit": null}`.\n`sso_audience` = client_id aplikasi di SSO yang id_token-nya boleh ditukar menjadi token API (grant token-exchange).', sc: ["rbac:admin"], b: { ct: "application/json", ref: "RbacKlienApiInput", s: { t: "object", pr: { name: { t: "string" }, scopes: { t: "array", i: { t: "string" } }, allow_user_login: { t: "boolean" }, trust_user_ip: { t: "boolean" }, sso_audience: { t: "string", n: 1, ex: "lms" }, allowed_ips: { t: "array", i: { t: "string" } }, allowed_origins: { t: "array", i: { t: "string" } }, prodi: { t: "array", i: { t: "string" } }, rate_limit: { t: "integer", n: 1 }, active: { t: "boolean" } } }, rq: 1 }, r: "object", it: "RbacKlienApi" }, getRbacKlienApiScope: { id: "getRbacKlienApiScope", m: "GET", path: "/v1/rbac/klien-api/scope", tag: "RBAC: Klien API", sum: "Katalog scope API", ds: 'Semua scope yang bisa diberikan ke klien API: `{"krs:read": "keterangan", ...}`.', sc: ["rbac:admin"], r: "object", it: "Objek" }, getRbacKlienApiById: { id: "getRbacKlienApiById", m: "GET", path: "/v1/rbac/klien-api/{id}", tag: "RBAC: Klien API", sum: "Detail klien API", ds: "Tanpa secret.", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", ex: "cli_0123456789abcdef", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], r: "object", it: "RbacKlienApi" }, patchRbacKlienApiById: { id: "patchRbacKlienApiById", m: "PATCH", path: "/v1/rbac/klien-api/{id}", tag: "RBAC: Klien API", sum: "Ubah klien API", ds: "Kolom yang tidak dikirim tetap. `active: false` menonaktifkan klien (token barunya ditolak).", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], b: { ct: "application/json", ref: "RbacKlienApiInput", s: { t: "object", pr: { name: { t: "string" }, scopes: { t: "array", i: { t: "string" } }, allow_user_login: { t: "boolean" }, trust_user_ip: { t: "boolean" }, sso_audience: { t: "string", n: 1, ex: "lms" }, allowed_ips: { t: "array", i: { t: "string" } }, allowed_origins: { t: "array", i: { t: "string" } }, prodi: { t: "array", i: { t: "string" } }, rate_limit: { t: "integer", n: 1 }, active: { t: "boolean" } } }, rq: 1 }, r: "object", it: "RbacKlienApi" }, deleteRbacKlienApiById: { id: "deleteRbacKlienApiById", m: "DELETE", path: "/v1/rbac/klien-api/{id}", tag: "RBAC: Klien API", sum: "Hapus klien API", ds: "Klien dihapus permanen dan tautannya di rbac_aplikasi.client_id_api dikosongkan.", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], r: "none" }, postRbacKlienApiByIdSecret: { id: "postRbacKlienApiByIdSecret", m: "POST", path: "/v1/rbac/klien-api/{id}/secret", tag: "RBAC: Klien API", sum: "Ganti secret klien API", ds: "Secret lama langsung tidak berlaku; secret baru hanya muncul sekali.", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], r: "object", it: "Objek" }, getRbacLogApi: { id: "getRbacLogApi", m: "GET", path: "/v1/rbac/log-api", tag: "RBAC: Log API", sum: "Log permintaan API", ds: "Permintaan API terbaru lebih dulu: waktu, metode, path, query (tanpa nilai rahasia), status, durasi (ms), client_id,\nusername, level, lingkungan database, dan IP. Bawaan hari ini; `dari`/`sampai` (Y-m-d) paling lebar 31 hari.\nSaring dengan `client_id` (log satu aplikasi), `username`, `status` (`sukses`, `galat`, `4xx`, `5xx`, atau kode),\n`method`, dan `path` (potongan). Isi body, token, dan secret tidak pernah dicatat.", sc: ["rbac:admin"], pa: [{ nm: "client_id", in: "query", s: { t: "string" }, ds: "client_id klien API" }, { nm: "username", in: "query", s: { t: "string", rf: { l: "pengguna", k: "username" } }, ds: "Username" }, { nm: "status", in: "query", s: { t: "string" }, ds: "sukses|galat|2xx|4xx|5xx|kode" }, { nm: "method", in: "query", s: { t: "string" }, ds: "GET|POST|PUT|PATCH|DELETE" }, { nm: "path", in: "query", s: { t: "string" }, ds: "Potongan path, mis. /v1/mahasiswa" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Y-m-d" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Y-m-d" }], r: "list", it: "Objek" }, getRbacLogApiRingkasan: { id: "getRbacLogApiRingkasan", m: "GET", path: "/v1/rbac/log-api/ringkasan", tag: "RBAC: Log API", sum: "Ringkasan log API", ds: "Angka untuk grafik: jumlah permintaan, galat 4xx/5xx, tingkat galat, waktu tanggap rata-rata/p50/p95, pengguna unik,\nderet per jam (satu hari) atau per hari, sebaran status, 10 endpoint dan 10 klien teratas. Saringan sama dengan\n`/log-api`; bawaan 7 hari terakhir.", sc: ["rbac:admin"], pa: [{ nm: "client_id", in: "query", s: { t: "string" }, ds: "client_id klien API" }, { nm: "username", in: "query", s: { t: "string", rf: { l: "pengguna", k: "username" } }, ds: "Username" }, { nm: "status", in: "query", s: { t: "string" }, ds: "sukses|galat|2xx|4xx|5xx|kode" }, { nm: "method", in: "query", s: { t: "string" }, ds: "GET|POST|PUT|PATCH|DELETE" }, { nm: "path", in: "query", s: { t: "string" }, ds: "Potongan path" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Y-m-d" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Y-m-d" }], r: "object", it: "Objek" }, getRbacAksesLive: { id: "getRbacAksesLive", m: "GET", path: "/v1/rbac/akses-live", tag: "RBAC: Akses database live", sum: "Daftar pengajuan akses live", ds: "Aplikasi (klien API) baru memakai database **development**. Pengajuan akses database live dari aplikasi\n(`POST /v1/lingkungan/pengajuan-live`) atau admin, beserta riwayat keputusan. `?status=menunggu` untuk yang perlu diputuskan,\n`?client_id=` untuk satu aplikasi. Hanya admin dengan token pengguna dari aplikasi yang memakai database live.", sc: ["rbac:admin"], pa: [{ nm: "status", in: "query", s: { t: "string" }, ds: "menunggu|disetujui|ditolak|dicabut|dibatalkan" }, { nm: "client_id", in: "query", s: { t: "string" }, ds: "client_id klien API" }], r: "list", it: "RbacAksesLive" }, postRbacAksesLiveByIdSetujui: { id: "postRbacAksesLiveByIdSetujui", m: "POST", path: "/v1/rbac/akses-live/{id}/setujui", tag: "RBAC: Akses database live", sum: "Setujui pengajuan", ds: 'Aplikasi langsung memakai database live mulai permintaan berikutnya. Body opsional `{"catatan": "..."}`.', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", ex: "al_0123456789ab" }, rq: 1, ds: "ID pengajuan" }], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "RbacAksesLive" }, postRbacAksesLiveByIdTolak: { id: "postRbacAksesLiveByIdTolak", m: "POST", path: "/v1/rbac/akses-live/{id}/tolak", tag: "RBAC: Akses database live", sum: "Tolak pengajuan", ds: 'Aplikasi tetap memakai database development. Body opsional `{"catatan": "alasan penolakan"}`.', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", ex: "al_0123456789ab" }, rq: 1, ds: "ID pengajuan" }], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "RbacAksesLive" }, postRbacKlienApiByIdAksesLiveAjukan: { id: "postRbacKlienApiByIdAksesLiveAjukan", m: "POST", path: "/v1/rbac/klien-api/{id}/akses-live/ajukan", tag: "RBAC: Akses database live", sum: "Ajukan akses live untuk aplikasi", ds: 'Admin mengajukan atas nama aplikasi. Body `{"alasan": "..."}` (min. 10 karakter).', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "RbacAksesLive" }, postRbacKlienApiByIdAksesLive: { id: "postRbacKlienApiByIdAksesLive", m: "POST", path: "/v1/rbac/klien-api/{id}/akses-live", tag: "RBAC: Akses database live", sum: "Beri akses live langsung", ds: 'Menyetujui pengajuan yang menunggu, atau memberi akses live tanpa pengajuan (tercatat di riwayat). Body opsional `{"catatan": "..."}`.', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "RbacAksesLive" }, postRbacKlienApiByIdAksesLiveCabut: { id: "postRbacKlienApiByIdAksesLiveCabut", m: "POST", path: "/v1/rbac/klien-api/{id}/akses-live/cabut", tag: "RBAC: Akses database live", sum: "Cabut akses live", ds: 'Aplikasi kembali memakai database development mulai permintaan berikutnya (token yang sudah terbit ikut pindah). Body opsional `{"catatan": "..."}`.', sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/klien-api", k: "id", d: "/v1/rbac/klien-api/{id}" } }, rq: 1, ds: "client_id" }], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "object", it: "RbacAksesLive" }, getRbacDbDev: { id: "getRbacDbDev", m: "GET", path: "/v1/rbac/db-dev", tag: "RBAC: Database development", sum: "Status database development", ds: 'Diatur atau belum (DB_DEV_* di .env), terhubung, jumlah tabel, salinan terakhir dan yang sedang berjalan. `?tabel=1` menambah daftar tabel live (perkiraan baris dan ukuran) untuk pilihan "hanya struktur".', sc: ["rbac:admin"], pa: [{ nm: "tabel", in: "query", s: { t: "string" }, ds: "1 = sertakan daftar tabel live" }], r: "object", it: "Objek" }, getRbacDbDevSalinan: { id: "getRbacDbDevSalinan", m: "GET", path: "/v1/rbac/db-dev/salinan", tag: "RBAC: Database development", sum: "Riwayat salinan", ds: "50 salinan terakhir, terbaru lebih dulu, dengan kemajuan salinan yang sedang berjalan.", sc: ["rbac:admin"], r: "list", it: "RbacSalinanDev" }, postRbacDbDevSalinan: { id: "postRbacDbDevSalinan", m: "POST", path: "/v1/rbac/db-dev/salinan", tag: "RBAC: Database development", sum: "Salin data live ke development", ds: 'Meminta salinan seluruh database live ke database development. Database live hanya dibaca; isi development **diganti seluruhnya**.\nBody: `{"konfirmasi": "SALIN", "pribadi": true, "password": true, "tanpa_data": ["log_besar"]}`.\n`pribadi` menyamarkan email, telepon, NIK/KTP/NPWP/rekening, alamat, dan nama orang tua; `password` mengganti semua password akun\ndevelopment dengan DB_DEV_PASSWORD_AKUN (bawaan dev12345). Rahasia layanan pihak ketiga selalu dikosongkan.\nSalinan dijalankan cron (`php artisan dbdev:jalan`, ikut tools/auto_update.php) dalam beberapa menit; pantau lewat GET salinan/{id}.', sc: ["rbac:admin"], b: { ct: "application/json", ref: "Objek", s: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, rq: 1 }, r: "none" }, getRbacDbDevSalinanById: { id: "getRbacDbDevSalinanById", m: "GET", path: "/v1/rbac/db-dev/salinan/{id}", tag: "RBAC: Database development", sum: "Kemajuan salinan", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/db-dev/salinan", k: "id", d: "/v1/rbac/db-dev/salinan/{id}" } }, rq: 1, ds: "ID salinan" }], r: "object", it: "RbacSalinanDev" }, postRbacDbDevSalinanByIdBatal: { id: "postRbacDbDevSalinanByIdBatal", m: "POST", path: "/v1/rbac/db-dev/salinan/{id}/batal", tag: "RBAC: Database development", sum: "Batalkan salinan", ds: "Salinan yang menunggu langsung batal; yang sedang berjalan berhenti setelah tabel yang sedang disalin.", sc: ["rbac:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/db-dev/salinan", k: "id", d: "/v1/rbac/db-dev/salinan/{id}" } }, rq: 1, ds: "ID salinan" }], r: "object", it: "RbacSalinanDev" }, getRbacAplikasi: { id: "getRbacAplikasi", m: "GET", path: "/v1/rbac/aplikasi", tag: "RBAC: Aplikasi", sum: "Aplikasi: daftar", ds: "Aplikasi yang memakai role dan hak akses terpusat. kode menjadi awalan kode izinnya (mis. lms \u2192 lms.akses). client_id_api = klien API milik aplikasi (boleh mendaftarkan izinnya sendiri); client_id_sso = klien SSO (klaim permissions di token SSO). Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "jenis", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "sistem", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "aktif", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "kode", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "client_id_api", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "client_id_sso", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di kode, nama" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacAplikasi" }, postRbacAplikasi: { id: "postRbacAplikasi", m: "POST", path: "/v1/rbac/aplikasi", tag: "RBAC: Aplikasi", sum: "Aplikasi: tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacAplikasiInput", s: { t: "object", pr: { kode: { t: "string", max: 40, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, jenis: { t: "string", e: ["web", "mobile", "layanan", "api"], d: "web" }, url: { t: "string", f: "uri" }, client_id_api: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, client_id_sso: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" } }, rq: ["kode", "nama"] }, rq: 1 }, r: "object", it: "RbacAplikasi" }, getRbacAplikasiById: { id: "getRbacAplikasiById", m: "GET", path: "/v1/rbac/aplikasi/{id}", tag: "RBAC: Aplikasi", sum: "Aplikasi: detail", ds: "Aplikasi yang memakai role dan hak akses terpusat. kode menjadi awalan kode izinnya (mis. lms \u2192 lms.akses). client_id_api = klien API milik aplikasi (boleh mendaftarkan izinnya sendiri); client_id_sso = klien SSO (klaim permissions di token SSO). Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacAplikasi" }, putRbacAplikasiById: { id: "putRbacAplikasiById", m: "PUT", path: "/v1/rbac/aplikasi/{id}", tag: "RBAC: Aplikasi", sum: "Aplikasi: ubah", ds: "Hanya admin modul. Kolom yang tidak dikirim tidak berubah.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacAplikasiInput", s: { t: "object", pr: { kode: { t: "string", max: 40, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, jenis: { t: "string", e: ["web", "mobile", "layanan", "api"], d: "web" }, url: { t: "string", f: "uri" }, client_id_api: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, client_id_sso: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" } }, rq: ["kode", "nama"] }, rq: 1 }, r: "object", it: "RbacAplikasi" }, deleteRbacAplikasiById: { id: "deleteRbacAplikasiById", m: "DELETE", path: "/v1/rbac/aplikasi/{id}", tag: "RBAC: Aplikasi", sum: "Aplikasi: hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getRbacIzin: { id: "getRbacIzin", m: "GET", path: "/v1/rbac/izin", tag: "RBAC: Izin", sum: "Izin (permission): daftar", ds: "Katalog izin. Kode diawali kode aplikasinya (lms.kelas.kelola), kecuali izin aplikasi api yang sama dengan nama scope API (krs:read) atau <modul>:kelola. Izin bawaan (sistem) dibuat oleh sinkron katalog; hanya nama, grup, keterangan, dan aktif yang boleh diubah. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "aplikasi_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "jenis", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "berlingkup", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "sistem", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "aktif", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "kode", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "grup", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di kode, nama, grup" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacIzin" }, postRbacIzin: { id: "postRbacIzin", m: "POST", path: "/v1/rbac/izin", tag: "RBAC: Izin", sum: "Izin (permission): tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacIzinInput", s: { t: "object", pr: { aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, kode: { t: "string", max: 120, ds: "(unik)" }, jenis: { t: "string", e: ["akses", "aksi", "menu", "data", "scope"], d: "aksi" }, grup: { t: "string", max: 60 }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, berlingkup: { t: "boolean", d: "1" }, aktif: { t: "boolean", d: "1" } }, rq: ["aplikasi_id", "kode", "nama"] }, rq: 1 }, r: "object", it: "RbacIzin" }, getRbacIzinById: { id: "getRbacIzinById", m: "GET", path: "/v1/rbac/izin/{id}", tag: "RBAC: Izin", sum: "Izin (permission): detail", ds: "Katalog izin. Kode diawali kode aplikasinya (lms.kelas.kelola), kecuali izin aplikasi api yang sama dengan nama scope API (krs:read) atau <modul>:kelola. Izin bawaan (sistem) dibuat oleh sinkron katalog; hanya nama, grup, keterangan, dan aktif yang boleh diubah. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/izin", k: "id", d: "/v1/rbac/izin/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacIzin" }, putRbacIzinById: { id: "putRbacIzinById", m: "PUT", path: "/v1/rbac/izin/{id}", tag: "RBAC: Izin", sum: "Izin (permission): ubah", ds: "Hanya admin modul. Kolom yang tidak dikirim tidak berubah.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/izin", k: "id", d: "/v1/rbac/izin/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacIzinInput", s: { t: "object", pr: { aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, kode: { t: "string", max: 120, ds: "(unik)" }, jenis: { t: "string", e: ["akses", "aksi", "menu", "data", "scope"], d: "aksi" }, grup: { t: "string", max: 60 }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, berlingkup: { t: "boolean", d: "1" }, aktif: { t: "boolean", d: "1" } }, rq: ["aplikasi_id", "kode", "nama"] }, rq: 1 }, r: "object", it: "RbacIzin" }, deleteRbacIzinById: { id: "deleteRbacIzinById", m: "DELETE", path: "/v1/rbac/izin/{id}", tag: "RBAC: Izin", sum: "Izin (permission): hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/izin", k: "id", d: "/v1/rbac/izin/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getRbacPeran: { id: "getRbacPeran", m: "GET", path: "/v1/rbac/peran", tag: "RBAC: Peran", sum: "Peran (role): daftar", ds: "Peran mewarisi semua izin peran induknya (induk_id). lingkup unit: penugasan wajib menyebut unit dan izinnya hanya berlaku di unit itu dan turunannya. level_siakad: level lama yang setara. boleh_didelegasikan: boleh diberikan pengelola hak akses unit (rbac:kelola), bukan hanya admin. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "aplikasi_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "induk_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "lingkup", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "boleh_didelegasikan", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "sistem", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "aktif", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "kode", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "level_siakad", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di kode, nama" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacPeran" }, postRbacPeran: { id: "postRbacPeran", m: "POST", path: "/v1/rbac/peran", tag: "RBAC: Peran", sum: "Peran (role): tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacPeranInput", s: { t: "object", pr: { kode: { t: "string", max: 60, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, induk_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, lingkup: { t: "string", e: ["global", "unit"], d: "global" }, jenis_unit: { t: "string", max: 100 }, level_siakad: { t: "string", max: 20, p: "^[A-Za-z0-9._\\-/]+$" }, boleh_didelegasikan: { t: "boolean", d: "0" }, maks_pemegang: { t: "integer", min: 1, mx: 1e5 }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" } }, rq: ["kode", "nama"] }, rq: 1 }, r: "object", it: "RbacPeran" }, getRbacPeranById: { id: "getRbacPeranById", m: "GET", path: "/v1/rbac/peran/{id}", tag: "RBAC: Peran", sum: "Peran (role): detail", ds: "Peran mewarisi semua izin peran induknya (induk_id). lingkup unit: penugasan wajib menyebut unit dan izinnya hanya berlaku di unit itu dan turunannya. level_siakad: level lama yang setara. boleh_didelegasikan: boleh diberikan pengelola hak akses unit (rbac:kelola), bukan hanya admin. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacPeran" }, putRbacPeranById: { id: "putRbacPeranById", m: "PUT", path: "/v1/rbac/peran/{id}", tag: "RBAC: Peran", sum: "Peran (role): ubah", ds: "Hanya admin modul. Kolom yang tidak dikirim tidak berubah.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacPeranInput", s: { t: "object", pr: { kode: { t: "string", max: 60, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi", rf: { l: "/v1/rbac/aplikasi", k: "id", d: "/v1/rbac/aplikasi/{id}" } }, induk_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, lingkup: { t: "string", e: ["global", "unit"], d: "global" }, jenis_unit: { t: "string", max: 100 }, level_siakad: { t: "string", max: 20, p: "^[A-Za-z0-9._\\-/]+$" }, boleh_didelegasikan: { t: "boolean", d: "0" }, maks_pemegang: { t: "integer", min: 1, mx: 1e5 }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" } }, rq: ["kode", "nama"] }, rq: 1 }, r: "object", it: "RbacPeran" }, deleteRbacPeranById: { id: "deleteRbacPeranById", m: "DELETE", path: "/v1/rbac/peran/{id}", tag: "RBAC: Peran", sum: "Peran (role): hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getRbacPeranIzin: { id: "getRbacPeranIzin", m: "GET", path: "/v1/rbac/peran-izin", tag: "RBAC: Peran", sum: "Izin peran: daftar", ds: "Satu izin milik satu peran: kode izin persis, atau pola dengan * (mis. lms.*, *.akses). Untuk mengganti seluruh izin peran sekaligus pakai PUT /v1/rbac/peran/{id}/izin. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "peran_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "izin", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di izin" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacPeranIzin" }, postRbacPeranIzin: { id: "postRbacPeranIzin", m: "POST", path: "/v1/rbac/peran-izin", tag: "RBAC: Peran", sum: "Izin peran: tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacPeranIzinInput", s: { t: "object", pr: { peran_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, izin: { t: "string", max: 120 } }, rq: ["peran_id", "izin"] }, rq: 1 }, r: "object", it: "RbacPeranIzin" }, getRbacPeranIzinById: { id: "getRbacPeranIzinById", m: "GET", path: "/v1/rbac/peran-izin/{id}", tag: "RBAC: Peran", sum: "Izin peran: detail", ds: "Satu izin milik satu peran: kode izin persis, atau pola dengan * (mis. lms.*, *.akses). Untuk mengganti seluruh izin peran sekaligus pakai PUT /v1/rbac/peran/{id}/izin. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran-izin", k: "id", d: "/v1/rbac/peran-izin/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacPeranIzin" }, deleteRbacPeranIzinById: { id: "deleteRbacPeranIzinById", m: "DELETE", path: "/v1/rbac/peran-izin/{id}", tag: "RBAC: Peran", sum: "Izin peran: hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/peran-izin", k: "id", d: "/v1/rbac/peran-izin/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getRbacPenugasan: { id: "getRbacPenugasan", m: "GET", path: "/v1/rbac/penugasan", tag: "RBAC: Penugasan", sum: "Penugasan peran: daftar", ds: "Peran yang diberikan ke pengguna SIAKAD (username), opsional per unit (induk_unit), dengan masa berlaku mulai/selesai. Admin memberi peran apa pun; pengelola hak akses (rbac:kelola) hanya peran yang boleh didelegasikan, di unit kewenangannya, dan bukan untuk dirinya sendiri. Pengguna bisa melihat penugasannya sendiri. Pengelola melihat semua; pengguna lain hanya miliknya sendiri (username).", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "username", in: "query", s: { t: "string", rf: { l: "pengguna", k: "username" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "peran_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "unit_id", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "aktif", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "sumber", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di username, nomor_sk, alasan" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacPenugasan" }, postRbacPenugasan: { id: "postRbacPenugasan", m: "POST", path: "/v1/rbac/penugasan", tag: "RBAC: Penugasan", sum: "Penugasan peran: tambah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacPenugasanInput", s: { t: "object", pr: { username: { t: "string", ds: "user.username", rf: { l: "pengguna", k: "username" } }, peran_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, aktif: { t: "boolean", d: "1" }, sumber: { t: "string", e: ["manual", "impor", "aplikasi"], d: "manual" }, nomor_sk: { t: "string", max: 100 }, alasan: { t: "string", max: 255 } }, rq: ["username", "peran_id"] }, rq: 1 }, r: "object", it: "RbacPenugasan" }, getRbacPenugasanById: { id: "getRbacPenugasanById", m: "GET", path: "/v1/rbac/penugasan/{id}", tag: "RBAC: Penugasan", sum: "Penugasan peran: detail", ds: "Peran yang diberikan ke pengguna SIAKAD (username), opsional per unit (induk_unit), dengan masa berlaku mulai/selesai. Admin memberi peran apa pun; pengelola hak akses (rbac:kelola) hanya peran yang boleh didelegasikan, di unit kewenangannya, dan bukan untuk dirinya sendiri. Pengguna bisa melihat penugasannya sendiri. Pengelola melihat semua; pengguna lain hanya miliknya sendiri (username).", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/penugasan", k: "id", d: "/v1/rbac/penugasan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacPenugasan" }, putRbacPenugasanById: { id: "putRbacPenugasanById", m: "PUT", path: "/v1/rbac/penugasan/{id}", tag: "RBAC: Penugasan", sum: "Penugasan peran: ubah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya). Kolom yang tidak dikirim tidak berubah.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/penugasan", k: "id", d: "/v1/rbac/penugasan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacPenugasanInput", s: { t: "object", pr: { username: { t: "string", ds: "user.username", rf: { l: "pengguna", k: "username" } }, peran_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, aktif: { t: "boolean", d: "1" }, sumber: { t: "string", e: ["manual", "impor", "aplikasi"], d: "manual" }, nomor_sk: { t: "string", max: 100 }, alasan: { t: "string", max: 255 } }, rq: ["username", "peran_id"] }, rq: 1 }, r: "object", it: "RbacPenugasan" }, deleteRbacPenugasanById: { id: "deleteRbacPenugasanById", m: "DELETE", path: "/v1/rbac/penugasan/{id}", tag: "RBAC: Penugasan", sum: "Penugasan peran: hapus", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/penugasan", k: "id", d: "/v1/rbac/penugasan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, postRbacPenugasanByIdCabut: { id: "postRbacPenugasanByIdCabut", m: "POST", path: "/v1/rbac/penugasan/{id}/cabut", tag: "RBAC: Penugasan", sum: "Penugasan peran: Cabut peran", ds: "Menonaktifkan penugasan dan mengisi tanggal selesai hari ini (riwayat tetap tersimpan). Pengelola modul.", sc: ["rbac:write"], oleh: "pengelola", pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/penugasan", k: "id", d: "/v1/rbac/penugasan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "RbacPenugasanCabutInput", s: { t: "object", pr: { alasan: { t: "string", max: 255 } } }, rq: 1 }, r: "object", it: "RbacPenugasan" }, getRbacLevel: { id: "getRbacLevel", m: "GET", path: "/v1/rbac/level", tag: "RBAC: Pemetaan", sum: "Peran untuk level lama: daftar", ds: "Setiap pengguna dengan level lama SIAKAD ini (user.level) otomatis memegang peran tersebut secara global. Level lama tetap menentukan menu SIAKAD web; pemetaan ini menambah peran/izin di atasnya. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "peran_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "level", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacLevel" }, postRbacLevel: { id: "postRbacLevel", m: "POST", path: "/v1/rbac/level", tag: "RBAC: Pemetaan", sum: "Peran untuk level lama: tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacLevelInput", s: { t: "object", pr: { level: { t: "string", max: 20, p: "^[A-Za-z0-9._\\-/]+$" }, peran_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } } }, rq: ["level", "peran_id"] }, rq: 1 }, r: "object", it: "RbacLevel" }, getRbacLevelById: { id: "getRbacLevelById", m: "GET", path: "/v1/rbac/level/{id}", tag: "RBAC: Pemetaan", sum: "Peran untuk level lama: detail", ds: "Setiap pengguna dengan level lama SIAKAD ini (user.level) otomatis memegang peran tersebut secara global. Level lama tetap menentukan menu SIAKAD web; pemetaan ini menambah peran/izin di atasnya. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/level", k: "id", d: "/v1/rbac/level/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacLevel" }, deleteRbacLevelById: { id: "deleteRbacLevelById", m: "DELETE", path: "/v1/rbac/level/{id}", tag: "RBAC: Pemetaan", sum: "Peran untuk level lama: hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/level", k: "id", d: "/v1/rbac/level/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getRbacJabatan: { id: "getRbacJabatan", m: "GET", path: "/v1/rbac/jabatan", tag: "RBAC: Pemetaan", sum: "Peran untuk jabatan: daftar", ds: "Pejabat aktif (induk_pejabat, dicocokkan lewat username/NIDN/NIK karyawan) otomatis memegang peran ini di unit jabatannya selama masa jabatan. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "page", in: "query", s: { t: "integer", min: 1, d: 1 }, ds: "Nomor halaman, mulai 1." }, { nm: "per_page", in: "query", s: { t: "integer", min: 1, mx: 100, d: 25 }, ds: "Jumlah data per halaman (maksimal 100)." }, { nm: "jabatan_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/jabatan", k: "id", d: "/v1/rbac/jabatan/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "peran_id", in: "query", s: { t: "string", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal awal (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Tanggal akhir (YYYY-MM-DD)" }, { nm: "urut", in: "query", s: { t: "string" }, ds: 'Nama kolom, awali "-" untuk menurun' }], r: "list", it: "RbacJabatan" }, postRbacJabatan: { id: "postRbacJabatan", m: "POST", path: "/v1/rbac/jabatan", tag: "RBAC: Pemetaan", sum: "Peran untuk jabatan: tambah", ds: "Hanya admin modul.", sc: ["rbac:write"], b: { ct: "application/json", ref: "RbacJabatanInput", s: { t: "object", pr: { jabatan_id: { t: "integer", ds: "ID di induk_jabatan", rf: { l: "/v1/induk/jabatan", k: "id", d: "/v1/induk/jabatan/{id}" } }, peran_id: { t: "integer", ds: "ID di rbac_peran", rf: { l: "/v1/rbac/peran", k: "id", d: "/v1/rbac/peran/{id}" } } }, rq: ["jabatan_id", "peran_id"] }, rq: 1 }, r: "object", it: "RbacJabatan" }, getRbacJabatanById: { id: "getRbacJabatanById", m: "GET", path: "/v1/rbac/jabatan/{id}", tag: "RBAC: Pemetaan", sum: "Peran untuk jabatan: detail", ds: "Pejabat aktif (induk_pejabat, dicocokkan lewat username/NIDN/NIK karyawan) otomatis memegang peran ini di unit jabatannya selama masa jabatan. Semua pemilik token ber-scope rbac:read.", sc: ["rbac:read"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/jabatan", k: "id", d: "/v1/rbac/jabatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "RbacJabatan" }, deleteRbacJabatanById: { id: "deleteRbacJabatanById", m: "DELETE", path: "/v1/rbac/jabatan/{id}", tag: "RBAC: Pemetaan", sum: "Peran untuk jabatan: hapus", ds: "Hanya admin modul.", sc: ["rbac:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/rbac/jabatan", k: "id", d: "/v1/rbac/jabatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" } };
|
|
10
|
+
var mandiri = ["getLingkungan", "postLingkunganPengajuanLive", "getRbacSaya", "postRbacCek", "getRbacPemegang", "getRbacKatalog", "postRbacSinkron", "getRbacKlienApiScope", "getRbacLogApiRingkasan", "postRbacAksesLiveByIdSetujui", "postRbacAksesLiveByIdTolak", "postRbacKlienApiByIdAksesLiveAjukan", "postRbacKlienApiByIdAksesLiveCabut", "getRbacDbDev"];
|
|
11
|
+
var skema = { Objek: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, RbacHakAkses: { t: "object", pr: { username: { t: "string" }, nama: { t: "string" }, level: { t: "string", ds: "Level lama SIAKAD (user.level)" }, peran: { t: "array", i: { t: "object", pr: { kode: { t: "string" }, nama: { t: "string" }, sumber: { t: "string", e: ["level", "penugasan", "jabatan"] }, unit: { t: "object" }, aplikasi: { t: "string" }, level_siakad: { t: "string" }, mulai: { t: "string" }, selesai: { t: "string" } } } }, kode_peran: { t: "array", i: { t: "string" } }, izin: { t: "array", i: { t: "object", pr: { kode: { t: "string" }, aplikasi: { t: "string" }, lingkup: { t: "string", e: ["semua", "unit"] }, unit: { t: "array", i: { t: "object" } } } } }, pola: { t: "object", ds: 'Pola izin mentah => "semua" atau daftar ID unit' }, aplikasi: { t: "array", i: { t: "object", pr: { kode: { t: "string" }, nama: { t: "string" }, jenis: { t: "string" }, url: { t: "string" }, client_id_sso: { t: "string" }, akses: { t: "boolean" } } } }, scope_api: { t: "array", i: { t: "string" } }, level_siakad_tersedia: { t: "array", ds: "Level lama yang setara dengan peran yang dipegang", i: { t: "string" } } } }, RbacCek: { t: "object", pr: { username: { t: "string" }, unit_id: { t: "integer", n: 1 }, semua_boleh: { t: "boolean" }, izin: { t: "object" } } }, RbacPeran: { t: "object", ds: "Peran (role) (tabel rbac_peran)", pr: { id: { t: "integer" }, kode: { t: "string", max: 60, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi" }, induk_id: { t: "integer", ds: "ID di rbac_peran" }, lingkup: { t: "string", e: ["global", "unit"], d: "global" }, jenis_unit: { t: "string", max: 100 }, level_siakad: { t: "string", max: 20, p: "^[A-Za-z0-9._\\-/]+$" }, boleh_didelegasikan: { t: "boolean", d: "0" }, maks_pemegang: { t: "integer", min: 1, mx: 1e5 }, sistem: { t: "boolean", ds: "(hanya baca)", ro: 1 }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacKlienApi: { t: "object", pr: { id: { t: "string" }, name: { t: "string" }, scopes: { t: "array", i: { t: "string" } }, allow_user_login: { t: "boolean" }, trust_user_ip: { t: "boolean" }, sso_audience: { t: "string", n: 1 }, allowed_ips: { t: "array", i: { t: "string" } }, allowed_origins: { t: "array", i: { t: "string" } }, prodi: { t: "array", i: { t: "string" } }, rate_limit: { t: "integer", n: 1 }, active: { t: "boolean" }, created_at: { t: "string" }, logo_uri: { t: "string", n: 1 }, client_secret: { t: "string", ds: "Hanya saat dibuat" } } }, RbacAksesLive: { t: "object", pr: { id: { t: "string" }, client_id: { t: "string" }, nama_klien: { t: "string", n: 1 }, klien_ada: { t: "boolean" }, status: { t: "string", e: ["menunggu", "disetujui", "ditolak", "dicabut", "dibatalkan"] }, alasan: { t: "string" }, diajukan_oleh: { t: "string" }, diajukan_at: { t: "string" }, diputuskan_oleh: { t: "string", n: 1 }, diputuskan_at: { t: "string", n: 1 }, catatan: { t: "string", n: 1 } } }, RbacSalinanDev: { t: "object", pr: { id: { t: "string" }, status: { t: "string", e: ["menunggu", "berjalan", "selesai", "gagal", "dibatalkan"] }, opsi: { t: "object" }, dibuat_oleh: { t: "string" }, dibuat_at: { t: "string" }, mulai_at: { t: "string", n: 1 }, selesai_at: { t: "string", n: 1 }, tabel_total: { t: "integer" }, tabel_selesai: { t: "integer" }, tabel_sekarang: { t: "string", n: 1 }, baris: { t: "integer" }, disamarkan: { t: "array", i: { t: "object" } }, pesan: { t: "string", n: 1 }, galat: { t: "string", n: 1 } } }, RbacAplikasi: { t: "object", ds: "Aplikasi (tabel rbac_aplikasi)", pr: { id: { t: "integer" }, kode: { t: "string", max: 40, p: "^[A-Za-z0-9._\\-/]+$", ds: "(unik)" }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, jenis: { t: "string", e: ["web", "mobile", "layanan", "api"], d: "web" }, url: { t: "string", f: "uri" }, client_id_api: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, client_id_sso: { t: "string", max: 64, p: "^[A-Za-z0-9._\\-/]+$" }, sistem: { t: "boolean", ds: "(hanya baca)", ro: 1 }, aktif: { t: "boolean", d: "1" }, urut: { t: "integer", min: 0, mx: 65535, d: "0" }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacIzin: { t: "object", ds: "Izin (permission) (tabel rbac_izin)", pr: { id: { t: "integer" }, aplikasi_id: { t: "integer", ds: "ID di rbac_aplikasi" }, kode: { t: "string", max: 120, ds: "(unik)" }, jenis: { t: "string", e: ["akses", "aksi", "menu", "data", "scope"], d: "aksi" }, grup: { t: "string", max: 60 }, nama: { t: "string", max: 150 }, keterangan: { t: "string", max: 255 }, berlingkup: { t: "boolean", d: "1" }, sistem: { t: "boolean", ds: "(hanya baca)", ro: 1 }, aktif: { t: "boolean", d: "1" }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacPeranIzin: { t: "object", ds: "Izin peran (tabel rbac_peran_izin)", pr: { id: { t: "integer" }, peran_id: { t: "integer", ds: "ID di rbac_peran" }, izin: { t: "string", max: 120 }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacPenugasan: { t: "object", ds: "Penugasan peran (tabel rbac_penugasan)", pr: { id: { t: "integer" }, username: { t: "string", ds: "user.username" }, peran_id: { t: "integer", ds: "ID di rbac_peran" }, unit_id: { t: "integer", ds: "ID di induk_unit" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, aktif: { t: "boolean", d: "1" }, sumber: { t: "string", e: ["manual", "impor", "aplikasi"], d: "manual" }, nomor_sk: { t: "string", max: 100 }, alasan: { t: "string", max: 255 }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacLevel: { t: "object", ds: "Peran untuk level lama (tabel rbac_level)", pr: { id: { t: "integer" }, level: { t: "string", max: 20, p: "^[A-Za-z0-9._\\-/]+$" }, peran_id: { t: "integer", ds: "ID di rbac_peran" }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } }, RbacJabatan: { t: "object", ds: "Peran untuk jabatan (tabel rbac_jabatan)", pr: { id: { t: "integer" }, jabatan_id: { t: "integer", ds: "ID di induk_jabatan" }, peran_id: { t: "integer", ds: "ID di rbac_peran" }, created_at: { t: "string", n: 1, f: "date-time" }, updated_at: { t: "string", n: 1, f: "date-time" } } } };
|
|
12
|
+
var akses_default = { key, resources, ops, mandiri, skema };
|
|
13
|
+
|
|
14
|
+
exports.default = akses_default;
|
|
15
|
+
exports.key = key;
|
|
16
|
+
exports.mandiri = mandiri;
|
|
17
|
+
exports.ops = ops;
|
|
18
|
+
exports.resources = resources;
|
|
19
|
+
exports.skema = skema;
|
|
20
|
+
//# sourceMappingURL=akses-AUPQD6YN.cjs.map
|