Nexa Intelligence Docs
Pipeline Data

province_dashboard

Alur pemrosesan data situasi kamtibmas 38 provinsi dan representasi Situational Digital Twin wilayah ke dalam indeks Elasticsearch province_dashboard.

Pipeline Data: province_dashboard (Situasi Wilayah & Digital Twin)

Indeks Elasticsearch province_dashboard adalah jantung dari modul Situational Digital Twin pada dashboard eksekutif. Indeks ini menyimpan snapshot terkini stabilitas keamanan dan ketertiban masyarakat (kamtibmas), sentimen publik, dan tingkat kesiapsiagaan di 38 provinsi se-Indonesia.


1. Ringkasan Arsitektur Alur

Alur Pipeline Situasi Wilayah & Digital Twin (province_dashboard)

Ekstraksi spasial SPOK, resolusi master regions, indeks kerawanan kamtibmas, dan pemetaan GIS

01. Ekstraksi Lokasi Geospasial [Dokumen Berita Ter-enrich D1]

Mendeteksi entitas lokasi dari klausa Keterangan (K) pada SPOK berita dan transkrip media sosial.

02. Resolusi ID Provinsi & Kab/Kota [master_regions (PostgreSQL)]

Mencocokkan entitas teks lokasi ke kode wilayah 38 provinsi dan kabupaten/kota referensi nasional.

03. Agregasi Berkala & Skor Kerawanan [nexa-aggregation Worker]

Kalkulasi volume insiden, rasio sentimen negatif, laju anomali, dan indeks kerawanan kamtibmas (0.00–1.00).

04. Snapshot Digital Twin 38 Provinsi [Elasticsearch: province_dashboard]

Penyimpanan dokumen analitik harian berisi metrik stabilitas per provinsi untuk query latensi rendah.

05. Visualisasi Choropleth Map GIS 38 Provinsi [/dashboard/overview]

Pewarnaan status kesiapsiagaan interaktif (Hijau/Kuning/Merah) pada peta digital twin pimpinan.

[Dokumen Berita Ter-enrich D1] ──► Ekstraksi Lokasi Geospasial
              │
              ▼
[master_regions (PostgreSQL)] ──► Resolusi ID Provinsi & Kab/Kota
              │
              ▼
[nexa-aggregation Worker] (Hourly & Daily Rollup)
  • Agregasi Volume Insiden per Provinsi
  • Rasio Sentimen Negatif (%)
  • Kalkulasi Indeks Kerawanan Kamtibmas (0.00 - 1.00)
  • Penetapan Status Kesiapsiagaan (Hijau, Kuning, Merah)
              │
              ▼
[Elasticsearch: province_dashboard]
              │
              ▼
Dashboard Overview (Choropleth Map GIS 38 Provinsi)

2. Resolusi Spasial & Pemetaan Wilayah

  1. Ekstraksi Geospasial: Worker nexa-d1 mendeteksi entitas lokasi dari klausa Keterangan (K) pada SPOK berita (misal: "di kawasan Wonokromo, Surabaya").
  2. Korelasi ke Master Regions: Sistem mencocokkan teks ke tabel master_regions di PostgreSQL untuk mengaitkan artikel ke ID Kabupaten/Kota (city_id: 3578) dan ID Provinsi (province_id: 35 - Jawa Timur).

3. Kalkulasi Indeks Kerawanan Kamtibmas

Worker nexa-aggregation menghitung skor kerawanan wilayah berkala:

Regional Threat Index = (Negative Articles / Total Articles) * 0.4 + (Velocity Anomaly / Baseline) * 0.4 + (High Severity Incidents * 0.2)

Matriks Status Kesiapsiagaan Wilayah

Status KesiapsiagaanRentang Skor KerawananWarna Tampilan PetaRekomendasi Tindakan
Hijau (Aman)Skor [0.00 - 0.35)HijauPatroli dialogis rutin, pengawasan standar.
Kuning (Waspada)Skor [0.35 - 0.70]KuningPeningkatan frekuensi patroli, monitor media intelijen.
Merah (Siaga / Kritis)Skor (0.70 - 1.00]MerahApel siaga daerah, perkuatan personel, early warning alert.

4. Struktur Dokumen di Elasticsearch province_dashboard

{
  "_id": "ID-JI_2026-09-26",
  "province_id": 35,
  "province_code": "ID-JI",
  "province_name": "Jawa Timur",
  "snapshot_date": "2026-09-26",
  "threat_index": 0.42,
  "readiness_status": "KUNING",
  "metrics": {
    "total_articles": 1820,
    "negative_sentiment_pct": 0.38,
    "top_issue": "Penipuan Online",
    "active_cases": 14
  },
  "coordinates": {
    "lat": -7.5360,
    "lon": 112.2384
  },
  "updated_at": "2026-09-26T12:00:00Z"
}

5. Spesifikasi Payload Request Pipeline

Payload query agregasi yang dieksekusi oleh worker nexa-aggregation ke indeks articles untuk mengalkulasi metrik 38 provinsi:

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_province": {
      "terms": {
        "field": "geo_location.province.keyword",
        "size": 100
      },
      "aggs": {
        "avg_risk": { "avg": { "field": "risk_score" } },
        "negative_count": {
          "filter": { "term": { "sentiment.label": "negative" } }
        },
        "by_taxonomy": {
          "terms": { "field": "taxonomy.lineages.keyword", "size": 10 }
        }
      }
    }
  }
}

On this page