This commit is contained in:
Sveemaaa 2026-04-01 15:19:03 +07:00
parent 2a0f07848a
commit c931be9006
6 changed files with 28 additions and 30 deletions

View File

@ -39,35 +39,37 @@ public function store(Request $request)
{ {
$request->validate([ $request->validate([
'balita_id' => 'required', 'balita_id' => 'required',
'tanggal' => 'required', 'tanggal' => 'required|date',
'usia' => 'required', 'usia' => 'required|numeric',
'jenis_kelamin' => 'required', 'jenis_kelamin' => 'required', // Pastikan valuenya 1 atau 0
'berat_badan' => 'required', 'berat_badan' => 'required|numeric',
'tinggi_badan' => 'required', 'tinggi_badan' => 'required|numeric',
'lingkar_kepala' => 'required', 'lingkar_kepala' => 'required|numeric', // Ini dikirim sebagai LiLA ke Flask
]); ]);
try { try {
$response = Http::post('http://127.0.0.1:5000/predict', [ // Request ke API Flask
$response = Http::timeout(10)->post('http://127.0.0.1:5000/predict', [
'JK' => (int) $request->jenis_kelamin, 'JK' => (int) $request->jenis_kelamin,
'Usia' => (int) $request->usia, 'Usia' => (int) $request->usia,
'Berat' => (float) $request->berat_badan, 'Berat' => (float) $request->berat_badan,
'Tinggi' => (float) $request->tinggi_badan, 'Tinggi' => (float) $request->tinggi_badan,
'LiLA' => (float) $request->lingkar_kepala, 'LiLA' => (float) $request->lingkar_kepala, // Mapping ke input LiLA di ML
]); ]);
if ($response->successful()) { if ($response->successful()) {
$hasilML = $response->json(); $hasilML = $response->json();
// Mapping yang konsisten dengan standar WHO & Kemenkes
$mapHasil = [ $mapHasil = [
0 => 'Stunting', 0 => 'Sangat Pendek',
1 => 'Risiko Stunting', 1 => 'Pendek',
2 => 'Normal' 2 => 'Normal'
]; ];
$teksHasil = $mapHasil[$hasilML['Status_Stunting']] ?? 'Normal'; $teksHasil = $mapHasil[$hasilML['Status_Stunting']] ?? 'Normal';
// 1. Simpan Pengukuran (Cukup Sekali Saja) // 1. Simpan Pengukuran
$pengukuran = PengukuranBalita::create([ $pengukuran = PengukuranBalita::create([
'balita_id' => $request->balita_id, 'balita_id' => $request->balita_id,
'user_id' => auth()->id() ?? 1, 'user_id' => auth()->id() ?? 1,
@ -81,10 +83,10 @@ public function store(Request $request)
'bmi' => $request->berat_badan / (($request->tinggi_badan/100) ** 2), 'bmi' => $request->berat_badan / (($request->tinggi_badan/100) ** 2),
]); ]);
// 2. Ambil Template Edukasi // 2. Ambil Template Edukasi & Simpan
// Gunakan where kategori yang sama dengan $teksHasil
$templates = Edukasi::where('kategori', $teksHasil)->get(); $templates = Edukasi::where('kategori', $teksHasil)->get();
// 3. Simpan ke tabel Edukasi2
foreach ($templates as $item) { foreach ($templates as $item) {
Edukasi2::create([ Edukasi2::create([
'balita_id' => $request->balita_id, 'balita_id' => $request->balita_id,
@ -95,14 +97,13 @@ public function store(Request $request)
]); ]);
} }
return redirect()->route('pengukuran_balita.index')->with('success', 'Berhasil menyimpan data dan edukasi!'); return redirect()->route('pengukuran_balita.index')->with('success', "Hasil: $teksHasil. Data dan edukasi berhasil disimpan!");
} }
// Jika API Flask error return back()->withErrors(['api' => 'Gagal terhubung ke server prediksi.'])->withInput();
dd("Flask Error: " . $response->body());
} catch (\Exception $e) { } catch (\Exception $e) {
dd("Laravel Error: " . $e->getMessage()); return back()->withErrors(['error' => 'Terjadi kesalahan: ' . $e->getMessage()])->withInput();
} }
} }

View File

@ -16,8 +16,8 @@ public function up(): void
$table->string('judul', 100); $table->string('judul', 100);
$table->text('konten'); $table->text('konten');
$table->enum('kategori', [ $table->enum('kategori', [
'Resiko stunting', 'Sangat Pendek',
'Stunting', 'Pendek',
'Normal', 'Normal',
'Ibu hamil gizi kurang', 'Ibu hamil gizi kurang',
'Ibu hamil gizi normal', 'Ibu hamil gizi normal',

View File

@ -32,15 +32,13 @@ public function up(): void
$table->string('judul', 100); $table->string('judul', 100);
$table->text('konten'); $table->text('konten');
$table->enum('kategori', [ $table->enum('kategori', [
'Resiko tinggi stunting', 'Sangat Pendek',
'Stunting', 'Pendek',
'Normal', 'Normal',
'Resiko gizi lebih',
'Ibu hamil gizi kurang', 'Ibu hamil gizi kurang',
'Ibu hamil gizi normal', 'Ibu hamil gizi normal',
'Ibu hamil gizi lebih', 'Ibu hamil gizi lebih',
'Ibu hamil obesitas', 'Ibu hamil obesitas',
'Ibu hamil risiko kek'
])->nullable(); ])->nullable();
$table->timestamps(); $table->timestamps();

View File

@ -13,7 +13,7 @@ class DatabaseSeeder extends Seeder
public function run(): void public function run(): void
{ {
\App\Models\User::create([ \App\Models\User::create([
'name' => 'Administrator PosSehat', 'nama' => 'Administrator PosSehat',
'email' => 'admin@gmail.com', 'email' => 'admin@gmail.com',
'password' => \Illuminate\Support\Facades\Hash::make('admin123'), // Password khusus admin 'password' => \Illuminate\Support\Facades\Hash::make('admin123'), // Password khusus admin
'role' => 'admin', 'role' => 'admin',

View File

@ -25,10 +25,9 @@
<div class="col-sm-10"> <div class="col-sm-10">
<select name="kategori" class="form-control" required> <select name="kategori" class="form-control" required>
<option value="">-- Pilih Kategori --</option> <option value="">-- Pilih Kategori --</option>
<option value="Resiko Tinggi Stunting">Resiko Stunting Rendah</option> <option value="Sangat Pendek">Sangat Pendek</option>
<option value="Stunting">Stunting</option> <option value="Pendek">Pendek</option>
<option value="Normal">Normal</option> <option value="Normal">Normal</option>
<option value="Resiko Gizi Lebih">Resiko Gizi Lebih</option>
<option value="ibu hamil gizi kurang">Ibu Hamil Gizi Kurang</option> <option value="ibu hamil gizi kurang">Ibu Hamil Gizi Kurang</option>
<option value="ibu hamil gizi normal">Ibu Hamil Gizi Normal</option> <option value="ibu hamil gizi normal">Ibu Hamil Gizi Normal</option>

View File

@ -35,9 +35,9 @@
<div class="info-box"> <div class="info-box">
<span class="text-bold">Panduan Rentang Z-Score (TB/U):</span><br> <span class="text-bold">Panduan Rentang Z-Score (TB/U):</span><br>
Z-Score adalah nilai standar WHO untuk mengukur tinggi badan anak dibanding anak seusianya:<br> Z-Score adalah nilai standar WHO untuk mengukur tinggi badan anak dibanding anak seusianya:<br>
<span class="text-bold">Normal:</span> Berada di antara -2 SD sampai +3 SD.<br> <span class="text-bold">Normal:</span> -2 SD sampai +3 SD (Tinggi badan sesuai usia).<br>
<span class="text-bold">Risiko Stunting:</span> Berada di bawah -2 SD (Kategori Pendek).<br> <span class="text-bold">Pendek (Stunted):</span> -3 SD sampai < -2 SD.<br>
<span class="text-bold">Stunting:</span> Berada di bawah -3 SD (Kategori Sangat Pendek). <span class="text-bold">Sangat Pendek (Severely Stunted):</span> Di bawah -3 SD.
</div> </div>
<table class="table"> <table class="table">