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([
'balita_id' => 'required',
'tanggal' => 'required',
'usia' => 'required',
'jenis_kelamin' => 'required',
'berat_badan' => 'required',
'tinggi_badan' => 'required',
'lingkar_kepala' => 'required',
'tanggal' => 'required|date',
'usia' => 'required|numeric',
'jenis_kelamin' => 'required', // Pastikan valuenya 1 atau 0
'berat_badan' => 'required|numeric',
'tinggi_badan' => 'required|numeric',
'lingkar_kepala' => 'required|numeric', // Ini dikirim sebagai LiLA ke Flask
]);
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,
'Usia' => (int) $request->usia,
'Berat' => (float) $request->berat_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()) {
$hasilML = $response->json();
// Mapping yang konsisten dengan standar WHO & Kemenkes
$mapHasil = [
0 => 'Stunting',
1 => 'Risiko Stunting',
0 => 'Sangat Pendek',
1 => 'Pendek',
2 => 'Normal'
];
$teksHasil = $mapHasil[$hasilML['Status_Stunting']] ?? 'Normal';
// 1. Simpan Pengukuran (Cukup Sekali Saja)
// 1. Simpan Pengukuran
$pengukuran = PengukuranBalita::create([
'balita_id' => $request->balita_id,
'user_id' => auth()->id() ?? 1,
@ -81,10 +83,10 @@ public function store(Request $request)
'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();
// 3. Simpan ke tabel Edukasi2
foreach ($templates as $item) {
Edukasi2::create([
'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
dd("Flask Error: " . $response->body());
return back()->withErrors(['api' => 'Gagal terhubung ke server prediksi.'])->withInput();
} 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->text('konten');
$table->enum('kategori', [
'Resiko stunting',
'Stunting',
'Sangat Pendek',
'Pendek',
'Normal',
'Ibu hamil gizi kurang',
'Ibu hamil gizi normal',

View File

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

View File

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

View File

@ -25,10 +25,9 @@
<div class="col-sm-10">
<select name="kategori" class="form-control" required>
<option value="">-- Pilih Kategori --</option>
<option value="Resiko Tinggi Stunting">Resiko Stunting Rendah</option>
<option value="Stunting">Stunting</option>
<option value="Sangat Pendek">Sangat Pendek</option>
<option value="Pendek">Pendek</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 normal">Ibu Hamil Gizi Normal</option>

View File

@ -35,9 +35,9 @@
<div class="info-box">
<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>
<span class="text-bold">Normal:</span> Berada di antara -2 SD sampai +3 SD.<br>
<span class="text-bold">Risiko Stunting:</span> Berada di bawah -2 SD (Kategori Pendek).<br>
<span class="text-bold">Stunting:</span> Berada di bawah -3 SD (Kategori Sangat Pendek).
<span class="text-bold">Normal:</span> -2 SD sampai +3 SD (Tinggi badan sesuai usia).<br>
<span class="text-bold">Pendek (Stunted):</span> -3 SD sampai < -2 SD.<br>
<span class="text-bold">Sangat Pendek (Severely Stunted):</span> Di bawah -3 SD.
</div>
<table class="table">