issue_dashboard
Alur agregasi deteksi daun taksonomi isu per artikel, evaluasi 5 tingkat risiko (Aman, Rendah, Sedang, Tinggi, Kritis), geospasial provinsi terdampak, dan pengisian indeks Elasticsearch issue_dashboard untuk panel Issue Discovery.
Pipeline Data: issue_dashboard (Issue Discovery)
Pipeline ini bertugas mengolah deteksi isu dari seluruh artikel berita yang telah dianalisis kognitif oleh AI, mengelompokkannya per artikel induk, mengevaluasi band risiko keamanan, serta memetakan sebaran wilayahnya ke dalam indeks Elasticsearch issue_dashboard.
Indeks ini menjadi sumber data tunggal bagi panel Issue Discovery di layar utama /dashboard/overview (GET /overview/issue), yang memungkinkan analis intelijen menyaring isu-isu paling berbahaya berdasarkan kategori tematik dan lokasi geospasial.
1. Ringkasan Arsitektur Alur
[Elasticsearch: articles & PostgreSQL: articles]
(Artikel terdeduplikasi dengan label daun taksonomi: taxonomy_leaf_id)
│
▼
[nexa-aggregation Worker]
• Filter dokumen per jendela harian (period: 24h, document_version >= 3)
• Ekstraksi seluruh daun taksonomi per artikel (bisa mencapai puluhan daun)
• Hitung bobot risiko (avg_risk) & klasifikasi 5 band (Aman s.d. Kritis)
• Agregasi cakupan wilayah (province_count & centroid koordinat)
• Hitung validitas jumlah sumber media peliput (sources)
│
▼
[Elasticsearch: issue_dashboard]
(1 dokumen per daun taksonomi per jendela harian)
│
▼
[f1-api-backend: /overview/issue]
• Pengelompokan respons: 1 item kartu = 1 artikel induk
• Array `issues`: daftar daun taksonomi terdeteksi dalam artikel tsb
• Sorting: max_risk_score ──► volume ──► judulAlur Aggregation Worker (`nexa-aggregation`)
Kompilasi metrik statistik, rolling trends, agregasi sentimen wilayah, dan caching
Menarik subset dokumen berita dan media sosial berdasarkan jendela waktu pemantauan.
Menghitung agregasi volume postingan, rasio sentimen positif/negatif, dan lonjakan isu seketika.
Mengelompokkan isu berdasarkan 38 provinsi di Indonesia untuk kebutuhan visualisasi peta digital twin.
Menyimpan tabel agregasi ke database relasional dan memperbarui cache Redis untuk respons API instan.
2. Struktur Dokumen di Elasticsearch issue_dashboard
Worker nexa-aggregation menerbitkan tepat satu dokumen per daun taksonomi per jendela harian (24 jam). Contoh struktur dokumen mentah di indeks Elasticsearch:
{
"_id": "issue_ketahanan_pangan_beras_2026-09-26",
"title": "Stok Beras Nasional Surplus 2 Juta Ton Menjelang Akhir Tahun",
"issue": "Ketersediaan & Stabilisasi Harga Beras",
"taxonomy_leaf_id": "leaf_pangan_beras_001",
"taxonomy_path": ["Pangan", "Pertanian", "Sembako", "Beras"],
"categoryId": "pangan",
"clusterId": "kesejahteraan_sosial",
"feature": "stabilisasi_komoditas",
"city": "Jakarta Pusat",
"province": "DKI Jakarta",
"province_count": 5,
"lat": -6.1754,
"lng": 106.8272,
"severity": 1,
"sources": 3,
"article_count": 18,
"total_event": 42,
"avg_risk": 0.18,
"risk_level": "AMAN",
"sentiment": "Positif",
"generated_at": "2026-09-26T04:00:00Z",
"generated_from": {
"start": "2026-09-25T00:00:00Z",
"end": "2026-09-25T23:59:59Z"
},
"sample_articles": [
{
"article_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"title": "Stok Beras Nasional Surplus 2 Juta Ton Menjelang Akhir Tahun",
"url": "https://nasional.kompas.com/read/2026/09/26/stok-beras-surplus",
"source": "Kompas.com",
"published_at": "2026-09-26T02:15:00Z"
}
]
}3. Evaluasi 5 Tingkat Band Risiko (Risk Levels)
Indeks issue_dashboard mengklasifikasikan setiap isu ke dalam salah satu dari 5 band risiko keamanan & stabilitas:
| Band Risiko | Range Skor (avg_risk) | Warna UI | Karakteristik Isu |
|---|---|---|---|
| AMAN | 0.00 - 0.20 | Emerald (Hijau) | Narasi positif, keberhasilan program pemerintah, situasi kondusif terkendali. |
| RENDAH | 0.21 - 0.40 | Blue (Biru) | Gesekan opini minor, keluhan layanan administratif lokal, dinamika rutin. |
| SEDANG | 0.41 - 0.60 | Amber (Kuning) | Polemik kebijakan publik daerah, fluktuasi harga komoditas, unjuk rasa skala kecil. |
| TINGGI | 0.61 - 0.80 | Orange (Jingga) | Unjuk rasa buruh serentak, kelangkaan energi regional, eskalasi konflik horizontal. |
| KRITIS | 0.81 - 1.00 | Rose / Red (Merah) | Kerusuhan massal, ancaman terorisme, bencana berskala masif, krisis konstitusional. |
4. Mekanisme Pengelompokan Kartu di API (/overview/issue)
Satu artikel berita di dunia nyata seringkali mengandung banyak topik (misalnya satu artikel kriminal narkoba juga mencantumkan korupsi oknum aparat dan pencucian uang).
Pada lapisan API backend (f1-api-backend/src/feature/issue):
- Pengelompokan per Artikel:
Baris-baris dokumen
issue_dashboarddikelompokkan berdasarkanarticle_iddari artikel induknya, sehingga pembaca melihat 1 kartu artikel yang merangkum seluruh isu di dalamnya. - Tag Analitik Dinamis:
API memperkaya kartu isu dengan penanda analitik:
viral: Volume pemberitaan berada di persentil ke-90 pada jendela tersebut.kritis: Mengandung isu dengan band risikoKRITIS.multi-provinsi: Isu terdeteksi menyebar di lebih dari 1 provinsi (province_count > 1).sumber-banyak: Diliput oleh banyak domain media terverifikasi (sources >= 5).
- Penyortiran Kartu:
Kartu diurutkan secara hierarkis:
Order by: max_risk_score DESC, total_issues DESC, title ASC
5. Ringkasan Parameter Operasional Pipeline
| Parameter | Konfigurasi | Keterangan |
|---|---|---|
| Indeks Target | issue_dashboard (Elasticsearch) | Klaster OLAP penopang panel Issue Discovery. |
| Worker Pemroses | nexa-aggregation | Batch aggregator harian berbasis jendela 24 jam. |
| Sumber Masukan | articles (Elasticsearch & PostgreSQL) | Artikel dengan enrichment label taksonomi dari worker D1. |
| Format Dokumen | 1 Dokumen per Daun Taksonomi | Menjaga granularitas pencarian hingga level sub-isu terkecil. |
| Endpoint API | GET /overview/issue | Menghasilkan struktur kartu artikel terkelompok untuk frontend Next.js. |
6. Spesifikasi Payload Request Pipeline
Payload query agregasi yang dijalankan oleh worker nexa-aggregation ke indeks articles untuk mengekstrak daun isu dan bukti artikel terkait:
POST /articles/_search
{
"size": 0,
"query": {
"range": {
"processed_at": {
"gte": "2026-09-25T00:00:00",
"lt": "2026-09-26T00:00:00",
"time_zone": "+07:00"
}
}
},
"aggs": {
"by_taxonomy_leaf": {
"terms": {
"field": "taxonomy.lineages.keyword",
"size": 500
},
"aggs": {
"avg_risk": { "avg": { "field": "risk_score" } },
"unique_sources": {
"cardinality": { "field": "source_name.keyword" }
},
"sample_articles": {
"top_hits": {
"size": 3,
"sort": [ { "processed_at": "desc" } ],
"_source": ["id", "title", "url", "source_name", "published_at"]
}
}
}
}
}
}province_dashboard
Alur pemrosesan data situasi kamtibmas 38 provinsi dan representasi Situational Digital Twin wilayah ke dalam indeks Elasticsearch province_dashboard.
trending_topics
Alur deteksi lonjakan kecepatan isu (velocity spike 3.5x SD), kalkulasi peringkat tren harian (Top 10), dan pengisian indeks Elasticsearch trending_topics untuk panel Trending Topics dan mentions.