query( "SELECT (SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup') AS total_penduduk, (SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='miskin') AS total_miskin, (SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='rentan') AS total_rentan, (SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='mampu') AS total_mampu, (SELECT COUNT(*) FROM keluarga) AS total_kk, (SELECT COUNT(*) FROM rumah_ibadah WHERE aktif=1) AS total_ri, (SELECT COUNT(*) FROM laporan WHERE status='pending') AS laporan_pending, (SELECT COUNT(*) FROM laporan WHERE urgensi='darurat' AND status NOT IN('selesai')) AS laporan_darurat, (SELECT COUNT(DISTINCT nik) FROM histori_bantuan WHERE status_penyaluran='disalurkan') AS sudah_dibantu, (SELECT COUNT(*) FROM histori_bantuan WHERE MONTH(tanggal)=MONTH(CURDATE()) AND YEAR(tanggal)=YEAR(CURDATE())) AS bantuan_bulan_ini" )->fetch(); // Sebaran per kecamatan $kec = $db->query( "SELECT k.kecamatan, COUNT(DISTINCT k.id) AS jumlah_kk, SUM(CASE WHEN k.status_ekonomi='miskin' THEN 1 ELSE 0 END) AS miskin, SUM(CASE WHEN k.status_ekonomi='rentan' THEN 1 ELSE 0 END) AS rentan FROM keluarga k GROUP BY k.kecamatan ORDER BY miskin DESC" )->fetchAll(); // Trend bantuan 6 bulan $trend = $db->query( "SELECT DATE_FORMAT(tanggal,'%Y-%m') AS bulan, COUNT(*) AS jumlah FROM histori_bantuan WHERE tanggal >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) GROUP BY bulan ORDER BY bulan" )->fetchAll(); // Belum pernah dibantu (miskin) $belum = $db->query( "SELECT COUNT(*) AS c FROM penduduk p WHERE p.status_ekonomi IN ('miskin','rentan') AND p.status_hidup='hidup' AND NOT EXISTS (SELECT 1 FROM histori_bantuan hb WHERE hb.nik=p.nik AND hb.status_penyaluran='disalurkan')" )->fetch()['c']; // Prioritas darurat $prioritas = $db->query( "SELECT * FROM v_prioritas_bantuan WHERE level_prioritas IN ('SANGAT TINGGI','TINGGI') LIMIT 10" )->fetchAll(); // Beban per RI $bebanRI = $db->query( "SELECT ri.nama, ri.jenis, COUNT(DISTINCT k.id) AS jumlah_kk, SUM(CASE WHEN k.status_ekonomi='miskin' THEN 1 ELSE 0 END) AS kk_miskin FROM rumah_ibadah ri LEFT JOIN keluarga k ON k.id_rumah_ibadah=ri.id WHERE ri.aktif=1 GROUP BY ri.id ORDER BY kk_miskin DESC" )->fetchAll(); jsonSuccess([ 'statistik' => $stat, 'sebaran_kecamatan' => $kec, 'trend_bantuan' => $trend, 'belum_dibantu' => (int)$belum, 'prioritas_darurat' => $prioritas, 'beban_per_ri' => $bebanRI, ]); } public function show(string $id): void { jsonError('Not implemented', 501); } public function store(): void { jsonError('Not implemented', 501); } public function update(string $id): void { jsonError('Not implemented', 501); } public function destroy(string $id): void { jsonError('Not implemented', 501); } }