Final
This commit is contained in:
parent
4ec833fb31
commit
fd099f51e7
|
|
@ -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'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
}
|
||||
}
|
||||
|
|
@ -6,5 +6,10 @@
|
|||
|
||||
class Gejala extends Model
|
||||
{
|
||||
protected $fillable = ['kode', 'nama'];
|
||||
}
|
||||
protected $fillable = [
|
||||
'kode',
|
||||
'nama',
|
||||
'mb',
|
||||
'md'
|
||||
];
|
||||
}
|
||||
|
|
@ -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',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -17,4 +17,4 @@
|
|||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/../bootstrap/app.php';
|
||||
|
||||
$app->handleRequest(Request::capture());
|
||||
$app->handleRequest(Request::capture());
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in New Issue