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 UI | PostgreSQL (Tabel & Kolom Kunci) | Elasticsearch (Indeks & Field Kunci) | Kafka (Topik & Alur Event) |
|---|---|---|---|
Ringkasan Header & Komposisi AktorGET /api/v1/aktivis/ringkasan | • public_figures↳ Filter: is_active = true↳ id, category, categories, focus_issues, is_active | — | — |
Direktori & Katalog Kartu TokohGET /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
- Deduplikasi Nama (
name_key): Kolomname_keymemastikan tokoh yang sama dengan variasi penulisan atau tanda petik (contoh: "Wawan Mas'udi" vs "Wawan Masudi") tidak terduplikasi. - Kategori Utama vs Sekunder: Kolom
categorydipakai untuk klasifikasi tunggal pada ringkasan statistik, sedangkan kolom arraycategoriesmenampung 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.
CCTV Daerah
Spesifikasi teknis modul CCTV Daerah (/dashboard/cctv), pemetaan database PostgreSQL tabel cctv_cameras, pemantauan streaming kamera ATCS publik & jalan tol, serta status HLS.
Early Warning
Panduan membaca, menganalisa, serta spesifikasi teknis modul Early Warning (/dashboard/early-warning) untuk deteksi sinyal dini 5 tema risiko strategis dan sinyal korelasi lintas domain.