This commit is contained in:
BintangRiz.github,io 2026-07-13 17:07:55 +07:00
parent 4ec833fb31
commit fd099f51e7
23 changed files with 2178 additions and 663 deletions

View File

@ -5,31 +5,64 @@
use App\Http\Controllers\Controller;
use App\Models\Pasien;
use App\Models\Diagnosa;
use App\Models\Penyakit;
use App\Models\Gejala;
class DashboardController extends Controller
{
public function index()
{
// ==========================
// STATISTIK
$totalPasien = Pasien::count();
// ==========================
$totalPasien = Pasien::count();
$totalDiagnosa = Diagnosa::count();
$totalPenyakit = Penyakit::count();
$totalGejala = Gejala::count();
// DATA CHART
$chart = Diagnosa::selectRaw('penyakit_id, COUNT(*) as total')
->groupBy('penyakit_id')
->with('penyakit')
->get();
$totalGejala = Gejala::count();
return view('admin.dashboard', compact(
'totalPasien',
'totalDiagnosa',
'totalPenyakit',
'totalGejala',
'chart'
));
// ==========================
// DATA GRAFIK BERDASARKAN
// REKOMENDASI PEMERIKSAAN
// ==========================
$chart = [
[
'label' => 'Lakukan Pemantauan Mandiri',
'total' => Diagnosa::where('cf_hasil', '<=', 0.20)->count()
],
[
'label' => 'Lakukan Pemeriksaan Tekanan Darah',
'total' => Diagnosa::where('cf_hasil', '>', 0.20)
->where('cf_hasil', '<=', 0.40)
->count()
],
[
'label' => 'Konsultasikan dengan Tenaga Kesehatan',
'total' => Diagnosa::where('cf_hasil', '>', 0.40)
->where('cf_hasil', '<=', 0.70)
->count()
],
[
'label' => 'Segera Datangi Fasilitas Kesehatan',
'total' => Diagnosa::where('cf_hasil', '>', 0.70)
->count()
]
];
return view(
'admin.dashboard',
compact(
'totalPasien',
'totalDiagnosa',
'totalGejala',
'chart'
)
);
}
}

View File

@ -5,7 +5,7 @@
use Illuminate\Http\Request;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Models\Gejala;
use App\Models\Rule;
//use App\Models\Rule;
use App\Models\Pasien;
use App\Models\Diagnosa;
use App\Models\Penyakit;
@ -14,9 +14,9 @@
class DiagnosaController extends Controller
{
// =========================
// FORM DIAGNOSA
// =========================
public function index()
{
$gejalas = Gejala::all();
@ -25,102 +25,93 @@ public function index()
}
// =========================
// PROSES CERTAINTY FACTOR
// =========================
public function proses(Request $request)
{
// validasi minimal 1 gejala dipilih
if (empty(array_filter($request->gejala ?? []))) {
return back()->with('error', 'Pilih minimal 1 gejala!');
public function proses(Request $request)
{
// AMBIL GEJALA YANG DIPILIH
$inputGejala = [];
foreach ($request->gejala ?? [] as $id => $nilai) {
if (!is_null($nilai) && $nilai !== '') {
$inputGejala[$id] = (float) $nilai;
}
}
// format:
// [gejala_id => cf_user]
$inputGejala = array_filter($request->gejala);
// VALIDASI MINIMAL 1 GEJALA
if (empty($inputGejala)) {
// ambil rule berdasarkan gejala dipilih
$rules = Rule::whereIn(
'gejala_id',
array_keys($inputGejala)
)->get();
return back()->with(
'error',
'Pilih minimal 1 gejala!'
);
}
$hasil = [];
// CEK APAKAH SEMUA TIDAK PERNAH
$semuaTidakPernah = true;
foreach ($rules as $rule) {
foreach ($inputGejala as $cf) {
// =========================
// CF PAKAR
// =========================
$cf_pakar = $rule->mb - $rule->md;
if ($cf > 0) {
// =========================
// CF USER
// =========================
$cf_user = $inputGejala[$rule->gejala_id];
// =========================
// CF AKHIR
// =========================
$cf = $cf_pakar * $cf_user;
// =========================
// KOMBINASI CF
// =========================
if (!isset($hasil[$rule->penyakit_id])) {
$hasil[$rule->penyakit_id] = $cf;
} else {
$hasil[$rule->penyakit_id] =
$hasil[$rule->penyakit_id] +
($cf * (1 - $hasil[$rule->penyakit_id]));
}
$semuaTidakPernah = false;
break;
}
}
// jika tidak ada hasil
if (empty($hasil)) {
// AMBIL HIPOTESIS H01
$hipotesis = Penyakit::where('kode', 'H01')->first();
return back()->with(
'error',
'Tidak ada rule yang cocok!'
);
}
if (!$hipotesis) {
// =========================
// HASIL TERTINGGI
// =========================
arsort($hasil);
return back()->with(
'error',
'Hipotesis H01 belum tersedia.'
);
}
$penyakit_id = array_key_first($hasil);
// DATA PASIEN
$pasien = Pasien::where(
'user_id',
Auth::id()
)->latest()->first();
$cf_hasil = $hasil[$penyakit_id];
if (!$pasien) {
// =========================
// AMBIL DATA PASIEN
// =========================
$pasien = Pasien::where(
'user_id',
Auth::id()
)->latest()->first();
return back()->with(
'error',
'Data pasien belum tersedia.'
);
}
// JIKA SEMUA TIDAK PERNAH
if ($semuaTidakPernah) {
// =========================
// SIMPAN DIAGNOSA
// =========================
$diagnosa = Diagnosa::create([
'pasien_id' => $pasien->id,
'pasien_id' => $pasien->id,
'penyakit_id' => $penyakit_id,
'penyakit_id' => $hipotesis->id,
'cf_hasil' => $cf_hasil,
'cf_hasil' => 0,
'gejala_dipilih' => json_encode($inputGejala)
// simpan gejala + nilai keyakinan user
// contoh:
// {"1":"0.8","2":"1"}
'gejala_dipilih' => json_encode($inputGejala)
]);
return redirect()->route(
@ -129,47 +120,247 @@ public function proses(Request $request)
);
}
// AMBIL DATA GEJALA
$gejalas = Gejala::whereIn(
'id',
array_keys($inputGejala)
)->get();
// =========================
// HASIL DIAGNOSA
// =========================
public function hasil($id)
{
$diagnosa = Diagnosa::with([
'pasien',
'penyakit'
])->findOrFail($id);
$cfCombine = null;
// jika admin
if (auth()->user()->role == 'admin') {
// HITUNG CERTAINTY FACTOR
foreach ($gejalas as $gejala) {
return view(
'admin.hasil',
compact('diagnosa')
);
$cfUser = $inputGejala[$gejala->id] ?? 0;
if ($cfUser <= 0) {
continue;
}
// jika user
return view(
'user.hasil',
compact('diagnosa')
// 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 '
<ul>
<li>Menerapkan pola hidup sehat dengan mengonsumsi makanan bergizi seimbang.</li>
<li>Mengurangi konsumsi garam, makanan tinggi lemak, dan makanan olahan.</li>
<li>Melakukan aktivitas fisik secara teratur minimal 30 menit setiap hari.</li>
<li>Mengelola stres dan mencukupi waktu istirahat.</li>
<li>Menghindari kebiasaan merokok dan konsumsi alkohol.</li>
<li>Melakukan pemantauan kondisi kesehatan secara berkala.</li>
</ul>';
case 'Lakukan Pemeriksaan Tekanan Darah':
return '
<ul>
<li>Melakukan pemeriksaan tekanan darah menggunakan alat ukur yang valid.</li>
<li>Pemeriksaan dapat dilakukan secara mandiri maupun di Posbindu, apotek, puskesmas, klinik, atau rumah sakit.</li>
<li>Mencatat hasil pemeriksaan sebagai bahan pemantauan.</li>
<li>Menerapkan pola hidup sehat dan mengurangi faktor risiko hipertensi.</li>
<li>Apabila hasil tekanan darah tinggi secara berulang, segera konsultasikan kepada tenaga kesehatan.</li>
</ul>';
case 'Konsultasikan dengan Tenaga Kesehatan':
return '
<ul>
<li>Segera berkonsultasi dengan dokter atau tenaga kesehatan.</li>
<li>Melakukan pemeriksaan tekanan darah dan evaluasi kondisi kesehatan secara menyeluruh.</li>
<li>Mengikuti seluruh anjuran tenaga kesehatan terkait pemeriksaan maupun penanganan lanjutan.</li>
<li>Tidak menunda pemeriksaan apabila gejala masih berlanjut.</li>
<li>Terapkan pola hidup sehat selama menunggu pemeriksaan.</li>
</ul>';
default:
return '
<ul>
<li>Segera mendatangi fasilitas pelayanan kesehatan terdekat.</li>
<li>Melakukan pemeriksaan medis sesegera mungkin.</li>
<li>Tidak menunda pemeriksaan apabila gejala semakin berat atau muncul keluhan baru.</li>
<li>Mengikuti seluruh tindakan medis yang diberikan tenaga kesehatan.</li>
<li>Apabila mengalami kondisi darurat seperti nyeri dada hebat, sesak napas berat, atau penurunan kesadaran, segera mencari pertolongan medis darurat.</li>
</ul>';
}
}
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);
'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
@ -184,9 +375,9 @@ public function pdf($id)
$gejalaIds
)->get();
// =========================
// TAMBAHKAN CF USER
// =========================
foreach ($gejalas as $g) {
// ambil nilai user
@ -195,33 +386,25 @@ public function pdf($id)
// ubah ke teks
if ($g->cf_user == 1) {
$g->keterangan_cf = 'Sangat Yakin';
$g->keterangan_cf = 'Sangat Sering';
} elseif ($g->cf_user == 0.8) {
} elseif ($g->cf_user == 0.7) {
$g->keterangan_cf = 'Yakin';
} elseif ($g->cf_user == 0.6) {
$g->keterangan_cf = 'Cukup Yakin';
$g->keterangan_cf = 'Sering';
} elseif ($g->cf_user == 0.4) {
$g->keterangan_cf = 'Sedikit Yakin';
} elseif ($g->cf_user == 0.2) {
$g->keterangan_cf = 'Kurang Yakin';
$g->keterangan_cf = 'Kadang-Kadang';
} else {
$g->keterangan_cf = 'Tidak Yakin';
$g->keterangan_cf = 'Tidak Pernah';
}
}
// =========================
// GENERATE PDF
// =========================
$pdf = Pdf::loadView(
'pdf.diagnosa',
compact(
@ -238,39 +421,22 @@ public function pdf($id)
}
// =========================
// RIWAYAT USER
// =========================
public function riwayat()
{
$pasien = Pasien::where(
'user_id',
Auth::id()
)->first();
// RIWAYAT USER
// jumlah data per halaman
$perPage = request()->perPage ?? 5;
public function riwayat()
{
$pasien = Pasien::where(
'user_id',
Auth::id()
)->first();
// jika belum isi data diri
if (!$pasien) {
$perPage = request()->perPage ?? 5;
$data = Diagnosa::where('id', 0)
->paginate($perPage);
if (!$pasien) {
return view(
'user.riwayat',
compact('data', 'perPage')
);
}
$data = Diagnosa::with([
'penyakit',
'pasien'
])
->where('pasien_id', $pasien->id)
->latest()
->paginate($perPage)
->withQueryString();
$data = Diagnosa::where('id', 0)
->paginate($perPage);
return view(
'user.riwayat',
@ -278,52 +444,101 @@ public function riwayat()
);
}
$data = Diagnosa::with([
'penyakit',
'pasien'
])
->where('pasien_id', $pasien->id)
->latest()
->paginate($perPage)
->withQueryString();
// =========================
// DASHBOARD USER
// =========================
public function dashboard(Request $request)
{
$pasien = Pasien::where(
'user_id',
auth()->id()
)->first();
$perPage = $request->perPage ?? 5;
// TAMBAHKAN REKOMENDASI
foreach ($data as $diagnosa) {
$totalDiagnosa = 0;
$diagnosa->rekomendasi =
$this->getRekomendasi(
$diagnosa->cf_hasil
);
$lastDiagnosa = null;
}
$riwayat = collect();
return view(
'user.riwayat',
compact('data', 'perPage')
);
}
if ($pasien) {
$riwayat = Diagnosa::with('penyakit')
->where('pasien_id', $pasien->id)
->latest()
->paginate($perPage)
->withQueryString();
$totalDiagnosa = Diagnosa::where(
'pasien_id',
$pasien->id
)->count();
// 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
);
$lastDiagnosa = Diagnosa::where(
'pasien_id',
$pasien->id
)->latest()->first();
}
return view(
'user.dashboard',
compact(
'totalDiagnosa',
'lastDiagnosa',
'riwayat',
'perPage'
)
);
$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'
)
);
}
}

View File

@ -7,98 +7,188 @@
class GejalaController extends Controller
{
// =========================
// TAMPIL DATA
public function index(Request $request)
{
// jumlah data per halaman
$perPage = $request->perPage ?? 5;
// =========================
public function index(Request $request)
{
// jumlah data per halaman
$perPage = $request->perPage ?? 5;
// search
$query = Gejala::query();
// search
$query = Gejala::query();
if ($request->search) {
if ($request->search) {
$query->where('kode', 'like', '%' . $request->search . '%')
->orWhere('nama', 'like', '%' . $request->search . '%');
$query->where('kode', 'like', '%' . $request->search . '%')
->orWhere('nama', 'like', '%' . $request->search . '%');
}
// pagination
$gejalas = $query->orderBy('kode', 'asc')
->paginate($perPage)
->withQueryString();
return view(
'admin.gejala.index',
compact('gejalas', 'perPage')
);
}
// pagination
$gejalas = $query->orderBy('kode', 'asc')
->paginate($perPage)
->withQueryString();
return view('admin.gejala.index', compact('gejalas', 'perPage'));
}
// =========================
// FORM TAMBAH
public function create()
{
// ambil kode terakhir
$lastGejala = Gejala::orderBy('kode', 'desc')->first();
// =========================
public function create()
{
// ambil kode terakhir
$lastGejala = Gejala::orderBy('kode', 'desc')->first();
// default awal
$kode = 'G01';
// default
$kode = 'G01';
// jika ada data
if ($lastGejala) {
if ($lastGejala) {
// ambil angka dari kode
$lastNumber = (int) substr($lastGejala->kode, 1);
$lastNumber = (int) substr($lastGejala->kode, 1);
// tambah 1
$newNumber = $lastNumber + 1;
$newNumber = $lastNumber + 1;
// format jadi G01
$kode = 'G' . str_pad($newNumber, 2, '0', STR_PAD_LEFT);
$kode = 'G' . str_pad(
$newNumber,
2,
'0',
STR_PAD_LEFT
);
}
return view(
'admin.gejala.create',
compact('kode')
);
}
return view('admin.gejala.create', compact('kode'));
}
// =========================
// SIMPAN DATA
// =========================
public function store(Request $request)
{
$request->validate([
'kode' => 'required|unique:gejalas',
'nama' => 'required'
'nama' => 'required',
'mb' => 'required|numeric|min:0|max:1',
'md' => 'required|numeric|min:0|max:1',
]);
Gejala::create($request->all());
// Validasi MB dan MD
if ($request->md > $request->mb) {
return redirect()->route('gejala.index')
->with('success', 'Data berhasil ditambahkan');
return back()
->withInput()
->with(
'error',
'Nilai MD tidak boleh lebih besar dari MB.'
);
}
Gejala::create([
'kode' => $request->kode,
'nama' => $request->nama,
'mb' => $request->mb,
'md' => $request->md,
]);
return redirect()
->route('gejala.index')
->with(
'success',
'Data gejala berhasil ditambahkan.'
);
}
// =========================
// FORM EDIT
// =========================
public function edit($id)
{
$gejala = Gejala::findOrFail($id);
return view('admin.gejala.edit', compact('gejala'));
return view(
'admin.gejala.edit',
compact('gejala')
);
}
// UPDATE
// =========================
// UPDATE DATA
// =========================
public function update(Request $request, $id)
{
$gejala = Gejala::findOrFail($id);
$request->validate([
'kode' => 'required|unique:gejalas,kode,' . $id,
'nama' => 'required'
'nama' => 'required',
'mb' => 'required|numeric|min:0|max:1',
'md' => 'required|numeric|min:0|max:1',
]);
$gejala->update([
'nama' => $request->nama]);
// Validasi MB dan MD
if ($request->md > $request->mb) {
return redirect()->route('gejala.index')
->with('success', 'Data berhasil diupdate');
return back()
->withInput()
->with(
'error',
'Nilai MD tidak boleh lebih besar dari MB.'
);
}
$gejala->update([
'kode' => $request->kode,
'nama' => $request->nama,
'mb' => $request->mb,
'md' => $request->md,
]);
return redirect()
->route('gejala.index')
->with(
'success',
'Data gejala berhasil diperbarui.'
);
}
// HAPUS
// =========================
// HAPUS DATA
// =========================
public function destroy($id)
{
Gejala::destroy($id);
return redirect()->route('gejala.index')
->with('success', 'Data berhasil dihapus');
return redirect()
->route('gejala.index')
->with(
'success',
'Data gejala berhasil dihapus.'
);
}
}

View File

@ -74,7 +74,7 @@ public function store(Request $request)
$last = Rule::latest()->first();
$kode = 'R' . str_pad(($last ? $last->id + 1 : 1), 2, '0', STR_PAD_LEFT);
// HITUNG CF
// HITUNG CF
$cf = $request->mb - $request->md;
// ✅ SIMPAN

View File

@ -9,21 +9,20 @@
class UserDashboardController extends Controller
{
public function index()
public function index(Request $request)
{
$pasien = Pasien::where('user_id', Auth::id())->first();
// default kosong
$totalDiagnosa = 0;
$lastDiagnosa = null;
// pagination
$perPage = request()->perPage ?? 5;
$perPage = $request->perPage ?? 5;
// jika pasien belum ada
// Jika pasien belum mengisi data diri
if (!$pasien) {
$riwayat = Diagnosa::where('id', 0)->paginate($perPage);
$riwayat = Diagnosa::where('id', 0)
->paginate($perPage);
return view('user.dashboard', compact(
'totalDiagnosa',
@ -33,16 +32,19 @@ public function index()
));
}
// total diagnosa
$totalDiagnosa = Diagnosa::where('pasien_id', $pasien->id)->count();
// Total diagnosa
$totalDiagnosa = Diagnosa::where('pasien_id', $pasien->id)
->count();
// diagnosa terakhir
// Diagnosa terakhir
$lastDiagnosa = Diagnosa::with('penyakit')
->where('pasien_id', $pasien->id)
->latest()
->first();
// riwayat
// Riwayat diagnosa
$riwayat = Diagnosa::with('penyakit')
->where('pasien_id', $pasien->id)
->latest()

View File

@ -13,6 +13,9 @@ class Diagnosa extends Model
'gejala_dipilih'
];
// =========================
// RELASI
// =========================
public function pasien()
{
return $this->belongsTo(Pasien::class);
@ -22,4 +25,20 @@ public function penyakit()
{
return $this->belongsTo(Penyakit::class);
}
}
// =========================
// ACCESSOR REKOMENDASI
// =========================
public function getRekomendasiAttribute()
{
if ($this->cf_hasil <= 0.20) {
return 'Lakukan Pemantauan Mandiri';
} elseif ($this->cf_hasil <= 0.40) {
return 'Lakukan Pemeriksaan Tekanan Darah';
} elseif ($this->cf_hasil <= 0.70) {
return 'Konsultasikan dengan Tenaga Kesehatan';
}
return 'Segera Datangi Fasilitas Kesehatan';
}
}

View File

@ -6,5 +6,10 @@
class Gejala extends Model
{
protected $fillable = ['kode', 'nama'];
}
protected $fillable = [
'kode',
'nama',
'mb',
'md'
];
}

View File

@ -38,17 +38,27 @@
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'scheme' => env('MAIL_SCHEME'),
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', '127.0.0.1'),
'port' => env('MAIL_PORT', 2525),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
],
'transport' => 'smtp',
'scheme' => env('MAIL_SCHEME'),
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', '127.0.0.1'),
'port' => env('MAIL_PORT', 2525),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env(
'MAIL_EHLO_DOMAIN',
parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)
),
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
],
'ses' => [
'transport' => 'ses',
],

View File

@ -17,4 +17,4 @@
/** @var Application $app */
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->handleRequest(Request::capture());
$app->handleRequest(Request::capture());

View File

@ -7,53 +7,63 @@
<div class="row">
<!-- PASIEN -->
<div class="col-md-3 mb-3">
<div class="col-md-4 mb-3">
<div class="card shadow-sm text-white bg-primary">
<div class="card-body">
<h5>Total Pasien</h5>
<h2>{{ $totalPasien }}</h2>
</div>
</div>
</div>
<!-- DIAGNOSA -->
<div class="col-md-3 mb-3">
<!-- DETEKSI DINI -->
<div class="col-md-4 mb-3">
<div class="card shadow-sm text-white bg-success">
<div class="card-body">
<h5>Total Diagnosa</h5>
<h2>{{ $totalDiagnosa }}</h2>
</div>
</div>
</div>
<!-- PENYAKIT -->
<div class="col-md-3 mb-3">
<div class="card shadow-sm text-white bg-warning">
<div class="card-body">
<h5>Total Penyakit</h5>
<h2>{{ $totalPenyakit }}</h2>
<h5>Total Deteksi Dini</h5>
<h2>{{ $totalDiagnosa }}</h2>
</div>
</div>
</div>
<!-- GEJALA -->
<div class="col-md-3 mb-3">
<div class="col-md-4 mb-3">
<div class="card shadow-sm text-white bg-danger">
<div class="card-body">
<h5>Total Gejala</h5>
<h2>{{ $totalGejala }}</h2>
</div>
</div>
</div>
</div>
<!-- GRAFIK -->
<div class="card shadow-sm mt-4">
<div class="card-body">
<h5 class="mb-3">Grafik Hasil Diagnosa</h5>
<h5 class="mb-3">
Grafik Hasil Deteksi Dini
</h5>
<canvas id="chartDiagnosa"></canvas>
</div>
</div>
@endsection
@ -61,40 +71,101 @@
@push('scripts')
<!-- CHART JS -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const dataChart = {
labels: [
@foreach($chart as $c)
"{{ $c->penyakit->nama }}",
"{{ $c['label'] }}",
@endforeach
],
datasets: [{
label: 'Jumlah Diagnosa',
label: 'Jumlah Deteksi Dini',
data: [
@foreach($chart as $c)
{{ $c->total }},
{{ $c['total'] }},
@endforeach
],
borderWidth: 1,
backgroundColor: [
'#198754',
'#0d6efd',
'#ffc107',
'#dc3545'
]
}]
};
const config = {
type: 'bar',
data: dataChart,
options: {
responsive: true,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true,
ticks: {
precision: 0
}
}
}
}
};
new Chart(document.getElementById('chartDiagnosa'), config);
new Chart(
document.getElementById('chartDiagnosa'),
config
);
</script>
@endpush

View File

@ -5,45 +5,151 @@
@section('content')
<div class="card shadow-sm">
<div class="card-body">
@if($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('gejala.store') }}" method="POST">
@csrf
<!-- KODE -->
<div class="mb-3">
<label class="form-label">Kode Gejala</label>
<input type="text"
name="kode"
class="form-control"
value="{{ $kode }}"
readonly>
<label class="form-label">
Kode Gejala
</label>
<input
type="text"
name="kode"
class="form-control"
value="{{ $kode }}"
readonly>
</div>
<!-- NAMA -->
<div class="mb-3">
<label class="form-label">Nama Gejala</label>
<input type="text"
name="nama"
class="form-control"
placeholder="Masukkan gejala"
required>
<label class="form-label">
Nama Gejala
</label>
<input
type="text"
name="nama"
class="form-control"
placeholder="Masukkan nama gejala"
value="{{ old('nama') }}"
required>
</div>
<!-- MB -->
<div class="mb-3">
<label class="form-label">
MB (Measure of Belief)
</label>
<input
type="number"
name="mb"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('mb') }}"
placeholder="Contoh : 0.80"
required>
<small class="text-muted">
Nilai MB berada pada rentang 0 sampai 1.
</small>
</div>
<!-- MD -->
<div class="mb-3">
<label class="form-label">
MD (Measure of Disbelief)
</label>
<input
type="number"
name="md"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('md') }}"
placeholder="Contoh : 0.20"
required>
<small class="text-muted">
Nilai MD berada pada rentang 0 sampai 1 dan tidak boleh lebih besar dari MB.
</small>
</div>
<hr>
<!-- BUTTON -->
<div class="mt-3">
<button type="submit" class="btn btn-success">
Simpan
<div class="d-flex justify-content-between">
<a
href="{{ route('gejala.index') }}"
class="btn btn-secondary">
Kembali
</a>
<button
type="submit"
class="btn btn-success">
Simpan Gejala
</button>
<a href="{{ route('gejala.index') }}" class="btn btn-secondary">
Kembali
</a>
</div>
</form>
</div>
</div>
@endsection

View File

@ -5,47 +5,161 @@
@section('content')
<div class="card shadow-sm">
<div class="card-body">
{{-- ALERT ERROR --}}
@if($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{{-- ALERT VALIDASI MB MD --}}
@if(session('error'))
<div class="alert alert-warning">
{{ session('error') }}
</div>
@endif
<form action="{{ route('gejala.update', $gejala->id) }}" method="POST">
@csrf
@method('PUT')
<!-- KODE -->
<div class="mb-3">
<label class="form-label">Kode Gejala</label>
<input type="text"
name="kode"
value="{{ $gejala->kode }}"
class="form-control"
readonly>
<label class="form-label">
Kode Gejala
</label>
<input
type="text"
name="kode"
value="{{ $gejala->kode }}"
class="form-control"
readonly>
</div>
<!-- NAMA -->
<div class="mb-3">
<label class="form-label">Nama Gejala</label>
<input type="text"
name="nama"
value="{{ $gejala->nama }}"
class="form-control"
placeholder="Masukkan gejala"
required>
<label class="form-label">
Nama Gejala
</label>
<input
type="text"
name="nama"
value="{{ old('nama', $gejala->nama) }}"
class="form-control"
placeholder="Masukkan nama gejala"
required>
</div>
<!-- MB -->
<div class="mb-3">
<label class="form-label">
MB (Measure of Belief)
</label>
<input
type="number"
name="mb"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('mb', $gejala->mb) }}"
required>
<small class="text-muted">
Nilai MB berada pada rentang 0 sampai 1.
</small>
</div>
<!-- MD -->
<div class="mb-3">
<label class="form-label">
MD (Measure of Disbelief)
</label>
<input
type="number"
name="md"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('md', $gejala->md) }}"
required>
<small class="text-muted">
Nilai MD tidak boleh lebih besar dari MB.
</small>
</div>
<hr>
<!-- BUTTON -->
<div class="mt-3">
<button type="submit" class="btn btn-success">
Update
<div class="d-flex justify-content-between">
<a href="{{ route('gejala.index') }}"
class="btn btn-secondary">
Kembali
</a>
<button
type="submit"
class="btn btn-success">
Update Gejala
</button>
<a href="{{ route('gejala.index') }}" class="btn btn-secondary">
Kembali
</a>
</div>
</form>
</div>
</div>
@endsection

View File

@ -35,7 +35,6 @@ class="form-control form-control-sm"
<!-- PER PAGE -->
<form method="GET">
<!-- AGAR SEARCH TETAP ADA -->
<input type="hidden"
name="search"
value="{{ request('search') }}">
@ -59,9 +58,13 @@ class="form-select form-select-sm">
<!-- ALERT -->
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<!-- TABLE -->
@ -70,12 +73,25 @@ class="form-select form-select-sm">
<table class="table table-bordered table-hover align-middle">
<thead class="table-light">
<tr>
<th width="70">No</th>
<th width="120">Kode</th>
<th>Nama</th>
<th width="60">No</th>
<th width="100">Kode</th>
<th>Nama Gejala</th>
<th width="90">MB</th>
<th width="90">MD</th>
<th width="100">CF Pakar</th>
<th width="180">Aksi</th>
</tr>
</thead>
<tbody>
@ -85,18 +101,52 @@ class="form-select form-select-sm">
<tr>
<td>
{{ $loop->iteration + ($gejalas->currentPage() - 1) * $gejalas->perPage() }}
</td>
<td>{{ $g->kode }}</td>
<td>
<td>{{ $g->nama }}</td>
{{ $g->kode }}
</td>
<td>
{{ $g->nama }}
</td>
<td class="text-center">
{{ number_format($g->mb, 2) }}
</td>
<td class="text-center">
{{ number_format($g->md, 2) }}
</td>
<td class="text-center">
<span class="badge bg-primary">
{{ number_format($g->mb - $g->md, 2) }}
</span>
</td>
<td>
<a href="{{ route('gejala.edit', $g->id) }}"
class="btn btn-warning btn-sm">
Edit
Edit
</a>
<form action="{{ route('gejala.destroy', $g->id) }}"
@ -108,7 +158,9 @@ class="btn btn-warning btn-sm">
<button class="btn btn-danger btn-sm"
onclick="return confirm('Yakin ingin menghapus data ini?')">
Hapus
</button>
</form>
@ -120,15 +172,21 @@ class="btn btn-warning btn-sm">
@empty
<tr>
<td colspan="4" class="text-center text-muted">
<td colspan="7" class="text-center text-muted">
@if(request('search'))
Data gejala tidak ditemukan
@else
Belum ada data gejala
@endif
</td>
</tr>
@endforelse
@ -141,7 +199,9 @@ class="btn btn-warning btn-sm">
<!-- PAGINATION -->
<div class="mt-3">
{{ $gejalas->links('pagination::bootstrap-5') }}
</div>
</div>

View File

@ -1,39 +1,95 @@
@extends('layouts.admin')
@section('title', 'Hasil Diagnosa')
@section('title', 'Hasil Deteksi Dini')
@section('content')
<div class="card shadow">
<div class="card-body">
<h4 class="mb-3">Hasil Diagnosa</h4>
<h4 class="mb-3">Hasil Analisis Sistem</h4>
<p><b>Nama:</b> {{ $diagnosa->pasien->nama }}</p>
<p><b>Penyakit:</b> {{ $diagnosa->penyakit->nama }}</p>
<p><b>Nilai CF:</b> {{ number_format($diagnosa->cf_hasil * 100, 2) }}%</p>
<p>
<strong>Nama</strong><br>
{{ $diagnosa->pasien->nama }}
</p>
<p>
<strong>Rekomendasi Pemeriksaan</strong><br>
{{ $diagnosa->rekomendasi }}
</p>
<p>
<strong>Hasil Deteksi Dini</strong><br>
{{ $diagnosa->penyakit->nama }}
</p>
<p>
<strong>Tingkat Keyakinan</strong><br>
{{ number_format($diagnosa->cf_hasil * 100, 2) }}%
</p>
<hr>
<h5>Deskripsi</h5>
<p>{!! $diagnosa->penyakit->deskripsi !!}</p>
<div class="alert alert-info">
<h5>Solusi</h5>
<p>{!! $diagnosa->penyakit->solusi !!}</p>
<h5><b>Kesimpulan</b></h5>
<h5>Risiko Komplikasi</h5>
<p>{!! $diagnosa->penyakit->komplikasi ?? '-' !!}</p>
<p align="justify" class="mb-0">
Berdasarkan gejala yang dipilih dan hasil perhitungan menggunakan
metode <strong>Certainty Factor (CF)</strong>, sistem memberikan
rekomendasi berupa
<strong>{{ $diagnosa->rekomendasi }}</strong>
dengan tingkat keyakinan sebesar
<strong>{{ number_format($diagnosa->cf_hasil * 100, 2) }}%</strong>.
Hasil ini merupakan rekomendasi awal untuk membantu menentukan
perlunya pemeriksaan tekanan darah berdasarkan kombinasi gejala
yang dipilih. Sistem tidak digunakan untuk menegakkan diagnosis
hipertensi, melainkan sebagai sistem pendukung keputusan dalam
memberikan rekomendasi pemeriksaan.
</p>
</div>
<h5><b>Deskripsi</b></h5>
<p align="justify">
Hasil deteksi dini diperoleh berdasarkan kombinasi gejala yang dipilih
oleh pengguna dan dihitung menggunakan metode
<strong>Certainty Factor (CF)</strong>. Nilai Certainty Factor
menunjukkan tingkat keyakinan sistem terhadap perlunya dilakukan
pemeriksaan hipertensi berdasarkan gejala yang dialami. Semakin tinggi
nilai Certainty Factor, semakin tinggi pula rekomendasi untuk melakukan
pemeriksaan lebih lanjut oleh tenaga kesehatan.
</p>
<h5><b>Upaya Pencegahan</b></h5>
{!! $diagnosa->upaya_pencegahan !!}
<h5 class="mt-4"><b>Risiko Komplikasi</b></h5>
<p align="justify">
{!! $diagnosa->risiko_komplikasi !!}
</p>
<hr>
<a href="{{ route('diagnosa.pdf', $diagnosa->id) }}"
class="btn btn-success">
Download PDF
<a href="{{ route('diagnosa.pdf', $diagnosa->id) }}"
class="btn btn-success">
Download PDF
</a>
<a href="{{ route('admin.riwayat') }}"
class="btn btn-secondary">
Kembali
<a href="{{ route('admin.riwayat') }}"
class="btn btn-secondary">
Kembali
</a>
</div>

View File

@ -1,10 +1,9 @@
@extends('layouts.admin')
@section('title', 'Riwayat')
@section('title', 'Riwayat Deteksi Dini')
@section('content')
<!-- CARD -->
<div class="card shadow-sm border-0 rounded-4">
<div class="card-body">
@ -13,8 +12,9 @@
<div class="d-flex justify-content-between align-items-center mb-4 flex-wrap gap-2">
<div>
<h4 class="fw-bold mb-1">Tabel Riwayat Diagnosa</h4>
<h4 class="fw-bold mb-1">
Tabel Riwayat Deteksi Dini
</h4>
</div>
<div class="d-flex gap-2 flex-wrap">
@ -25,7 +25,7 @@
<input type="text"
name="search"
class="form-control form-control-sm"
placeholder="Cari pasien / penyakit..."
placeholder="Cari pasien..."
value="{{ request('search') }}">
<button class="btn btn-primary btn-sm ms-2">
@ -64,56 +64,116 @@ class="form-select form-select-sm">
<table class="table table-bordered align-middle table-hover">
<thead class="table-light">
<tr>
<th width="5%">No</th>
<th>Nama</th>
<th>Penyakit</th>
<th>CF (%)</th>
<th>Rekomendasi Pemeriksaan</th>
<th>Hasil Deteksi Dini</th>
<th>Keyakinan</th>
<th>Tanggal</th>
<th width="20%">Aksi</th>
</tr>
</thead>
<tbody>
@forelse($data as $d)
@forelse($data as $d)
@php
switch ($d->rekomendasi) {
case 'Lakukan Pemantauan Mandiri':
$badge = 'success';
break;
case 'Lakukan Pemeriksaan Tekanan Darah':
$badge = 'warning';
break;
case 'Konsultasikan dengan Tenaga Kesehatan':
$badge = 'danger';
break;
case 'Segera ke Fasilitas Pelayanan Kesehatan':
$badge = 'dark';
break;
default:
$badge = 'secondary';
}
@endphp
<tr>
<td>
{{ $loop->iteration + ($data->currentPage() - 1) * $data->perPage() }}
{{ $loop->iteration + ($data->currentPage()-1) * $data->perPage() }}
</td>
<td class="fw-semibold">
{{ $d->pasien->nama ?? '-' }}
</td>
<td>
{{ $d->penyakit->nama }}
</td>
<td>
<span class="badge bg-success px-3 py-2">
{{ number_format($d->cf_hasil * 100, 2) }}%
<span class="badge bg-{{ $badge }} px-3 py-2">
{{ $d->rekomendasi }}
</span>
</td>
<td>
{{ $d->penyakit->nama }}
</td>
<td>
{{ number_format($d->cf_hasil*100,2) }}%
</td>
<td>
{{ $d->created_at->format('d-m-Y') }}
</td>
<td>
<div class="d-flex gap-2 flex-wrap">
<a href="{{ route('diagnosa.hasil', $d->id) }}"
<a href="{{ route('diagnosa.hasil',$d->id) }}"
class="btn btn-info btn-sm text-white">
Preview
</a>
<a href="{{ route('diagnosa.pdf', $d->id) }}"
<a href="{{ route('diagnosa.pdf',$d->id) }}"
class="btn btn-success btn-sm">
Download PDF
PDF
</a>
</div>
@ -122,25 +182,31 @@ class="btn btn-success btn-sm">
</tr>
@empty
@empty
<tr>
<td colspan="6" class="text-center py-4">
<td colspan="7" class="text-center py-4">
<div class="alert alert-info mb-0">
@if(request('search'))
Data tidak ditemukan
Data tidak ditemukan.
@else
Belum ada data riwayat
Belum ada riwayat deteksi dini.
@endif
</div>
</td>
</tr>
@endforelse
@endforelse
</tbody>
@ -148,12 +214,13 @@ class="btn btn-success btn-sm">
</div>
<!-- PAGINATION -->
<div>
{{ $data->links('pagination::bootstrap-5') }}
</div>
<!-- PAGINATION -->
</div>
<div>
{{ $data->links('pagination::bootstrap-5') }}
</div>
</div>

View File

@ -1,97 +1,197 @@
@extends('layouts.admin')
@section('title', 'Tambah Rule CF')
@section('title', 'Tambah Rule Certainty Factor')
@section('content')
<div class="container">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<b>Form Tambah Rule CF</b>
<b>Form Tambah Rule Certainty Factor</b>
</div>
<div class="card-body">
{{-- ALERT ERROR --}}
@if($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{{-- ALERT LOGIKA CF --}}
@if(session('error'))
<div class="alert alert-warning">
{{ session('error') }}
</div>
@endif
<form action="{{ route('rule.store') }}" method="POST">
@csrf
{{-- HIPOTESIS --}}
<div class="mb-3">
<label class="form-label">
Hipotesis
</label>
<input
type="text"
class="form-control"
value="H01 - Deteksi Dini Perlunya Pemeriksaan Hipertensi"
readonly>
<small class="text-muted">
Seluruh rule pada sistem ini mengarah pada Hipotesis H01.
</small>
</div>
{{-- GEJALA --}}
<div class="mb-3">
<label class="form-label">Gejala</label>
<select name="gejala_id" class="form-control">
<option value="">-- Pilih Gejala --</option>
@foreach($gejalas as $g)
<option value="{{ $g->id }}">
{{ $g->kode }} - {{ $g->nama }}
</option>
@endforeach
</select>
</div>
{{-- PENYAKIT --}}
<div class="mb-3">
<label class="form-label">Penyakit</label>
<select name="penyakit_id" class="form-control">
<option value="">-- Pilih Penyakit --</option>
@foreach($penyakits as $p)
<option value="{{ $p->id }}">
{{ $p->kode }} - {{ $p->nama }}
<label class="form-label">
Gejala
</label>
<select
name="gejala_id"
class="form-control"
required>
<option value="">
-- Pilih Gejala --
</option>
@foreach($gejalas as $g)
<option
value="{{ $g->id }}"
{{ old('gejala_id') == $g->id ? 'selected' : '' }}>
{{ $g->kode }} - {{ $g->nama }}
</option>
@endforeach
</select>
</div>
{{-- MB --}}
<div class="mb-3">
<label class="form-label">MB (Measure of Belief)</label>
<input type="number" step="0.01" name="mb"
class="form-control"
placeholder="Contoh: 0.8 (nilai 0 - 1)"
value="{{ old('mb') }}">
<label class="form-label">
MB (Measure of Belief)
</label>
<input
type="number"
name="mb"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('mb') }}"
placeholder="Contoh : 0.80"
required>
<small class="text-muted">
Nilai MB berada pada rentang 0 sampai 1.
</small>
</div>
{{-- MD --}}
<div class="mb-3">
<label class="form-label">MD (Measure of Disbelief)</label>
<input type="number" step="0.01" name="md"
class="form-control"
placeholder="Contoh: 0.2 (nilai 0 - 1)"
value="{{ old('md') }}">
<label class="form-label">
MD (Measure of Disbelief)
</label>
<input
type="number"
name="md"
class="form-control"
step="0.01"
min="0"
max="1"
value="{{ old('md') }}"
placeholder="Contoh : 0.20"
required>
<small class="text-muted">
Nilai MD berada pada rentang 0 sampai 1.
</small>
</div>
<hr>
{{-- BUTTON --}}
<div class="d-flex justify-content-between">
<a href="{{ route('rule.index') }}" class="btn btn-secondary">
<a
href="{{ route('rule.index') }}"
class="btn btn-secondary">
Kembali
</a>
<button class="btn btn-success">
<button
type="submit"
class="btn btn-success">
Simpan Rule
</button>
</div>
</form>
</div>
</div>
</div>

View File

@ -1,6 +1,6 @@
@extends('layouts.admin')
@section('title', 'Data Rule CF')
@section('title', 'Data Rule Certainty Factor')
@section('content')
@ -23,7 +23,7 @@
<input type="text"
name="search"
class="form-control form-control-sm"
placeholder="Cari gejala / penyakit..."
placeholder="Cari gejala..."
value="{{ request('search') }}">
<button class="btn btn-primary btn-sm ms-2">
@ -35,7 +35,6 @@ class="form-control form-control-sm"
<!-- PER PAGE -->
<form method="GET">
<!-- AGAR SEARCH TETAP ADA -->
<input type="hidden"
name="search"
value="{{ request('search') }}">
@ -44,10 +43,21 @@ class="form-control form-control-sm"
onchange="this.form.submit()"
class="form-select form-select-sm">
<option value="5" {{ $perPage == 5 ? 'selected' : '' }}>5</option>
<option value="10" {{ $perPage == 10 ? 'selected' : '' }}>10</option>
<option value="25" {{ $perPage == 25 ? 'selected' : '' }}>25</option>
<option value="50" {{ $perPage == 50 ? 'selected' : '' }}>50</option>
<option value="5" {{ $perPage == 5 ? 'selected' : '' }}>
5
</option>
<option value="10" {{ $perPage == 10 ? 'selected' : '' }}>
10
</option>
<option value="25" {{ $perPage == 25 ? 'selected' : '' }}>
25
</option>
<option value="50" {{ $perPage == 50 ? 'selected' : '' }}>
50
</option>
</select>
@ -59,9 +69,13 @@ class="form-select form-select-sm">
<!-- ALERT -->
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<!-- TABLE -->
@ -70,15 +84,23 @@ class="form-select form-select-sm">
<table class="table table-bordered table-hover align-middle">
<thead class="table-light">
<tr>
<th width="70">No</th>
<th>Gejala</th>
<th>Penyakit</th>
<th width="90">MB</th>
<th width="90">MD</th>
<th width="90">CF</th>
<th width="100">CF Pakar</th>
<th width="180">Aksi</th>
</tr>
</thead>
<tbody>
@ -88,26 +110,46 @@ class="form-select form-select-sm">
<tr>
<td>
{{ $loop->iteration + ($rules->currentPage() - 1) * $rules->perPage() }}
</td>
<td>{{ $r->gejala->nama }}</td>
<td>
<td>{{ $r->penyakit->nama }}</td>
{{ $r->gejala->nama }}
<td>{{ $r->mb }}</td>
<td>{{ $r->md }}</td>
</td>
<td>
<b>{{ $r->cf }}</b>
{{ number_format($r->mb,2) }}
</td>
<td>
{{ number_format($r->md,2) }}
</td>
<td>
<strong>
{{ number_format($r->cf,2) }}
</strong>
</td>
<td>
<a href="{{ route('rule.edit', $r->id) }}"
class="btn btn-warning btn-sm">
Edit
Edit
</a>
<form action="{{ route('rule.destroy', $r->id) }}"
@ -119,7 +161,9 @@ class="btn btn-warning btn-sm">
<button class="btn btn-danger btn-sm"
onclick="return confirm('Yakin ingin menghapus data ini?')">
Hapus
</button>
</form>
@ -131,15 +175,21 @@ class="btn btn-warning btn-sm">
@empty
<tr>
<td colspan="7" class="text-center text-muted">
<td colspan="6" class="text-center text-muted">
@if(request('search'))
Data rule tidak ditemukan
@else
Belum ada data rule
@endif
</td>
</tr>
@endforelse
@ -152,7 +202,9 @@ class="btn btn-warning btn-sm">
<!-- PAGINATION -->
<div class="mt-3">
{{ $rules->links('pagination::bootstrap-5') }}
</div>
</div>

View File

@ -235,12 +235,14 @@ class="nav-link {{ request()->is('admin/penyakit*') ? 'active' : '' }}">
</a>
</li>
{{--
<li class="nav-item">
<a href="{{ url('/admin/rule') }}"
class="nav-link {{ request()->is('admin/rule*') ? 'active' : '' }}">
<i class="fa fa-project-diagram me-2"></i> Rule CF
<a href="{{ url('/admin/rule') }}"
class="nav-link {{ request()->is('admin/rule*') ? 'active' : '' }}">
<i class="fa fa-project-diagram me-2"></i> Rule CF
</a>
</li>
--}}
<li class="nav-item">
<a href="{{ url('/admin/edukasi') }}"
@ -321,8 +323,9 @@ class="nav-link text-danger border-0 bg-transparent text-start w-100">
<h2>Selamat Datang</h2>
<p>
Sistem pakar membantu diagnosa penyakit berdasarkan gejala
dengan metode Certainty Factor
Sistem pakar membantu melakukan deteksi dini perlunya
pemeriksaan hipertensi berdasarkan gejala yang dialami
menggunakan metode Certainty Factor.
</p>
</div>

View File

@ -1,58 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<title>Surat Rujukan</title>
<title>Surat Rujukan Pemeriksaan Hipertensi</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 12px;
line-height: 1.5;
body{
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
line-height:1.5;
color:#000;
}
.center {
text-align: center;
.center{
text-align:center;
}
.right {
text-align: right;
.right{
text-align:right;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 15px;
table{
width:100%;
border-collapse:collapse;
margin-bottom:15px;
}
th, td {
padding: 8px;
vertical-align: top;
th,
td{
padding:7px;
vertical-align:top;
}
.bordered,
.bordered td,
.bordered th {
border: 1px solid black;
.bordered th,
.bordered td{
border:1px solid #000;
}
.section-title{
margin-top:20px;
margin-bottom:10px;
margin-top:15px;
margin-bottom:8px;
font-weight:bold;
}
.note{
font-size:11px;
font-style:italic;
}
</style>
</head>
<body>
<!-- ================= HEADER ================= -->
<div class="center">
<h2>SURAT HASIL DIAGNOSA</h2>
<h2>SURAT RUJUKAN PEMERIKSAAN HIPERTENSI</h2>
<p>
Sistem Pakar Deteksi Dini Penyakit Hipertensi
Sistem Pakar Deteksi Dini Perlunya Pemeriksaan Hipertensi
<br>
Menggunakan Metode Certainty Factor (CF)
</p>
</div>
@ -60,79 +78,159 @@
<hr>
<p class="right">
Tanggal : {{ now()->format('d-m-Y') }}
Tanggal :
{{ now()->format('d-m-Y') }}
</p>
<!-- ================= DATA PASIEN ================= -->
<h4 class="section-title">Data Pasien</h4>
<h4 class="section-title">
Data Pasien
</h4>
<table>
<tr>
<td width="30%">Nama</td>
<td>: {{ $diagnosa->pasien->nama }}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>: {{ $diagnosa->pasien->jenis_kelamin }}</td>
</tr>
<tr>
<td>Tempat Lahir</td>
<td>: {{ $diagnosa->pasien->tempat_lahir }}</td>
</tr>
<tr>
<td>Tanggal Lahir</td>
<td>: {{ $diagnosa->pasien->tanggal_lahir }}</td>
</tr>
<tr>
<td>Umur</td>
<td>
:
{{ $diagnosa->pasien->nama }}
</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>
:
{{ $diagnosa->pasien->jenis_kelamin }}
</td>
</tr>
<tr>
<td>Tempat Lahir</td>
<td>
:
{{ $diagnosa->pasien->tempat_lahir }}
</td>
</tr>
<tr>
<td>Tanggal Lahir</td>
<td>
:
{{ $diagnosa->pasien->tanggal_lahir }}
</td>
</tr>
<tr>
<td>Umur</td>
<td>
:
{{ \Carbon\Carbon::parse($diagnosa->pasien->tanggal_lahir)->age }}
Tahun
</td>
</tr>
<tr>
<td>Alamat</td>
<td>: {{ $diagnosa->pasien->alamat }}</td>
<td>
:
{{ $diagnosa->pasien->alamat }}
</td>
</tr>
<tr>
<td>No HP</td>
<td>: {{ $diagnosa->pasien->no_telp }}</td>
<td>No. HP</td>
<td>
:
{{ $diagnosa->pasien->no_telp }}
</td>
</tr>
</table>
<!-- ================= GEJALA ================= -->
<h4 class="section-title">Gejala yang Dipilih</h4>
<h4 class="section-title">
Gejala yang Dipilih
</h4>
<table class="bordered">
<tr>
<th width="5%">No</th>
<th width="8%">No</th>
<th>Gejala</th>
<th width="30%">Tingkat Keyakinan</th>
<th width="30%">
Frekuensi Gejala
</th>
</tr>
@foreach($gejalas as $g)
<tr>
<td>{{ $loop->iteration }}</td>
<td align="center">
<td>{{ $g->nama }}</td>
{{ $loop->iteration }}
</td>
<td>
{{ $g->keterangan_cf }}
{{ $g->nama }}
({{ $g->cf_user }})
</td>
<td align="center">
{{ $g->keterangan_cf }}
</td>
@ -142,71 +240,142 @@
</table>
<!-- ================= HASIL ================= -->
<h4 class="section-title">Hasil Analisis Sistem</h4>
<table>
<h4 class="section-title">
Hasil Analisis Sistem
</h4>
<table class="bordered">
<tr>
<td width="30%">Indikasi Penyakit</td>
<td>: {{ $diagnosa->penyakit->nama }}</td>
</tr>
<tr>
<td>Tingkat Keyakinan</td>
<td width="35%">
Hasil Deteksi Dini
</td>
<td>
:
{{ number_format($diagnosa->cf_hasil * 100, 2) }}%
{{ $diagnosa->penyakit->nama }}
</td>
</tr>
</table>
<!-- ================= PENUTUP ================= -->
<br>
<p align="justify">
Berdasarkan hasil analisis menggunakan metode
<b>Certainty Factor</b>,
sistem mendeteksi bahwa pasien memiliki indikasi
penyakit seperti yang tercantum di atas dengan tingkat
keyakinan sesuai hasil perhitungan sistem.
</p>
<p align="justify">
Hasil diagnosa ini bukan pengganti diagnosis medis,
namun dapat digunakan sebagai langkah awal untuk
deteksi dini penyakit.
Pasien disarankan melakukan pemeriksaan lebih lanjut
ke fasilitas kesehatan seperti
<b>Puskesmas</b>,
<b>Klinik</b>,
atau
<b>Rumah Sakit</b>
untuk mendapatkan penanganan yang lebih akurat.
</p>
<br><br>
<!-- ================= TTD ================= -->
<table width="100%">
<tr>
<td width="60%"></td>
<td>
<td class="center">
Rekomendasi Pemeriksaan
</td>
<td>
{{ $diagnosa->rekomendasi }}
</td>
</tr>
<tr>
<td>
Metode Perhitungan
</td>
<td>
Certainty Factor (CF)
</td>
</tr>
<tr>
<td>
Tingkat Keyakinan
</td>
<td>
{{ number_format($diagnosa->cf_hasil * 100, 2) }}%
</td>
</tr>
</table>
<!-- ================= KESIMPULAN ================= -->
<h4 class="section-title">
Kesimpulan
</h4>
<p align="justify">
Berdasarkan gejala yang dipilih oleh pengguna dan hasil
perhitungan menggunakan metode
<b>Certainty Factor (CF)</b>,
sistem memberikan hasil deteksi dini berupa
<b>{{ $diagnosa->penyakit->nama }}</b>
dengan rekomendasi
<b>{{ $diagnosa->rekomendasi }}</b>
serta tingkat keyakinan sebesar
<b>{{ number_format($diagnosa->cf_hasil * 100, 2) }}%</b>.
</p>
<p align="justify">
Berdasarkan hasil tersebut, pengguna disarankan untuk
melakukan pemeriksaan lebih lanjut di fasilitas pelayanan
kesehatan seperti <b>Puskesmas</b>,
<b>Klinik</b>, atau
<b>Rumah Sakit</b> sesuai dengan rekomendasi yang diberikan
oleh sistem.
</p>
<p align="justify">
Dokumen ini dapat digunakan sebagai hasil skrining awal
untuk membantu tenaga kesehatan mengetahui gejala yang
dialami pengguna sebelum dilakukan pemeriksaan lebih lanjut.
</p>
<hr>
<!-- ================= CATATAN ================= -->
<p class="note" align="justify">
<b>Catatan:</b>
Hasil yang tercantum pada dokumen ini merupakan hasil
<b>deteksi dini</b> menggunakan metode
<b>Certainty Factor (CF)</b> berdasarkan gejala yang dipilih
oleh pengguna. Dokumen ini <b>bukan merupakan diagnosis medis</b>
dan tidak dapat digunakan sebagai pengganti pemeriksaan,
diagnosis, maupun keputusan klinis oleh dokter atau tenaga
kesehatan. Penegakan diagnosis hipertensi tetap harus
dilakukan melalui anamnesis, pemeriksaan fisik, pengukuran
tekanan darah, dan pemeriksaan penunjang sesuai kebutuhan.
</p>
</body>
</html>

View File

@ -4,109 +4,284 @@
@section('content')
<!-- HERO -->
<!-- ================= HERO ================= -->
<div class="card-hero mb-4">
<h2>Selamat Datang, {{ auth()->user()->name }} </h2>
<h2>
Selamat Datang,
{{ auth()->user()->name }}
</h2>
<p>
Pantau riwayat diagnosa dan lakukan pemeriksaan kesehatan secara mandiri.
Pantau riwayat deteksi dini hipertensi dan
lakukan pemeriksaan sesuai rekomendasi yang
diberikan oleh sistem.
</p>
<a href="{{ url('/user/diagnosa') }}" class="btn btn-light mt-2">
Mulai Diagnosa
<a href="{{ url('/user/diagnosa') }}"
class="btn btn-light mt-2">
Mulai Deteksi Dini
</a>
</div>
<!-- STATISTIK -->
<!-- ================= STATISTIK ================= -->
<div class="row mb-4">
<div class="col-md-4">
<div class="card p-3">
<h6>Total Diagnosa</h6>
<h3>{{ $totalDiagnosa }}</h3>
</div>
</div>
<!-- Total -->
<div class="col-md-4">
<div class="card p-3">
<h6>Diagnosa Terakhir</h6>
<h5>
<div class="card shadow-sm p-3 h-100">
<h6 class="text-muted">
Total Deteksi Dini
</h6>
<h3>
{{ $totalDiagnosa }}
</h3>
</div>
</div>
<!-- Rekomendasi -->
<div class="col-md-4">
<div class="card shadow-sm p-3 h-100">
<h6 class="text-muted">
Rekomendasi Terakhir
</h6>
<h6>
{{ $lastDiagnosa->rekomendasi ?? '-' }}
</h6>
</div>
</div>
<!-- Hasil -->
<div class="col-md-4">
<div class="card shadow-sm p-3 h-100">
<h6 class="text-muted">
Hasil Deteksi Dini
</h6>
<h6>
{{ $lastDiagnosa->penyakit->nama ?? '-' }}
</h5>
</div>
</div>
<div class="col-md-4">
<div class="card p-3">
<h6>Nilai CF</h6>
<h5>
{{ isset($lastDiagnosa) ? number_format($lastDiagnosa->cf_hasil,2) : '-' }}
</h5>
</h6>
</div>
</div>
</div>
<!-- ================= RIWAYAT ================= -->
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0">Riwayat Diagnosa</h5>
<h5 class="mb-0">
Riwayat Deteksi Dini
</h5>
<form method="GET">
<select name="perPage" onchange="this.form.submit()" class="form-select form-select-sm">
<option value="5" {{ $perPage == 5 ? 'selected' : '' }}>5</option>
<option value="10" {{ $perPage == 10 ? 'selected' : '' }}>10</option>
<option value="25" {{ $perPage == 25 ? 'selected' : '' }}>25</option>
<option value="50" {{ $perPage == 50 ? 'selected' : '' }}>50</option>
<select
name="perPage"
onchange="this.form.submit()"
class="form-select form-select-sm">
<option value="5"
{{ $perPage == 5 ? 'selected' : '' }}>
5
</option>
<option value="10"
{{ $perPage == 10 ? 'selected' : '' }}>
10
</option>
<option value="25"
{{ $perPage == 25 ? 'selected' : '' }}>
25
</option>
<option value="50"
{{ $perPage == 50 ? 'selected' : '' }}>
50
</option>
</select>
</form>
</div>
<!-- ================= TABEL RIWAYAT ================= -->
<!-- RIWAYAT TERAKHIR -->
<div class="card p-3">
<div class="card shadow-sm p-3">
<div class="table-responsive">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th>No</th>
<th>Tanggal</th>
<th>Penyakit</th>
<th>CF</th>
<th width="8%">No</th>
<th width="18%">Tanggal</th>
<th>Rekomendasi Pemeriksaan</th>
<th>Hasil Deteksi Dini</th>
<th width="15%">Keyakinan</th>
</tr>
</thead>
<tbody>
@forelse($riwayat as $r)
@forelse($riwayat as $r)
@php
switch ($r->rekomendasi) {
case 'Lakukan Pemantauan Mandiri':
$badge = 'success';
break;
case 'Lakukan Pemeriksaan Tekanan Darah':
$badge = 'warning';
break;
case 'Konsultasikan dengan Tenaga Kesehatan':
$badge = 'danger';
break;
case 'Segera ke Fasilitas Pelayanan Kesehatan':
$badge = 'dark';
break;
default:
$badge = 'secondary';
}
@endphp
<tr>
<td>{{ $loop->iteration + ($riwayat->currentPage() - 1) * $riwayat->perPage() }}</td>
<td>{{ $r->created_at->format('d-m-Y') }}</td>
<td>{{ $r->penyakit->nama ?? '-' }}</td>
<td>{{ number_format($r->cf_hasil, 2) }}</td>
</tr>
@empty
<tr>
<td colspan="5" class="text-center text-muted">
Belum ada riwayat diagnosa
<td>
{{ $loop->iteration + ($riwayat->currentPage()-1) * $riwayat->perPage() }}
</td>
<td>
{{ $r->created_at->format('d-m-Y') }}
</td>
<td>
<span class="badge bg-{{ $badge }}">
{{ $r->rekomendasi }}
</span>
</td>
<td>
{{ $r->penyakit->nama }}
</td>
<td>
{{ number_format($r->cf_hasil*100,2) }}%
</td>
</tr>
@endforelse
@empty
<tr>
<td colspan="5"
class="text-center text-muted">
Belum ada riwayat deteksi dini.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
<!-- PAGINATION -->
<!-- ================= PAGINATION ================= -->
<div class="mt-3">
{{ $riwayat->links() }}
</div>
</div>
<a href="{{ url('/user/riwayat') }}" class="btn btn-primary btn-sm mt-2">
Lihat Semua Riwayat
</a>
<div class="mt-3">
<a href="{{ url('/user/riwayat') }}"
class="btn btn-primary">
Lihat Seluruh Riwayat
</a>
</div>
@endsection

View File

@ -66,27 +66,19 @@ class="form-select">
</option>
<option value="0">
Tidak
</option>
<option value="0.2">
Tidak Yakin
Tidak Pernah
</option>
<option value="0.4">
Sedikit Yakin
Kadang-Kadang
</option>
<option value="0.6">
Cukup Yakin
</option>
<option value="0.8">
Yakin
<option value="0.7">
Sering
</option>
<option value="1">
Sangat Yakin
Sangat Sering
</option>
</select>

View File

@ -1,40 +1,99 @@
@extends('layouts.user')
@section('title', 'Hasil Diagnosa')
@section('title', 'Hasil Deteksi Dini')
@section('content')
<div class="card shadow">
<div class="card-body">
<h4 class="mb-3">Hasil Diagnosa</h4>
<h4 class="mb-3">Hasil Deteksi Dini</h4>
<p><b>Nama:</b> {{ $diagnosa->pasien->nama }}</p>
<p><b>Penyakit:</b> {{ $diagnosa->penyakit->nama }}</p>
<p><b>Nilai CF:</b> {{ number_format($diagnosa->cf_hasil * 100, 2) }}%</p>
<p>
<strong>Nama</strong><br>
{{ $diagnosa->pasien->nama }}
</p>
<p>
<strong>Rekomendasi Pemeriksaan</strong><br>
{{ $diagnosa->rekomendasi }}
</p>
<p>
<strong>Hasil Deteksi Dini</strong><br>
{{ $diagnosa->penyakit->nama }}
</p>
<p>
<strong>Tingkat Keyakinan</strong><br>
{{ number_format($diagnosa->cf_hasil * 100, 2) }}%
</p>
<hr>
<h5>Deskripsi</h5>
<p>{!! $diagnosa->penyakit->deskripsi !!}</p>
<div class="alert alert-info">
<h5>Solusi</h5>
<p>{!! $diagnosa->penyakit->solusi !!}</p>
<h5><b>Kesimpulan</b></h5>
<h5>Risiko Komplikasi</h5>
<p>{!! $diagnosa->penyakit->komplikasi ?? '-' !!}</p>
<p align="justify" class="mb-0">
Berdasarkan gejala yang dipilih dan hasil perhitungan menggunakan metode
<strong>Certainty Factor (CF)</strong>,
sistem memberikan rekomendasi berupa
<strong>{{ $diagnosa->rekomendasi }}</strong>
dengan tingkat keyakinan sebesar
<strong>{{ number_format($diagnosa->cf_hasil * 100, 2) }}%</strong>.
Hasil tersebut merupakan rekomendasi awal yang dapat digunakan sebagai
bahan pertimbangan dalam menentukan perlunya melakukan pemeriksaan
tekanan darah maupun konsultasi dengan tenaga kesehatan.
Sistem ini <strong>bukan digunakan untuk menegakkan diagnosis hipertensi</strong>,
melainkan sebagai sistem pendukung keputusan dalam memberikan
rekomendasi pemeriksaan berdasarkan kombinasi gejala yang dipilih
oleh pengguna.
</p>
</div>
<h5><b>Deskripsi</b></h5>
<p align="justify">
Hasil deteksi dini diperoleh berdasarkan kombinasi gejala yang dipilih
oleh pengguna dan dihitung menggunakan metode
<strong>Certainty Factor (CF)</strong>.
Nilai Certainty Factor menunjukkan tingkat keyakinan sistem terhadap
perlunya dilakukan pemeriksaan hipertensi berdasarkan gejala yang dialami.
Semakin tinggi nilai Certainty Factor yang diperoleh, maka semakin tinggi
pula rekomendasi sistem untuk melakukan pemeriksaan lebih lanjut oleh
tenaga kesehatan.
</p>
<h5><b>Upaya Pencegahan</b></h5>
{!! $diagnosa->upaya_pencegahan !!}
<h5 class="mt-4"><b>Risiko Komplikasi</b></h5>
<p align="justify">
{!! $diagnosa->risiko_komplikasi !!}
</p>
<hr>
<!-- TOMBOL -->
<a href="{{ route('diagnosa.pdf', $diagnosa->id) }}"
class="btn btn-success">
Download PDF
<a href="{{ route('diagnosa.pdf', $diagnosa->id) }}"
class="btn btn-success">
Download PDF
</a>
<a href="{{ route('user.riwayat') }}"
class="btn btn-secondary">
Kembali
<a href="{{ route('user.riwayat') }}"
class="btn btn-secondary">
Kembali
</a>
</div>

View File

@ -1,64 +1,181 @@
@extends('layouts.user')
@section('title', 'Riwayat')
@section('title', 'Riwayat Deteksi Dini')
@section('content')
<div class="d-flex justify-content-between align-items-center mb-3">
<h5>Riwayat Diagnosa</h5>
<h5>Riwayat Deteksi Dini</h5>
<form method="GET">
<select name="perPage" onchange="this.form.submit()" class="form-select form-select-sm w-auto">
<option value="5" {{ $perPage == 5 ? 'selected' : '' }}>5</option>
<option value="10" {{ $perPage == 10 ? 'selected' : '' }}>10</option>
<option value="25" {{ $perPage == 25 ? 'selected' : '' }}>25</option>
<select
name="perPage"
onchange="this.form.submit()"
class="form-select form-select-sm w-auto">
<option value="5" {{ $perPage == 5 ? 'selected' : '' }}>
5
</option>
<option value="10" {{ $perPage == 10 ? 'selected' : '' }}>
10
</option>
<option value="25" {{ $perPage == 25 ? 'selected' : '' }}>
25
</option>
</select>
</form>
</div>
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Nama</th>
<th>Penyakit</th>
<th>CF (%)</th>
<th>Tanggal</th>
<th>Aksi</th>
</tr>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Rekomendasi Pemeriksaan</th>
<th>Hasil Deteksi Dini</th>
<th>Keyakinan</th>
<th>Tanggal</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@forelse($data as $d)
<tr>
<td>{{ $loop->iteration + ($data->currentPage() - 1) * $data->perPage() }}</td>
<td>{{ $d->pasien->nama ?? '-' }}</td>
<td>{{ $d->penyakit->nama }}</td>
<td>{{ number_format($d->cf_hasil * 100, 2) }}%</td>
<td>{{ $d->created_at->format('d-m-Y') }}</td>
<td>
<a href="{{ route('diagnosa.hasil', $d->id) }}"
class="btn btn-info btn-sm">
Preview
</a>
<a href="{{ route('diagnosa.pdf', $d->id) }}"
class="btn btn-success btn-sm">
Download PDF
</a>
</td>
</tr>
@php
switch ($d->rekomendasi) {
case 'Lakukan Pemantauan Mandiri':
$badge = 'success';
break;
case 'Lakukan Pemeriksaan Tekanan Darah':
$badge = 'warning';
break;
case 'Konsultasikan dengan Tenaga Kesehatan':
$badge = 'danger';
break;
case 'Segera ke Fasilitas Pelayanan Kesehatan':
$badge = 'dark';
break;
default:
$badge = 'secondary';
}
@endphp
<tr>
<td>
{{ $loop->iteration + ($data->currentPage()-1) * $data->perPage() }}
</td>
<td>
{{ $d->pasien->nama ?? '-' }}
</td>
<td>
<span class="badge bg-{{ $badge }}">
{{ $d->rekomendasi }}
</span>
</td>
<td>
{{ $d->penyakit->nama }}
</td>
<td>
{{ number_format($d->cf_hasil*100,2) }}%
</td>
<td>
{{ $d->created_at->format('d-m-Y') }}
</td>
<td>
<a href="{{ route('diagnosa.hasil',$d->id) }}"
class="btn btn-info btn-sm">
Preview
</a>
<a href="{{ route('diagnosa.pdf',$d->id) }}"
class="btn btn-success btn-sm">
PDF
</a>
</td>
</tr>
@empty
<tr>
<td colspan="5">
<div class="alert alert-info mb-0 text-center">
Anda belum melakukan diagnosa, silakan lakukan diagnosa pada menu Diagnosis!
</div>
</td>
</tr>
<tr>
<td colspan="7">
<div class="alert alert-info mb-0 text-center">
Anda belum pernah melakukan deteksi dini hipertensi.
</div>
</td>
</tr>
@endforelse
</tbody>
</table>
<div class="mt-3">
{{ $data->links('pagination::bootstrap-5') }}
</div>
@endsection