gejala ?? [] as $id => $nilai) { if (!is_null($nilai) && $nilai !== '') { $inputGejala[$id] = (float) $nilai; } } // VALIDASI MINIMAL 1 GEJALA if (empty($inputGejala)) { return back()->with( 'error', 'Pilih minimal 1 gejala!' ); } // CEK APAKAH SEMUA TIDAK PERNAH $semuaTidakPernah = true; foreach ($inputGejala as $cf) { if ($cf > 0) { $semuaTidakPernah = false; break; } } // AMBIL HIPOTESIS H01 $hipotesis = Penyakit::where('kode', 'H01')->first(); if (!$hipotesis) { return back()->with( 'error', 'Hipotesis H01 belum tersedia.' ); } // DATA PASIEN $pasien = Pasien::where( 'user_id', Auth::id() )->latest()->first(); if (!$pasien) { return back()->with( 'error', 'Data pasien belum tersedia.' ); } // JIKA SEMUA TIDAK PERNAH if ($semuaTidakPernah) { $diagnosa = Diagnosa::create([ 'pasien_id' => $pasien->id, 'penyakit_id' => $hipotesis->id, 'cf_hasil' => 0, 'gejala_dipilih' => json_encode($inputGejala) ]); return redirect()->route( 'diagnosa.hasil', $diagnosa->id ); } // AMBIL DATA GEJALA $gejalas = Gejala::whereIn( 'id', array_keys($inputGejala) )->get(); $cfCombine = null; // HITUNG CERTAINTY FACTOR foreach ($gejalas as $gejala) { $cfUser = $inputGejala[$gejala->id] ?? 0; if ($cfUser <= 0) { continue; } // CF Pakar $cfPakar = $gejala->mb - $gejala->md; // CF Gejala $cfGejala = $cfPakar * $cfUser; // Kombinasi CF if (is_null($cfCombine)) { $cfCombine = $cfGejala; } else { $cfCombine = $cfCombine + ($cfGejala * (1 - $cfCombine)); } } // VALIDASI HASIL CF if (is_null($cfCombine)) { return back()->with( 'error', 'Perhitungan Certainty Factor gagal dilakukan.' ); } // SIMPAN DIAGNOSA $diagnosa = Diagnosa::create([ 'pasien_id' => $pasien->id, 'penyakit_id' => $hipotesis->id, 'cf_hasil' => $cfCombine, 'gejala_dipilih' => json_encode($inputGejala) ]); return redirect()->route( 'diagnosa.hasil', $diagnosa->id ); } // HASIL DIAGNOSA public function hasil($id) { $diagnosa = Diagnosa::with([ 'pasien', 'penyakit' ])->findOrFail($id); // REKOMENDASI $diagnosa->rekomendasi = $this->getRekomendasi( $diagnosa->cf_hasil ); // UPAYA PENCEGAHAN $diagnosa->upaya_pencegahan = $this->getUpayaPencegahan( $diagnosa->rekomendasi ); // RISIKO KOMPLIKASI $diagnosa->risiko_komplikasi = $this->getRisikoKomplikasi( $diagnosa->rekomendasi ); if(auth()->user()->role=='admin'){ return view( 'admin.hasil', compact('diagnosa') ); } return view( 'user.hasil', compact('diagnosa') ); } // REKOMENDASI PEMERIKSAAN private function getRekomendasi($cf) { if ($cf <= 0.20) { return 'Lakukan Pemantauan Mandiri'; } elseif ($cf <= 0.40) { return 'Lakukan Pemeriksaan Tekanan Darah'; } elseif ($cf <= 0.70) { return 'Konsultasikan dengan Tenaga Kesehatan'; } return 'Segera Datangi Fasilitas Kesehatan'; } private function getUpayaPencegahan($rekomendasi) { switch ($rekomendasi) { case 'Lakukan Pemantauan Mandiri': return ' '; case 'Lakukan Pemeriksaan Tekanan Darah': return ' '; case 'Konsultasikan dengan Tenaga Kesehatan': return ' '; default: return ' '; } } private function getRisikoKomplikasi($rekomendasi) { switch ($rekomendasi) { case 'Lakukan Pemantauan Mandiri': return ' Belum terdapat indikasi yang mengarah pada risiko komplikasi akibat hipertensi. Meskipun demikian, pengguna tetap disarankan menerapkan pola hidup sehat dan melakukan pemantauan kondisi kesehatan secara berkala untuk mencegah peningkatan risiko di kemudian hari. '; case 'Lakukan Pemeriksaan Tekanan Darah': return ' Apabila tekanan darah tinggi tidak segera diketahui melalui pemeriksaan, kondisi tersebut dapat berkembang tanpa disadari dan meningkatkan risiko terjadinya komplikasi hipertensi dalam jangka panjang. Pemeriksaan tekanan darah secara dini sangat dianjurkan. '; case 'Konsultasikan dengan Tenaga Kesehatan': return ' Kombinasi gejala yang dialami memerlukan evaluasi lebih lanjut oleh tenaga kesehatan. Apabila penyebab keluhan tidak segera diketahui dan ditangani, risiko terjadinya komplikasi yang berhubungan dengan hipertensi maupun penyakit kardiovaskular lainnya dapat meningkat. '; default: return ' Gejala yang dialami memerlukan evaluasi medis segera. Penundaan pemeriksaan dapat meningkatkan risiko terjadinya komplikasi serius, baik yang berkaitan dengan hipertensi maupun kondisi medis lainnya. Oleh karena itu, segera lakukan pemeriksaan di fasilitas pelayanan kesehatan. '; } } // CETAK PDF public function pdf($id) { $diagnosa = Diagnosa::with([ 'pasien', 'penyakit' ])->findOrFail($id); //dd($diagnosa->gejala_dipilih); // Tambahkan rekomendasi pemeriksaan $diagnosa->rekomendasi = $this->getRekomendasi( $diagnosa->cf_hasil ); $diagnosa->upaya_pencegahan = $this->getUpayaPencegahan($diagnosa->rekomendasi); $diagnosa->risiko_komplikasi = $this->getRisikoKomplikasi($diagnosa->rekomendasi); // AMBIL DATA GEJALA DIPILIH $gejalaData = json_decode( $diagnosa->gejala_dipilih, true ) ?? []; // ambil ID gejala $gejalaIds = array_keys($gejalaData); // ambil data gejala dari database $gejalas = Gejala::whereIn( 'id', $gejalaIds )->get(); // TAMBAHKAN CF USER foreach ($gejalas as $g) { // ambil nilai user $g->cf_user = $gejalaData[$g->id] ?? 0; // ubah ke teks if ($g->cf_user == 1) { $g->keterangan_cf = 'Sangat Sering'; } elseif ($g->cf_user == 0.7) { $g->keterangan_cf = 'Sering'; } elseif ($g->cf_user == 0.4) { $g->keterangan_cf = 'Kadang-Kadang'; } else { $g->keterangan_cf = 'Tidak Pernah'; } } // GENERATE PDF $pdf = Pdf::loadView( 'pdf.diagnosa', compact( 'diagnosa', 'gejalas' ) ); return $pdf->download( 'hasil_diagnosa_' . $diagnosa->id . '.pdf' ); } // RIWAYAT USER public function riwayat() { $pasien = Pasien::where( 'user_id', Auth::id() )->first(); $perPage = request()->perPage ?? 5; if (!$pasien) { $data = Diagnosa::where('id', 0) ->paginate($perPage); return view( 'user.riwayat', compact('data', 'perPage') ); } $data = Diagnosa::with([ 'penyakit', 'pasien' ]) ->where('pasien_id', $pasien->id) ->latest() ->paginate($perPage) ->withQueryString(); // TAMBAHKAN REKOMENDASI foreach ($data as $diagnosa) { $diagnosa->rekomendasi = $this->getRekomendasi( $diagnosa->cf_hasil ); } return view( 'user.riwayat', compact('data', 'perPage') ); } // DASHBOARD USER public function dashboard(Request $request) { $pasien = Pasien::where( 'user_id', auth()->id() )->first(); $perPage = $request->perPage ?? 5; $totalDiagnosa = 0; $lastDiagnosa = null; $riwayat = collect(); if ($pasien) { $riwayat = Diagnosa::with('penyakit') ->where('pasien_id', $pasien->id) ->latest() ->paginate($perPage) ->withQueryString(); // TAMBAHKAN REKOMENDASI foreach ($riwayat as $diagnosa) { $diagnosa->rekomendasi = $this->getRekomendasi( $diagnosa->cf_hasil ); } $totalDiagnosa = Diagnosa::where( 'pasien_id', $pasien->id )->count(); $lastDiagnosa = Diagnosa::where( 'pasien_id', $pasien->id )->latest() ->first(); if ($lastDiagnosa) { $lastDiagnosa->rekomendasi = $this->getRekomendasi( $lastDiagnosa->cf_hasil ); } } return view( 'user.dashboard', compact( 'totalDiagnosa', 'lastDiagnosa', 'riwayat', 'perPage' ) ); } }