From d8c6ab7b555a48b4ad4424260ebae43ac6e0e6e3 Mon Sep 17 00:00:00 2001 From: Dwi Swandhana Date: Wed, 29 Apr 2026 09:55:00 +0700 Subject: [PATCH] Align target deadlines in early warning and reports --- .../app/Http/Controllers/DokterController.php | 96 +- .../Http/Controllers/FrontpageController.php | 23 +- .../app/Http/Controllers/ListController.php | 3 - .../app/Http/Controllers/ReportController.php | 25 +- .../app/Http/Controllers/UserController.php | 29 +- htdocs/resources/views/admin/gudang.blade.php | 51 +- .../base/partials/header-plain.blade.php | 2 + htdocs/resources/views/dokter/ppds.backup | 6826 ----------------- .../views/penerimaansample.blade.php | 66 +- listener/app.py | 25 + 10 files changed, 237 insertions(+), 6909 deletions(-) delete mode 100644 htdocs/resources/views/dokter/ppds.backup diff --git a/htdocs/app/Http/Controllers/DokterController.php b/htdocs/app/Http/Controllers/DokterController.php index 221d7ce4..faf6cc7d 100644 --- a/htdocs/app/Http/Controllers/DokterController.php +++ b/htdocs/app/Http/Controllers/DokterController.php @@ -35,7 +35,7 @@ use App\RekapAntibiotik; use App\PendaftaranOnListiner; use App\CriticalValueSample; use App\Paslab; - +use App\SIMBHPReport; use Carbon\Carbon; use Aranyasen\HL7\Message; use Aranyasen\HL7\Connection; @@ -1941,6 +1941,40 @@ class DokterController extends Controller 'created_by' => Session('nama'), ]); } + $media = $request->input('komponen') ?? ''; + $status = $request->input('status') ?? ''; + if ($media == 'Media BAP'){ + $mediatanam = 'BAPPLATE'; + } else if ($media == 'Media CAP'){ + $mediatanam = 'CAPPLATE'; + } else if ($media == 'Media Mc Conkey'){ + $mediatanam = 'MCPLATE'; + } else if ($media == 'Media SDA R1' OR $media == 'Media SDA R2' OR $media == 'Media SDA I1' OR $media == 'Media SDA I2'){ + $mediatanam = 'SDAPLATE'; + } else { + $mediatanam = ''; + } + if ($mediatanam != '' AND $status == 'Sub Kultur'){ + $tanggal= date("d-m-Y"); + $ahrf = explode("-", $tanggal); + $tahun = $ahrf[0]; + if(isset($ahrf[1])){ $wulan = (int)$ahrf[1]; } else { $wulan = (int)date("m"); } + if(isset($ahrf[2])){ $dino = (int)$ahrf[2]; } else { $dino = (int)date("d"); } + $datapemeriksaan = Periksa::where('id', $nofoto)->first(); + SIMBHPReport::create([ + 'tanggal' => $dino, + 'bulan' => $wulan, + 'tahun' => $tahun, + 'deskripsi' => $status.' Nomor Lab.'.$datapemeriksaan->nofoto ?? ''.' petugas '.Session('nama'), + 'pemasukan' => null, + 'pengeluaran' => 1, + 'qty_base' => 1, + 'satuan_transaksi' => 'besar', + 'jenis' => $mediatanam, + 'keterangan' => '', + 'marking' => '', + ]); + } Periksa::where('id', $idperiksa)->update([ 'status' => $request->input('komponen') ?? ''.' '.$request->input('status') ?? '', ]); @@ -2664,6 +2698,7 @@ class DokterController extends Controller public function periksa(Request $request) { $nofoto = $request->input('nofoto'); $id = $request->input('id'); + $mediatanams = $request->input('mediatanam'); $nama = Session('nama'); $idpemeriksa = Session('id'); if ($id == 'ubahnomorlab'){ @@ -2714,38 +2749,64 @@ class DokterController extends Controller $statuse = $jpoli->status ?? ''; $noregister = $jpoli->noregister; $daftar = $jpoli->daftar; - $arrnofoto = explode('-', $nofoto); $nofoto = $arrnofoto[0]; if ($statuse == 'Pemeriksaan awal' OR $statuse == 'Penerimaan Sampel'){ - Periksa::where('id', $id)->update([ - 'status' => 'Pemeriksaan Sampel', - 'tgldraft' => date('Y-m-d H:i:s'), - 'excutor' => $idpemeriksa, - 'nmppdsmiddle2' => Session('nama') - ]); - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Status Updated']); - return back(); - } else if ($statuse == 'Pemeriksaan Sampel'){ Periksa::where('id', $id)->update([ 'status' => 'Pemeriksaan awal', 'tgldraft' => date('Y-m-d H:i:s'), 'excutor' => $idpemeriksa, 'nmppdsmiddle2' => Session('nama') ]); - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Status Updated']); - return back(); } else { Periksa::where('id', $id)->whereNull('status')->update([ - 'status' => 'Pemeriksaan awal', - 'tgldraft' => date('Y-m-d H:i:s'), + 'status' => 'Penerimaan Sampel', + 'daftar' => date('Y-m-d H:i:s'), 'mulai' => date('Y-m-d H:i:s'), 'excutor' => $idpemeriksa, 'nmppdsmiddle2' => Session('nama') ]); - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Status Updated']); - return back(); } + if ($mediatanams == null OR $mediatanams == ''){ + + } else { + foreach($mediatanams as $media){ + if ($media == 'Media BAP'){ + $mediatanam = 'BAPPLATE'; + } else if ($media == 'Media CAP'){ + $mediatanam = 'CAPPLATE'; + } else if ($media == 'Media Mc Conkey'){ + $mediatanam = 'MCPLATE'; + } else if ($media == 'Media SDA R1' OR $media == 'Media SDA R2' OR $media == 'Media SDA I1' OR $media == 'Media SDA I2'){ + $mediatanam = 'SDAPLATE'; + } else { + $mediatanam = ''; + } + if ($mediatanam != ''){ + $tanggal= date("Y-m-d"); + $ahrf = explode("-", $tanggal); + $tahun = $ahrf[0]; + if(isset($ahrf[1])){ $wulan = (int)$ahrf[1]; } else { $wulan = (int)date("m"); } + if(isset($ahrf[2])){ $dino = (int)$ahrf[2]; } else { $dino = (int)date("d"); } + $datapemeriksaan = Periksa::where('id', $id)->first(); + SIMBHPReport::create([ + 'tanggal' => $dino, + 'bulan' => $wulan, + 'tahun' => $tahun, + 'deskripsi' => 'Pemeriksaan Awal '.' Nomor Lab.'.$datapemeriksaan->nofoto.' petugas '.Session('nama'), + 'pemasukan' => null, + 'pengeluaran' => 1, + 'qty_base' => 1, + 'satuan_transaksi' => 'besar', + 'jenis' => $mediatanam, + 'keterangan' => '', + 'marking' => '', + ]); + } + } + } + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Success', 'message' => 'Status Updated']); + return back(); } } public function getFoto(Request $request) { @@ -3690,6 +3751,7 @@ class DokterController extends Controller 'status' => 'Penerimaan Sampel', 'nmppdsjunior2' => Session('nama'), 'mulai' => date('Y-m-d H:i:s'), + 'daftar' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d').' 00:00:00', ]); if ($kanan == ''){ diff --git a/htdocs/app/Http/Controllers/FrontpageController.php b/htdocs/app/Http/Controllers/FrontpageController.php index 766b3d75..3b2f5f4e 100644 --- a/htdocs/app/Http/Controllers/FrontpageController.php +++ b/htdocs/app/Http/Controllers/FrontpageController.php @@ -36,6 +36,16 @@ use Carbon\Carbon; class FrontpageController extends Controller { + protected function resolveTargetDays($modaliti2) + { + return (!empty($modaliti2) && is_numeric($modaliti2) && intval($modaliti2) > 0) + ? intval($modaliti2) + : 1; + } + protected function getTargetDeadline(Carbon $startAt, $targetDays) + { + return $startAt->copy()->addDays(intval($targetDays))->endOfDay(); + } protected function buildMikroViewData($master, array $extra = []) { $data = [ @@ -236,16 +246,15 @@ class FrontpageController extends Controller $earlyWarnings = []; foreach ($rawEarlyWarnings as $row) { - $targetDays = 1; - if (!empty($row->modaliti2) && is_numeric($row->modaliti2) && intval($row->modaliti2) > 0) { - $targetDays = intval($row->modaliti2); - } + $targetDays = $this->resolveTargetDays($row->modaliti2); $waktuDaftar = Carbon::parse($row->daftar); - $targetSelesai = $waktuDaftar->copy()->addDays($targetDays); + $targetSelesai = $this->getTargetDeadline($waktuDaftar, $targetDays); $sisaMenit = $now->diffInMinutes($targetSelesai, false); + $batasWarningMenit = $targetDays > 1 ? 1440 : 60; + $isMelewatiTarget = $now->gt($targetSelesai); - if ($sisaMenit <= 60) { + if ($isMelewatiTarget || $sisaMenit <= $batasWarningMenit) { $earlyWarnings[] = [ 'id' => $row->id, 'mikro_master' => $this->resolveMikroMasterFromPoliId($row->poli_id), @@ -260,7 +269,7 @@ class FrontpageController extends Controller 'target_hari' => $targetDays, 'target_selesai' => $targetSelesai->format('Y-m-d H:i:s'), 'sisa_menit' => $sisaMenit, - 'warning_label' => $sisaMenit <= 0 ? 'Melewati Target' : 'Kurang dari 1 Jam' + 'warning_label' => $isMelewatiTarget ? 'Melewati Target' : ($targetDays > 1 ? 'Kurang dari 1 Hari' : 'Kurang dari 1 Jam') ]; } } diff --git a/htdocs/app/Http/Controllers/ListController.php b/htdocs/app/Http/Controllers/ListController.php index 4e781d0c..39236e9e 100644 --- a/htdocs/app/Http/Controllers/ListController.php +++ b/htdocs/app/Http/Controllers/ListController.php @@ -733,9 +733,6 @@ class ListController extends Controller
-
'; }) diff --git a/htdocs/app/Http/Controllers/ReportController.php b/htdocs/app/Http/Controllers/ReportController.php index bf005926..904083e4 100644 --- a/htdocs/app/Http/Controllers/ReportController.php +++ b/htdocs/app/Http/Controllers/ReportController.php @@ -323,6 +323,23 @@ class ReportController extends Controller 'Amphotericin B', 'Flucytosine' ]; + private function resolveTatTargetDays($modaliti2) { + return (!empty($modaliti2) && is_numeric($modaliti2) && intval($modaliti2) > 0) + ? intval($modaliti2) + : 1; + } + private function getTatDeadlineDate($mulai, $targetDays) { + return Carbon::parse($mulai)->addDays(intval($targetDays))->toDateString(); + } + private function getTatElapsedDays($mulai, $verifikasi) { + return Carbon::parse($mulai)->startOfDay()->diffInDays(Carbon::parse($verifikasi)->startOfDay()); + } + private function resolveTatStatus($mulai, $verifikasi, $targetDays) { + $deadlineDate = $this->getTatDeadlineDate($mulai, $targetDays); + return Carbon::parse($verifikasi)->toDateString() <= $deadlineDate + ? 'MEMENUHI TARGET' + : 'TIDAK MEMENUHI TARGET'; + } public function report(Request $request) { $bulan = $request->input('bulan'); $tahun = $request->input('tahun'); @@ -455,15 +472,13 @@ class ReportController extends Controller $p = $poli[$row->poli_id] ?? null; $row->subpoli = $p->subpoli ?? null; - $row->modaliti2 = $p->modaliti2 ?? '1'; + $row->modaliti2 = $this->resolveTatTargetDays($p->modaliti2 ?? '1'); // Hitung status target if (!empty($row->verifikasi)) { - $selisih = Carbon::parse($row->mulai)->diffInDays($row->verifikasi); + $selisih = $this->getTatElapsedDays($row->mulai, $row->verifikasi); $row->selisih_hari = $selisih; - $row->status_target = ($selisih <= intval($row->modaliti2)) - ? "MEMENUHI TARGET" - : "TIDAK MEMENUHI TARGET"; + $row->status_target = $this->resolveTatStatus($row->mulai, $row->verifikasi, $row->modaliti2); } else { $row->selisih_hari = null; $row->status_target = "TIDAK ADA HASIL"; diff --git a/htdocs/app/Http/Controllers/UserController.php b/htdocs/app/Http/Controllers/UserController.php index b9db052a..9909b754 100644 --- a/htdocs/app/Http/Controllers/UserController.php +++ b/htdocs/app/Http/Controllers/UserController.php @@ -19,21 +19,24 @@ class UserController extends Controller if (Session::get('previlage') == ''){ return redirect('/login'); } else { - if ($cekkelompok == 'supervisor' OR $cekkelompok == 'admin' OR $cekkelompok == 'developer'){ - $users = User::all(); + if ($cekkelompok == 'supervisor' OR $cekkelompok == 'developer'){ + $getsetting = Setting::where('id', '1')->first(); + $data = []; + $data['users'] = User::orderBy('nama', 'ASC')->get(); + $data['pacsaddr'] = $getsetting->pacs ?? ''; + $data['zfpaddr'] = $getsetting->zfp ?? ''; + $data['port'] = $getsetting->port ?? ''; + $data['portzfp'] = $getsetting->portzfp ?? ''; + $data['username'] = $getsetting->username ?? ''; + $data['password'] = $getsetting->password ?? ''; + return view('admin.user', $data); } else { - $users = User::where('previlage', $cekkelompok)->get(); + $data = []; + $data['kalimatheader'] = 'Access Denied'; + $data['kalimatbody'] = 'Laman khusus SPV'; + return view('errors.error', $data); } - $getsetting = Setting::where('id', '1')->first(); - $data = []; - $data['users'] = $users; - $data['pacsaddr'] = $getsetting->pacs ?? ''; - $data['zfpaddr'] = $getsetting->zfp ?? ''; - $data['port'] = $getsetting->port ?? ''; - $data['portzfp'] = $getsetting->portzfp ?? ''; - $data['username'] = $getsetting->username ?? ''; - $data['password'] = $getsetting->password ?? ''; - return view('admin.user', $data); + } } public function exSetting(Request $request) { diff --git a/htdocs/resources/views/admin/gudang.blade.php b/htdocs/resources/views/admin/gudang.blade.php index 82e6c07d..f2d68906 100644 --- a/htdocs/resources/views/admin/gudang.blade.php +++ b/htdocs/resources/views/admin/gudang.blade.php @@ -672,15 +672,15 @@ @push('script') -@endpush diff --git a/htdocs/resources/views/penerimaansample.blade.php b/htdocs/resources/views/penerimaansample.blade.php index 851fdd11..44f2cd4b 100644 --- a/htdocs/resources/views/penerimaansample.blade.php +++ b/htdocs/resources/views/penerimaansample.blade.php @@ -104,6 +104,20 @@