get(); return view('user.diagnosa.index', compact('gejalas')); } public function proses(Request $request) { $request->validate([ 'gejala' => 'required|array|min:1', ], [ 'gejala.required' => 'Pilih minimal 1 gejala!', 'gejala.min' => 'Pilih minimal 1 gejala!', ]); $gejalaInput = $request->gejala; // array of id_gejala // Ambil semua rule yang relevan $rules = RuleBasis::whereIn('id_gejala', $gejalaInput)->get(); // Hitung MB dan MD per penyakit dulu $mbPenyakit = []; $mdPenyakit = []; foreach ($rules as $rule) { $idPenyakit = $rule->id_penyakit; if (!isset($mbPenyakit[$idPenyakit])) { // Gejala pertama $mbPenyakit[$idPenyakit] = $rule->mb; $mdPenyakit[$idPenyakit] = $rule->md; } else { // Kombinasi gejala berikutnya (rumus 2 & 3) $mbPenyakit[$idPenyakit] = $mbPenyakit[$idPenyakit] * $rule->mb; $mdPenyakit[$idPenyakit] = $mdPenyakit[$idPenyakit] + $rule->md * (1 - $mdPenyakit[$idPenyakit]); } } // Hitung CF = MB - MD $cfPenyakit = []; foreach ($mbPenyakit as $idPenyakit => $mb) { $cfPenyakit[$idPenyakit] = $mb - $mdPenyakit[$idPenyakit]; } if (empty($cfPenyakit)) { return redirect()->route('user.diagnosa.index') ->with('error', 'Tidak ditemukan penyakit yang cocok dengan gejala yang dipilih.'); } // Urutkan dari CF tertinggi arsort($cfPenyakit); // Ambil data penyakit $hasilDiagnosa = []; foreach ($cfPenyakit as $idPenyakit => $cf) { $penyakit = MasterPenyakit::find($idPenyakit); if ($penyakit) { $hasilDiagnosa[] = [ 'id_penyakit' => $idPenyakit, 'nama_penyakit' => $penyakit->nama_penyakit, 'cf' => round($cf, 2), 'persentase' => round($cf * 100, 1), ]; } } $penyakitFinal = $hasilDiagnosa[0]['id_penyakit']; $cfTertinggi = $hasilDiagnosa[0]['cf']; // Simpan ke riwayat $riwayat = RiwayatDiagnosis::create([ 'user_id' => auth()->id(), 'tanggal' => now(), 'gejala_input' => $gejalaInput, 'hasil_diagnosa'=> $hasilDiagnosa, 'cf_tertinggi' => $cfTertinggi, 'penyakit_final'=> $penyakitFinal, ]); return redirect()->route('user.diagnosa.hasil', $riwayat->id_diagnosis); } public function hasil($id) { $riwayat = RiwayatDiagnosis::with('penyakit')->findOrFail($id); // Pastikan hanya pemilik yang bisa lihat if ($riwayat->user_id !== auth()->id()) { abort(403); } $gejalaInput = MasterGejala::whereIn('id_gejala', $riwayat->gejala_input)->get(); return view('user.diagnosa.hasil', compact('riwayat', 'gejalaInput')); } public function riwayat() { $riwayats = RiwayatDiagnosis::where('user_id', auth()->id()) ->with('penyakit') ->latest('tanggal') ->paginate(10); return view('user.diagnosa.riwayat', compact('riwayats')); } }