= 7) { $indicators[] = 'Tanggungan sangat besar (≥ 7 orang)'; $severityPoints += 3; } elseif ($dependents >= 5) { $indicators[] = 'Tanggungan besar (5-6 orang)'; $severityPoints += 2; } elseif ($dependents >= 4) { $indicators[] = 'Tanggungan cukup besar (4 orang)'; $severityPoints += 1; } // ---- Indicator 3: House condition ---- if ($condition === 'tidak_layak') { $indicators[] = 'Kondisi rumah tidak layak huni'; $severityPoints += 3; } // ---- Indicator 4: Education ---- $eduLevels = [ 'tidak_sekolah' => ['Tidak pernah sekolah', 3], 'sd' => ['Pendidikan hanya SD', 2], 'smp' => ['Pendidikan hanya SMP', 1], 'sma' => ['Pendidikan SMA', 0], 'diploma' => ['Pendidikan Diploma', 0], 'sarjana' => ['Pendidikan Sarjana', 0], 'pascasarjana' => ['Pendidikan Pascasarjana', 0], ]; if (isset($eduLevels[$education])) { [$eduDesc, $eduPts] = $eduLevels[$education]; if ($eduPts > 0) { $indicators[] = $eduDesc; $severityPoints += $eduPts; } } // ---- Indicator 5: Land ownership ---- if ($landOwnership === 'numpang') { $indicators[] = 'Tidak memiliki lahan (numpang)'; $severityPoints += 2; } elseif ($landOwnership === 'sewa') { $indicators[] = 'Lahan menyewa'; $severityPoints += 1; } // ---- Determine category based on accumulated severity ---- if ($severityPoints >= 7) { $status = 'sangat_miskin'; $label = 'Sangat Miskin'; } elseif ($severityPoints >= 4) { $status = 'miskin'; $label = 'Miskin'; } elseif ($severityPoints >= 1) { $status = 'rentan_miskin'; $label = 'Rentan Miskin'; } else { $status = 'terdata'; $label = 'Terdata'; } return [ 'status' => $status, 'label' => $label, 'indicators' => $indicators, 'severity' => $severityPoints, 'score' => (int)min(100, round(($severityPoints / 14) * 100)), ]; } /** * Marker color based on poverty status */ public static function markerColor(string $status): string { return match($status) { 'sangat_miskin' => '#d63230', // Red 'miskin' => '#f76707', // Orange 'rentan_miskin' => '#f59e0b', // Amber 'terdata' => '#0b9e73', // Green default => '#9ba4b5', }; } /** * Label in Indonesian */ public static function label(string $status): string { return match($status) { 'sangat_miskin' => 'Sangat Miskin', 'miskin' => 'Miskin', 'rentan_miskin' => 'Rentan Miskin', 'terdata' => 'Terdata', default => '-', }; } }