# Metodologi

Dokumen ini menjelaskan bagaimana setiap angka di halaman ini dihasilkan, diverifikasi, dan — bila perlu — ditolak. Halaman yang menerbitkan angka politik secara otomatis wajib bisa menjelaskan dirinya sendiri. Kalau ada yang tidak bisa dijelaskan di sini, ia tidak layak tampil di sana.

## 0. Cakupan

Halaman ini melacak modal politik seluruh figur yang muncul dalam survei capres 2029, petahana maupun penantang. Penekanan pada Presiden Prabowo Subianto mencerminkan di mana pergerakan data terbesar berada, bukan sikap terhadap figur mana pun. Setiap kandidat diperlakukan dengan aturan yang sama: sumber wajib, metodologi wajib, outlier dikarantina, tanpa pengecualian.

## 1. Apa yang halaman ini bukan

Ini bukan lembaga survei. Rex Cap tidak melakukan pengumpulan data primer, tidak memiliki panel responden, dan tidak menerbitkan angka survei sendiri. Seluruh angka elektabilitas dan approval berasal dari lembaga survei pihak ketiga yang dicantumkan sumbernya.

Ini juga bukan alat prediksi hasil. Tidak ada model peluang menang, tidak ada proyeksi hasil Pilpres 2029, dan tidak ada pernyataan siapa akan menang. Yang ada adalah **proyeksi kondisi** (§6b): lintasan indikatif approval rating beberapa bulan ke depan dengan pita ketidakpastian — melacak arah, bukan meramalkan pemenang.

Halaman ini tidak berafiliasi dengan partai politik, kandidat, atau tim kampanye mana pun, dan tidak menerima pendanaan dari pihak-pihak tersebut.

## 2. Lapis data dengan kadensi berbeda

Kesalahan paling umum pada dashboard politik adalah memperlakukan semua angka seolah punya umur yang sama. Di sini lapisan dipisah secara eksplisit, dan setiap indikator menampilkan kadensi refresh-nya sendiri.

**Lapis pasar** bergerak harian dan dapat diverifikasi mesin. Kurs USD/IDR dan IHSG ditarik otomatis oleh GitHub Actions, kini dari rantai multi-provider dengan fallback berurutan (Yahoo Finance → frankfurter → open.er-api untuk kurs; Yahoo untuk IHSG). Kurs juga ditarik ulang oleh peramban pembaca saat halaman dibuka lewat penyedia ber-CORS, sehingga angka yang terlihat adalah yang terbaru, bukan yang tersimpan saat build. Kegagalan tarik tidak pernah menulis angka palsu — nilai lama dipertahankan, ditandai lewat `marketAsof` dan `fetchStatus`, dan Gate 4 yang memutuskan apakah masih layak terbit.

**Lapis survei** bergerak mingguan sampai kuartalan dan membutuhkan penilaian. Ia melewati pipeline ingestion dua tingkat yang dijelaskan di bagian 4.

**Lapis fiskal** — ruang fiskal APBN (defisit realisasi & target, rasio utang terhadap PDB, tax ratio, keseimbangan primer, batas hukum) — ditampilkan sebagai konteks pendorong: ia membatasi kemampuan pemerintah menyangga persepsi publik lewat subsidi dan bantuan sosial. Ia **tidak** masuk perhitungan composite. Sumbernya rilis **resmi** Kemenkeu (LKPP, APBN KiTa), DJPPR (posisi utang), dan BPS — angka realisasi/audited, bukan proyeksi lembaga asing. Karena portal resmi Indonesia tidak menyediakan API terbuka yang bisa ditarik otomatis dari CI (server memblok IP datacenter, hanya menyajikan SPA/PDF), lapis ini **diperbarui manual** tiap rilis resmi bulanan; tiap angka membawa sumber dan tanggalnya.

## 3. Composite Political Capital Index

Indeks ini **konstruksi Rex Cap, bukan indeks baku** dan tidak diakui institusi mana pun. Ia disusun agar bisa dijelaskan dalam satu paragraf; indeks yang butuh lebih dari itu tidak layak dipercaya.

Tiga pilar, masing-masing berskala 0–100:

| Pilar | Bobot | Masukan |
|---|---|---|
| Elektoral | 40% | Approval rating, elektabilitas capres, simulasi head-to-head |
| Ekonomi | 35% | Kurs, IHSG, indeks keyakinan konsumen, cadangan devisa, inflasi terhadap sasaran, pertumbuhan PDB |
| Stabilitas sosial-politik | 25% | Intensitas protes, kohesi koalisi, dispersi antar-lembaga survei |

Pilar ekonomi dihitung ulang otomatis dari indikator yang ditarik. Tiap sub-indikator diberi skor `skor = 100 − |penurunan persen| × 2,4`, dibatasi 0–100 (indikator di atas baseline pelantikan memperoleh 100). Skor-skor itu digabung sebagai **rata-rata tertimbang**, bukan rata-rata datar — supaya indikator kecil tidak menutupi indikator besar (cadangan devisa yang turun 1,5% tak boleh mengangkat rata-rata setara IHSG yang anjlok 19,3%):

| Sub-indikator ekonomi | Bobot | Alasan |
|---|---|---|
| Kurs USD/IDR | 0,30 | paling langsung dirasakan rumah tangga lewat harga impor |
| IHSG | 0,25 | kepercayaan modal terhadap arah kebijakan |
| Indeks keyakinan konsumen | 0,20 | jembatan antara kondisi makro dan persepsi publik |
| Inflasi terhadap sasaran | 0,10 | skor 85 saat dalam sasaran BI |
| Pertumbuhan PDB | 0,10 | skor 80 saat di atas 5% |
| Cadangan devisa | 0,05 | buffer kebijakan, bukan pengalaman harian |

Bobot berjumlah tepat 1,0. Dengan nilai per Agustus 2026 rumus ini menghasilkan pilar ekonomi 74 dan composite 53 (rumus rata-rata datar sebelumnya keliru menghasilkan 79 dan 55 tanpa perubahan input — lihat CORRECTIONS.md). Pilar elektoral dan stabilitas diperbarui saat ada rilis survei atau peristiwa politik baru.

Composite adalah rata-rata tertimbang ketiganya. Di bawah 40 ditandai sebagai zona krisis legitimasi. Bobot dapat diperdebatkan dan memang subjektif — yang tidak subjektif adalah bahwa bobotnya dicantumkan di sini alih-alih disembunyikan.

## 4. Pipeline ingestion survei

**Tier A — deterministik.** Tabel agregasi polling di Wikipedia ditarik lewat MediaWiki API dan diparsing sebagai **tabel terstruktur**, bukan ditebak dari teks bebas atau dicocokkan regex satu-baris yang rapuh. Tabel approval dikenali dari header Approve/Disapprove; kolom dipetakan dari baris header; tiap sel dibersihkan dari `<ref>`, `{{template}}`, `[[wikilink]]`, dan atribut `style`; tanggal lapangan diparsing beragam format; nama lembaga dinormalisasi (mis. "Indonesia Political Opinion" → "IPO") agar tidak menduplikasi. Baris yang cocok skema — lembaga, tanggal lapangan, ukuran sampel, nilai — langsung masuk sebagai data terbit; baris tanpa hari eksplisit atau tanpa sampel ditandai, bukan dikarang.

**Tier B — penemuan.** Pencarian berita menangkap rilis yang belum masuk agregasi. Hasil Tier B **tidak pernah langsung terbit**. Ia masuk `data/pending.json` dan tampil di halaman sebagai antrean "menunggu verifikasi", terpisah dari grafik tren.

Yang sengaja tidak dilakukan: mengekstraksi angka dari judul berita. Judul adalah tempat angka survei paling sering salah dikutip. Item Tier B hanya membawa tautan dan nama lembaga sampai Tier A memuat rilis yang sama, atau sampai ada tinjauan manusia. Item yang tidak terkonfirmasi dalam 60 hari dibuang dari antrean.

## 5. Gate editorial

Setiap publish dijalankan melalui `scripts/validate.mjs`. Gagal di salah satu gate membatalkan penerbitan seluruhnya — halaman lama tetap tayang, bukan halaman rusak.

1. **Provenance.** Setiap angka wajib punya `source_url` https. Angka tanpa sumber tidak boleh dirender — termasuk indikator fiskal.
2. **Metodologi.** Tanggal lapangan wajib valid. Rilis tanpa ukuran sampel wajib membawa flag penjelas yang tampil di halaman.
3. **Karantina outlier.** Rilis yang menyimpang lebih dari 15 poin dari median periodenya, tanpa lembaga lain yang mengonfirmasi dalam rentang 5 poin, tidak boleh berstatus normal. Ia tetap ditampilkan sebagai titik berongga, diberi label alasannya, dan dikeluarkan dari garis tren.
4. **Staleness.** Umur diukur dari data pasar terbaru (`marketAsof`), bukan dari kapan pipeline berjalan — penarikan gagal tidak boleh menyamar sebagai data segar. Data lebih tua dari 48 jam memunculkan banner stale; lebih tua dari 14 hari membatalkan publish — menyajikan angka basi sebagai angka hari ini adalah mode kegagalan yang paling diam.
5. **Aritmetika.** Simulasi harus berjumlah 100% ±1,5. Bobot pilar harus berjumlah tepat 1,0. Composite harus sama dengan hitung ulang dari pilarnya.
6. **Kedaluwarsa simulasi.** Head-to-head lebih tua dari enam bulan ditandai BASIS LAMA, karena ia diukur di bawah rezim approval yang berbeda.
7. **Sidik-jari input.** Composite tidak boleh bergeser tanpa sebab. Gate ini menghitung sidik jari dari seluruh input yang bisa menggerakkan indeks — nilai & `asof` tiap series pasar, skor pilar manual (elektoral, stabilitas), serta jumlah & nilai tiap rilis survei — dan menyimpannya di `data/meta.json`. Bila sidik jari identik dengan run sebelumnya tetapi composite berubah, publish dibatalkan. Pilar ekonomi yang turunan dan composite itu sendiri sengaja **tidak** masuk sidik jari — memasukkannya justru akan menutupi pergeseran yang ingin ditangkap. Bila rumus memang sengaja diubah, catat di CORRECTIONS.md lalu setel ulang baseline.
8. **Integritas proyeksi.** Lapis proyeksi (§6b), bila ada, harus tetap dalam koridor: tiap titik 0–100 dengan pita lo ≤ proyeksi ≤ hi, berada di depan basis, dan membawa label tegas bahwa ia bukan prediksi hasil pemilu.

## 6. Lapis analisis

Teks analisis di bawah setiap visualisasi dihasilkan otomatis dan dibatasi keras. Model hanya boleh menjelaskan mekanisme di balik angka yang sudah ada di data. Ia dilarang memprediksi hasil pemilu, dilarang menyebut motif atau niat tokoh bernama, dan dilarang memperkenalkan angka yang tidak ada di dataset.

Pemeriksaan pasca-generasi memindai setiap persentase yang muncul di teks dan menolak keseluruhan keluaran bila ada satu saja yang tidak dapat ditemukan di data. Keluaran yang ditolak tidak menggantikan apa pun — teks sebelumnya dipertahankan.

Model penghasilnya dapat diganti tanpa mengubah kode — lewat OpenRouter (OpenAI-compatible, mis. Grok) atau Anthropic, dengan model diatur lewat variabel lingkungan `ANALYSIS_MODEL`. Tanpa kunci API mana pun, lapis ini dilewati dan teks terakhir dipertahankan; sisa pipeline tetap berjalan.

## 6b. Proyeksi kondisi

Nilai sebuah dashboard pendorong justru pada "ke mana survei berikutnya bergerak". Lapis proyeksi menjawab itu tanpa melanggar batas §1: ia memproyeksikan **lintasan approval rating** ~3 bulan ke depan, dengan pita ketidakpastian, dan tidak pernah menyebut siapa akan menang atau memproyeksikan elektabilitas kandidat.

Angkanya deterministik dan dihitung oleh `scripts/project.mjs`, bukan dikarang model bahasa: regresi linier atas median approval berstatus ok (maksimal enam periode terakhir), diproyeksikan tiga bulan, dengan pita = 1,28 · √(galat tren² + (sebaran antar-lembaga/2)²) yang melebar seiring √horizon dan dibatasi 0–100. Karena deterministik, ia bisa direproduksi dan di-gate (Gate 8). Satu bacaan tunggal (mis. lembaga dengan house effect tinggi) hanya menjadi satu titik di antara enam, tidak mendikte lintasan. Proyeksi ini **bukan** komponen composite index.

## 7. Baseline dan estimasi

Baseline pelantikan 20 Oktober 2024 memakai USD/IDR ≈Rp15.500 dan IHSG ≈7.760. Keduanya pembulatan rentang perdagangan pekan pelantikan, bukan penutupan satu hari tertentu. Persentase perubahan terhadap baseline bersifat indikatif dengan toleransi sekitar ±1 poin persentase, dan ditandai demikian di halaman.

Titik Februari 2026 pada indeks komposit **dihitung ulang dengan rumus pilar ekonomi §3 yang sama** seperti titik hari ini — membandingkan angka rumus dengan angka rumus, bukan angka rumus dengan penilaian tangan (versi lama memakai 68, penilaian manual). Pilar elektoralnya bersumber penuh; input pasarnya estimasi: rupiah ≈16.900, IHSG ≈6.900, IKK ≈120, cadangan devisa ≈US$146,2 miliar, inflasi 2,42%, PDB 5,61%; pilar elektoral 65, stabilitas 60. Hasilnya pilar ekonomi 83 dan composite 70. Delta terhadap titik itu menunjukkan arah, bukan presisi.

## 8. Koreksi

Kesalahan dicatat di [CORRECTIONS.md](CORRECTIONS.md) dengan tanggal, apa yang salah, dan apa yang diubah. Catatan koreksi tidak dihapus. Publikasi yang tidak pernah mencatat koreksi bukan publikasi yang tidak pernah salah — ia publikasi yang tidak memeriksa.

## 9. Reproduksibilitas & keterlacakan

Seluruh angka yang dirender halaman ini tersedia sebagai JSON di `data/` dan dapat diunduh langsung dari situs. Konstruksi indeks, bobot, rumus, dan setiap aturan transformasi dijabarkan penuh di dokumen ini — sehingga tiap angka dapat ditelusuri ke sumbernya dan diperiksa ulang, dan setiap pergeseran indeks wajib punya sebab yang lolos Gate 7. Perubahan angka setelah publikasi dicatat di CORRECTIONS.md.
