@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

Laporan Rekomendasi Makanan Sehat Penderita Gastritis

Metode Simple Additive Weighting (SAW)

Data Laporan
ID Laporan : #{{ $laporan->id }}
Waktu : {{ $laporan->created_at->format('d M Y') }}
Nama Petugas : {{ $namaAdmin }}
Nama Pasien : {{ $laporan->nama_pasien }}
Jenis Kelamin : {{ $jenis_kelamin }}
Umur : {{ $umur }} tahun
Tinggi Pasien : {{ $tb }} cm
Berat Pasien : {{ $bb }} kg
Gejala Pasien : {{ ucwords(str_replace(',', ', ', $laporan->gejala)) }}
Aktivitas Pasien : {{ ucwords($aktivitas_laporan) }}
Kebutuhan Kalori Harian : {{ number_format($kebutuhan_kalori) }} kkal / hari
Rekomendasi Jumlah Porsi : {{ $jumlah_porsi }} porsi
Ukuran Porsi : {{ $ukuran_porsi }}
Frekuensi Makan : {{ $frekuensi_makan }}
@if($top)
Rekomendasi Terbaik
Nama Makanan : {{ $top['nama_makanan'] ?? '-' }}
Nilai SAW : {{ number_format($top['skor'] ?? 0, 4) }}
Tekstur : {{ ucfirst($top['tekstur'] ?? '-') }}
Porsi Saji Awal : {{ $top['porsi_saji'] ?? '-' }}
Rekomendasi Porsi : {{ $jumlah_porsi }} porsi, ukuran {{ $ukuran_porsi }}
Cara Pengolahan : {{ $top['cara_pengolahan'] ?? '-' }}
Komposisi Makanan : {{ $top['komposisi_makanan'] ?? '-' }}
Alternatif Serupa : {{ $top['alternatif_serupa'] ?? '-' }}
Penjelasan Rekomendasi

{{ $penjelasan }}

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.

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.

@endif
10 Ranking Alternatif Makanan
@foreach(array_slice($hasil, 0, 10) as $index => $item) @endforeach
Rank Nama Makanan Protein Lemak Karbo Serat Kalori Tekstur Porsi Awal Rek. Porsi Ukuran Pengolahan Skor
{{ $index + 1 }} {{ $item['nama_makanan'] ?? '-' }} {{ number_format($item['protein'] ?? 0, 1) }} g {{ number_format($item['lemak'] ?? 0, 1) }} g {{ number_format($item['karbohidrat'] ?? 0, 1) }} g {{ number_format($item['serat'] ?? 0, 1) }} g {{ number_format($item['kalori'] ?? 0, 0) }} kkal {{ ucfirst($item['tekstur'] ?? '-') }} {{ $item['porsi_saji'] ?? '-' }} {{ $item['jumlah_porsi'] ?? $jumlah_porsi }} porsi {{ $item['ukuran_porsi'] ?? $ukuran_porsi }} {{ $item['cara_pengolahan'] ?? '-' }} {{ number_format($item['skor'] ?? 0, 4) }}
Komposisi dan Alternatif Makanan
@foreach(array_slice($hasil, 0, 10) as $index => $item) @endforeach
Rank Nama Makanan Komposisi Makanan Alternatif Serupa
{{ $index + 1 }} {{ $item['nama_makanan'] ?? '-' }} {{ $item['komposisi_makanan'] ?? '-' }} {{ $item['alternatif_serupa'] ?? '-' }}

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.