unipo-ui 1.2.0 → 1.3.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.
Files changed (173) hide show
  1. package/cli/index.mjs +53 -4
  2. package/dist/admisi-YCOE3DMH.cjs +20 -0
  3. package/dist/admisi-YXCTBECZ.js +11 -0
  4. package/dist/akademik-PJGL6MSP.cjs +20 -0
  5. package/dist/akademik-TPDFEZGF.js +11 -0
  6. package/dist/akses-AUPQD6YN.cjs +20 -0
  7. package/dist/akses-V5XIMBWT.js +11 -0
  8. package/dist/arsip-2T7IEION.cjs +20 -0
  9. package/dist/arsip-LDRV7FYX.js +11 -0
  10. package/dist/cbt-4N6COVIN.js +11 -0
  11. package/dist/cbt-GMQSR7TP.cjs +20 -0
  12. package/dist/chunk-34OKV63Q.js +122 -0
  13. package/dist/chunk-34OKV63Q.js.map +1 -0
  14. package/dist/chunk-3O5ELKBH.cjs +18 -0
  15. package/dist/chunk-3O5ELKBH.cjs.map +1 -0
  16. package/dist/chunk-4BQOABRV.js +462 -0
  17. package/dist/chunk-4BQOABRV.js.map +1 -0
  18. package/dist/{chunk-DEF5CA7C.cjs → chunk-5VNCBW4R.cjs} +282 -1165
  19. package/dist/chunk-5VNCBW4R.cjs.map +1 -0
  20. package/dist/{chunk-SJ4DJOMZ.js → chunk-7AJ4LW5H.js} +163 -1019
  21. package/dist/chunk-7AJ4LW5H.js.map +1 -0
  22. package/dist/chunk-JASW45YF.cjs +510 -0
  23. package/dist/chunk-JASW45YF.cjs.map +1 -0
  24. package/dist/chunk-JSUHAYQ4.js +15 -0
  25. package/dist/chunk-JSUHAYQ4.js.map +1 -0
  26. package/dist/chunk-LN6HZMPI.js +1006 -0
  27. package/dist/chunk-LN6HZMPI.js.map +1 -0
  28. package/dist/chunk-LNJTDEQR.cjs +1937 -0
  29. package/dist/chunk-LNJTDEQR.cjs.map +1 -0
  30. package/dist/chunk-MKQEH7QS.cjs +1058 -0
  31. package/dist/chunk-MKQEH7QS.cjs.map +1 -0
  32. package/dist/chunk-TAKLMRU7.cjs +150 -0
  33. package/dist/chunk-TAKLMRU7.cjs.map +1 -0
  34. package/dist/chunk-TYCRRYCQ.js +1843 -0
  35. package/dist/chunk-TYCRRYCQ.js.map +1 -0
  36. package/dist/crm-C4XGSG6O.js +11 -0
  37. package/dist/crm-LTVCDNMK.cjs +20 -0
  38. package/dist/dasbor-OJLMSFTF.cjs +20 -0
  39. package/dist/dasbor-Y3UPFYFE.js +11 -0
  40. package/dist/edom-3GZUUB7H.cjs +20 -0
  41. package/dist/edom-K4Y2NV4K.js +11 -0
  42. package/dist/fakultas-DJRUVJBV.js +11 -0
  43. package/dist/fakultas-VVAQOPUX.cjs +20 -0
  44. package/dist/filter-D54KALbB.d.cts +436 -0
  45. package/dist/filter-D54KALbB.d.ts +436 -0
  46. package/dist/helpdesk-AWVC7BPE.cjs +20 -0
  47. package/dist/helpdesk-BAOXAU6G.js +11 -0
  48. package/dist/humas-7BMMJ3WF.js +11 -0
  49. package/dist/humas-H56JFUW6.cjs +20 -0
  50. package/dist/ikon.cjs +125 -0
  51. package/dist/ikon.cjs.map +1 -0
  52. package/dist/ikon.d.cts +140 -0
  53. package/dist/ikon.d.ts +140 -0
  54. package/dist/ikon.js +6 -0
  55. package/dist/ikon.js.map +1 -0
  56. package/dist/iku-7JLF2NIH.js +11 -0
  57. package/dist/iku-F47ZLMYJ.cjs +20 -0
  58. package/dist/index.cjs +544 -257
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.d.cts +192 -2
  61. package/dist/index.d.ts +192 -2
  62. package/dist/index.js +126 -4
  63. package/dist/index.js.map +1 -1
  64. package/dist/induk-BGTGKRLL.js +11 -0
  65. package/dist/induk-DLYDMZAM.cjs +20 -0
  66. package/dist/integrasi-4VXNGA3V.cjs +20 -0
  67. package/dist/integrasi-IP3WWDO7.js +11 -0
  68. package/dist/kalender-DGQDGJCL.cjs +20 -0
  69. package/dist/kalender-FGGUBYKZ.js +11 -0
  70. package/dist/karier-H3HBFCQQ.js +11 -0
  71. package/dist/karier-QTU2P5YD.cjs +20 -0
  72. package/dist/katalog.cjs +1709 -0
  73. package/dist/katalog.cjs.map +1 -0
  74. package/dist/katalog.d.cts +645 -0
  75. package/dist/katalog.d.ts +645 -0
  76. package/dist/katalog.js +1626 -0
  77. package/dist/katalog.js.map +1 -0
  78. package/dist/kelulusan-BHFQM5N4.cjs +20 -0
  79. package/dist/kelulusan-ZR7CM6I5.js +11 -0
  80. package/dist/kemahasiswaan-EINWXAY7.cjs +20 -0
  81. package/dist/kemahasiswaan-NH2LEDH7.js +11 -0
  82. package/dist/kerjasama-FAOHZCML.js +11 -0
  83. package/dist/kerjasama-TXWJOU4Y.cjs +20 -0
  84. package/dist/keu-4TXF4FEP.cjs +20 -0
  85. package/dist/keu-SD7UOCDB.js +11 -0
  86. package/dist/kurikulum-SRO7TJYI.cjs +20 -0
  87. package/dist/kurikulum-XT7PZJOK.js +11 -0
  88. package/dist/layanan-RQ2AWCQ5.cjs +20 -0
  89. package/dist/layanan-Y6WUCSD2.js +11 -0
  90. package/dist/lms-5JYOSLBI.cjs +20 -0
  91. package/dist/lms-NTXMSHG2.js +11 -0
  92. package/dist/lppm-7DH7PRF3.cjs +20 -0
  93. package/dist/lppm-UXYGIOIF.js +11 -0
  94. package/dist/master-GKTTAKLF.cjs +20 -0
  95. package/dist/master-ZG4SPPDU.js +11 -0
  96. package/dist/mbkm-OGR72BTB.js +11 -0
  97. package/dist/mbkm-URKJHUIQ.cjs +20 -0
  98. package/dist/notifikasi-FMA26M4I.js +11 -0
  99. package/dist/notifikasi-QDCYIX7G.cjs +20 -0
  100. package/dist/pddikti-RJVYY2J4.cjs +20 -0
  101. package/dist/pddikti-VF2PXDKA.js +11 -0
  102. package/dist/{content-DaJPx5LX.d.cts → pemeliharaan-D5S-1lqW.d.ts} +38 -434
  103. package/dist/{content-DaJPx5LX.d.ts → pemeliharaan-Dr0HSxvZ.d.cts} +38 -434
  104. package/dist/perpustakaan-5RL33XG2.js +11 -0
  105. package/dist/perpustakaan-JXZW43MJ.cjs +20 -0
  106. package/dist/pilih-BEes_D3n.d.cts +205 -0
  107. package/dist/pilih-CEKqXMUS.d.ts +205 -0
  108. package/dist/pmb-EGTWW2ZH.cjs +20 -0
  109. package/dist/pmb-G7EAFJ3R.js +11 -0
  110. package/dist/portal-EI7TXN7H.cjs +20 -0
  111. package/dist/portal-MMUYX3RA.js +11 -0
  112. package/dist/portal-api-BJLO6AGI.js +11 -0
  113. package/dist/portal-api-Q6B3X6ZV.cjs +20 -0
  114. package/dist/profil-46FV46VH.cjs +20 -0
  115. package/dist/profil-4BIXIM6D.js +11 -0
  116. package/dist/referensi-HNYOJGNX.js +11 -0
  117. package/dist/referensi-VOT5BRCL.cjs +20 -0
  118. package/dist/registry.json +606 -4
  119. package/dist/repositori-2MJ43NXM.js +11 -0
  120. package/dist/repositori-KFXVJB7B.cjs +20 -0
  121. package/dist/rpl-2ZXHNSPF.js +11 -0
  122. package/dist/rpl-YF5MV2YA.cjs +20 -0
  123. package/dist/sarpras-CQ7QKVUN.js +11 -0
  124. package/dist/sarpras-XGPHHFCG.cjs +20 -0
  125. package/dist/scss/components/_animasi.scss +280 -0
  126. package/dist/scss/components/_ikon.scss +249 -0
  127. package/dist/scss/components/_katalog.scss +662 -0
  128. package/dist/scss/components/_platform.scss +364 -0
  129. package/dist/scss/index.scss +4 -0
  130. package/dist/sdm-N6LE66PP.cjs +20 -0
  131. package/dist/sdm-QKBXH3JF.js +11 -0
  132. package/dist/siakad.cjs +1389 -2915
  133. package/dist/siakad.cjs.map +1 -1
  134. package/dist/siakad.d.cts +31 -196
  135. package/dist/siakad.d.ts +31 -196
  136. package/dist/siakad.js +446 -2194
  137. package/dist/siakad.js.map +1 -1
  138. package/dist/spmi-J37NEYIU.js +11 -0
  139. package/dist/spmi-N6EU7KNC.cjs +20 -0
  140. package/dist/tracer-G6DDXVXC.cjs +20 -0
  141. package/dist/tracer-M3FTNWBG.js +11 -0
  142. package/dist/ui-unipo.css +1650 -0
  143. package/dist/ui-unipo.min.css +1 -1
  144. package/package.json +25 -3
  145. package/src/components/animasi.tsx +186 -0
  146. package/src/components/modal.tsx +113 -0
  147. package/src/components/overlays.tsx +6 -1
  148. package/src/components/pemeliharaan.tsx +152 -0
  149. package/src/components/platform.tsx +94 -0
  150. package/src/ikon/ilustrasi.tsx +283 -0
  151. package/src/ikon/index.ts +7 -0
  152. package/src/ikon/kotak.tsx +30 -0
  153. package/src/ikon/unipo.tsx +326 -0
  154. package/src/index.ts +8 -0
  155. package/src/katalog/aturan.ts +488 -0
  156. package/src/katalog/data/id.ts +749 -0
  157. package/src/katalog/data/indeks.json +1 -0
  158. package/src/katalog/data/muat.ts +47 -0
  159. package/src/katalog/ikon.tsx +11 -0
  160. package/src/katalog/index.ts +13 -0
  161. package/src/katalog/isian.tsx +372 -0
  162. package/src/katalog/katalog.tsx +138 -0
  163. package/src/katalog/kelola.tsx +620 -0
  164. package/src/katalog/modul.tsx +336 -0
  165. package/src/katalog/tampil.tsx +147 -0
  166. package/src/katalog/tipe.ts +141 -0
  167. package/src/katalog/wizard.tsx +155 -0
  168. package/src/lib/platform.ts +91 -0
  169. package/src/siakad/index.ts +1 -0
  170. package/src/siakad/pemeliharaan.tsx +118 -0
  171. package/src/siakad/provider.tsx +2 -0
  172. package/dist/chunk-DEF5CA7C.cjs.map +0 -1
  173. package/dist/chunk-SJ4DJOMZ.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ // src/katalog/data/modul/integrasi.json
3
+ var key = "integrasi";
4
+ var resources = [{ id: "/v1/integrasi/ai/penyedia", tag: "Integrasi: AI", title: "Penyedia AI yang aktif", base: "/v1/integrasi/ai/penyedia", list: "getIntegrasiAiPenyedia", actions: [], children: [] }, { id: "/v1/integrasi/antrean", tag: "Integrasi: Cache", title: "Cache", base: "/v1/integrasi/antrean", item: "/v1/integrasi/antrean/{antrean}", key: "antrean", get: "getIntegrasiAntreanByAntrean", actions: ["postIntegrasiAntreanByAntrean", "postIntegrasiAntreanByAntreanAmbil"], children: [] }, { id: "/v1/integrasi/berkas", tag: "Integrasi: Berkas", title: "Berkas", base: "/v1/integrasi/berkas", item: "/v1/integrasi/berkas/{id}", key: "id", list: "getIntegrasiBerkas", create: "postIntegrasiBerkas", get: "getIntegrasiBerkasById", del: "deleteIntegrasiBerkasById", actions: ["postIntegrasiBerkasByIdSelesai", "getIntegrasiBerkasByIdUrl"], children: [] }, { id: "/v1/integrasi/berkas/unduh", tag: "Integrasi: Berkas", title: "Berkas", base: "/v1/integrasi/berkas/unduh", item: "/v1/integrasi/berkas/unduh/{token}", key: "token", get: "getIntegrasiBerkasUnduhByToken", actions: [], children: [] }, { id: "/v1/integrasi/cache", tag: "Integrasi: Cache", title: "Cache", base: "/v1/integrasi/cache", item: "/v1/integrasi/cache/{kunci}", key: "kunci", get: "getIntegrasiCacheByKunci", update: "putIntegrasiCacheByKunci", del: "deleteIntegrasiCacheByKunci", actions: ["postIntegrasiCacheByKunciTambah", "postIntegrasiCacheByKunciKunci", "postIntegrasiCacheByKunciLepas"], children: [] }, { id: "/v1/integrasi/esign", tag: "Integrasi: Tanda tangan elektronik", title: "Riwayat tanda tangan dan verifikasi", base: "/v1/integrasi/esign", item: "/v1/integrasi/esign/{id}", key: "id", list: "getIntegrasiEsign", get: "getIntegrasiEsignById", actions: [], children: [] }, { id: "/v1/integrasi/katalog", tag: "Integrasi: Pengaturan", title: "Driver yang didukung", base: "/v1/integrasi/katalog", list: "getIntegrasiKatalog", actions: [], children: [] }, { id: "/v1/integrasi/log", tag: "Integrasi: Pengaturan", title: "Log panggilan ke penyedia", base: "/v1/integrasi/log", list: "getIntegrasiLog", actions: [], children: [] }, { id: "/v1/integrasi/pembayaran", tag: "Integrasi: Pembayaran", title: "Transaksi", base: "/v1/integrasi/pembayaran", item: "/v1/integrasi/pembayaran/{id}", key: "id", list: "getIntegrasiPembayaran", create: "postIntegrasiPembayaran", get: "getIntegrasiPembayaranById", actions: ["postIntegrasiPembayaranByIdSegarkan", "postIntegrasiPembayaranByIdBatal", "postIntegrasiPembayaranByIdTeruskan"], children: [] }, { id: "/v1/integrasi/pembayaran/metode", tag: "Integrasi: Pembayaran", title: "Penyedia dan metode pembayaran yang aktif", base: "/v1/integrasi/pembayaran/metode", list: "getIntegrasiPembayaranMetode", actions: [], children: [] }, { id: "/v1/integrasi/pengaturan", tag: "Integrasi: Pengaturan", title: "Penyedia", base: "/v1/integrasi/pengaturan", item: "/v1/integrasi/pengaturan/{id}", key: "id", list: "getIntegrasiPengaturan", create: "postIntegrasiPengaturan", get: "getIntegrasiPengaturanById", update: "patchIntegrasiPengaturanById", del: "deleteIntegrasiPengaturanById", actions: ["postIntegrasiPengaturanById", "postIntegrasiPengaturanByIdHapus", "postIntegrasiPengaturanByIdUji"], children: [] }, { id: "/v1/integrasi/rapat", tag: "Integrasi: Rapat daring", title: "Rapat", base: "/v1/integrasi/rapat", item: "/v1/integrasi/rapat/{id}", key: "id", list: "getIntegrasiRapat", create: "postIntegrasiRapat", get: "getIntegrasiRapatById", update: "patchIntegrasiRapatById", del: "deleteIntegrasiRapatById", actions: [], children: [] }, { id: "/v1/integrasi/rapat/penyedia", tag: "Integrasi: Rapat daring", title: "Penyedia rapat yang aktif", base: "/v1/integrasi/rapat/penyedia", list: "getIntegrasiRapatPenyedia", actions: [], children: [] }, { id: "/v1/integrasi/webhook", tag: "Integrasi: Pembayaran", title: "Pembayaran", base: "/v1/integrasi/webhook", item: "/v1/integrasi/webhook/{kode}", key: "kode", actions: ["postIntegrasiWebhookByKode"], children: [] }, { id: "/v1/integrasi/webhook-keluar", tag: "Integrasi: Webhook keluar", title: "Langganan webhook", base: "/v1/integrasi/webhook-keluar", item: "/v1/integrasi/webhook-keluar/{id}", key: "id", list: "getIntegrasiWebhookKeluar", create: "postIntegrasiWebhookKeluar", get: "getIntegrasiWebhookKeluarById", update: "patchIntegrasiWebhookKeluarById", del: "deleteIntegrasiWebhookKeluarById", actions: ["postIntegrasiWebhookKeluarById", "postIntegrasiWebhookKeluarByIdHapus", "postIntegrasiWebhookKeluarByIdUji"], children: ["/v1/integrasi/webhook-keluar/{id}/kiriman"] }, { id: "/v1/integrasi/webhook-keluar/{id}/kiriman", tag: "Integrasi: Webhook keluar", title: "Riwayat kiriman", base: "/v1/integrasi/webhook-keluar/{id}/kiriman", list: "getIntegrasiWebhookKeluarByIdKiriman", actions: [], children: [], parent: "/v1/integrasi/webhook-keluar" }, { id: "/v1/integrasi/webhook-masuk", tag: "Integrasi: Pengaturan", title: "Notifikasi masuk dari payment gateway", base: "/v1/integrasi/webhook-masuk", list: "getIntegrasiWebhookMasuk", actions: [], children: [] }];
5
+ var ops = { getIntegrasiStatus: { id: "getIntegrasiStatus", m: "GET", path: "/v1/integrasi/status", tag: "Integrasi: Status", sum: "Integrasi yang aktif (publik)", ds: "Dibaca aplikasi kampus (SSO, PMB, LMS, portal, dll.) untuk ikut memakai integrasi yang diaktifkan admin, tanpa rahasia.\nPer kategori `null` bila belum ada penyedia aktif. `captcha` memuat site key, skrip widget, nama field token, dan\n`halaman` (formulir yang wajib captcha: login, lupa_password, reset_password, daftar, formulir_publik). Token captcha\ndiverifikasi server aplikasi lewat POST /v1/integrasi/captcha/verifikasi (scope `integrasi:captcha`). Boleh disimpan 60 detik.", pub: 1, r: "object", it: "IntegrasiStatus" }, getIntegrasiKatalog: { id: "getIntegrasiKatalog", m: "GET", path: "/v1/integrasi/katalog", tag: "Integrasi: Pengaturan", sum: "Daftar driver yang didukung", ds: "Isian `konfigurasi` (tidak rahasia) dan `rahasia` (disimpan terenkripsi) untuk setiap driver: recaptcha_v2, recaptcha_v3, turnstile, hcaptcha, xendit, midtrans, s3, r2, minio, google_drive, lokal, redis, smtp, mailgun, sendgrid, brevo, fonnte, wablas, zoom, google_meet, bsre, anthropic, openai_kompatibel, gemini.", sc: ["integrasi:admin"], r: "list", it: "IntegrasiDriver" }, getIntegrasiRingkasan: { id: "getIntegrasiRingkasan", m: "GET", path: "/v1/integrasi/ringkasan", tag: "Integrasi: Pengaturan", sum: "Ringkasan integrasi", ds: "Penyedia utama per kategori, rekap transaksi per status, sumber kunci enkripsi, dan daftar event webhook.", sc: ["integrasi:admin"], r: "object", it: "Objek" }, getIntegrasiPengaturan: { id: "getIntegrasiPengaturan", m: "GET", path: "/v1/integrasi/pengaturan", tag: "Integrasi: Pengaturan", sum: "Daftar penyedia", ds: "Rahasia tidak pernah dikembalikan, hanya status terisi/kosong. `url_webhook` (pembayaran) dipasang di dasbor penyedia.", sc: ["integrasi:admin"], pa: [{ nm: "kategori", in: "query", s: { t: "string" }, ds: "captcha, pembayaran, penyimpanan, cache, email, whatsapp, rapat, esign, ai" }], r: "list", it: "IntegrasiPenyedia" }, postIntegrasiPengaturan: { id: "postIntegrasiPengaturan", m: "POST", path: "/v1/integrasi/pengaturan", tag: "Integrasi: Pengaturan", sum: "Tambah penyedia", ds: 'Contoh Xendit: `{"driver": "xendit", "kode": "xendit", "mode": "sandbox", "rahasia": {"secret_key": "xnd_development_...", "callback_token": "..."}}`.\nContoh Cloudflare R2: `{"driver": "r2", "konfigurasi": {"account_id": "...", "bucket": "siakad"}, "rahasia": {"access_key": "...", "secret_key": "..."}}`.\nPenyedia pertama di satu kategori otomatis menjadi `utama`. Lihat GET /v1/integrasi/katalog untuk isian tiap driver.', sc: ["integrasi:admin"], b: { ct: "application/json", ref: "IntegrasiPenyediaInput", s: { t: "object", pr: { driver: { t: "string", n: 1, ds: "Wajib saat tambah", ex: "midtrans" }, kode: { t: "string", n: 1, ds: "Unik, dipakai di URL webhook (bawaan = driver)", ex: "midtrans" }, nama: { t: "string", n: 1 }, mode: { t: "string", n: 1, ds: "sandbox / produksi", ex: "sandbox" }, aktif: { t: "boolean" }, utama: { t: "boolean" }, catatan: { t: "string", n: 1 }, konfigurasi: { t: "object" }, rahasia: { t: "object" } } }, rq: 1 }, r: "object", it: "IntegrasiPenyedia" }, getIntegrasiPengaturanById: { id: "getIntegrasiPengaturanById", m: "GET", path: "/v1/integrasi/pengaturan/{id}", tag: "Integrasi: Pengaturan", sum: "Detail penyedia", sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], r: "object", it: "IntegrasiPenyedia" }, postIntegrasiPengaturanById: { id: "postIntegrasiPengaturanById", m: "POST", path: "/v1/integrasi/pengaturan/{id}", tag: "Integrasi: Pengaturan", sum: "Ubah penyedia (POST)", ds: "Sama dengan PATCH, untuk server web/hosting yang menolak metode PATCH.", sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], b: { ct: "application/json", ref: "IntegrasiPenyediaInput", s: { t: "object", pr: { driver: { t: "string", n: 1, ds: "Wajib saat tambah", ex: "midtrans" }, kode: { t: "string", n: 1, ds: "Unik, dipakai di URL webhook (bawaan = driver)", ex: "midtrans" }, nama: { t: "string", n: 1 }, mode: { t: "string", n: 1, ds: "sandbox / produksi", ex: "sandbox" }, aktif: { t: "boolean" }, utama: { t: "boolean" }, catatan: { t: "string", n: 1 }, konfigurasi: { t: "object" }, rahasia: { t: "object" } } }, rq: 1 }, r: "object", it: "IntegrasiPenyedia" }, patchIntegrasiPengaturanById: { id: "patchIntegrasiPengaturanById", m: "PATCH", path: "/v1/integrasi/pengaturan/{id}", tag: "Integrasi: Pengaturan", sum: "Ubah penyedia", ds: 'Kirim bagian yang berubah. `konfigurasi` digabung (nilai null menghapus); `rahasia` yang dikirim menimpa, yang tidak dikirim tetap, "" atau null menghapus. `utama: true` menjadikannya penyedia bawaan kategori itu.', sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], b: { ct: "application/json", ref: "IntegrasiPenyediaInput", s: { t: "object", pr: { driver: { t: "string", n: 1, ds: "Wajib saat tambah", ex: "midtrans" }, kode: { t: "string", n: 1, ds: "Unik, dipakai di URL webhook (bawaan = driver)", ex: "midtrans" }, nama: { t: "string", n: 1 }, mode: { t: "string", n: 1, ds: "sandbox / produksi", ex: "sandbox" }, aktif: { t: "boolean" }, utama: { t: "boolean" }, catatan: { t: "string", n: 1 }, konfigurasi: { t: "object" }, rahasia: { t: "object" } } }, rq: 1 }, r: "object", it: "IntegrasiPenyedia" }, deleteIntegrasiPengaturanById: { id: "deleteIntegrasiPengaturanById", m: "DELETE", path: "/v1/integrasi/pengaturan/{id}", tag: "Integrasi: Pengaturan", sum: "Hapus penyedia", ds: "Ditolak bila sudah dipakai transaksi/berkas; nonaktifkan saja.", sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], r: "object", it: "Objek" }, postIntegrasiPengaturanByIdHapus: { id: "postIntegrasiPengaturanByIdHapus", m: "POST", path: "/v1/integrasi/pengaturan/{id}/hapus", tag: "Integrasi: Pengaturan", sum: "Hapus penyedia (POST)", ds: "Sama dengan DELETE, untuk hosting yang menolak metode DELETE.", sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], r: "object", it: "Objek" }, postIntegrasiPengaturanByIdUji: { id: "postIntegrasiPengaturanByIdUji", m: "POST", path: "/v1/integrasi/pengaturan/{id}/uji", tag: "Integrasi: Pengaturan", sum: "Uji koneksi penyedia", ds: 'Captcha: secret diterima; Xendit: GET /balance; Midtrans: server key diterima; penyimpanan: tulis-baca-hapus berkas uji; Redis: PING + SET/GET; email/WhatsApp: login SMTP/token, atau kirim pesan uji bila body `{"ke": "alamat/nomor"}`; Zoom: token + profil host; Google Meet: token + kalender.', sc: ["integrasi:admin"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pengaturan", k: "id", d: "/v1/integrasi/pengaturan/{id}" } }, rq: 1, ds: "ID atau kode penyedia" }], 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" }, getIntegrasiLog: { id: "getIntegrasiLog", m: "GET", path: "/v1/integrasi/log", tag: "Integrasi: Pengaturan", sum: "Log panggilan ke penyedia", ds: "Tanpa body dan rahasia. Verifikasi captcha hanya dicatat bila gagal menghubungi penyedia.", sc: ["integrasi:admin"], pa: [{ nm: "kategori", in: "query", s: { t: "string" }, ds: "Kategori" }, { nm: "driver", in: "query", s: { t: "string" }, ds: "Driver" }, { nm: "penyedia", in: "query", s: { t: "string" }, ds: "ID/kode penyedia" }, { nm: "gagal", in: "query", s: { t: "string" }, ds: "1 = hanya yang gagal" }, { 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" }, getIntegrasiWebhookMasuk: { id: "getIntegrasiWebhookMasuk", m: "GET", path: "/v1/integrasi/webhook-masuk", tag: "Integrasi: Pengaturan", sum: "Notifikasi masuk dari payment gateway", ds: "Untuk menelusuri pembayaran yang belum tercatat.", sc: ["integrasi:admin"], pa: [{ nm: "order_id", in: "query", s: { t: "string" }, ds: "Order ID" }, { nm: "sah", in: "query", s: { t: "string" }, ds: "1 = tanda tangan valid, 0 = ditolak" }, { 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" }, getIntegrasiCaptchaKonfigurasi: { id: "getIntegrasiCaptchaKonfigurasi", m: "GET", path: "/v1/integrasi/captcha/konfigurasi", tag: "Integrasi: Captcha", sum: "Info widget captcha (publik)", ds: "Site key, URL skrip, dan nama field token untuk dipasang di formulir aplikasi web/mobile.", pub: 1, pa: [{ nm: "penyedia", in: "query", s: { t: "string" }, ds: "Kode penyedia tertentu (kosong = penyedia utama yang aktif)" }], r: "object", it: "IntegrasiCaptchaWidget" }, postIntegrasiCaptchaVerifikasi: { id: "postIntegrasiCaptchaVerifikasi", m: "POST", path: "/v1/integrasi/captcha/verifikasi", tag: "Integrasi: Captcha", sum: "Verifikasi token captcha", ds: "Server aplikasi mengirim token dari widget (field g-recaptcha-response / cf-turnstile-response / h-captcha-response) dan IP pengguna. reCAPTCHA v3 lolos bila skor >= skor_minimal. Token hanya bisa diverifikasi sekali.", sc: ["integrasi:captcha"], b: { ct: "application/json", ref: "IntegrasiCaptchaVerifikasi", s: { t: "object", pr: { token: { t: "string", n: 1, ds: "Token dari widget" }, ip: { t: "string", n: 1, ds: "IP pengguna (disarankan)", ex: "203.0.113.10" }, aksi: { t: "string", n: 1, ds: "reCAPTCHA v3/Turnstile: aksi yang diharapkan", ex: "login" }, penyedia: { t: "string", n: 1, ds: "Kode penyedia (kosong = utama)" } }, rq: ["token"] }, rq: 1 }, r: "object", it: "IntegrasiCaptchaHasil" }, getIntegrasiPembayaranMetode: { id: "getIntegrasiPembayaranMetode", m: "GET", path: "/v1/integrasi/pembayaran/metode", tag: "Integrasi: Pembayaran", sum: "Penyedia dan metode pembayaran yang aktif", sc: ["integrasi:bayar"], r: "list", it: "Objek" }, getIntegrasiPembayaran: { id: "getIntegrasiPembayaran", m: "GET", path: "/v1/integrasi/pembayaran", tag: "Integrasi: Pembayaran", sum: "Daftar transaksi", ds: "Klien hanya melihat transaksinya sendiri; admin melihat semua (filter `klien_id`).", sc: ["integrasi:bayar"], pa: [{ nm: "status", in: "query", s: { t: "string" }, ds: "menunggu, dibayar, kedaluwarsa, gagal, dibatalkan, dikembalikan" }, { nm: "sumber_modul", in: "query", s: { t: "string" }, ds: "mis. pmb" }, { nm: "sumber_referensi", in: "query", s: { t: "string" }, ds: "Nomor tagihan" }, { nm: "metode", in: "query", s: { t: "string" }, ds: "checkout, va, qris" }, { nm: "penyedia", in: "query", s: { t: "string" }, ds: "xendit, midtrans" }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari order_id, nama, email, nomor VA" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Tanggal dibuat dari (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Sampai (YYYY-MM-DD)" }, { nm: "klien_id", in: "query", s: { t: "string" }, ds: "Admin: klien tertentu" }, { 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: "IntegrasiTransaksi" }, postIntegrasiPembayaran: { id: "postIntegrasiPembayaran", m: "POST", path: "/v1/integrasi/pembayaran", tag: "Integrasi: Pembayaran", sum: "Buat transaksi pembayaran", ds: '`metode`: `checkout` (halaman bayar penyedia, `url_bayar`), `va` (`kanal` = kode bank, hasil `nomor_va`), `qris` (`qr_string`).\nDengan `sumber: {"modul": "pmb", "referensi": "<nomor tagihan PMB>"}` jumlah diambil dari tagihan PMB dan tagihan otomatis lunas\nsaat dibayar. Transaksi menunggu untuk sumber yang sama dipakai ulang (200, `meta.dipakai_ulang`). Status akhir dikirim lewat\nwebhook keluar (`pembayaran.dibayar`, dst.) dan bisa dicek di GET /v1/integrasi/pembayaran/{id}.', sc: ["integrasi:bayar"], b: { ct: "application/json", ref: "IntegrasiTransaksiInput", s: { t: "object", pr: { metode: { t: "string", n: 1, ds: "checkout (bawaan), va, qris", ex: "va" }, kanal: { t: "string", n: 1, ds: "Kode bank untuk va (BNI, BRI, MANDIRI, ...), atau batasi kanal checkout", ex: "BNI" }, jumlah: { t: "integer", n: 1, ds: "Rupiah; boleh kosong bila sumber punya tagihan", ex: 15e4 }, keterangan: { t: "string", n: 1, ex: "Biaya pendaftaran PMB" }, pelanggan: { t: "object", pr: { nama: { t: "string", n: 1, ex: "Siti Aminah" }, email: { t: "string", n: 1, ex: "siti@example.com" }, hp: { t: "string", n: 1, ex: "081234567890" } } }, item: { t: "array", i: { t: "object", pr: { nama: { t: "string", n: 1 }, harga: { t: "number", n: 1 }, jumlah: { t: "integer", n: 1 } } } }, kedaluwarsa_menit: { t: "integer", n: 1, ds: "5-43200, bawaan 1440", ex: 1440 }, order_id: { t: "string", n: 1, ds: "Opsional, unik 5-64 karakter; bawaan dibuat otomatis" }, sumber: { t: "object", pr: { modul: { t: "string", n: 1, ds: "pmb, atau nama modul aplikasi Anda", ex: "pmb" }, referensi: { t: "string", n: 1, ds: "Nomor tagihan", ex: "PMB2611000123" } } }, url_kembali: { t: "string", n: 1, ds: "Redirect setelah bayar (checkout)" }, metadata: { t: "object" }, penyedia: { t: "string", n: 1, ds: "Kode penyedia (kosong = utama)" } } }, rq: 1 }, r: "object", it: "IntegrasiTransaksi" }, getIntegrasiPembayaranById: { id: "getIntegrasiPembayaranById", m: "GET", path: "/v1/integrasi/pembayaran/{id}", tag: "Integrasi: Pembayaran", sum: "Detail transaksi", sc: ["integrasi:bayar"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pembayaran", k: "id", d: "/v1/integrasi/pembayaran/{id}" } }, rq: 1, ds: "ID (UUID) atau order_id" }, { nm: "segarkan", in: "query", s: { t: "string" }, ds: "1 = ambil status terbaru dari penyedia" }], r: "object", it: "IntegrasiTransaksi" }, postIntegrasiPembayaranByIdSegarkan: { id: "postIntegrasiPembayaranByIdSegarkan", m: "POST", path: "/v1/integrasi/pembayaran/{id}/segarkan", tag: "Integrasi: Pembayaran", sum: "Ambil status terbaru dari penyedia", sc: ["integrasi:bayar"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pembayaran", k: "id", d: "/v1/integrasi/pembayaran/{id}" } }, rq: 1, ds: "ID (UUID) atau order_id" }], r: "object", it: "IntegrasiTransaksi" }, postIntegrasiPembayaranByIdBatal: { id: "postIntegrasiPembayaranByIdBatal", m: "POST", path: "/v1/integrasi/pembayaran/{id}/batal", tag: "Integrasi: Pembayaran", sum: "Batalkan transaksi", ds: "Hanya status menunggu. Invoice Xendit di-expire, VA dinonaktifkan, Midtrans di-expire. Pembayaran yang tetap masuk sesudahnya tetap dicatat dibayar.", sc: ["integrasi:bayar"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pembayaran", k: "id", d: "/v1/integrasi/pembayaran/{id}" } }, rq: 1, ds: "ID (UUID) atau order_id" }], r: "object", it: "IntegrasiTransaksi" }, postIntegrasiPembayaranByIdTeruskan: { id: "postIntegrasiPembayaranByIdTeruskan", m: "POST", path: "/v1/integrasi/pembayaran/{id}/teruskan", tag: "Integrasi: Pembayaran", sum: "Ulangi penerusan ke modul sumber", ds: "Bila `sumber.status` = gagal (mis. tagihan PMB sempat tidak bisa dilunasi). Cron `integrasi:jalan` juga mengulanginya.", sc: ["integrasi:bayar"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/pembayaran", k: "id", d: "/v1/integrasi/pembayaran/{id}" } }, rq: 1, ds: "ID (UUID) atau order_id" }], r: "object", it: "IntegrasiTransaksi" }, postIntegrasiWebhookByKode: { id: "postIntegrasiWebhookByKode", m: "POST", path: "/v1/integrasi/webhook/{kode}", tag: "Integrasi: Pembayaran", sum: "Notifikasi dari payment gateway", ds: "Dipanggil server Xendit/Midtrans, bukan aplikasi. Pasang `url_webhook` dari GET /v1/integrasi/pengaturan di dasbor penyedia.\nXendit diperiksa dengan header `x-callback-token`; Midtrans dengan `signature_key` lalu status diambil ulang dari Midtrans.\nNotifikasi ganda diabaikan. Jawaban 401 bila tanda tangan salah.", pub: 1, pa: [{ nm: "kode", in: "path", s: { t: "string" }, rq: 1, ds: "Kode penyedia" }], 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" }, getIntegrasiBerkas: { id: "getIntegrasiBerkas", m: "GET", path: "/v1/integrasi/berkas", tag: "Integrasi: Berkas", sum: "Daftar berkas", ds: "Klien hanya melihat berkasnya sendiri.", sc: ["integrasi:berkas"], pa: [{ nm: "folder", in: "query", s: { t: "string" }, ds: "Folder" }, { nm: "modul", in: "query", s: { t: "string" }, ds: "Modul" }, { nm: "referensi", in: "query", s: { t: "string" }, ds: "Referensi" }, { nm: "status", in: "query", s: { t: "string" }, ds: "menunggu_unggah, tersedia" }, { nm: "visibilitas", in: "query", s: { t: "string" }, ds: "privat, publik" }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari nama" }, { nm: "klien_id", in: "query", s: { t: "string" }, ds: "Admin: klien tertentu" }, { 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: "IntegrasiBerkas" }, postIntegrasiBerkas: { id: "postIntegrasiBerkas", m: "POST", path: "/v1/integrasi/berkas", tag: "Integrasi: Berkas", sum: "Unggah berkas", ds: "multipart/form-data: `berkas` (file), opsional `folder`, `visibilitas` (privat/publik), `modul`, `referensi`, `penyimpanan` (kode penyedia). Disimpan ke penyimpanan utama (S3/R2/MinIO) atau disk lokal bila belum ada. Batas ukuran INTEGRASI_BERKAS_MAKS_MB (bawaan 20) dan upload_max_filesize PHP.", sc: ["integrasi:berkas"], b: { ct: "multipart/form-data", ref: "IntegrasiUnggah", s: { t: "object", pr: { berkas: { t: "string", f: "binary" }, folder: { t: "string", n: 1, ex: "pmb/berkas" }, visibilitas: { t: "string", n: 1, ds: "privat / publik" }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, penyimpanan: { t: "string", n: 1, ds: "Kode penyedia" } }, rq: ["berkas"] }, rq: 1 }, r: "object", it: "IntegrasiBerkas" }, postIntegrasiBerkasUnggahLangsung: { id: "postIntegrasiBerkasUnggahLangsung", m: "POST", path: "/v1/integrasi/berkas/unggah-langsung", tag: "Integrasi: Berkas", sum: "Minta URL unggah langsung ke bucket", ds: "Untuk file besar: kirim `nama`, `ukuran` (byte), `mime`, lalu PUT isi file ke `unggah.url` dengan header `unggah.header`, kemudian POST /berkas/{id}/selesai. Tidak tersedia untuk disk lokal.", sc: ["integrasi:berkas"], b: { ct: "application/json", ref: "IntegrasiUnggahLangsung", s: { t: "object", pr: { nama: { t: "string", n: 1, ex: "video-profil.mp4" }, ukuran: { t: "integer", n: 1, ds: "byte", ex: 10485760 }, mime: { t: "string", n: 1, ex: "video/mp4" }, folder: { t: "string", n: 1 }, visibilitas: { t: "string", n: 1 }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, penyimpanan: { t: "string", n: 1 } }, rq: ["nama", "ukuran"] }, rq: 1 }, r: "object", it: "IntegrasiBerkas" }, postIntegrasiBerkasByIdSelesai: { id: "postIntegrasiBerkasByIdSelesai", m: "POST", path: "/v1/integrasi/berkas/{id}/selesai", tag: "Integrasi: Berkas", sum: "Konfirmasi unggah langsung selesai", sc: ["integrasi:berkas"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, rq: 1, ds: "ID berkas (UUID)" }], r: "object", it: "IntegrasiBerkas" }, getIntegrasiBerkasById: { id: "getIntegrasiBerkasById", m: "GET", path: "/v1/integrasi/berkas/{id}", tag: "Integrasi: Berkas", sum: "Detail berkas + URL unduh sementara", sc: ["integrasi:berkas"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, rq: 1, ds: "ID berkas (UUID)" }], r: "object", it: "IntegrasiBerkas" }, deleteIntegrasiBerkasById: { id: "deleteIntegrasiBerkasById", m: "DELETE", path: "/v1/integrasi/berkas/{id}", tag: "Integrasi: Berkas", sum: "Hapus berkas", sc: ["integrasi:berkas"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, rq: 1, ds: "ID berkas (UUID)" }], r: "object", it: "Objek" }, getIntegrasiBerkasByIdUrl: { id: "getIntegrasiBerkasByIdUrl", m: "GET", path: "/v1/integrasi/berkas/{id}/url", tag: "Integrasi: Berkas", sum: "URL unduh sementara", ds: "Presigned URL (S3/R2/MinIO) atau tautan bertanda tangan (lokal). Berkas publik dengan url_publik mendapat URL permanen.", sc: ["integrasi:berkas"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, rq: 1, ds: "ID berkas (UUID)" }, { nm: "ttl", in: "query", s: { t: "string" }, ds: "Masa berlaku detik (60-604800, bawaan 900)" }], r: "object", it: "Objek" }, getIntegrasiBerkasUnduhByToken: { id: "getIntegrasiBerkasUnduhByToken", m: "GET", path: "/v1/integrasi/berkas/unduh/{token}", tag: "Integrasi: Berkas", sum: "Unduh dengan tautan bertanda tangan", ds: "Tautan dari /berkas/{id}/url; berlaku sampai waktu di dalamnya.", pub: 1, pa: [{ nm: "token", in: "path", s: { t: "string" }, rq: 1, ds: "Token tautan" }], r: "object" }, getIntegrasiCacheByKunci: { id: "getIntegrasiCacheByKunci", m: "GET", path: "/v1/integrasi/cache/{kunci}", tag: "Integrasi: Cache", sum: "Ambil nilai cache", ds: "Ruang nama per aplikasi; aplikasi lain tidak bisa membaca.", sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Kunci (huruf/angka . _ -)" }], r: "object", it: "Objek" }, putIntegrasiCacheByKunci: { id: "putIntegrasiCacheByKunci", m: "PUT", path: "/v1/integrasi/cache/{kunci}", tag: "Integrasi: Cache", sum: "Simpan nilai cache", ds: 'Body `{"nilai": ..., "ttl": 3600, "hanya_baru": false}`. ttl detik, 0 = tanpa batas. Nilai maks. 512 KB.', sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Kunci" }], 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" }, deleteIntegrasiCacheByKunci: { id: "deleteIntegrasiCacheByKunci", m: "DELETE", path: "/v1/integrasi/cache/{kunci}", tag: "Integrasi: Cache", sum: "Hapus nilai cache", sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Kunci" }], r: "object", it: "Objek" }, postIntegrasiCacheByKunciTambah: { id: "postIntegrasiCacheByKunciTambah", m: "POST", path: "/v1/integrasi/cache/{kunci}/tambah", tag: "Integrasi: Cache", sum: "Penghitung (INCRBY)", ds: 'Body `{"n": 1, "ttl": 60}`; ttl dipasang saat kunci baru dibuat. Cocok untuk rate limit/kuota.', sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Kunci" }], 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" }, postIntegrasiCacheByKunciKunci: { id: "postIntegrasiCacheByKunciKunci", m: "POST", path: "/v1/integrasi/cache/{kunci}/kunci", tag: "Integrasi: Cache", sum: "Ambil lock", ds: 'Body `{"ttl": 30}`. Mengembalikan `token` untuk melepas; 409 bila sedang dipegang.', sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Nama lock" }], 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" }, postIntegrasiCacheByKunciLepas: { id: "postIntegrasiCacheByKunciLepas", m: "POST", path: "/v1/integrasi/cache/{kunci}/lepas", tag: "Integrasi: Cache", sum: "Lepas lock", ds: 'Body `{"token": "..."}`.', sc: ["integrasi:cache"], pa: [{ nm: "kunci", in: "path", s: { t: "string" }, rq: 1, ds: "Nama lock" }], 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" }, getIntegrasiAntreanByAntrean: { id: "getIntegrasiAntreanByAntrean", m: "GET", path: "/v1/integrasi/antrean/{antrean}", tag: "Integrasi: Cache", sum: "Panjang antrean", sc: ["integrasi:cache"], pa: [{ nm: "antrean", in: "path", s: { t: "string" }, rq: 1, ds: "Nama antrean" }], r: "object", it: "Objek" }, postIntegrasiAntreanByAntrean: { id: "postIntegrasiAntreanByAntrean", m: "POST", path: "/v1/integrasi/antrean/{antrean}", tag: "Integrasi: Cache", sum: "Masukkan ke antrean", ds: 'Body `{"pesan": {...}}` atau `{"daftar": [...]}` (maks. 100). Antrean FIFO di Redis.', sc: ["integrasi:cache"], pa: [{ nm: "antrean", in: "path", s: { t: "string" }, rq: 1, ds: "Nama antrean" }], 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" }, postIntegrasiAntreanByAntreanAmbil: { id: "postIntegrasiAntreanByAntreanAmbil", m: "POST", path: "/v1/integrasi/antrean/{antrean}/ambil", tag: "Integrasi: Cache", sum: "Ambil dari antrean", ds: 'Body `{"jumlah": 10}`. Pesan yang diambil langsung hilang dari antrean.', sc: ["integrasi:cache"], pa: [{ nm: "antrean", in: "path", s: { t: "string" }, rq: 1, ds: "Nama antrean" }], 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" }, postIntegrasiEmailKirim: { id: "postIntegrasiEmailKirim", m: "POST", path: "/v1/integrasi/email/kirim", tag: "Integrasi: Email & WhatsApp", sum: "Kirim email", ds: "Lewat penyedia email utama (SMTP, Mailgun, SendGrid, Brevo) atau `penyedia` tertentu. `ke`: 1-50 alamat; `teks` dan/atau `html`.", sc: ["integrasi:pesan"], b: { ct: "application/json", ref: "IntegrasiEmail", s: { t: "object", pr: { ke: { t: "array", ds: "Alamat tujuan (atau teks dipisah koma)", i: { t: "string", n: 1 } }, subjek: { t: "string", n: 1, ex: "Pengumuman PMB" }, teks: { t: "string", n: 1 }, html: { t: "string", n: 1 }, balas_ke: { t: "string", n: 1 }, penyedia: { t: "string", n: 1 } }, rq: ["ke", "subjek"] }, rq: 1 }, r: "object", it: "IntegrasiPesanHasil" }, postIntegrasiWhatsappKirim: { id: "postIntegrasiWhatsappKirim", m: "POST", path: "/v1/integrasi/whatsapp/kirim", tag: "Integrasi: Email & WhatsApp", sum: "Kirim WhatsApp", ds: "Lewat Fonnte atau Wablas. Nomor 08xx otomatis menjadi 628xx.", sc: ["integrasi:pesan"], b: { ct: "application/json", ref: "IntegrasiWhatsapp", s: { t: "object", pr: { ke: { t: "array", ds: "Nomor 08xx/628xx", i: { t: "string", n: 1 } }, teks: { t: "string", n: 1 }, penyedia: { t: "string", n: 1 } }, rq: ["ke", "teks"] }, rq: 1 }, r: "object", it: "IntegrasiPesanHasil" }, getIntegrasiWebhookKeluar: { id: "getIntegrasiWebhookKeluar", m: "GET", path: "/v1/integrasi/webhook-keluar", tag: "Integrasi: Webhook keluar", sum: "Daftar langganan webhook", sc: ["integrasi:webhook"], r: "list", it: "IntegrasiLangganan" }, postIntegrasiWebhookKeluar: { id: "postIntegrasiWebhookKeluar", m: "POST", path: "/v1/integrasi/webhook-keluar", tag: "Integrasi: Webhook keluar", sum: "Daftarkan URL webhook", ds: 'SIAKAD mengirim POST JSON `{"id", "event", "dibuat_at", "data"}` ke `url` untuk event milik aplikasi ini.\nVerifikasi: `X-Siakad-Signature: t=<unix>,v1=<hex>` dengan v1 = HMAC-SHA256(rahasia, t + "." + body mentah); tolak bila t lebih dari 5 menit.\nJawab 2xx dalam 8 detik; selain itu dicoba ulang sampai 6 kali (1 menit sampai 24 jam). `rahasia` hanya ditampilkan sekali.', sc: ["integrasi:webhook"], b: { ct: "application/json", ref: "IntegrasiLanggananInput", s: { t: "object", pr: { nama: { t: "string", n: 1, ex: "Aplikasi PMB" }, url: { t: "string", n: 1, ds: "https://", ex: "https://pmb.unipo.ac.id/webhook/siakad" }, event: { t: "array", ds: "Event: * atau pembayaran.dibuat, pembayaran.dibayar, pembayaran.kedaluwarsa, pembayaran.gagal, pembayaran.dibatalkan, pembayaran.dikembalikan, berkas.diunggah, berkas.dihapus", i: { t: "string", n: 1 } }, aktif: { t: "boolean" }, semua_klien: { t: "boolean", ds: "Admin: terima event semua aplikasi" }, rahasia_baru: { t: "boolean", ds: "PATCH: buat rahasia baru" } }, rq: ["nama", "url"] }, rq: 1 }, r: "object", it: "IntegrasiLangganan" }, getIntegrasiWebhookKeluarById: { id: "getIntegrasiWebhookKeluarById", m: "GET", path: "/v1/integrasi/webhook-keluar/{id}", tag: "Integrasi: Webhook keluar", sum: "Detail langganan", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], r: "object", it: "IntegrasiLangganan" }, postIntegrasiWebhookKeluarById: { id: "postIntegrasiWebhookKeluarById", m: "POST", path: "/v1/integrasi/webhook-keluar/{id}", tag: "Integrasi: Webhook keluar", sum: "Ubah langganan (POST)", ds: "Sama dengan PATCH, untuk hosting yang menolak PATCH.", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], b: { ct: "application/json", ref: "IntegrasiLanggananInput", s: { t: "object", pr: { nama: { t: "string", n: 1, ex: "Aplikasi PMB" }, url: { t: "string", n: 1, ds: "https://", ex: "https://pmb.unipo.ac.id/webhook/siakad" }, event: { t: "array", ds: "Event: * atau pembayaran.dibuat, pembayaran.dibayar, pembayaran.kedaluwarsa, pembayaran.gagal, pembayaran.dibatalkan, pembayaran.dikembalikan, berkas.diunggah, berkas.dihapus", i: { t: "string", n: 1 } }, aktif: { t: "boolean" }, semua_klien: { t: "boolean", ds: "Admin: terima event semua aplikasi" }, rahasia_baru: { t: "boolean", ds: "PATCH: buat rahasia baru" } }, rq: ["nama", "url"] }, rq: 1 }, r: "object", it: "IntegrasiLangganan" }, patchIntegrasiWebhookKeluarById: { id: "patchIntegrasiWebhookKeluarById", m: "PATCH", path: "/v1/integrasi/webhook-keluar/{id}", tag: "Integrasi: Webhook keluar", sum: "Ubah langganan", ds: '`{"rahasia_baru": true}` membuat rahasia baru (ditampilkan sekali).', sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], b: { ct: "application/json", ref: "IntegrasiLanggananInput", s: { t: "object", pr: { nama: { t: "string", n: 1, ex: "Aplikasi PMB" }, url: { t: "string", n: 1, ds: "https://", ex: "https://pmb.unipo.ac.id/webhook/siakad" }, event: { t: "array", ds: "Event: * atau pembayaran.dibuat, pembayaran.dibayar, pembayaran.kedaluwarsa, pembayaran.gagal, pembayaran.dibatalkan, pembayaran.dikembalikan, berkas.diunggah, berkas.dihapus", i: { t: "string", n: 1 } }, aktif: { t: "boolean" }, semua_klien: { t: "boolean", ds: "Admin: terima event semua aplikasi" }, rahasia_baru: { t: "boolean", ds: "PATCH: buat rahasia baru" } }, rq: ["nama", "url"] }, rq: 1 }, r: "object", it: "IntegrasiLangganan" }, deleteIntegrasiWebhookKeluarById: { id: "deleteIntegrasiWebhookKeluarById", m: "DELETE", path: "/v1/integrasi/webhook-keluar/{id}", tag: "Integrasi: Webhook keluar", sum: "Hapus langganan", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], r: "object", it: "Objek" }, postIntegrasiWebhookKeluarByIdHapus: { id: "postIntegrasiWebhookKeluarByIdHapus", m: "POST", path: "/v1/integrasi/webhook-keluar/{id}/hapus", tag: "Integrasi: Webhook keluar", sum: "Hapus langganan (POST)", ds: "Sama dengan DELETE, untuk hosting yang menolak DELETE.", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], r: "object", it: "Objek" }, postIntegrasiWebhookKeluarByIdUji: { id: "postIntegrasiWebhookKeluarByIdUji", m: "POST", path: "/v1/integrasi/webhook-keluar/{id}/uji", tag: "Integrasi: Webhook keluar", sum: "Kirim event uji", ds: "Event `webhook.uji`, langsung dikirim dan hasilnya dikembalikan.", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }], r: "object", it: "Objek" }, getIntegrasiWebhookKeluarByIdKiriman: { id: "getIntegrasiWebhookKeluarByIdKiriman", m: "GET", path: "/v1/integrasi/webhook-keluar/{id}/kiriman", tag: "Integrasi: Webhook keluar", sum: "Riwayat kiriman", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }, { nm: "status", in: "query", s: { t: "string" }, ds: "antre, terkirim, menyerah" }, { 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" }, postIntegrasiWebhookKeluarByIdKirimanByKirimanUlang: { id: "postIntegrasiWebhookKeluarByIdKirimanByKirimanUlang", m: "POST", path: "/v1/integrasi/webhook-keluar/{id}/kiriman/{kiriman}/ulang", tag: "Integrasi: Webhook keluar", sum: "Kirim ulang satu kiriman", sc: ["integrasi:webhook"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/webhook-keluar", k: "id", d: "/v1/integrasi/webhook-keluar/{id}" } }, rq: 1, ds: "ID langganan (UUID)" }, { nm: "kiriman", in: "path", s: { t: "string" }, rq: 1, ds: "ID kiriman" }], r: "object", it: "Objek" }, getIntegrasiRapatPenyedia: { id: "getIntegrasiRapatPenyedia", m: "GET", path: "/v1/integrasi/rapat/penyedia", tag: "Integrasi: Rapat daring", sum: "Penyedia rapat yang aktif", ds: "Kode dan nama penyedia (Zoom, Google Meet) yang bisa dipilih lewat field `penyedia`.", sc: ["integrasi:rapat"], r: "list", it: "Objek" }, getIntegrasiRapat: { id: "getIntegrasiRapat", m: "GET", path: "/v1/integrasi/rapat", tag: "Integrasi: Rapat daring", sum: "Daftar rapat", ds: "Klien hanya melihat rapat buatannya sendiri; admin melihat semua (filter `klien_id`).", sc: ["integrasi:rapat"], pa: [{ nm: "modul", in: "query", s: { t: "string" }, ds: "mis. lms" }, { nm: "referensi", in: "query", s: { t: "string" }, ds: "Referensi di modul" }, { nm: "status", in: "query", s: { t: "string" }, ds: "terjadwal, dibatalkan" }, { nm: "driver", in: "query", s: { t: "string" }, ds: "zoom, google_meet" }, { nm: "dari", in: "query", s: { t: "string" }, ds: "Mulai dari (YYYY-MM-DD)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "Sampai (YYYY-MM-DD)" }, { nm: "klien_id", in: "query", s: { t: "string" }, ds: "Admin: klien tertentu" }, { 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: "IntegrasiRapat" }, postIntegrasiRapat: { id: "postIntegrasiRapat", m: "POST", path: "/v1/integrasi/rapat", tag: "Integrasi: Rapat daring", sum: "Buat ruang rapat", ds: "Membuat meeting Zoom terjadwal atau acara Google Calendar dengan tautan Google Meet lewat penyedia utama kategori `rapat`\n(atau `penyedia` tertentu). `mulai` dalam `zona_waktu` (bawaan zona penyedia, mis. Asia/Makassar); lama rapat lewat\n`durasi_menit` atau `selesai`. Jawaban memuat `url_gabung` untuk peserta dan `url_host` (Zoom) untuk penyelenggara.", sc: ["integrasi:rapat"], b: { ct: "application/json", ref: "IntegrasiRapatInput", s: { t: "object", pr: { judul: { t: "string", n: 1, ex: "Kelas daring Pemrograman Web - Pertemuan 11" }, agenda: { t: "string", n: 1, ds: "Teks/HTML, dikirim sebagai agenda/deskripsi" }, mulai: { t: "string", n: 1, ds: "Y-m-d H:i (zona_waktu)", ex: "2026-11-20 08:00" }, durasi_menit: { t: "integer", n: 1, ds: "1-1440, bawaan 90", ex: 100 }, selesai: { t: "string", n: 1, ds: "Alternatif durasi_menit" }, zona_waktu: { t: "string", n: 1, ds: "Bawaan zona penyedia", ex: "Asia/Makassar" }, penyedia: { t: "string", n: 1, ds: "Kode penyedia rapat (kosong = utama)", ex: "zoom" }, modul: { t: "string", n: 1, ds: "Nama modul/aplikasi Anda", ex: "lms" }, referensi: { t: "string", n: 1, ds: "ID di aplikasi Anda" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "IntegrasiRapat" }, getIntegrasiRapatById: { id: "getIntegrasiRapatById", m: "GET", path: "/v1/integrasi/rapat/{id}", tag: "Integrasi: Rapat daring", sum: "Detail rapat", sc: ["integrasi:rapat"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/rapat", k: "id", d: "/v1/integrasi/rapat/{id}" } }, rq: 1, ds: "ID rapat (UUID)" }], r: "object", it: "IntegrasiRapat" }, patchIntegrasiRapatById: { id: "patchIntegrasiRapatById", m: "PATCH", path: "/v1/integrasi/rapat/{id}", tag: "Integrasi: Rapat daring", sum: "Ubah judul/waktu rapat", ds: "Perubahan dikirim juga ke Zoom/Google.", sc: ["integrasi:rapat"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/rapat", k: "id", d: "/v1/integrasi/rapat/{id}" } }, rq: 1, ds: "ID rapat (UUID)" }], b: { ct: "application/json", ref: "IntegrasiRapatInput", s: { t: "object", pr: { judul: { t: "string", n: 1, ex: "Kelas daring Pemrograman Web - Pertemuan 11" }, agenda: { t: "string", n: 1, ds: "Teks/HTML, dikirim sebagai agenda/deskripsi" }, mulai: { t: "string", n: 1, ds: "Y-m-d H:i (zona_waktu)", ex: "2026-11-20 08:00" }, durasi_menit: { t: "integer", n: 1, ds: "1-1440, bawaan 90", ex: 100 }, selesai: { t: "string", n: 1, ds: "Alternatif durasi_menit" }, zona_waktu: { t: "string", n: 1, ds: "Bawaan zona penyedia", ex: "Asia/Makassar" }, penyedia: { t: "string", n: 1, ds: "Kode penyedia rapat (kosong = utama)", ex: "zoom" }, modul: { t: "string", n: 1, ds: "Nama modul/aplikasi Anda", ex: "lms" }, referensi: { t: "string", n: 1, ds: "ID di aplikasi Anda" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "IntegrasiRapat" }, deleteIntegrasiRapatById: { id: "deleteIntegrasiRapatById", m: "DELETE", path: "/v1/integrasi/rapat/{id}", tag: "Integrasi: Rapat daring", sum: "Batalkan rapat", ds: "Meeting Zoom/acara Google dihapus. `?paksa=1` tetap menandai dibatalkan bila penyedia gagal dihubungi.", sc: ["integrasi:rapat"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/rapat", k: "id", d: "/v1/integrasi/rapat/{id}" } }, rq: 1, ds: "ID rapat (UUID)" }, { nm: "paksa", in: "query", s: { t: "string" }, ds: "1 = abaikan galat penyedia" }], r: "object", it: "IntegrasiRapat" }, postIntegrasiEsignTandaTangan: { id: "postIntegrasiEsignTandaTangan", m: "POST", path: "/v1/integrasi/esign/tanda-tangan", tag: "Integrasi: Tanda tangan elektronik", sum: "Tandatangani PDF", ds: "Menandatangani PDF dengan sertifikat elektronik BSrE milik penanda tangan (`nik` + `passphrase`, dikirim setiap kali\ndan tidak disimpan). Sumber PDF: `berkas_id` (berkas di /v1/integrasi/berkas milik klien), field `berkas` (multipart),\natau `file_base64`. `tampilan.jenis` invisible (bawaan) atau visible dengan `halaman`, `x`, `y`, `lebar`, `tinggi`\n(point PDF) atau `tag` (teks penanda posisi di dokumen), dan `gambar` (PNG base64). Hasil disimpan sebagai berkas baru\ndi folder `esign` (jawaban `berkas` memuat URL unduh); `kembalikan_pdf: true` juga mengembalikan `pdf_base64`.\nRiwayat hanya menyi", sc: ["integrasi:esign"], b: { ct: "application/json", ref: "IntegrasiEsignInput", s: { t: "object", pr: { nik: { t: "string", n: 1, ds: "NIK 16 digit pemilik sertifikat BSrE (tidak disimpan)" }, passphrase: { t: "string", n: 1, ds: "Passphrase sertifikat (tidak disimpan)" }, berkas_id: { t: "string", n: 1, ds: "UUID berkas /v1/integrasi/berkas", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, file_base64: { t: "string", n: 1, ds: "Alternatif: isi PDF base64" }, judul: { t: "string", n: 1, ex: "Surat Keputusan Rektor No. 12/2026" }, tampilan: { t: "object", pr: { jenis: { t: "string", n: 1, ds: "invisible (bawaan) atau visible", ex: "visible" }, halaman: { t: "integer", n: 1, ds: "Nomor halaman (v1 juga FIRST/LAST)", ex: 1 }, x: { t: "number", n: 1, ds: "Posisi X (point)" }, y: { t: "number", n: 1, ds: "Posisi Y (point)" }, lebar: { t: "number", n: 1 }, tinggi: { t: "number", n: 1 }, tag: { t: "string", n: 1, ds: "Teks penanda posisi, mis. #ttd#" }, gambar: { t: "string", n: 1, ds: "PNG base64 spesimen tanda tangan" }, alasan: { t: "string", n: 1 }, lokasi: { t: "string", n: 1 }, tautan_qr: { t: "string", n: 1, ds: "v1: URL di QR" } } }, penyedia: { t: "string", n: 1, ds: "Kode penyedia esign (kosong = utama)" }, penyimpanan: { t: "string", n: 1, ds: "Kode penyimpanan hasil (kosong = utama)" }, simpan: { t: "boolean", ds: "false = tidak disimpan sebagai berkas (hasil hanya pdf_base64)" }, kembalikan_pdf: { t: "boolean", ds: "true = sertakan pdf_base64" }, modul: { t: "string", n: 1, ex: "arsip" }, referensi: { t: "string", n: 1 } }, rq: ["nik", "passphrase"] }, rq: 1 }, r: "object", it: "IntegrasiEsign" }, postIntegrasiEsignVerifikasi: { id: "postIntegrasiEsignVerifikasi", m: "POST", path: "/v1/integrasi/esign/verifikasi", tag: "Integrasi: Tanda tangan elektronik", sum: "Verifikasi PDF bertanda tangan", ds: "Sumber PDF sama seperti tanda tangan. Jawaban: `valid`, `kesimpulan`, daftar `penanda` (nama, penerbit sertifikat, waktu, keutuhan dokumen), dan `ditandatangani_lewat_siakad` bila hash dokumen cocok dengan hasil tanda tangan lewat SIAKAD.", sc: ["integrasi:esign"], b: { ct: "application/json", ref: "IntegrasiEsignVerifikasiInput", s: { t: "object", pr: { berkas_id: { t: "string", n: 1, ds: "UUID berkas", rf: { l: "/v1/integrasi/berkas", k: "id", d: "/v1/integrasi/berkas/{id}" } }, file_base64: { t: "string", n: 1, ds: "Alternatif: isi PDF base64" }, judul: { t: "string", n: 1 }, penyedia: { t: "string", n: 1 }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 } } }, rq: 1 }, r: "object", it: "IntegrasiEsignVerifikasi" }, postIntegrasiEsignStatusPengguna: { id: "postIntegrasiEsignStatusPengguna", m: "POST", path: "/v1/integrasi/esign/status-pengguna", tag: "Integrasi: Tanda tangan elektronik", sum: "Cek sertifikat penanda tangan", ds: "Memeriksa apakah NIK sudah punya sertifikat elektronik aktif di BSrE (`aktif`, `status`, mis. ISSUE/EXPIRED/NOT_REGISTERED). NIK tidak disimpan.", sc: ["integrasi:esign"], b: { ct: "application/json", ref: "IntegrasiEsignStatusInput", s: { t: "object", pr: { nik: { t: "string", n: 1, ds: "NIK 16 digit" }, penyedia: { t: "string", n: 1 } }, rq: ["nik"] }, rq: 1 }, r: "object", it: "Objek" }, getIntegrasiEsign: { id: "getIntegrasiEsign", m: "GET", path: "/v1/integrasi/esign", tag: "Integrasi: Tanda tangan elektronik", sum: "Riwayat tanda tangan dan verifikasi", ds: "Klien hanya melihat riwayat miliknya; admin melihat semua (filter `klien_id`).", sc: ["integrasi:esign"], pa: [{ nm: "jenis", in: "query", s: { t: "string" }, ds: "tanda_tangan, verifikasi" }, { nm: "status", in: "query", s: { t: "string" }, ds: "berhasil, gagal" }, { nm: "modul", in: "query", s: { t: "string" }, ds: "mis. arsip" }, { nm: "referensi", in: "query", s: { t: "string" }, ds: "Referensi di modul" }, { nm: "klien_id", in: "query", s: { t: "string" }, ds: "Admin: klien tertentu" }, { 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: "IntegrasiEsign" }, getIntegrasiEsignById: { id: "getIntegrasiEsignById", m: "GET", path: "/v1/integrasi/esign/{id}", tag: "Integrasi: Tanda tangan elektronik", sum: "Detail riwayat", sc: ["integrasi:esign"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/integrasi/esign", k: "id", d: "/v1/integrasi/esign/{id}" } }, rq: 1, ds: "ID (UUID)" }], r: "object", it: "IntegrasiEsign" }, getIntegrasiAiPenyedia: { id: "getIntegrasiAiPenyedia", m: "GET", path: "/v1/integrasi/ai/penyedia", tag: "Integrasi: AI", sum: "Penyedia AI yang aktif", ds: "Kode, driver, dan model penyedia AI yang bisa dipilih lewat field `penyedia`.", sc: ["integrasi:ai"], r: "list", it: "Objek" }, postIntegrasiAiTeks: { id: "postIntegrasiAiTeks", m: "POST", path: "/v1/integrasi/ai/teks", tag: "Integrasi: AI", sum: "Minta jawaban model bahasa", ds: "Mengirim `prompt` (teks tunggal) atau `pesan` (percakapan bergantian user/assistant, diakhiri user) ke penyedia\nutama kategori `ai` atau `penyedia` tertentu. `sistem` ditambahkan setelah instruksi sistem bawaan penyedia. Claude\n(bawaan claude-opus-5-5) memakai adaptive thinking dan fallback server-side; `effort` (low-max) mengatur kedalaman.\n`maks_token` dibatasi pengaturan penyedia. Bila pengaman model menolak, jawaban `ditolak: true` dengan `teks` kosong.\nIsi percakapan tidak disimpan; token dicatat per klien dan dibatasi `kuota_harian_token` (429 bila habis).", sc: ["integrasi:ai"], b: { ct: "application/json", ref: "IntegrasiAiInput", s: { t: "object", pr: { prompt: { t: "string", n: 1, ds: "Teks tunggal", ex: "Ringkas pengumuman berikut dalam 3 poin: ..." }, pesan: { t: "array", ds: "Alternatif prompt: percakapan, diakhiri user", i: { t: "object", pr: { role: { t: "string", n: 1, ds: "user / assistant" }, content: { t: "string", n: 1 } } } }, sistem: { t: "string", n: 1, ds: "Instruksi sistem tambahan, maks. 20.000 karakter", ex: "Anda asisten akademik UNIPO. Jawab dalam bahasa Indonesia." }, maks_token: { t: "integer", n: 1, ds: "Dibatasi pengaturan penyedia", ex: 2e3 }, effort: { t: "string", n: 1, ds: "Claude: low, medium, high, xhigh, max" }, json: { t: "boolean", ds: "Minta jawaban JSON (OpenAI/Gemini)" }, penyedia: { t: "string", n: 1, ds: "Kode penyedia AI (kosong = utama)" }, modul: { t: "string", n: 1, ds: "Nama modul/aplikasi Anda", ex: "lms" } } }, rq: 1 }, r: "object", it: "IntegrasiAiHasil" }, getIntegrasiAiPemakaian: { id: "getIntegrasiAiPemakaian", m: "GET", path: "/v1/integrasi/ai/pemakaian", tag: "Integrasi: AI", sum: "Rekap pemakaian AI", ds: "Jumlah permintaan dan token per hari, klien, dan model. Klien melihat miliknya; admin semua (filter `klien_id`).", sc: ["integrasi:ai"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD (bawaan awal bulan)" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD (bawaan hari ini)" }, { nm: "klien_id", in: "query", s: { t: "string" }, ds: "Admin: klien tertentu" }], r: "object", it: "Objek" } };
6
+ var mandiri = ["getIntegrasiStatus", "getIntegrasiRingkasan", "getIntegrasiCaptchaKonfigurasi", "postIntegrasiCaptchaVerifikasi", "postIntegrasiBerkasUnggahLangsung", "postIntegrasiEmailKirim", "postIntegrasiWhatsappKirim", "postIntegrasiWebhookKeluarByIdKirimanByKirimanUlang", "postIntegrasiEsignTandaTangan", "postIntegrasiEsignVerifikasi", "postIntegrasiEsignStatusPengguna", "postIntegrasiAiTeks", "getIntegrasiAiPemakaian"];
7
+ var skema = { IntegrasiStatus: { t: "object", pr: { captcha: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "turnstile" }, site_key: { t: "string", n: 1 }, skrip: { t: "string", n: 1 }, field_token: { t: "string", n: 1 }, skor_minimal: { t: "number", n: 1 }, halaman: { t: "array", i: { t: "string", n: 1 } } } }, pembayaran: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "xendit" }, mode: { t: "string", n: 1, ds: "sandbox atau produksi" }, client_key: { t: "string", n: 1, ds: "Midtrans: client key untuk Snap.js" } } }, penyimpanan: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "r2" } } }, cache: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1 } } }, email: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "smtp" } } }, whatsapp: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "fonnte" } } }, rapat: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "zoom" } } }, esign: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "bsre" } } }, ai: { t: "object", pr: { aktif: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "anthropic" } } } } }, IntegrasiDriver: { t: "object", pr: { driver: { t: "string", n: 1, ex: "xendit" }, kategori: { t: "string", n: 1, ds: "captcha, pembayaran, penyimpanan, cache, email, whatsapp" }, nama: { t: "string", n: 1 }, keterangan: { t: "string", n: 1 }, dokumentasi: { t: "string", n: 1 }, konfigurasi: { t: "array", i: { t: "object", pr: { nama: { t: "string", n: 1 }, label: { t: "string", n: 1 }, wajib: { t: "boolean" }, bawaan: {}, tipe: { t: "string", n: 1, ds: "string, bool, number, list" } } } }, rahasia: { t: "array", i: { t: "object", pr: { nama: { t: "string", n: 1 }, label: { t: "string", n: 1 }, wajib: { t: "boolean" } } } } } }, Objek: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, IntegrasiPenyedia: { t: "object", pr: { id: { t: "integer", n: 1 }, kode: { t: "string", n: 1, ex: "xendit" }, kategori: { t: "string", n: 1 }, driver: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, mode: { t: "string", n: 1, ds: "sandbox / produksi" }, aktif: { t: "boolean" }, utama: { t: "boolean", ds: "Penyedia bawaan kategorinya" }, konfigurasi: { t: "object" }, rahasia: { t: "object", ds: 'Hanya status: "kosong" atau "terisi (\u2026abcd)"' }, rahasia_terbaca: { t: "boolean", ds: "false bila kunci enkripsi berubah sejak disimpan" }, url_webhook: { t: "string", n: 1, ds: "Pembayaran: pasang di dasbor penyedia" }, catatan: { t: "string", n: 1 }, diuji_at: { t: "string", n: 1 }, hasil_uji: { t: "string", n: 1 }, dibuat_at: { t: "string", n: 1 }, diubah_at: { t: "string", n: 1 } } }, IntegrasiCaptchaWidget: { t: "object", pr: { penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1, ex: "turnstile" }, site_key: { t: "string", n: 1 }, skrip: { t: "string", n: 1, ds: "URL skrip widget" }, field_token: { t: "string", n: 1, ds: "Nama field token di formulir", ex: "cf-turnstile-response" }, skor_minimal: { t: "number", n: 1, ds: "reCAPTCHA v3" }, halaman: { t: "array", ds: "Formulir yang wajib captcha: login, lupa_password, reset_password, daftar, formulir_publik", i: { t: "string", n: 1 } } } }, IntegrasiCaptchaHasil: { t: "object", pr: { valid: { t: "boolean", ds: "true = lolos" }, skor: { t: "number", n: 1, ds: "reCAPTCHA v3" }, aksi: { t: "string", n: 1 }, hostname: { t: "string", n: 1 }, galat: { t: "array", ds: "Kode galat penyedia, mis. invalid-input-response, timeout-or-duplicate, skor-terlalu-rendah", i: { t: "string", n: 1 } }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1 } } }, IntegrasiTransaksi: { t: "object", pr: { id: { t: "string", n: 1, ds: "UUID" }, order_id: { t: "string", n: 1 }, penyedia: { t: "string", n: 1, ds: "xendit / midtrans" }, metode: { t: "string", n: 1 }, kanal: { t: "string", n: 1 }, jumlah: { t: "number", n: 1 }, mata_uang: { t: "string", n: 1 }, status: { t: "string", n: 1, ds: "menunggu, dibayar, kedaluwarsa, gagal, dibatalkan, dikembalikan" }, keterangan: { t: "string", n: 1 }, pelanggan: { t: "object", pr: { nama: { t: "string", n: 1 }, email: { t: "string", n: 1 }, hp: { t: "string", n: 1 } } }, url_bayar: { t: "string", n: 1, ds: "checkout" }, nomor_va: { t: "string", n: 1, ds: "va" }, qr_string: { t: "string", n: 1, ds: "qris: isi untuk dibuat gambar QR" }, instruksi: { t: "object", ds: "Data tambahan: snap_token + client_key (Midtrans), biller_code (Mandiri), url_qr" }, kedaluwarsa_at: { t: "string", n: 1 }, dibayar_at: { t: "string", n: 1 }, jumlah_dibayar: { t: "number", n: 1 }, sumber: { t: "object", pr: { modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, status: { t: "string", n: 1, ds: "menunggu, diproses, gagal" }, pesan: { t: "string", n: 1 } } }, url_kembali: { t: "string", n: 1 }, metadata: { t: "object" }, id_eksternal: { t: "string", n: 1 }, klien_id: { t: "string", n: 1 }, dibuat_at: { t: "string", n: 1 }, diubah_at: { t: "string", n: 1 } } }, IntegrasiBerkas: { t: "object", pr: { id: { t: "string", n: 1, ds: "UUID" }, nama: { t: "string", n: 1 }, mime: { t: "string", n: 1 }, ukuran: { t: "integer", n: 1 }, sha256: { t: "string", n: 1 }, visibilitas: { t: "string", n: 1 }, status: { t: "string", n: 1, ds: "menunggu_unggah / tersedia" }, penyimpanan: { t: "string", n: 1, ds: "lokal, s3, r2, minio" }, kunci: { t: "string", n: 1, ds: "Object key" }, folder: { t: "string", n: 1 }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, klien_id: { t: "string", n: 1 }, dibuat_at: { t: "string", n: 1 }, url: { t: "string", n: 1, ds: "URL unduh sementara" }, kedaluwarsa_at: { t: "string", n: 1 }, unggah: { t: "object", ds: "Hanya pada unggah langsung", pr: { url: { t: "string", n: 1 }, metode: { t: "string", n: 1, ds: "PUT" }, header: { t: "object" }, kedaluwarsa_at: { t: "string", n: 1 } } } } }, IntegrasiPesanHasil: { t: "object", pr: { terkirim: { t: "boolean" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1 }, jumlah_penerima: { t: "integer", n: 1 }, id_pesan: { t: "string", n: 1 }, keterangan: { t: "string", n: 1 } } }, IntegrasiLangganan: { t: "object", pr: { id: { t: "string", n: 1, ds: "UUID" }, klien_id: { t: "string", n: 1 }, nama: { t: "string", n: 1 }, url: { t: "string", n: 1 }, event: { t: "array", i: { t: "string", n: 1 } }, semua_klien: { t: "boolean" }, aktif: { t: "boolean" }, gagal_beruntun: { t: "integer", n: 1 }, terakhir_kirim_at: { t: "string", n: 1 }, dibuat_at: { t: "string", n: 1 }, rahasia: { t: "string", n: 1, ds: "Hanya saat dibuat/diganti" } } }, IntegrasiRapat: { t: "object", pr: { id: { t: "string", n: 1, ds: "UUID" }, driver: { t: "string", n: 1, ds: "zoom / google_meet" }, penyedia: { t: "string", n: 1, ds: "Zoom / Google Meet" }, judul: { t: "string", n: 1 }, agenda: { t: "string", n: 1 }, mulai: { t: "string", n: 1 }, selesai: { t: "string", n: 1 }, durasi_menit: { t: "integer", n: 1 }, zona_waktu: { t: "string", n: 1 }, status: { t: "string", n: 1, ds: "terjadwal / dibatalkan" }, waktu: { t: "string", n: 1, ds: "akan_datang / berlangsung (15 menit sebelum mulai s.d. selesai) / selesai / dibatalkan" }, url_gabung: { t: "string", n: 1, ds: "Tautan peserta" }, kata_sandi: { t: "string", n: 1, ds: "Zoom" }, url_host: { t: "string", n: 1, ds: "Zoom: tautan mulai untuk penyelenggara" }, id_rapat: { t: "string", n: 1, ds: "ID meeting Zoom / kode Meet" }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, dibuat_oleh: { t: "string", n: 1 }, dibuat_at: { t: "string", n: 1 }, diubah_at: { t: "string", n: 1 } } }, IntegrasiEsign: { t: "object", pr: { id: { t: "string", n: 1, ds: "UUID" }, jenis: { t: "string", n: 1, ds: "tanda_tangan / verifikasi" }, driver: { t: "string", n: 1, ex: "bsre" }, judul: { t: "string", n: 1 }, status: { t: "string", n: 1, ds: "berhasil / gagal" }, galat: { t: "string", n: 1 }, nik: { t: "string", n: 1, ds: "Disamarkan, mis. ************1234" }, penanda: { t: "string", n: 1, ds: "Username yang menandatangani" }, berkas_asal: { t: "string", n: 1, ds: "UUID berkas sumber" }, berkas_hasil: { t: "string", n: 1, ds: "UUID berkas PDF bertanda tangan" }, sha256_asal: { t: "string", n: 1 }, sha256_hasil: { t: "string", n: 1 }, id_dokumen: { t: "string", n: 1, ds: "ID dokumen di BSrE" }, modul: { t: "string", n: 1 }, referensi: { t: "string", n: 1 }, waktu: { t: "string", n: 1 }, berkas: { t: "object" }, pdf_base64: { t: "string", n: 1, ds: "Bila kembalikan_pdf atau simpan=false" } } }, IntegrasiEsignVerifikasi: { t: "object", pr: { valid: { t: "boolean" }, kesimpulan: { t: "string", n: 1, ds: "VALID / WARNING / INVALID / NO_SIGNATURE" }, penanda: { t: "array", i: { t: "object", pr: { nama: { t: "string", n: 1 }, penerbit: { t: "string", n: 1 }, waktu: { t: "string", n: 1 }, alasan: { t: "string", n: 1 }, lokasi: { t: "string", n: 1 }, sertifikat_valid: { t: "boolean" }, dokumen_utuh: { t: "boolean" } } } }, sha256: { t: "string", n: 1 }, ditandatangani_lewat_siakad: { t: "object", pr: { id: { t: "string", n: 1 }, judul: { t: "string", n: 1 }, penanda: { t: "string", n: 1 }, waktu: { t: "string", n: 1 } } }, data: { t: "object" } } }, IntegrasiAiHasil: { t: "object", pr: { teks: { t: "string", n: 1, ds: "Jawaban model" }, ditolak: { t: "boolean", ds: "true = ditolak pengaman model" }, keterangan: { t: "string", n: 1 }, alasan_berhenti: { t: "string", n: 1, ds: "end_turn, max_tokens, refusal, stop, ..." }, model: { t: "string", n: 1, ex: "claude-opus-5-5" }, penyedia: { t: "string", n: 1 }, driver: { t: "string", n: 1 }, token: { t: "object", pr: { masuk: { t: "integer", n: 1 }, keluar: { t: "integer", n: 1 } } }, ms: { t: "integer", n: 1, ds: "Durasi" } } } };
8
+ var integrasi_default = { key, resources, ops, mandiri, skema };
9
+
10
+ export { integrasi_default as default, key, mandiri, ops, resources, skema };
11
+ //# sourceMappingURL=integrasi-IP3WWDO7.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/kalender.json
7
+ var key = "kalender";
8
+ var resources = [{ id: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", title: "Kegiatan kalender", base: "/v1/kalender/kegiatan", item: "/v1/kalender/kegiatan/{id}", key: "id", list: "getKalenderKegiatan", create: "postKalenderKegiatan", get: "getKalenderKegiatanById", update: "putKalenderKegiatanById", del: "deleteKalenderKegiatanById", actions: [], children: ["/v1/kalender/kegiatan/{id}/berkas"] }, { id: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", title: "Kegiatan kalender", base: "/v1/kalender/kegiatan/{id}/berkas", item: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", key: "uuid", list: "getKalenderKegiatanByIdBerkas", create: "postKalenderKegiatanByIdBerkas", get: "getKalenderKegiatanByIdBerkasByUuid", del: "deleteKalenderKegiatanByIdBerkasByUuid", actions: [], children: [], parent: "/v1/kalender/kegiatan" }, { id: "/v1/kalender/tahun", tag: "Kalender: Terpadu", title: "Tahun akademik", base: "/v1/kalender/tahun", list: "getKalenderTahun", actions: [], children: [] }, { id: "/v1/kalender/terpadu", tag: "Kalender: Terpadu", title: "Kalender terpadu", base: "/v1/kalender/terpadu", list: "getKalenderTerpadu", actions: [], children: [] }];
9
+ var ops = { getKalenderTerpadu: { id: "getKalenderTerpadu", m: "GET", path: "/v1/kalender/terpadu", tag: "Kalender: Terpadu", sum: "Kalender terpadu", ds: "Gabungan kegiatan kalender yang terbit (sesuai level pengguna), tahapan tahun akademik di `m_tahun`, batas waktu per prodi di `m_bataskrs*`/`m_batas_*`, agenda portal yang terbit, dan jadwal PMB. Tabel lama hanya dibaca. Bawaan rentang: 30 hari lalu s.d. 180 hari ke depan, maksimal 400 hari.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Tahun akademik (5 digit)" }, { nm: "sumber", in: "query", s: { t: "string" }, ds: "Dipisah koma: kalender, libur, tahun, batas, portal, pmb (bawaan semua)" }], r: "list", it: "Objek" }, getKalenderIcs: { id: "getKalenderIcs", m: "GET", path: "/v1/kalender/ics", tag: "Kalender: Terpadu", sum: "Langganan iCalendar (publik)", ds: "File .ics tanpa token untuk Google Calendar/Outlook/ponsel. Berisi kegiatan terbit yang untuk semua, tahapan tahun akademik, agenda portal, dan PMB (batas per prodi tidak ikut). Bawaan rentang: 60 hari lalu s.d. 1 tahun ke depan.", pub: 1, pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Tahun akademik (5 digit)" }, { nm: "sumber", in: "query", s: { t: "string" }, ds: "Dipisah koma: kalender, libur, tahun, batas, portal, pmb (bawaan semua)" }], r: "object" }, getKalenderTahun: { id: "getKalenderTahun", m: "GET", path: "/v1/kalender/tahun", tag: "Kalender: Terpadu", sum: "Tahun akademik", ds: "Tahun akademik terbaru dari `m_tahun` (hanya baca) beserta tahapannya.", sc: ["kalender:read"], pa: [{ nm: "batas", in: "query", s: { t: "integer" }, ds: "1-100, bawaan 10" }], r: "list", it: "Objek" }, getKalenderHariKerja: { id: "getKalenderHariKerja", m: "GET", path: "/v1/kalender/hari-kerja", tag: "Kalender: Hari kerja", sum: "Hitung hari kerja", ds: "Jumlah hari kerja dalam rentang (Senin-Jumat, atau Senin-Sabtu bila `sabtu=1`), dikurangi kegiatan terbit yang libur.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "sabtu", in: "query", s: { t: "string" }, ds: "1 = Sabtu hari kerja" }], r: "object", it: "Objek" }, getKalenderTambahHariKerja: { id: "getKalenderTambahHariKerja", m: "GET", path: "/v1/kalender/tambah-hari-kerja", tag: "Kalender: Hari kerja", sum: "Tanggal setelah N hari kerja", ds: "Untuk menghitung tenggat (mis. SLA layanan) dengan melompati akhir pekan dan libur.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD, bawaan hari ini" }, { nm: "hari", in: "query", s: { t: "integer" }, ds: "0-365" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "sabtu", in: "query", s: { t: "string" }, ds: "1 = Sabtu hari kerja" }], r: "object", it: "Objek" }, getKalenderKegiatan: { id: "getKalenderKegiatan", m: "GET", path: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: daftar", ds: "Kegiatan kalender akademik, libur, dan cuti bersama. Yang berstatus `terbit` bisa dibaca semua orang (juga tanpa token) sesuai `untuk` (level pengguna, dipisah koma; kosong = semua). `libur = true` membuat tanggalnya tidak dihitung sebagai hari kerja. Semua pemilik token ber-scope kalender:read (selain pengelola hanya melihat status terbit).", pub: 1, 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: "libur", in: "query", s: { t: "string" }, 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: "unit_id", in: "query", s: { t: "string" }, 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: "status", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di judul, lokasi" }, { 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: "KalenderKegiatan" }, postKalenderKegiatan: { id: "postKalenderKegiatan", m: "POST", path: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: tambah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], b: { ct: "application/json", ref: "KalenderKegiatanInput", s: { t: "object", pr: { judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "KalenderKegiatan" }, getKalenderKegiatanById: { id: "getKalenderKegiatanById", m: "GET", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: detail", ds: "Kegiatan kalender akademik, libur, dan cuti bersama. Yang berstatus `terbit` bisa dibaca semua orang (juga tanpa token) sesuai `untuk` (level pengguna, dipisah koma; kosong = semua). `libur = true` membuat tanggalnya tidak dihitung sebagai hari kerja. Semua pemilik token ber-scope kalender:read (selain pengelola hanya melihat status terbit).", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "KalenderKegiatan" }, putKalenderKegiatanById: { id: "putKalenderKegiatanById", m: "PUT", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: ubah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya). Kolom yang tidak dikirim tidak berubah.", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "KalenderKegiatanInput", s: { t: "object", pr: { judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "KalenderKegiatan" }, deleteKalenderKegiatanById: { id: "deleteKalenderKegiatanById", m: "DELETE", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: hapus", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getKalenderKegiatanByIdBerkas: { id: "getKalenderKegiatanByIdBerkas", m: "GET", path: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: daftar lampiran", ds: "Siapa pun yang boleh melihat barisnya.", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "list", it: "PusatBerkas" }, postKalenderKegiatanByIdBerkas: { id: "postKalenderKegiatanByIdBerkas", m: "POST", path: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: 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 modul (peran ber-unit hanya untuk unitnya).', sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "multipart/form-data", ref: "PusatBerkasInput", s: { t: "object", pr: { 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" }, getKalenderKegiatanByIdBerkasByUuid: { id: "getKalenderKegiatanByIdBerkasByUuid", m: "GET", path: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: unduh lampiran", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "object" }, deleteKalenderKegiatanByIdBerkasByUuid: { id: "deleteKalenderKegiatanByIdBerkasByUuid", m: "DELETE", path: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: hapus lampiran", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "none" } };
10
+ var mandiri = ["getKalenderIcs", "getKalenderHariKerja", "getKalenderTambahHariKerja"];
11
+ var skema = { Objek: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, KalenderKegiatan: { t: "object", ds: "Kegiatan kalender (tabel kalender_kegiatan)", pr: { id: { t: "integer" }, judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id" }, unit_id: { t: "integer", ds: "ID di induk_unit" }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi" }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" }, 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" } } } };
12
+ var kalender_default = { key, resources, ops, mandiri, skema };
13
+
14
+ exports.default = kalender_default;
15
+ exports.key = key;
16
+ exports.mandiri = mandiri;
17
+ exports.ops = ops;
18
+ exports.resources = resources;
19
+ exports.skema = skema;
20
+ //# sourceMappingURL=kalender-DGQDGJCL.cjs.map
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ // src/katalog/data/modul/kalender.json
3
+ var key = "kalender";
4
+ var resources = [{ id: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", title: "Kegiatan kalender", base: "/v1/kalender/kegiatan", item: "/v1/kalender/kegiatan/{id}", key: "id", list: "getKalenderKegiatan", create: "postKalenderKegiatan", get: "getKalenderKegiatanById", update: "putKalenderKegiatanById", del: "deleteKalenderKegiatanById", actions: [], children: ["/v1/kalender/kegiatan/{id}/berkas"] }, { id: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", title: "Kegiatan kalender", base: "/v1/kalender/kegiatan/{id}/berkas", item: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", key: "uuid", list: "getKalenderKegiatanByIdBerkas", create: "postKalenderKegiatanByIdBerkas", get: "getKalenderKegiatanByIdBerkasByUuid", del: "deleteKalenderKegiatanByIdBerkasByUuid", actions: [], children: [], parent: "/v1/kalender/kegiatan" }, { id: "/v1/kalender/tahun", tag: "Kalender: Terpadu", title: "Tahun akademik", base: "/v1/kalender/tahun", list: "getKalenderTahun", actions: [], children: [] }, { id: "/v1/kalender/terpadu", tag: "Kalender: Terpadu", title: "Kalender terpadu", base: "/v1/kalender/terpadu", list: "getKalenderTerpadu", actions: [], children: [] }];
5
+ var ops = { getKalenderTerpadu: { id: "getKalenderTerpadu", m: "GET", path: "/v1/kalender/terpadu", tag: "Kalender: Terpadu", sum: "Kalender terpadu", ds: "Gabungan kegiatan kalender yang terbit (sesuai level pengguna), tahapan tahun akademik di `m_tahun`, batas waktu per prodi di `m_bataskrs*`/`m_batas_*`, agenda portal yang terbit, dan jadwal PMB. Tabel lama hanya dibaca. Bawaan rentang: 30 hari lalu s.d. 180 hari ke depan, maksimal 400 hari.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Tahun akademik (5 digit)" }, { nm: "sumber", in: "query", s: { t: "string" }, ds: "Dipisah koma: kalender, libur, tahun, batas, portal, pmb (bawaan semua)" }], r: "list", it: "Objek" }, getKalenderIcs: { id: "getKalenderIcs", m: "GET", path: "/v1/kalender/ics", tag: "Kalender: Terpadu", sum: "Langganan iCalendar (publik)", ds: "File .ics tanpa token untuk Google Calendar/Outlook/ponsel. Berisi kegiatan terbit yang untuk semua, tahapan tahun akademik, agenda portal, dan PMB (batas per prodi tidak ikut). Bawaan rentang: 60 hari lalu s.d. 1 tahun ke depan.", pub: 1, pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "tahun_id", in: "query", s: { t: "string", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, ds: "Tahun akademik (5 digit)" }, { nm: "sumber", in: "query", s: { t: "string" }, ds: "Dipisah koma: kalender, libur, tahun, batas, portal, pmb (bawaan semua)" }], r: "object" }, getKalenderTahun: { id: "getKalenderTahun", m: "GET", path: "/v1/kalender/tahun", tag: "Kalender: Terpadu", sum: "Tahun akademik", ds: "Tahun akademik terbaru dari `m_tahun` (hanya baca) beserta tahapannya.", sc: ["kalender:read"], pa: [{ nm: "batas", in: "query", s: { t: "integer" }, ds: "1-100, bawaan 10" }], r: "list", it: "Objek" }, getKalenderHariKerja: { id: "getKalenderHariKerja", m: "GET", path: "/v1/kalender/hari-kerja", tag: "Kalender: Hari kerja", sum: "Hitung hari kerja", ds: "Jumlah hari kerja dalam rentang (Senin-Jumat, atau Senin-Sabtu bila `sabtu=1`), dikurangi kegiatan terbit yang libur.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "sampai", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "sabtu", in: "query", s: { t: "string" }, ds: "1 = Sabtu hari kerja" }], r: "object", it: "Objek" }, getKalenderTambahHariKerja: { id: "getKalenderTambahHariKerja", m: "GET", path: "/v1/kalender/tambah-hari-kerja", tag: "Kalender: Hari kerja", sum: "Tanggal setelah N hari kerja", ds: "Untuk menghitung tenggat (mis. SLA layanan) dengan melompati akhir pekan dan libur.", sc: ["kalender:read"], pa: [{ nm: "dari", in: "query", s: { t: "string" }, ds: "YYYY-MM-DD, bawaan hari ini" }, { nm: "hari", in: "query", s: { t: "integer" }, ds: "0-365" }, { nm: "kode_prodi", in: "query", s: { t: "string", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, ds: "Prodi" }, { nm: "sabtu", in: "query", s: { t: "string" }, ds: "1 = Sabtu hari kerja" }], r: "object", it: "Objek" }, getKalenderKegiatan: { id: "getKalenderKegiatan", m: "GET", path: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: daftar", ds: "Kegiatan kalender akademik, libur, dan cuti bersama. Yang berstatus `terbit` bisa dibaca semua orang (juga tanpa token) sesuai `untuk` (level pengguna, dipisah koma; kosong = semua). `libur = true` membuat tanggalnya tidak dihitung sebagai hari kerja. Semua pemilik token ber-scope kalender:read (selain pengelola hanya melihat status terbit).", pub: 1, 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: "libur", in: "query", s: { t: "string" }, 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: "unit_id", in: "query", s: { t: "string" }, 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: "status", in: "query", s: { t: "string" }, ds: 'Filter kesamaan (isi "null" untuk kosong)' }, { nm: "q", in: "query", s: { t: "string" }, ds: "Cari di judul, lokasi" }, { 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: "KalenderKegiatan" }, postKalenderKegiatan: { id: "postKalenderKegiatan", m: "POST", path: "/v1/kalender/kegiatan", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: tambah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], b: { ct: "application/json", ref: "KalenderKegiatanInput", s: { t: "object", pr: { judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "KalenderKegiatan" }, getKalenderKegiatanById: { id: "getKalenderKegiatanById", m: "GET", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: detail", ds: "Kegiatan kalender akademik, libur, dan cuti bersama. Yang berstatus `terbit` bisa dibaca semua orang (juga tanpa token) sesuai `untuk` (level pengguna, dipisah koma; kosong = semua). `libur = true` membuat tanggalnya tidak dihitung sebagai hari kerja. Semua pemilik token ber-scope kalender:read (selain pengelola hanya melihat status terbit).", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "object", it: "KalenderKegiatan" }, putKalenderKegiatanById: { id: "putKalenderKegiatanById", m: "PUT", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: ubah", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya). Kolom yang tidak dikirim tidak berubah.", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "application/json", ref: "KalenderKegiatanInput", s: { t: "object", pr: { judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id", rf: { l: "/v1/referensi/tahun-akademik", k: "tahun_id", q: 0 } }, unit_id: { t: "integer", ds: "ID di induk_unit", rf: { l: "/v1/induk/unit", k: "id", d: "/v1/induk/unit/{id}" } }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi", rf: { l: "/v1/referensi/prodi", k: "kode_prodi", q: 0 } }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" } }, rq: ["judul", "mulai"] }, rq: 1 }, r: "object", it: "KalenderKegiatan" }, deleteKalenderKegiatanById: { id: "deleteKalenderKegiatanById", m: "DELETE", path: "/v1/kalender/kegiatan/{id}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: hapus", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "none" }, getKalenderKegiatanByIdBerkas: { id: "getKalenderKegiatanByIdBerkas", m: "GET", path: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: daftar lampiran", ds: "Siapa pun yang boleh melihat barisnya.", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], r: "list", it: "PusatBerkas" }, postKalenderKegiatanByIdBerkas: { id: "postKalenderKegiatanByIdBerkas", m: "POST", path: "/v1/kalender/kegiatan/{id}/berkas", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: 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 modul (peran ber-unit hanya untuk unitnya).', sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }], b: { ct: "multipart/form-data", ref: "PusatBerkasInput", s: { t: "object", pr: { 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" }, getKalenderKegiatanByIdBerkasByUuid: { id: "getKalenderKegiatanByIdBerkasByUuid", m: "GET", path: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: unduh lampiran", pub: 1, pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "object" }, deleteKalenderKegiatanByIdBerkasByUuid: { id: "deleteKalenderKegiatanByIdBerkasByUuid", m: "DELETE", path: "/v1/kalender/kegiatan/{id}/berkas/{uuid}", tag: "Kalender: Kegiatan", sum: "Kegiatan kalender: hapus lampiran", ds: "Pengelola modul (peran ber-unit hanya untuk unitnya).", sc: ["kalender:write"], pa: [{ nm: "id", in: "path", s: { t: "string", rf: { l: "/v1/kalender/kegiatan", k: "id", d: "/v1/kalender/kegiatan/{id}" } }, rq: 1, ds: "ID angka atau UUID" }, { nm: "uuid", in: "path", s: { t: "string" }, rq: 1, ds: "UUID berkas" }], r: "none" } };
6
+ var mandiri = ["getKalenderIcs", "getKalenderHariKerja", "getKalenderTambahHariKerja"];
7
+ var skema = { Objek: { t: "object", ds: "Baris data dengan nama kolom huruf kecil sesuai tabel SIAKAD." }, KalenderKegiatan: { t: "object", ds: "Kegiatan kalender (tabel kalender_kegiatan)", pr: { id: { t: "integer" }, judul: { t: "string", max: 200 }, jenis: { t: "string", e: ["akademik", "perkuliahan", "ujian", "krs", "nilai", "libur", "cuti_bersama", "wisuda", "pmb", "keuangan", "kemahasiswaan", "rapat", "lainnya"], d: "akademik" }, keterangan: { t: "string" }, mulai: { t: "string", f: "date" }, selesai: { t: "string", f: "date" }, jam_mulai: { t: "string", p: "^\\d{2}:\\d{2}$" }, jam_selesai: { t: "string", p: "^\\d{2}:\\d{2}$" }, libur: { t: "boolean", d: "0" }, tahun_id: { t: "string", ds: "m_tahun.tahun_id" }, unit_id: { t: "integer", ds: "ID di induk_unit" }, kode_prodi: { t: "string", ds: "m_program_studi.kode_prodi" }, untuk: { t: "string", max: 100 }, lokasi: { t: "string", max: 255 }, tautan: { t: "string", f: "uri" }, warna: { t: "string", max: 7 }, status: { t: "string", e: ["draf", "terbit", "batal"], d: "draf" }, 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 kalender_default = { key, resources, ops, mandiri, skema };
9
+
10
+ export { kalender_default as default, key, mandiri, ops, resources, skema };
11
+ //# sourceMappingURL=kalender-FGGUBYKZ.js.map