kondisi) || count($request->kondisi) < 2) { $this->notification('success', 'Sehat', 'Tanpa kriteria signifikan'); return redirect()->route('pengguna.diagnosa.index'); } $arbobot = [0, 1, 0.75, 0.5, 0.25]; $kepastian = []; // Parse input kondisi: ["kriteriaId_level", ...] foreach ($request->kondisi as $item) { list($kriteriaId, $level) = explode('_', $item); $kepastian[$kriteriaId] = (int) $level; } // Ambil semua jurusan dan basis pengetahuan yang relevan $jurusans = Jurusan::with(['basisPengetahuan' => function ($q) use ($kepastian) { $q->whereIn('kriteria_id', array_keys($kepastian)); }])->get(); $cfHasil = []; // Hitung CF untuk tiap jurusan foreach ($jurusans as $jurusan) { $cfs = []; foreach ($jurusan->basisPengetahuan as $bp) { $level = $kepastian[$bp->kriteria_id] ?? 0; $cfs[] = $bp->nilai * $arbobot[$level]; } // Kombinasi CF $cfTotal = 0; foreach ($cfs as $idx => $cf) { if ($idx === 0) { $cfTotal = $cf; } else { $cfTotal = $cfTotal + $cf * (1 - $cfTotal); } } $cfHasil[$jurusan->id] = round($cfTotal, 4); } // Urutkan dan simpan arsort($cfHasil); $topId = array_key_first($cfHasil); Diagnosa::create([ 'user_id' => session('biodata.user_id'), 'jurusan_id' => $topId, 'presentase' => $cfHasil[$topId] * 100, 'catatan' => null, ]); // Kembali ke view hasil return view('pengguna.diagnosa.analisa', [ 'cfHasil' => $cfHasil, 'jurusans' => $jurusans, 'kepastian' => $kepastian, 'topId' => $topId, ]); } public function reset(Request $request) { $request->session()->forget('biodata'); return redirect()->route('pengguna.biodata.index'); } }