Lewati ke konten

Integrasi / Sinkronisasi dengan Portal JDIHN

Portal JDIHN (Jaringan Dokumentasi dan Informasi Hukum Nasional) adalah portal pusat yang mengumpulkan data peraturan dari seluruh anggota JDIHN. ILDIS mengirimkan data ke Portal JDIHN melalui file JSON yang dibuat secara terjadwal — bukan melalui API push.

Arsitektur integrasi menggunakan metode pull-based:

  1. Cron job di server ILDIS menjalankan perintah php yii feed/generate-document setiap hari
  2. Perintah ini menghasilkan file feed/document.json berisi seluruh dokumen yang dipublikasikan
  3. File JSON tersedia secara publik di URL https://<domain>/feed/document.json
  4. Portal JDIHN mengambil (pull) file JSON tersebut secara berkala
  5. Data diperbarui di portal pusat

Keunggulan metode ini dibandingkan API real-time:

  • Lebih ringan — query database hanya dijalankan sekali per hari, bukan setiap kali JDIHN meminta data
  • Lebih cepat — JDIHN membaca file JSON statis tanpa proses backend tambahan
  • Lebih stabil — tidak bergantung pada ketersediaan database saat JDIHN melakukan request

Feed berupa JSON array yang berisi seluruh dokumen yang dipublikasikan (is_publish = 1). Setiap objek memiliki 28 field:

FieldTipeKeterangan
idDatastringID dokumen (primary key)
tahun_pengundanganstringTahun pengundangan (format YYYY)
tanggal_penetapandateTanggal penetapan
tanggal_pengundangandateTanggal pengundangan
jenisstringJenis peraturan (contoh: “UNDANG-UNDANG”)
noPeraturanstringNomor peraturan
judulstringJudul dokumen
noPanggilstringNomor panggil
singkatanJenisstringSingkatan jenis (contoh: “UU”)
tempatTerbitstringTempat terbit
penerbitstringPenerbit
deskripsiFisikstringDeskripsi fisik
sumberstringSumber (contoh: “BN 2024(1): 100 hlm”)
isbnstringISBN
statusstringStatus (contoh: “Berlaku”)
bahasastringBahasa (contoh: “Indonesia”)
bidangHukumstringBidang hukum
teuBadanstringTEU/badan
nomorIndukBukustringNomor induk buku
abstrakstringNama file abstrak (contoh: “tesabstrak.pdf”)
last_updateddatetimeTimestamp update terakhir
urlAbstrakstringURL lengkap ke file abstrak PDF
urlDetailPeraturanstringURL lengkap ke halaman detail dokumen
fileDownloadstringNama file download (saat ini "-")
urlDownloadstringURL download (saat ini "-")
subjekstringSubjek/kata kunci (saat ini kosong)
operasistringKode operasi JDIHN ("4" = create/update)
displaystringFlag visibilitas ("1" = tampil)
[
{
"idData": "1",
"tahun_pengundangan": "2024",
"tanggal_penetapan": "2024-01-01",
"tanggal_pengundangan": "2024-01-01",
"jenis": "UNDANG-UNDANG",
"noPeraturan": "1",
"judul": "Undang-Undang tentang Contoh",
"singkatanJenis": "UU",
"tempatTerbit": "Indonesia",
"sumber": "BN 2024(1): 100 hlm",
"status": "Berlaku",
"bahasa": "Indonesia",
"bidangHukum": "Hukum Dagang",
"abstrak": "tesabstrak.pdf",
"last_updated": "2024-11-15 14:14:51",
"urlAbstrak": "https://ildis.example.org/common/dokumen/tesabstrak.pdf",
"urlDetailPeraturan": "https://ildis.example.org/dokumen/view?id=1",
"fileDownload": "-",
"urlDownload": "-",
"subjek": "",
"operasi": "4",
"display": "1"
}
]

Pastikan URL frontend ILDIS sudah dikonfigurasi dengan benar di file .env atau konfigurasi Yii2, karena field urlAbstrak dan urlDetailPeraturan di-generate menggunakan urlManager->createAbsoluteUrl().

Pastikan variabel berikut sesuai dengan domain publik Anda:

.env
FRONTEND_URL=https://ildis.example.org

Jika URL tidak sesuai, link pada feed JSON akan mengarah ke http://ildis-frontend.test (default development) alih-alih domain produksi Anda.

Jalankan perintah berikut untuk mengedit crontab:

Terminal window
crontab -e

Tambahkan baris untuk menjalankan feed generation setiap hari pukul 02:00:

Terminal window
# Generate JDIHN feed setiap hari pukul 02:00
0 2 * * * php /path/to/ildis/yii feed/generate-document >> /var/log/ildis-feed.log 2>&1

Ganti /path/to/ildis dengan path absolut ke instalasi ILDIS Anda.

3. Pastikan Folder feed/ Bisa Diakses Publik

Section titled “3. Pastikan Folder feed/ Bisa Diakses Publik”

File JSON harus tersedia secara publik melalui web server. Nginx secara default melayani file di direktori feed/ sebagai static file.

Verifikasi akses dengan curl:

Terminal window
curl -I https://ildis.example.org/feed/document.json

Respons yang diharapkan:

HTTP/1.1 200 OK
Content-Type: application/json

Setelah feed JSON dapat diakses publik:

  1. Login ke akun anggota JDIHN di portal JDIHN
  2. Masuk ke halaman pengaturan akun instansi
  3. Daftarkan URL feed: https://<domain-anda>/feed/document.json
  4. Simpan konfigurasi

Portal JDIHN akan mulai menarik data dari URL tersebut secara berkala.


  1. Jalankan perintah feed secara manual

    Terminal window
    php /path/to/ildis/yii feed/generate-document

    Output yang diharapkan:

    Dokumen feed berhasil digenerate ke: /path/to/ildis/feed/document.json
  2. Cek file JSON ter-generate

    Terminal window
    ls -la feed/document.json

    Pastikan file ada dan ukurannya lebih dari 0 byte.

  3. Validasi format JSON

    Terminal window
    python3 -m json.tool feed/document.json > /dev/null && echo "Valid JSON" || echo "Invalid JSON"

    Atau gunakan jq:

    Terminal window
    cat feed/document.json | jq '.[0].idData' 2>/dev/null

    Jika output menampilkan ID dokumen, feed JSON valid.

  4. Cek akses publik

    Terminal window
    curl -s https://ildis.example.org/feed/document.json | head -c 200

    Pastikan respons berisi JSON array yang dimulai dengan [.

  5. Verifikasi di Portal JDIHN

    Setelah mendaftarkan URL feed, cek di dashboard JDIHN apakah data sudah masuk. Proses sinkronisasi mungkin membutuhkan waktu hingga 24 jam.


Periksa apakah perintahCLI berjalan dengan benar:

Terminal window
php /path/to/ildis/yii feed/generate-document

Jika muncul error database connection, periksa konfigurasi .env dan pastikan MySQL/MariaDB berjalan.

Feed hanya menyertakan dokumen dengan is_publish = 1. Jika array kosong, berarti belum ada dokumen yang dipublikasikan. Publikasikan minimal satu dokumen di backend, lalu jalankan ulang perintah feed.

Error 403 Forbidden saat mengakses /feed/document.json

Section titled “Error 403 Forbidden saat mengakses /feed/document.json”

Periksa permission file dan direktori:

Terminal window
chmod -R 775 feed/
chown -R www-data:www-data feed/

Error 404 saat mengakses /feed/document.json

Section titled “Error 404 saat mengakses /feed/document.json”

Pastikan nginx/apache melayani direktori feed/ sebagai static file. Untuk nginx, konfigurasi try_files harus membolehkan akses langsung:

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

URL urlAbstrak atau urlDetailPeraturan mengarah ke ildis-frontend.test

Section titled “URL urlAbstrak atau urlDetailPeraturan mengarah ke ildis-frontend.test”

URL di feed di-generate menggunakan konfigurasi urlManager ILDIS. Pastikan variabel FRONTEND_URL di .env sudah sesuai dengan domain produksi Anda, bukan domain development.

Periksa log cron:

Terminal window
grep CRON /var/log/syslog

Atau cek log ILDIS feed:

Terminal window
cat /var/log/ildis-feed.log

Pastikan path di crontab menggunakan path absolut ke php dan yii:

Terminal window
# Gunakan path absolut
0 2 * * * /usr/bin/php /path/to/ildis/yii feed/generate-document >> /var/log/ildis-feed.log 2>&1

KomponenLokasi
CLI Commandphp yii feed/generate-document
Controllerconsole/controllers/FeedController.php
Modelbackend/models/DokumenJdih.php
Output Filefeed/document.json (alias: @feed/document.json)
JSON Schemaschema/document-schema.json
Docker Volumefeed_data (shared antara app dan cron)
Cron Schedule (Docker)docker/cron/crontab
Bootstrap Aliascommon/config/bootstrap.php