First commit / commit pertama
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* api/komparatif.php — Indikator komparatif antar kelurahan (KF-31).
|
||||
* GET → labels + dataset: persentase_miskin, cakupan_bantuan, jumlah_miskin, persen_verifikasi.
|
||||
*/
|
||||
require_once __DIR__ . '/../config/db.php';
|
||||
require_once __DIR__ . '/helpers.php';
|
||||
|
||||
$pdo = Database::getConnection();
|
||||
requireApiAnyRole(['operator', 'pimpinan']);
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'GET') sendError('Method not allowed', 405);
|
||||
|
||||
$rows = $pdo->query("
|
||||
SELECT w.nama, w.jumlah_penduduk,
|
||||
COUNT(DISTINCT wm.id) AS miskin,
|
||||
COUNT(DISTINCT CASE WHEN bs.id IS NOT NULL THEN wm.id END) AS dibantu,
|
||||
COUNT(DISTINCT CASE WHEN wm.status_verifikasi='terverifikasi' THEN wm.id END) AS terverif
|
||||
FROM wilayah w
|
||||
LEFT JOIN warga_miskin wm ON ST_Contains(w.geom, wm.geom)
|
||||
LEFT JOIN bantuan_sosial bs ON bs.warga_id = wm.id AND bs.is_aktif=1
|
||||
GROUP BY w.id ORDER BY w.nama
|
||||
")->fetchAll();
|
||||
|
||||
$labels = []; $persenMiskin = []; $cakupan = []; $jumlahMiskin = []; $persenVerif = [];
|
||||
foreach ($rows as $r) {
|
||||
$miskin = (int)$r['miskin']; $penduduk = (int)$r['jumlah_penduduk'];
|
||||
$labels[] = $r['nama'];
|
||||
$persenMiskin[] = $penduduk > 0 ? round($miskin / $penduduk * 100, 2) : 0;
|
||||
$cakupan[] = $miskin > 0 ? round($r['dibantu'] / $miskin * 100, 1) : 0;
|
||||
$jumlahMiskin[] = $miskin;
|
||||
$persenVerif[] = $miskin > 0 ? round($r['terverif'] / $miskin * 100, 1) : 0;
|
||||
}
|
||||
|
||||
sendSuccess([
|
||||
'labels' => $labels,
|
||||
'persentase_miskin' => $persenMiskin,
|
||||
'cakupan_bantuan' => $cakupan,
|
||||
'jumlah_miskin' => $jumlahMiskin,
|
||||
'persen_verifikasi' => $persenVerif,
|
||||
], 'Komparatif Wilayah');
|
||||
Reference in New Issue
Block a user