query("SELECT COUNT(*) FROM warga_miskin")->fetchColumn(); $dibantu = (int)$pdo->query("SELECT COUNT(DISTINCT warga_id) FROM bantuan_sosial WHERE is_aktif=1")->fetchColumn(); // Per jenis bantuan $perJenis = $pdo->query(" SELECT jb.kode, jb.nama, COUNT(DISTINCT CASE WHEN bs.is_aktif=1 THEN bs.warga_id END) AS penerima FROM jenis_bantuan jb LEFT JOIN bantuan_sosial bs ON bs.jenis_bantuan_id = jb.id GROUP BY jb.id ORDER BY jb.id ")->fetchAll(); foreach ($perJenis as &$j) { $j['penerima'] = (int)$j['penerima']; $j['persen'] = $total > 0 ? round($j['penerima'] / $total * 100, 1) : 0; } unset($j); // Per kelurahan $perWilayah = $pdo->query(" SELECT w.nama, COUNT(DISTINCT wm.id) AS miskin, COUNT(DISTINCT CASE WHEN bs.id IS NOT NULL THEN wm.id END) AS dibantu 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(); foreach ($perWilayah as &$w) { $w['miskin'] = (int)$w['miskin']; $w['dibantu'] = (int)$w['dibantu']; $w['cakupan'] = $w['miskin'] > 0 ? round($w['dibantu'] / $w['miskin'] * 100, 1) : 0; } unset($w); sendSuccess([ 'total_warga' => $total, 'dibantu' => $dibantu, 'belum_dibantu' => $total - $dibantu, 'cakupan_persen' => $total > 0 ? round($dibantu / $total * 100, 1) : 0, 'per_jenis' => $perJenis, 'per_wilayah' => $perWilayah, ], 'Cakupan Bantuan');