gastrosaw/resources/views/laporan/cetak.blade.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>