From 1cfcc4de316678b7fb0ae86518652a0ba2b50871 Mon Sep 17 00:00:00 2001 From: Duidev Software House Date: Tue, 7 Oct 2025 20:21:16 +0800 Subject: [PATCH] Update --- .../app/Http/Controllers/DokterController.php | 2 +- htdocs/app/Services/AstmMessageService.php | 227 +++++++++--------- 2 files changed, 113 insertions(+), 116 deletions(-) diff --git a/htdocs/app/Http/Controllers/DokterController.php b/htdocs/app/Http/Controllers/DokterController.php index 8820b6d4..3d38514b 100644 --- a/htdocs/app/Http/Controllers/DokterController.php +++ b/htdocs/app/Http/Controllers/DokterController.php @@ -1272,7 +1272,7 @@ class DokterController extends Controller foreach($gentabel as $rtabel){ $isidata .= ' '.$nomor.' - '.$rtabel->resistance.' + '.$rtabel->antibiotic.' '.$rtabel->value.' '.$rtabel->interpretation.' '; diff --git a/htdocs/app/Services/AstmMessageService.php b/htdocs/app/Services/AstmMessageService.php index 23e91739..2faa4926 100644 --- a/htdocs/app/Services/AstmMessageService.php +++ b/htdocs/app/Services/AstmMessageService.php @@ -30,11 +30,11 @@ function processIsolateResult($rawData){ $resultData = explode('|', $rawData); return [ 'test_type' => 'Isolate', - 'isolate_result' => $resultData[3], - 'antibiotic' => $resultData[4], - 'value' => $resultData[5], - 'status' => $resultData[6], - 'completion_time' => $resultData[10] + 'isolate_result' => $resultData[3] ?? null, + 'antibiotic' => $resultData[4] ?? null, + 'value' => $resultData[5] ?? null, + 'status' => $resultData[6] ?? null, + 'completion_time' => $resultData[10] ?? null ]; } // Proses untuk Other Test Result @@ -58,7 +58,7 @@ class AstmMessageService */ private function cleanString($string) { - return preg_replace('/[^\P{C}\n]+/u', '', $string); + return preg_replace('/[^\x20-\x7E|]+/', '', $string); } /** @@ -289,113 +289,110 @@ class AstmMessageService } else { if (!empty($mltrData)){ - Log::info("Trying parser MTRSL :", $mltrData); - $parsedData = []; - $parsedData['antibiotics'] = []; - $antibiotic = ''; - $resistance = ''; - $value = ''; - $interpretation = ''; $mulaikirim = 0; $tanggalmasuk = ''; $tanggalkeluar = ''; - + $parsedData = [ + 'patient_info' => [], + 'antibiotics' => [] + ]; $resultSample = new ResultSample(); - foreach ($mltrData as $index => $field) { - $cekbersih = trim($field, '"'); - if (strpos($cekbersih, 'a1') === 0) { - // Kode dari alat - } - if (strpos($cekbersih, 'a2') === 0) { - $antibiotic = substr($field, 2); // Nama antibiotik - $mulaikirim++; - } - if (strpos($cekbersih, 'a3') === 0) { - $value = substr($field, 2); // Nilai MIC - $mulaikirim++; - } - if (strpos($cekbersih, 'a4') === 0) { - $interpretation = substr($field, 2); // S, I, atau R - $mulaikirim++; - } - if (strpos($cekbersih, 'an') === 0) { - $resistance = substr($field, 2); // Catatan resistansi - $mulaikirim++; - } - if (strpos($cekbersih, 'mt') === 0) { - $resultSample->sender_name = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'ii') === 0) { - $resultSample->version_number = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'rr') === 0) { - $resultSample->isolate_number = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'ci') === 0) { - $accession_number = substr($cekbersih, 2); - $resultSample->accession_number = $accession_number; - } - if (strpos($cekbersih, 'pi') === 0) { - $resultSample->patient_id = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'pn') === 0) { - $patientNames = substr($cekbersih, 2); - $patientNames = explode(',', $patientNames ?? null); - if (count($patientNames) > 0) { - $resultSample->patient_name_first = trim($patientNames[0]); + for ($i = 0; $i < count($mltrData); $i++) { + $field = $mltrData[$i]; + $kodeduadigit = substr($field, 0, 2); + + if ($field == 'ra') { + $current_antibiotic = []; + for ($j = 1; $j <= 5; $j++) { + if (isset($mltrData[$i + $j])) { + $subField = $mltrData[$i + $j]; + $code = substr($subField, 0, 2); + $value = substr($subField, 2); + + switch ($code) { + case 'a1': + $current_antibiotic['instrument_code'] = $value; // Kode dari alat + break; + case 'a2': + $current_antibiotic['antibiotic_name'] = $value; // Nama antibiotik + break; + case 'a3': + $current_antibiotic['value'] = $value; // Nilai MIC + break; + case 'a4': + $current_antibiotic['interpretation'] = $value; // S, I, atau R + break; + case 'an': + $current_antibiotic['resistance_note'] = $value; // Catatan resistansi + break; + } + } } - if (count($patientNames) > 1) { - $resultSample->patient_name_last = trim($patientNames[1]); + $antibioticName = $current_antibiotic['antibiotic_name'] ?? null; + if ($antibioticName && isset($kodevitek[$antibioticName])) { + $current_antibiotic['lis_code'] = $kodevitek[$antibioticName]; + } else { + $current_antibiotic['lis_code'] = $current_antibiotic['instrument_code'] ?? 'NOT_FOUND'; } - if (count($patientNames) > 2) { - $resultSample->patient_name_middle = trim($patientNames[2]); - } - } - - if (strpos($cekbersih, 'pl') === 0) { - $resultSample->hospital_service = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'p2') === 0) { - $resultSample->hospital_client = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'ss') === 0) { - $resultSample->specimen_type = substr($cekbersih, 2); - } - if (strpos($cekbersih, 'o2') === 0) { - $resultSample->organism = substr($cekbersih, 2); - } - if (strpos($cekbersih, 's1') === 0) { - $tanggalmasuk = substr($cekbersih, 2); - } - if (strpos($cekbersih, 's2') === 0) { - $tanggalmasuk = $tanggalmasuk.' '.substr($cekbersih, 2); - } - if (strpos($cekbersih, 's3') === 0) { - $tanggalkeluar = substr($cekbersih, 2); - } - if (strpos($cekbersih, 's4') === 0) { - $tanggalkeluar = $tanggalkeluar.' '.substr($cekbersih, 2); - } - if ($antibiotic != '' AND $resistance != '' AND $value != '' AND $interpretation != '') { - $parsedData['antibiotics'][] = [ - 'antibiotic' => $antibiotic, // Antibiotik - 'resistance' => $resistance, // Hasil Resistansi - 'value' => $value, // Nilai - 'interpretation'=> $interpretation // Interpretasi - ]; - $antibiotic = ''; - $resistance = ''; - $value = ''; - $interpretation = ''; + $parsedData['antibiotics'][] = $current_antibiotic; + $i += 5; } else { - $mulaikirim = 1; + if ($kodeduadigit == 'mt'){ + $resultSample->sender_name = substr($field, 2); + } + if ($kodeduadigit == 'ii'){ + $resultSample->version_number = substr($field, 2); + } + if ($kodeduadigit == 'rr'){ + $resultSample->isolate_number = substr($field, 2); + } + if ($kodeduadigit == 'ci'){ + $accession_number = substr($field, 2); + $resultSample->accession_number = $accession_number; + } + if ($kodeduadigit == 'pi'){ + $resultSample->patient_id = substr($field, 2); + } + if ($kodeduadigit == 'pn'){ + $patientNames = substr($field, 2); + $patientNames = explode(',', $patientNames ?? null); + if (count($patientNames) > 0) { + $resultSample->patient_name_first = trim($patientNames[0]); + } + if (count($patientNames) > 1) { + $resultSample->patient_name_last = trim($patientNames[1]); + } + if (count($patientNames) > 2) { + $resultSample->patient_name_middle = trim($patientNames[2]); + } + } + + if ($kodeduadigit == 'pl'){ + $resultSample->hospital_service = substr($field, 2); + } + if ($kodeduadigit == 'p2'){ + $resultSample->hospital_client = substr($field, 2); + } + if ($kodeduadigit == 'ss'){ + $resultSample->specimen_type = substr($field, 2); + } + if ($kodeduadigit == 'o2'){ + $resultSample->organism = substr($field, 2); + } + if ($kodeduadigit == 's1'){ + $tanggalmasuk = substr($field, 2); + } + if ($kodeduadigit == 's2'){ + $tanggalmasuk = $tanggalmasuk.' '.substr($field, 2); + } + if ($kodeduadigit == 's3'){ + $tanggalkeluar = substr($field, 2); + } + if ($kodeduadigit == 's4'){ + $tanggalkeluar = $tanggalkeluar.' '.substr($field, 2); + } } } - - //$resultSample->specimen_type = $parsedData['specimen_type'] ?? null; // Could be inferred - //$resultSample->test_id = $parsedData['test_id'] ?? null; - - // Result Record $resultSample->additional_result = json_encode($parsedData['antibiotics']); if ($tanggalmasuk != ''){ try { @@ -416,18 +413,18 @@ class AstmMessageService $getorderid = Periksa::where('nofoto', $accession_number)->first(); $orderid = $getorderid->id ?? null; if ($orderid){ + if(is_array($parsedData['antibiotics']) && count($parsedData['antibiotics']) > 0){ + Log::info("Processing", $parsedData['antibiotics']); + RekapAntibiotik::where('orderid', $orderid)->delete(); foreach ($parsedData['antibiotics'] as $item){ - $glassreportname = in_array($item['antibiotic'], $jsonantibiotik); - RekapAntibiotik::updateOrCreate( - [ + $glassreportname = in_array($item['antibiotic_name'], $jsonantibiotik); + RekapAntibiotik::create([ 'orderid' => $orderid, - 'antibiotic' => $item['antibiotic'], - ], - [ - 'resistance' => $item['resistance'], - 'value' => $item['value'], - 'interpretation' => $item['interpretation'], + 'antibiotic' => $item['antibiotic_name'] ?? null, + 'resistance' => $item['resistance_note'] ?? null, + 'value' => $item['value'] ?? null, + 'interpretation' => $item['interpretation'] ?? null, 'glassreportname' => $glassreportname, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), @@ -445,7 +442,7 @@ class AstmMessageService Log::info("Data MTRL Berhasil di Parse dan di simpan ", $resultSample->toArray()); return response()->json(['message' => 'Data berhasil diproses dan disimpan.']); } else { - $headerData = explode("|", $response); + $headerData = explode("|", $astmData); if (isset($headerData[3])){ $accnumber = $headerData[47] ?? null; $noregister = $headerData[16] ?? null; @@ -608,7 +605,7 @@ class AstmMessageService } } else { Log::debug("Abaikan Data Berikut ". json_encode($headerData)); - } + } } } }