451 lines
14 KiB
PHP
451 lines
14 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="id">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Laporan Rekomendasi</title>
|
|
|
|
<style>
|
|
body {
|
|
font-family: Arial, sans-serif;
|
|
color: #222;
|
|
font-size: 12px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
margin: auto;
|
|
}
|
|
|
|
.header {
|
|
text-align: center;
|
|
border-bottom: 2px solid #222;
|
|
padding-bottom: 12px;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.header h2 {
|
|
margin: 0;
|
|
font-size: 20px;
|
|
}
|
|
|
|
.header p {
|
|
margin: 4px 0 0;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.section {
|
|
margin-bottom: 18px;
|
|
}
|
|
|
|
.section-title {
|
|
font-weight: bold;
|
|
font-size: 14px;
|
|
margin-bottom: 8px;
|
|
border-bottom: 1px solid #ccc;
|
|
padding-bottom: 4px;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
.info-table td {
|
|
padding: 4px 6px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.info-table td:first-child {
|
|
width: 190px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.ranking-table th,
|
|
.ranking-table td {
|
|
border: 1px solid #999;
|
|
padding: 5px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.ranking-table th {
|
|
background: #f0f0f0;
|
|
text-align: center;
|
|
font-weight: bold;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.ranking-table td {
|
|
font-size: 10.5px;
|
|
}
|
|
|
|
.text-center {
|
|
text-align: center;
|
|
}
|
|
|
|
.recommendation {
|
|
border: 1px solid #aaa;
|
|
padding: 12px;
|
|
background: #f8f8f8;
|
|
}
|
|
|
|
.small {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.badge {
|
|
display: inline-block;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
background: #f0f0f0;
|
|
font-size: 10px;
|
|
}
|
|
|
|
@media print {
|
|
.no-print {
|
|
display: none;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
@php
|
|
$hasil = json_decode($laporan->hasil_json, true) ?? [];
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| DATA SNAPSHOT LAPORAN
|
|
|--------------------------------------------------------------------------
|
|
| Data utama diambil dari tabel laporan, bukan dari tabel pasien aktif.
|
|
| Tujuannya agar laporan lama tidak ikut berubah ketika data pasien diedit.
|
|
*/
|
|
$aktivitas_laporan = $laporan->aktivitas_harian ?? '-';
|
|
$bb = $laporan->berat_badan ?? 0;
|
|
$tb = $laporan->tinggi_badan ?? 0;
|
|
$umur = $laporan->umur ?? 0;
|
|
$jenis_kelamin = $laporan->jenis_kelamin ?? '-';
|
|
|
|
$kebutuhan_kalori = $laporan->kebutuhan_kalori ?? 0;
|
|
|
|
if ($kebutuhan_kalori <= 0 && $bb > 0 && $tb > 0 && $umur > 0) {
|
|
|
|
if ($jenis_kelamin == 'Laki-laki') {
|
|
$bmr = 66 + (13.7 * $bb) + (5 * $tb) - (6.8 * $umur);
|
|
} else {
|
|
$bmr = 655 + (9.6 * $bb) + (1.8 * $tb) - (4.7 * $umur);
|
|
}
|
|
|
|
$faktor = match(strtolower($aktivitas_laporan)) {
|
|
'ringan' => 1.2,
|
|
'sedang' => 1.55,
|
|
'berat' => 1.9,
|
|
default => 1.2
|
|
};
|
|
|
|
$kebutuhan_kalori = round($bmr * $faktor);
|
|
}
|
|
|
|
$jumlah_porsi = $laporan->jumlah_porsi ?? 1;
|
|
|
|
if (empty($jumlah_porsi) || $jumlah_porsi < 1) {
|
|
$jumlah_porsi = 1;
|
|
}
|
|
|
|
$ukuran_porsi = $laporan->ukuran_porsi ?? null;
|
|
|
|
if (empty($ukuran_porsi)) {
|
|
if ($bb >= 90) {
|
|
$ukuran_porsi = 'Mangkuk Besar';
|
|
} elseif ($bb >= 70) {
|
|
$ukuran_porsi = 'Mangkuk Sedang';
|
|
} else {
|
|
$ukuran_porsi = 'Mangkuk Kecil';
|
|
}
|
|
}
|
|
|
|
$frekuensi_makan = $laporan->frekuensi_makan ?? null;
|
|
|
|
if (empty($frekuensi_makan)) {
|
|
$frekuensi_makan = match(strtolower($aktivitas_laporan)) {
|
|
'berat' => '3x makan utama + 3x snack',
|
|
'sedang' => '3x makan utama + 2-3x snack',
|
|
default => '3x makan utama + 2x snack'
|
|
};
|
|
}
|
|
|
|
$top = $hasil[0] ?? null;
|
|
|
|
$penjelasan = '-';
|
|
|
|
if ($top) {
|
|
$aktivitas = strtolower($aktivitas_laporan ?? 'ringan');
|
|
$gejala = strtolower($laporan->gejala ?? '');
|
|
|
|
if (str_contains($gejala, 'mual')) {
|
|
|
|
$penjelasan = "Menu makanan {$top['nama_makanan']} direkomendasikan karena memiliki tekstur yang lembut dan lebih mudah diterima oleh lambung. Makanan ini dapat membantu pasien tetap makan dengan nyaman tanpa memperberat rasa mual. ";
|
|
|
|
if ($aktivitas == 'berat') {
|
|
$penjelasan .= "Menu ini juga membantu memenuhi kebutuhan energi pasien yang memiliki aktivitas harian berat. ";
|
|
} elseif ($aktivitas == 'sedang') {
|
|
$penjelasan .= "Menu ini juga cukup membantu memenuhi kebutuhan energi pasien dengan aktivitas harian sedang. ";
|
|
} else {
|
|
$penjelasan .= "Menu ini juga sesuai untuk kebutuhan energi pasien dengan aktivitas harian ringan. ";
|
|
}
|
|
|
|
} elseif (str_contains($gejala, 'nyeri lambung')) {
|
|
|
|
$penjelasan = "Menu makanan {$top['nama_makanan']} direkomendasikan karena lebih ramah untuk lambung, mudah dicerna, dan tidak terlalu membebani kerja lambung. Makanan ini dapat membantu pasien tetap mendapatkan asupan makanan yang sesuai saat mengalami nyeri lambung. ";
|
|
|
|
if ($aktivitas == 'berat') {
|
|
$penjelasan .= "Menu ini juga disesuaikan dengan kebutuhan energi pasien yang memiliki aktivitas harian berat. ";
|
|
} elseif ($aktivitas == 'sedang') {
|
|
$penjelasan .= "Menu ini juga disesuaikan dengan kebutuhan energi pasien yang memiliki aktivitas harian sedang. ";
|
|
} else {
|
|
$penjelasan .= "Menu ini juga disesuaikan dengan kebutuhan energi pasien yang memiliki aktivitas harian ringan. ";
|
|
}
|
|
|
|
} else {
|
|
$penjelasan = "Menu makanan {$top['nama_makanan']} direkomendasikan karena sesuai dengan kondisi pasien, kebutuhan energi harian, dan kandungan nutrisi makanan. ";
|
|
}
|
|
}
|
|
|
|
$namaAdmin = auth()->user()->username ?? '-';
|
|
@endphp
|
|
|
|
<div class="container">
|
|
|
|
<div class="header">
|
|
<h2>Laporan Rekomendasi Makanan Sehat Penderita Gastritis</h2>
|
|
<p>Metode Simple Additive Weighting (SAW)</p>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-title">Data Laporan</div>
|
|
|
|
<table class="info-table">
|
|
<tr>
|
|
<td>ID Laporan</td>
|
|
<td>: #{{ $laporan->id }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Waktu</td>
|
|
<td>: {{ $laporan->created_at->format('d M Y') }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Nama Petugas</td>
|
|
<td>: {{ $namaAdmin }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Nama Pasien</td>
|
|
<td>: {{ $laporan->nama_pasien }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Jenis Kelamin</td>
|
|
<td>: {{ $jenis_kelamin }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Umur</td>
|
|
<td>: {{ $umur }} tahun</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tinggi Pasien</td>
|
|
<td>: {{ $tb }} cm</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Berat Pasien</td>
|
|
<td>: {{ $bb }} kg</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Gejala Pasien</td>
|
|
<td>: {{ ucwords(str_replace(',', ', ', $laporan->gejala)) }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Aktivitas Pasien</td>
|
|
<td>: {{ ucwords($aktivitas_laporan) }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Kebutuhan Kalori Harian</td>
|
|
<td>: {{ number_format($kebutuhan_kalori) }} kkal / hari</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rekomendasi Jumlah Porsi</td>
|
|
<td>: {{ $jumlah_porsi }} porsi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Ukuran Porsi</td>
|
|
<td>: {{ $ukuran_porsi }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Frekuensi Makan</td>
|
|
<td>: {{ $frekuensi_makan }}</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
@if($top)
|
|
<div class="section">
|
|
<div class="section-title">Rekomendasi Terbaik</div>
|
|
|
|
<div class="recommendation">
|
|
<table class="info-table">
|
|
<tr>
|
|
<td>Nama Makanan</td>
|
|
<td>: {{ $top['nama_makanan'] ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Nilai SAW</td>
|
|
<td>: {{ number_format($top['skor'] ?? 0, 4) }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tekstur</td>
|
|
<td>: {{ ucfirst($top['tekstur'] ?? '-') }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Porsi Saji Awal</td>
|
|
<td>: {{ $top['porsi_saji'] ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rekomendasi Porsi</td>
|
|
<td>: {{ $jumlah_porsi }} porsi, ukuran {{ $ukuran_porsi }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Cara Pengolahan</td>
|
|
<td>: {{ $top['cara_pengolahan'] ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Komposisi Makanan</td>
|
|
<td>: {{ $top['komposisi_makanan'] ?? '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Alternatif Serupa</td>
|
|
<td>: {{ $top['alternatif_serupa'] ?? '-' }}</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-title">Penjelasan Rekomendasi</div>
|
|
|
|
<p>{{ $penjelasan }}</p>
|
|
|
|
<p>
|
|
Pasien dianjurkan mengonsumsi {{ $jumlah_porsi }} porsi
|
|
dengan ukuran {{ $ukuran_porsi }} pada setiap makan utama.
|
|
Porsi ini disesuaikan agar pasien tetap mendapatkan asupan makanan yang cukup,
|
|
tetapi tidak makan terlalu banyak dalam satu waktu.
|
|
</p>
|
|
|
|
<p>
|
|
Selain itu, pasien dianjurkan makan secara teratur sebanyak
|
|
{{ $frekuensi_makan }} agar lambung tidak kosong terlalu lama
|
|
dan kebutuhan energi harian tetap terpenuhi.
|
|
|
|
Snack yang dimaksud adalah makanan ringan yang aman untuk lambung,
|
|
seperti makanan yang tidak pedas, tidak asam, tidak berminyak,
|
|
dan mudah dicerna.
|
|
</p>
|
|
</div>
|
|
@endif
|
|
|
|
<div class="section">
|
|
<div class="section-title">10 Ranking Alternatif Makanan</div>
|
|
|
|
<table class="ranking-table">
|
|
<thead>
|
|
<tr>
|
|
<th width="4%">Rank</th>
|
|
<th width="14%">Nama Makanan</th>
|
|
<th>Protein</th>
|
|
<th>Lemak</th>
|
|
<th>Karbo</th>
|
|
<th>Serat</th>
|
|
<th>Kalori</th>
|
|
<th>Tekstur</th>
|
|
<th>Porsi Awal</th>
|
|
<th>Rek. Porsi</th>
|
|
<th>Ukuran</th>
|
|
<th>Pengolahan</th>
|
|
<th>Skor</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
@foreach(array_slice($hasil, 0, 10) as $index => $item)
|
|
<tr>
|
|
<td class="text-center">{{ $index + 1 }}</td>
|
|
<td>{{ $item['nama_makanan'] ?? '-' }}</td>
|
|
<td class="text-center">{{ number_format($item['protein'] ?? 0, 1) }} g</td>
|
|
<td class="text-center">{{ number_format($item['lemak'] ?? 0, 1) }} g</td>
|
|
<td class="text-center">{{ number_format($item['karbohidrat'] ?? 0, 1) }} g</td>
|
|
<td class="text-center">{{ number_format($item['serat'] ?? 0, 1) }} g</td>
|
|
<td class="text-center">{{ number_format($item['kalori'] ?? 0, 0) }} kkal</td>
|
|
<td class="text-center">{{ ucfirst($item['tekstur'] ?? '-') }}</td>
|
|
<td>{{ $item['porsi_saji'] ?? '-' }}</td>
|
|
<td class="text-center">
|
|
{{ $item['jumlah_porsi'] ?? $jumlah_porsi }} porsi
|
|
</td>
|
|
<td>
|
|
{{ $item['ukuran_porsi'] ?? $ukuran_porsi }}
|
|
</td>
|
|
<td>{{ $item['cara_pengolahan'] ?? '-' }}</td>
|
|
<td class="text-center">{{ number_format($item['skor'] ?? 0, 4) }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<div class="section-title">Komposisi dan Alternatif Makanan</div>
|
|
|
|
<table class="ranking-table">
|
|
<thead>
|
|
<tr>
|
|
<th width="4%">Rank</th>
|
|
<th width="22%">Nama Makanan</th>
|
|
<th>Komposisi Makanan</th>
|
|
<th>Alternatif Serupa</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
@foreach(array_slice($hasil, 0, 10) as $index => $item)
|
|
<tr>
|
|
<td class="text-center">{{ $index + 1 }}</td>
|
|
<td>{{ $item['nama_makanan'] ?? '-' }}</td>
|
|
<td>{{ $item['komposisi_makanan'] ?? '-' }}</td>
|
|
<td>{{ $item['alternatif_serupa'] ?? '-' }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="section small">
|
|
<p>
|
|
Catatan: Laporan ini dihasilkan berdasarkan proses perhitungan metode Simple Additive Weighting (SAW)
|
|
dengan mempertimbangkan gejala gastritis, kandungan nutrisi makanan, tekstur makanan, aktivitas pasien,
|
|
kebutuhan energi harian, jumlah porsi, ukuran porsi, serta pola makan yang dianjurkan.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="no-print" style="margin-top: 20px;">
|
|
<button onclick="window.print()">Cetak</button>
|
|
<button onclick="window.close()">Tutup</button>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
window.print();
|
|
</script>
|
|
|
|
</body>
|
|
</html> |