Align target deadlines in early warning and reports

This commit is contained in:
Dwi Swandhana
2026-04-29 09:55:00 +07:00
parent bb680d41d3
commit d8c6ab7b55
10 changed files with 237 additions and 6909 deletions
@@ -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 == ''){
@@ -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')
];
}
}
@@ -733,9 +733,6 @@ class ListController extends Controller
<div class="btn-group-vertical mb-2">
<button type="button" class="btn btn-sm btn-outline-primary waves-effect" onClick="btnMarking('.$row->id.')">
<i class="me-50 fa fa-flag"></i>
</button>
<button type="button" class="btn btn-sm btn-outline-danger waves-effect" onClick="btnOpenEditor('.$row->id.')">
<i class="me-50 fa fa-pencil"></i> Khusus Penomoran TB
</button>
</div>';
})
@@ -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";
+16 -13
View File
@@ -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) {