Pengembang · SISWA 2 · API ekstensi

Membangun aplikasi untuk jemaat

Kas komisi, presensi sekolah minggu, dasbor Persidangan Majelis Jemaat: aplikasi buatan jemaat bisa memakai data SISWA 2 lewat pintu resmi /api/v1 — dengan kunci sendiri, terbatas pada data yang diizinkan, dan tanpa pernah mengubah pembukuan diam-diam.

Cara kerjanya

  1. 1

    Admin menerbitkan kunci

    Di SISWA 2: Pengguna → Aplikasi tersambung. Admin mencentang lingkup data dan membatasi ke wilayah atau komisi.

  2. 2

    Aplikasi memanggil /api/v1

    Dari jaringan jemaat, dengan header Authorization. SISWA 2 hanya mengembalikan kolom yang diizinkan.

  3. 3

    Pengurus tetap memutuskan

    Catatan keuangan dan koreksi anggota masuk sebagai draft/usulan; bendahara atau Tata Usaha yang menyetujui.

Kunci & panggilan pertama

Kunci berbentuk sw2_<awalan>_<rahasia>, ditampilkan sekali saat dibuat, berlaku setahun, dan bisa dicabut admin kapan saja. Kirim di setiap permintaan ke komputer SISWA 2 (port 8177):

curl -H "Authorization: Bearer sw2_k3p9x2aa_…" http://192.168.1.10:8177/api/v1

{"data": {"versi": "2.13.0", "api": 1,
          "aplikasi": {"id": 3, "nama": "Kas & Program Komisi Pemuda"},
          "lingkup": ["kas:baca", "kas:catat", "program:baca"],
          "batas": {"wilayah": null, "bidang": [12]}, "jemaat": null}}

Contoh mencatat pengeluaran — selalu tersimpan sebagai draft:

curl -X POST http://192.168.1.10:8177/api/v1/kas/transaksi \
  -H "Authorization: Bearer sw2_k3p9x2aa_…" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 5d0c6f0e-…" \
  -d '{"tanggal":"2026-10-05","jenis":"keluar","akun_id":48,"kategori_id":40,
       "jumlah":350000,"keterangan":"Konsumsi retret pemuda"}'

{"data": {"transaksi_id": 2231, "status": "draft"}}

Simpan kunci di peladen, bukan di aplikasi HP

Siapa pun yang memegang kunci bisa bertindak sebagai aplikasi Anda. Taruh kunci di komputer atau peladen yang Anda kelola, lalu biarkan halaman/aplikasi HP memanggil peladen itu — seperti contoh resmi di bawah. Jangan menaruhnya di aplikasi yang dibagikan, repositori publik, atau grup WhatsApp.

Lingkup

Admin mencentang lingkup per aplikasi. Lingkup bertanda ✎ adalah tulisan — selalu draft atau usulan, kecuali presensi kebaktian dan kelas serta pendaftaran & check-in kegiatan yang langsung tercatat atas nama aplikasi. Pembayaran kegiatan hanya dicatat; membukukannya ke Buku Kas tetap tugas staf keuangan di SISWA 2.

jemaat:bacaProfil jemaat (nama, kode, klasis, alamat kantor)
wilayah:bacaDaftar wilayah
anggota:bacaAnggota — nama, sapaan, wilayah, status, jenis kelamin, tanggal & bulan lahir (tanpa tahun), kode keluarga
anggota:kontakHP, telepon, email, alamat — hanya dengan nomor keputusan Persidangan Majelis Jemaat
anggota:usul ✎Usulkan koreksi data anggota → ditinjau Tata Usaha per kolom
kebaktian:bacaJadwal & pencatatan kebaktian
kebaktian:catat ✎Catat jumlah hadir kebaktian (31 hari terakhir)
kelas:bacaKelas & kehadiran (nama peserta saja)
kelas:presensi ✎Catat presensi kelas
kegiatan:bacaKegiatan & peserta (nama, status, hadir — tanpa HP dan kode peserta)
kegiatan:kelola ✎Buat kegiatan, daftarkan peserta, check-in, catat pembayaran
kas:bacaKas & bank: saldo, Buku Kas, draft menunggu
kas:catat ✎Catat penerimaan/pengeluaran sebagai draft
program:bacaProgram kerja, realisasi, dropping
program:usul ✎Usulkan program, minta dropping, isi LPJ
lampiran:unggah ✎Lampirkan foto nota ke transaksi/LPJ

Batas: aplikasi bisa dibatasi ke wilayah tertentu (anggota di luar wilayah dijawab “tidak ditemukan”) dan ke bidang/komisi tertentu beserta sub-komisinya (kas, program, dropping, lampiran, kegiatan), dan ke kelas tertentu (misalnya hanya kelas Sekolah Minggu).

Titik /api/v1

MetodeJalurLingkup
GET/api/v1identitas aplikasi, lingkup, batas
GET/api/v1/openapi.jsonspesifikasi lengkap (OpenAPI 3.1)
GET/api/v1/wilayahwilayah:baca
GET/api/v1/anggota · /anggota/{id}anggota:baca
POST/api/v1/anggota/{id}/usulananggota:usul
GET/api/v1/kebaktian?dari=&sampai=kebaktian:baca
POST/api/v1/kebaktian/{id}kebaktian:catat
GET/api/v1/kelas · /kelas/{id}kelas:baca
POST/api/v1/kelas/{id}/presensikelas:presensi
GET/api/v1/kegiatan?dari=&sampai= · /kegiatan/{id}kegiatan:baca
POST/api/v1/kegiatan · /kegiatan/{id}/peserta · /kegiatan/peserta/{id}/hadir · /kegiatan/peserta/{id}/bayarkegiatan:kelola
GET/api/v1/kas/akun · /kas/transaksi · /kas/kategori · /kas/draftkas:baca
POST/api/v1/kas/transaksikas:catat (selalu draft)
GET/api/v1/program?tahun= · /program/{id} · /dropping?tahun=program:baca
POST/api/v1/program · /program/{id}/dropping · /dropping/{id}/lpjprogram:usul
POST/api/v1/lampiranlampiran:unggah

Kolom dan isian lengkap tiap titik ada di /api/v1/openapi.json SISWA 2 Anda (butuh kunci).

Aturan main

  • Jawaban: {data, halaman?}; galat {galat: {kode, pesan}} dengan status 400 (isian), 401 (kunci), 403 (lingkup/jaringan), 404, 409 (ditolak aturan SISWA 2 — pesannya layak ditampilkan ke pengguna), 429 (laju).
  • Daftar anggota berhalaman: limit ≤ 200, lanjutkan dengan kursor dari halaman.kursor_berikut.
  • Laju: 600 permintaan baca dan 60 tulisan per menit per aplikasi.
  • Idempotency-Key pada setiap tulisan: kiriman ulang dengan kunci yang sama (24 jam) mendapat jawaban pertama tanpa menulis dua kali.
  • Jaringan: kunci hanya berlaku dari jaringan jemaat. Admin bisa mengizinkan aplikasi tertentu dipakai dari luar — hanya lewat Tailscale dan selama Akses dari luar jaringan di SISWA 2 aktif.
  • Versi: /api/v1 hanya bertambah (titik, kolom, lingkup baru); abaikan kolom yang belum Anda kenal. Perubahan yang merusak menunggu /api/v2.

Data pribadi (UU PDP)

KTP, nomor akta, golongan darah, catatan & kasus pastoral, alasan nonaktif, proses keanggotaan, dan data penghapusan tidak pernah keluar lewat kunci. Kontak anggota hanya dengan persetujuan Persidangan Majelis Jemaat. Sebagai pengembang Anda wajib:

  • tidak menyimpan salinan penuh data anggota (tembolok paling lama 24 jam);
  • tidak memindahkan data ke pihak atau layanan lain di luar yang disebut saat kunci diminta;
  • membuang data anggota yang sudah dihapus dari SISWA 2 pada sinkron berikutnya.

Setiap permintaan aplikasi tercatat dan bisa dilihat admin jemaat.

Ekstensi terpasang

Tidak punya komputer atau peladen sendiri? Kemas aplikasi web statis (HTML, JS, CSS, gambar) dalam zip dengan ekstensi.json. Admin memasangnya lewat Pengguna → Aplikasi tersambung → Pasang ekstensi… dan menyetujui lingkupnya; pengguna SISWA 2 membukanya dari menu Ekstensi. Tidak ada kunci yang perlu disimpan.

{
  "nama": "Check-in Kegiatan",
  "versi": "1.0.0",
  "pengembang": "Komisi Pemuda",
  "keterangan": "Layar check-in untuk tablet di pintu masuk.",
  "api_min": 1,
  "lingkup": ["kegiatan:baca", "kegiatan:kelola"]
}
  • SISWA 2 membuka index.html dengan #sesi=…&api=…: panggil ${api}/api/v1/… dengan Authorization: Bearer ${sesi}. Hapus fragmen dari alamat setelah dibaca.
  • Sesi berlaku 12 jam dan lingkupnya = lingkup yang disetujui admin, diiris dengan hak pengguna yang membukanya (pembaca hanya mendapat lingkup :baca).
  • Ekstensi dilayani dari port tersendiri (8176), terpisah dari SISWA 2: ia tidak bisa membaca sesi login pengguna dan hanya boleh memanggil /api/v1.
  • Paket ≤ 20 MB, hanya berkas web statis; memasang ulang dengan nama yang sama = pembaruan.
Ekstensi Check-in Kegiatan: kisi nama peserta, yang sudah hadir bertanda hijau
Unduh contoh-ekstensi-checkin.zip — siap dipasang; butuh SISWA 2 versi 2.13.0 atau lebih baru.

Contoh resmi: Kas & Program Komisi

Aplikasi web kecil untuk pengurus komisi: saldo kas komisi, program kerja dengan realisasi, status dropping, catat pengeluaran/penerimaan dengan foto nota (draft), minta dropping, dan isi LPJ — nyaman dibuka dari HP di Wi-Fi gereja. Tanpa dependensi, cukup Node.js 22.

Aplikasi Kas & Program Komisi: saldo kas komisi, formulir catat pengeluaran, draft menunggu verifikasi, program kerja dan dropping dana
# 1. Di SISWA 2: Pengguna → Aplikasi tersambung → Tambah aplikasi
#    lingkup kas:baca, kas:catat, program:baca, program:usul, lampiran:unggah
#    batas: komisi Anda → salin kunci
# 2. Di komputer komisi (jaringan gereja yang sama):
SISWA2_URL=http://192.168.1.10:8177 SISWA2_KUNCI=sw2_… KODE_AKSES=kode-anda node server.mjs
# 3. Buka http://localhost:3300 — atau dari HP: http://<alamat komputer>:3300
Unduh contoh-kas-komisi.zip — README di dalamnya menjelaskan setiap langkah. Butuh SISWA 2 versi 2.12.0 atau lebih baru.