JDIH OIKN
Portal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server

- dokumen dikirim ke layanan AI eksternal
- 0
- tingkat akses, diperiksa di setiap unduhan
- 3
- peran sesuai alur persetujuan Direktorat Hukum
- 5
- halaman publik dan admin
- 36
Di halaman ini
Masalahnya
Otorita IKN adalah lembaga pemerintah yang baru, dan menerbitkan produk hukumnya sendiri: peraturan, keputusan, perjanjian kerja sama, dan lainnya. Sebelum sistem ini ada, dokumen-dokumen itu tersebar di email dan di drive lokal. Masyarakat tidak punya cara untuk menemukan peraturan resmi OIKN. Tidak ada proses review yang terkendali, sehingga siapa pun yang punya akses server bisa menerbitkan apa saja. Akses ke dokumen sensitif diatur secara informal, tanpa catatan siapa melihat apa. Laporan tahunan yang diwajibkan Peraturan Kepala OIKN Nomor 14 Tahun 2025 disusun manual.
JDIH adalah Jaringan Dokumentasi dan Informasi Hukum nasional, dan setiap instansi wajib punya portal yang sesuai. OIKN membutuhkan portal dengan sisi publik untuk masyarakat dan alur kerja terkendali untuk Direktorat Hukum.
Yang saya bangun
Peran yang mengikuti Direktorat Hukum
Rencana awalnya ada empat peran. Dalam praktiknya dibutuhkan lima, agar sesuai dengan cara kerja direktorat. Admin Direktorat Hukum dan walidata bisa menyetujui dokumen, dan walidata juga menangani permintaan akses. Admin lain bisa membuat dan mengubah dokumen, tapi tidak pernah bisa menyetujuinya. Pembagian ini muncul bersamaan dengan single sign-on, saat jelas siapa yang sebenarnya memberi persetujuan di organisasi. Setiap aksi admin menyatakan peran mana yang boleh memakainya, dan halaman review tertutup bagi siapa pun yang tidak berwenang menyetujui.
Tingkat akses diperiksa saat unduhan
Setiap dokumen bersifat terbuka, terbatas, atau tertutup. Dokumen terbatas tetap muncul di pencarian, dengan tombol untuk meminta akses. Walidata menyetujui permintaan itu, dengan tanggal kedaluwarsa jika perlu. Sebelum menampilkan tombol, halaman menanyakan ke server apa yang boleh dilakukan orang ini: mengunduh, meminta akses, atau login. Tautan file tidak pernah dikirim ke orang yang tidak berhak membukanya, dan setiap akses serta unduhan tercatat.
Ringkasan AI yang tidak pernah keluar dari server
Awalnya saya merilis ringkasan dokumen lewat layanan AI eksternal, untuk membuktikan fitur ini layak dibangun. Sehari kemudian, saya membangun ulang pipeline-nya agar berjalan penuh di server OIKN sendiri, karena mengirim dokumen hukum pemerintah ke layanan pihak ketiga adalah risiko kepatuhan. Pipeline ini mengambil teks dari setiap PDF, memilih kalimat kunci menjadi ringkasan berbahasa sederhana, dan menandai bidang hukumnya. Sepanjang bulan berikutnya, saya menambahkan cara untuk memeriksa kualitasnya. Staf bisa menulis ringkasan koreksi untuk dokumen mana pun, dan job mingguan membandingkan hasil ringkasan dengan koreksi itu untuk mendeteksi penurunan kualitas.
Peta peraturan yang saling mengubah
Sebuah job latar membaca judul dokumen baru untuk mencari frasa rujukan hukum, seperti "mencabut Perka No. 14 Tahun 2022". Job ini mencari dokumen yang dirujuk dan mengusulkan tautan untuk dikonfirmasi admin. Tautan yang sudah dikonfirmasi membentuk pohon peraturan publik yang menunjukkan dokumen mana mencabut, mengubah, atau melaksanakan dokumen lain.
Statistik dihitung semalam
Dashboard admin dan halaman statistik publik tidak pernah menghitung dokumen secara langsung. Job malam mengisi tabel ringkasan, jadi kedua halaman tetap cepat meski koleksinya terus bertambah. Halaman publik menampilkan heatmap aktivitas setahun, jenis dokumen yang sedang ramai, dan bidang hukum yang paling banyak dibaca. Kalau tabel malam masih kosong, dashboard membaca log aktivitas, jadi tidak pernah menampilkan angka nol yang keliru.
Hasilnya
JDIH OIKN sudah berjalan di produksi. Direktorat Hukum memakainya untuk menyusun, mereview, dan menerbitkan dokumen, dan portal publiknya menyajikan dokumen terbuka untuk siapa saja. Pegawai login lewat single sign-on OIKN, sedangkan pengguna luar login dengan email dan kata sandi. Di luar yang diwajibkan, saya menambahkan bookmark, notifikasi saat status permintaan akses berubah, rating bintang yang dimoderasi dan tampil di beranda, serta filter pencarian yang bisa dibagikan dengan ekspor CSV hingga 2.000 baris. Saya membangunnya antara Maret dan Juni 2026. Rilis terakhir yang tercatat adalah v1.10.0 di bulan Mei, dan pemeriksaan kualitas ringkasan dirilis di bulan Juni.
Di balik layarDetail teknis untuk engineer
- Peran:
superadmin,admin_jdih,admin_anggota,walidata,registered.admin_jdihmenyetujui lewat propertican_approve. Permission class sepertiIsAdminOrAbove,IsWalidata, danIsSuperAdminada di satupermissions.py. - Tingkat akses
terbuka/terbatas/tertutupditegakkan di endpoint unduhan./accesses/check/mengembalikan tombol yang tepat tanpa membuka file. Task Celery mencabut akses yang kedaluwarsa. - Ringkasan awalnya memakai Gemini Flash (v1.8.0) lalu pindah offline di v1.9.0: ekstraksi
pdfplumber, ringkasan ekstraktif dengansumydannltk, serta classifier bidang hukum berbobot kata kunci. - Loop kualitas: model
RingkasanEvalRun, field dan editor ringkasan gold, glosarium istilah hukum ke bahasa sederhana, taskweekly_ai_eval, dan perintah benchmarkevaluate_ai_summaries. Superadmin bisa membuat ulang ringkasan yang usang dengan progress bar berbasis Redis. detect_relationsmencocokkan pola rujukan seperti "mencabut Perka No. 14 Tahun 2022" dan membuatRelationCandidate. Relasi yang dikonfirmasi tampil di/pohon-peraturan.refresh_statistik_harianmengisiStatistikHariandanStatistikDokumensetiap malam lewat Celery Beat, dengan fallback keActivityLog.- OIDC Keycloak lewat
mozilla-django-oidcmemetakan klaim unit, NIP, dan nama. Sesi OIDC tetap di server dan menerbitkan JWT untuk frontend; pengguna publik memakai SimpleJWT dengan email dan kata sandi. - Perjanjian kerja sama (PKS dan MoU) punya dua nama pihak dan tidak punya nomor dokumen, jadi memakai serializer kondisional dan jalur slug terpisah.
- Pencarian memakai
SearchVectorFieldPostgreSQL dengan indeks GIN.sync_berita_iknmengimpor berita dari portal IKN, dideduplikasi berdasarkan ID eksternal. - 7 Django app, 25 model, 90 pola URL, 9 task Celery, 36 route frontend, 76 file sumber frontend, sekitar 15.800 baris kode frontend, 100 commit backend dan 91 commit frontend dari 7 Maret sampai 24 Juni 2026.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.