diff --git a/htdocs/app/Services/AstmMessageService.php b/htdocs/app/Services/AstmMessageService.php index 1a6a91fd..b0d685f5 100644 --- a/htdocs/app/Services/AstmMessageService.php +++ b/htdocs/app/Services/AstmMessageService.php @@ -657,21 +657,32 @@ class AstmMessageService $lines = preg_split("/\r\n|\n|\r/", $clean); - $final = []; + $messages = []; + $current = []; + foreach ($lines as $line) { - if (!preg_match('/^[A-Z]\|/', $line)) { - if (empty($final)) { - $final[] = $line; - continue; - } - $final[count($final)-1] .= $line; - } else { - $final[] = $line; + + // Ketemu H baru → simpan pesan sebelumnya + if (str_starts_with($line, 'H|') && !empty($current)) { + $messages[] = implode("\n", $current); + $current = []; + } + + $current[] = $line; + + // Akhir pesan + if (str_starts_with($line, 'L|')) { + $messages[] = implode("\n", $current); + $current = []; } } - $lines = $final; - return $lines; + // sisa buffer + if (!empty($current)) { + $messages[] = implode("\n", $current); + } + + return $messages; } protected function reassembleAstmFrames(string $raw): string { @@ -753,17 +764,15 @@ class AstmMessageService elseif (str_starts_with($line, 'R|')) { $f = explode('|', $line); $test = explode('^', $f[2] ?? ''); - $resultDateTime = $this->astmToDateTime($f[9] ?? null); - $updated_date = $this->parseUpdatedDate($f[10] ?? null); + $resultDateTime = $this->astmToDateTime($f[11] ?? null); // Instrument detail di akhir baris preg_match('/(MGIT960|BACTECFX)[^|]*/', $line, $inst); $parsed['result'] = [ - 'organism' => $test[2] ?? null, - 'test_status' => explode('^', $f[3] ?? '')[0], - 'result_status_datetime' => $resultDateTime, - 'updated_datetime' => $updated_date + 'organism' => $test[2] ?? null, + 'test_status' => explode('^', $f[3] ?? '')[0], + 'result_status_datetime' => $this->astmToDateTime($f[11] ?? null), ]; $parsed['instrument'] = [ @@ -819,12 +828,13 @@ class AstmMessageService public function processAstmMessagesLokal($dataListener) { foreach ($dataListener as $data) { try { + // Ambil pesan ASTM dari kolom 'message' atau yang relevan $response = $data->rawdt; if ($data->no_id != ''){ - $messages = $this->splitBDAstmMessages($data->rawdt); + $assembled = $this->reassembleAstmFrames($data->rawdt); + $messages = $this->splitBDAstmMessages($assembled); foreach ($messages as $msg) { - $assembled = $this->reassembleAstmFrames($msg); - $ok = $this->processBDAstmResponse($assembled, $data); + $ok = $this->processBDAstmResponse($msg, $data); } DB::table('lis_phoenix')->where('id', $data->id)->update([ 'processed' => $ok ? 1 : 9 @@ -863,10 +873,10 @@ class AstmMessageService $response = $data->rawdt; if ($data->alat == 'BD Mikro 1'){ if ($data->no_id != ''){ - $messages = $this->splitBDAstmMessages($data->rawdt); + $assembled = $this->reassembleAstmFrames($data->rawdt); + $messages = $this->splitBDAstmMessages($assembled); foreach ($messages as $msg) { - $assembled = $this->reassembleAstmFrames($msg); - $ok = $this->processBDAstmResponse($assembled, $data); + $ok = $this->processBDAstmResponse($msg, $data); } DataListiner::where('urut', $data->urut)->update([ 'processed' => $ok ? 1 : 9