Skip to content

Perbaiki statistik penduduk#1685

Open
habibie11 wants to merge 2 commits into
rilis-devfrom
dev-1682-statistik
Open

Perbaiki statistik penduduk#1685
habibie11 wants to merge 2 commits into
rilis-devfrom
dev-1682-statistik

Conversation

@habibie11

@habibie11 habibie11 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

issue # #1682
penyesuaian di API https://github.com/OpenSID/API-Database-Gabungan/pull/451
catatan : perbaikan statistik bukan hanya di sisi frontend tapi di dashboard juga terdapat ketidaksesuaian sehingga perlu diperbaiki

🎯 Deskripsi

Pull request ini memperbaiki ketidaksesuaian perhitungan jumlah penduduk dan pemfilteran data pada halaman Dashboard serta halaman publik Statistik Kependudukan ketika kondisi Sinkronisasi Database Gabungan hidup (isDatabaseGabungan() == true).

Penyebab utama dari masalah sebelumnya antara lain:

  1. Pada method PendudukService::jumlahPenduduk(), request ke endpoint API /api/v1/opendk/sync-penduduk-opendk tidak mengirimkan parameter filter status dasar penduduk (filter[status_dasar] = 1). Hal ini menyebabkan angka total penduduk yang ditampilkan pada Dashboard admin menghitung seluruh baris data yang ada di tabel server gabungan, termasuk penduduk dengan status mati, pindah, atau tidak aktif.
  2. Pada servis statistik ringkasan (StatistikPendudukService) beserta 7 servis grafik/chart kependudukan, parameter pemfilteran kecamatan dikirimkan dengan kunci filter[kecamatan], padahal endpoint API Database Gabungan (OpenKab) mengekspektasikan dan memvalidasi parameter menggunakan kunci filter[kode_kecamatan].

Dengan PR ini, filter filter[status_dasar] = 1 telah ditambahkan secara default pada pengambilan jumlah penduduk, dan penamaan parameter pemfilteran kecamatan telah diseragamkan menjadi filter[kode_kecamatan] pada seluruh servis statistik sehingga data yang ditampilkan akurat dan konsisten.


🛠️ Perubahan yang Dilakukan

1. app/Services/PendudukService.php

Fix — Penambahan filter status dasar penduduk aktif (status_dasar = 1):

  • Menambahkan parameter 'filter[status_dasar]' => 1 pada $defaultParams di method jumlahPenduduk() untuk memastikan hanya penduduk aktif/hidup yang dihitung.
  public function jumlahPenduduk(array $filters = [])
  {
      // Default parameter
      $defaultParams = [
          'filter[kode_kecamatan]' => str_replace('.', '', config('profil.kecamatan_id')),
+         'filter[status_dasar]' => 1,
      ];

2. app/Services/StatistikPendudukService.php

Fix — Penyesuaian parameter filter kode kecamatan:

  • Mengubah nama kunci filter dari 'filter[kecamatan]' menjadi 'filter[kode_kecamatan]' pada method dashboard() yang mengambil data rekapitulasi untuk halaman Statistik Kependudukan.
  $filters = [
      'filter[id]' => 'jenis-kelamin',
      'filter[tahun]' => $year,
-     'filter[kecamatan]' => $this->kodeKecamatan,
+     'filter[kode_kecamatan]' => $this->kodeKecamatan,
  ];

3. Servis Grafik / Chart Kependudukan (app/Services/StatistikChart*)

Fix — Penyesuaian serentak parameter filter[kode_kecamatan] pada servis grafik:

  • Mengubah kunci parameter dari 'filter[kecamatan]' menjadi 'filter[kode_kecamatan]' pada method yang bertugas mengambil data dari API Database Gabungan di 7 file servis berikut:
    • app/Services/StatistikChartPendudukAgamaService.php
    • app/Services/StatistikChartPendudukGolDarahService.php
    • app/Services/StatistikChartPendudukPendidikanService.php
    • app/Services/StatistikChartPendudukPerkawinanService.php
    • app/Services/StatistikChartPendudukService.php
    • app/Services/StatistikChartPendudukUsiaService.php
    • app/Services/StatistikChartTingkatPendidikanService.php

✅ Test Cases yang Diimplementasikan

  • Saat kondisi Sinkronisasi Database Gabungan aktif, angka jumlah penduduk pada halaman Dashboard Admin (/dashboard) mencerminkan jumlah penduduk aktif (status_dasar = 1), tidak lagi mencakup data penduduk yang sudah meninggal atau pindah.
  • Saat membuka halaman publik Statistik Kependudukan (/statistik/kependudukan), request API ke server Database Gabungan (/api/v1/statistik-web/penduduk) mengirimkan filter filter[kode_kecamatan] dengan benar sehingga ringkasan angka (Total, Laki-Laki, Perempuan, KTP, Akta, dll.) akurat.
  • Seluruh grafik/chart statistik kependudukan (Pertumbuhan per Tahun, Kategori Usia, Pendidikan dalam KK, Golongan Darah, Status Perkawinan, Agama, Tingkat Pendidikan) berhasil memuat data dari API gabungan tanpa mengalami kegagalan pemfilteran wilayah kecamatan.

📸 Cara Menjalankan Uji Coba Manual

  1. Pastikan aplikasi OpenDK dikonfigurasi dengan Sinkronisasi Database Gabungan aktif (sinkronisasi_database_gabungan = 1 di database / pengaturan aplikasi).
  2. Buka dan login ke antarmuka admin, lalu akses halaman Dashboard (/dashboard).
  3. Periksa angka pada kotak Penduduk dan pastikan sesuai dengan total penduduk berstatus aktif/hidup (status_dasar = 1) di server Database Gabungan.
  4. Akses halaman publik Statistik Kependudukan (/statistik/kependudukan).
  5. Pilih filter desa dan tahun pada dropdown, lalu periksa:
    • ✅ Angka ringkasan dasbor kependudukan terisi dengan benar.
    • ✅ Seluruh grafik/chart kependudukan merender visualisasi data yang akurat sesuai kode kecamatan yang dikirimkan.

📸 Screenshot atau Video

image image

⚠️ Catatan Penting

Penyesuaian nama parameter dari filter[kecamatan] menjadi filter[kode_kecamatan] diselaraskan dengan konvensi pemantauan AllowedFilter pada Spatie Query Builder di server API Database Gabungan (OpenKab), di mana query filter menargetkan kolom atau relasi berdasarkan kode_kecamatan.

@github-actions

Copy link
Copy Markdown
Contributor

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1685

@habibie11
habibie11 requested a review from vickyrolanda July 21, 2026 03:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant