Nexa Intelligence Docs
Dashboard

Aktivis & Influencer

Spesifikasi teknis modul Aktivis & Influencer (/dashboard/aktivis), profil Key Opinion Leader (KOL), serta pemetaan database PostgreSQL tabel public_figures dan Elasticsearch.

Aktivis & Influencer (/dashboard/aktivis)

Modul Aktivis & Influencer memantau profil dan pemetaan narasi digital tokoh publik, pegiat masyarakat sipil, akademisi, jurnalis, ekonom, dan politikus nasional.

Seluruh data master tokoh dikelola langsung pada tabel PostgreSQL public_figures (memuat >2.600 profil tokoh terverifikasi).


Tabel Pemetaan Komponen ke PostgreSQL & Elasticsearch

Komponen / Bagian UIPostgreSQL (Tabel & Kolom Kunci)Elasticsearch (Indeks & Field Kunci)Kafka (Topik & Alur Event)
Ringkasan Header & Komposisi Aktor
GET /api/v1/aktivis/ringkasan
• public_figures
  ↳ Filter: is_active = true
  ↳ id, category, categories, focus_issues, is_active
——
Direktori & Katalog Kartu Tokoh
GET /api/v1/aktivis
• public_figures
  ↳ Filter: is_active = true, category, focus_issues, q
  ↳ id, name, name_key, category, categories, focus_issues, profile
——
Pemantauan Narasi & Postingan Sosial (Integrasi)
GET /api/v1/influencers/{id}/postings
• social_keywords
  ↳ keyword, taxonomy, level
• postings
  ↳ author.user_id, author.username, platform, metrics.likes_count, metrics.reposts_count, sentiment.label
queue-social-posts
(Phone Farm Ingest)

Skema Relasional PostgreSQL (public_figures)

Master tokoh disimpan dalam tabel relasional public_figures dengan validasi kategori ketat dan normalisasi kunci nama unik (name_key).

CREATE TABLE IF NOT EXISTS public_figures (
  id           UUID        PRIMARY KEY DEFAULT gen_random_uuid(),
  name         TEXT        NOT NULL,
  name_key     TEXT        NOT NULL,  -- Kunci keunikan ternormalisasi (huruf kecil & alfanumerik)
  category     TEXT        NOT NULL
    CHECK (category IN ('influencer', 'politikus', 'jurnalis', 'aktivis', 'akademisi', 'ekonom')),
  categories   TEXT[]      NOT NULL
    CHECK (categories <@ ARRAY['influencer', 'politikus', 'jurnalis', 'aktivis', 'akademisi', 'ekonom']
           AND categories[1] = category),
  focus_issues TEXT[]      NOT NULL DEFAULT '{}', -- Array topik/isu fokus (misal: 'demokrasi', 'korupsi')
  profile      TEXT,                              -- Deskripsi biografi/profil singkat tokoh
  is_active    BOOLEAN     NOT NULL DEFAULT true, -- Status aktif (soft disable tanpa hapus baris)
  created_at   TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at   TIMESTAMPTZ NOT NULL DEFAULT now(),
  CONSTRAINT public_figures_name_key_unique UNIQUE (name_key)
);

CREATE INDEX IF NOT EXISTS idx_public_figures_category ON public_figures (category);
CREATE INDEX IF NOT EXISTS idx_public_figures_categories ON public_figures USING GIN (categories);

Normalisasi Kunci Unik (name_key) & Multi-Kategori

  1. Deduplikasi Nama (name_key): Kolom name_key memastikan tokoh yang sama dengan variasi penulisan atau tanda petik (contoh: "Wawan Mas'udi" vs "Wawan Masudi") tidak terduplikasi.
  2. Kategori Utama vs Sekunder: Kolom category dipakai untuk klasifikasi tunggal pada ringkasan statistik, sedangkan kolom array categories menampung peran ganda (misal akademisi yang juga seorang politikus) sehingga query filter kategori dapat menggunakan operator array GIN (categories @> ARRAY['jurnalis']).

Estimasi Jangkauan Narasi (Reach & Engagement)

Untuk pelacakan postingan media sosial terkait tokoh di Elasticsearch postings, estimasi potensi jangkauan narasi (potential reach) dihitung oleh worker media sosial menggunakan formula:

Reach = (Followers * alpha) + (Reposts * beta) + (Quotes * gamma)

Data metrik teragregasi digunakan untuk melacak sentimen publik dan tren atensi isu yang disuarakan oleh tokoh.

On this page