Files
lis/htdocs/app/Services/AstmMessageService.php
Duidev Software House 49685c7727 Update
2025-10-04 16:22:29 +07:00

723 lines
36 KiB
PHP

<?php
namespace App\Services;
use Carbon\Carbon;
use App\ResultSample;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Exception;
use App\DataListiner;
use App\Periksa;
use App\RekapAntibiotik;
use App\PendaftaranOnListiner;
// Proses untuk Growth and Detection Result
function processGrowthDetectionResult($rawData){
// Format: R|1| ^ ^ ^GND_MGIT^430100001234|INST_POSITIVE ^87| ...
$resultData = explode('|', $rawData);
return [
'test_type' => 'Growth/Detection',
'accession_number' => $resultData[2],
'status' => $resultData[3], // Positif atau Negatif
'completion_time' => $resultData[7]
];
}
// Proses untuk Isolate Result
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]
];
}
// Proses untuk Other Test Result
function processOtherResult($rawData){
// Format: R|1| ^ ^ ^OTHER^Seq123|Complete| ...
$resultData = explode('|', $rawData);
return [
'test_type' => 'Other',
'sequence_number' => $resultData[3],
'result' => $resultData[4],
'description' => $resultData[5],
'completion_time' => $resultData[6]
];
}
class AstmMessageService
{
/**
* Membersihkan string dari karakter non-printable
*/
private function cleanString($string)
{
return preg_replace('/[^\P{C}\n]+/u', '', $string);
}
/**
* Parsing data berdasarkan format yang diberikan
*/
private function parseResultData($rawData, $format)
{
$resultData = explode('|', $rawData);
$parsedData = [];
foreach ($format as $key => $index) {
$parsedData[$key] = $resultData[$index] ?? null;
}
return $parsedData;
}
/**
* Proses hasil AST Record
*/
public function processAstResult($rawData)
{
$format = [
'test_type' => 0,
'accession_number' => 2,
'antibiotic' => 3,
'susceptibility' => 4,
'value' => 5,
'status' => 6,
'completion_time' => 10
];
return $this->parseResultData($rawData, $format);
}
/**
* Proses hasil ID Record
*/
public function processIdResult($rawData)
{
$format = [
'test_type' => 0,
'accession_number' => 2,
'organism_name' => 3,
'status' => 6,
'completion_time' => 10
];
return $this->parseResultData($rawData, $format);
}
public function createHeader($senderName, $versionNumber)
{
$messageDateTime = Carbon::now()->format('YmdHis');
return "H|{$senderName}|{$versionNumber}|{$messageDateTime}";
}
// Fungsi untuk membuat Patient Record (P)
public function createPatientRecord($patient)
{
// Extract fields from $patient array, adjust field positions based on mapping
return "P|{$patient['id']}|{$patient['last_name']}|{$patient['first_name']}|{$patient['middle_name']}|{$patient['suffix']}|{$patient['dob']}|{$patient['sex']}|{$patient['address']}||{$patient['phone']}|{$patient['admitting_physician']}";
}
// Fungsi untuk membuat Order Record (O)
public function createOrderRecord($order)
{
// Order fields based on mapping (Accession Number, Test ID, etc.)
return "O|{$order['accession_number']}|{$order['isolate_number']}|{$order['organism']}|{$order['exclude_isolate']}|{$order['priority']}|{$order['collection_date_time']}|{$order['collected_by']}|{$order['received_by']}|{$order['specimen_action_code']}|{$order['isolate_source_test']}|{$order['isolate_source_test_start_time']}|{$order['receipt_date_time']}|{$order['specimen_type']}|{$order['body_site']}|{$order['ordering_physician']}|{$order['ordering_physician_phone']}|{$order['ordering_physician_fax']}|{$order['ordering_physician_pager']}|{$order['specimen_user_field_1']}|{$order['specimen_user_field_2']}|{$order['specimen_user_field_3']}|{$order['specimen_user_field_4']}|{$order['specimen_user_field_5']}|{$order['finalized_date_time']}|{$order['specimen_reimbursement_value']}|{$order['test_reimbursement_value']}|{$order['isolate_classification']}"; }
public function createTerminatorRecord($order)
{
// Order fields based on mapping (Accession Number, Test ID, etc.)
return "L|1|N";
}
// Fungsi untuk membuat pesan lengkap (header + patient + order)
public function createMessage($senderName, $versionNumber, $patient, $order)
{
$header = $this->createHeader($senderName, $versionNumber);
$patientRecord = $this->createPatientRecord($patient);
$orderRecord = $this->createOrderRecord($order);
$terimatorRecord= $this->createTerminatorRecord($order);
return implode("\n", [$header, $patientRecord, $orderRecord, $terimatorRecord]);
}
/**
* Proses data ASTM Response
*/
public function processAstmResponse($response, $alat) {
// Bersihkan data
$astmData = $this->cleanString($response);
// Validasi awal: response tidak kosong
if (empty($astmData)) {
Log::error("ASTM data kosong atau tidak valid.");
}
$jsonantibiotik = array(
'Oxacillin-OX',
'Cefoxitin-FOX',
'Benzylpenicillin-P',
'Ampicillin-AM',
'Azithromycin-AZM',
'Erythromycin-ERY',
'Cefazolin-CZO',
'Cefepime-FEP',
'Cefixime-CFM',
'Cefotaxime-CTX',
'Cefuroxime-CXM',
'Ceftazidime-CAZ',
'Ceftriaxone-CRO',
'Ceftazidime/Avibactam-CZA',
'Piperacilin/Tazobactam-TZP',
'Ampicillin/Sulbactam-SAM',
'Amoxicillin/Clavulanate-AMC',
'Cefoperazon/Sulbactam-SCF',
'Aztreonam-ATM',
'Ceftaroline-CPT',
'Ciprofloxacin-CIP',
'Levofloxacin-LEV',
'Moxifloxacin-MFX',
'Clindamycin-CLI',
'Colistin-CS',
'Tetracyclin-TCY',
'Tigecycline-TGC',
'Gentamicin-GM',
'Amikacin-AN',
'Meropenem-MEM',
'Imipenem-IPM',
'Doripenem-DOR',
'Ertapenem-ETP',
'Minocycline-MNO',
'Doxycycline-DOX',
'Spectinomycin-SPT',
'Tigecycline-TGC',
'Trimethoprim/Sulfamethoxazole-SXT',
'Fosfomycin-FOS',
'Vancomycin-VAN',
'Linezolid-LNZ',
'Fluconazole',
'Voriconazole',
'Caspofungin',
'Micafungin',
'Amphotericin B',
'Flucytosine'
);
$headerData = [];
$patientData = [];
$orderData = [];
$resultData = [];
$instrumenDT = [];
$mltrData = [];
$isolate = null;
$accession_number = null;
$segments = explode("\n", $astmData);
foreach ($segments as $rsegmen){
$cekdata = explode('|', $rsegmen);
$datapertama = $cekdata[0];
$cleankode = preg_replace("/[^a-zA-Z]/", "", $datapertama);
if ($cleankode == 'H'){
$headerData = array_merge([$cleankode], array_slice($cekdata, 1));
}
if ($cleankode == 'P'){
$patientData = array_merge([$cleankode], array_slice($cekdata, 1));
}
if ($cleankode == 'O'){
$orderData = array_merge([$cleankode], array_slice($cekdata, 1));
}
if ($cleankode == 'R'){
$resultData = array_merge([$cleankode], array_slice($cekdata, 1));
}
if ($cleankode == 'I'){
$instrumenDT = array_merge([$cleankode], array_slice($cekdata, 1));
}
if ($cleankode == 'mtrsl'){
$mltrData = array_merge([$cleankode], array_slice($cekdata, 1));
}
}
if (!empty($patientData) && !empty($headerData)) {
$resultSample = new ResultSample();
$noregister = $patientData[4] ?? null;
$resultSample->sender_name = $alat;
$resultSample->version_number = $headerData[11] ?? $patientData[12] ?? null;
$resultSample->message_datetime = $resultData[13] ?? null; // '20241130152734'
// Patient Record (Segment P)
$resultSample->patient_id = $patientData[4] ?? null; // '11607396'
$resultSample->patient_name_last = $patientData[6] ?? null; // 'ZAKIYATUN'
$resultSample->patient_name_first = $patientData[7] ?? null; // 'O'
$resultSample->patient_name_middle = $patientData[8] ?? null;
$resultSample->patient_name_suffix = $patientData[9] ?? null;
$resultSample->patient_name_title = $patientData[10] ?? null;
$resultSample->patient_dob = $resultData[11] ?? null; // '19800101'
$resultSample->patient_sex = $patientData[12] ?? null; // 'F'
$resultSample->address_street = $patientData[13] ?? null; // 'Street ABC'
$resultSample->address_city = $patientData[14] ?? null;
$resultSample->address_state = $patientData[15] ?? null;
$resultSample->address_zip = $patientData[16] ?? null;
$resultSample->address_country = $patientData[17] ?? null;
$resultSample->patient_phone = $patientData[18] ?? null; // '081234567890'
// Order Record (Segment O)
$resultSample->accession_number = $orderData[4] ?? null; // '12345'
$resultSample->isolate_number = $orderData[5] ?? null; // '67890'
$resultSample->organism = $orderData[6] ?? null; // 'E. coli'
$resultSample->exclude_isolate_from_statistics = $isolate; // 'false'
$resultSample->test_id = $orderData[8] ?? null; // 'Test123'
// Result Record (Segment R)
$resultSample->result_type_code = $resultData[4] ?? null; // 'S'
$resultSample->antibiotic = $resultData[5] ?? null; // 'Amoxicillin'
$resultSample->antibiotic_concentration = $resultData[6] ?? null; // '100mg'
$resultSample->antibiotic_concentration_units = $resultData[7] ?? null; // 'mg'
$resultSample->test_status = $resultData[8] ?? null; // 'Completed'
$resultSample->result_data = json_encode(array_slice($resultData, 9)); // Additional data (if any)
$resultSample->preliminary_final_status = $resultData[13] ?? null;
$resultSample->test_start_datetime = $resultData[14] ?? null;
$resultSample->result_status_datetime = $resultData[15] ?? null;
$resultSample->test_complete_datetime = $resultData[16] ?? null;
// Periksa apakah data duplikat berdasarkan accession_number
//if (ResultSample::where('accession_number', $resultSample->accession_number)->exists()) {
// return response()->json(['message' => 'Data sudah ada.'], 409);
//}
// Simpan ke database
if ($noregister){
Periksa::where('nofoto', $accession_number)->update([
'status' => 'Data Vitek di Terima',
]);
Log::info("Data berhasil disimpan:", $resultSample->toArray());
$resultSample->save();
}
return response()->json(['message' => 'Data berhasil diproses dan disimpan.']);
} else {
if (!empty($mltrData)){
Log::info("Trying parser MTRSL :", $mltrData);
$parsedData = [];
$parsedData['antibiotics'] = [];
$antibiotic = '';
$resistance = '';
$value = '';
$interpretation = '';
$mulaikirim = 0;
$tanggalmasuk = '';
$tanggalkeluar = '';
$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]);
}
if (count($patientNames) > 1) {
$resultSample->patient_name_last = trim($patientNames[1]);
}
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 = '';
} else {
$mulaikirim = 1;
}
}
//$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 {
$resultSample->message_datetime = Carbon::parse($tanggalmasuk)->format('Y-m-d H:i:s') ?? null;
}catch (Exception $e) {
$resultSample->message_datetime = date('Y-m-d H:i:s');
}
}
if ($tanggalkeluar != ''){
try {
$resultSample->test_complete_datetime = Carbon::parse($tanggalkeluar)->format('Y-m-d H:i:s') ?? null;
}catch (Exception $e) {
$resultSample->test_complete_datetime = date('Y-m-d H:i:s');
}
}
$resultSample->save();
if ($accession_number){
$getorderid = Periksa::where('nofoto', $accession_number)->first();
$orderid = $getorderid->id ?? null;
if ($orderid){
if(is_array($parsedData['antibiotics']) && count($parsedData['antibiotics']) > 0){
foreach ($parsedData['antibiotics'] as $item){
$glassreportname = in_array($item['antibiotic'], $jsonantibiotik);
RekapAntibiotik::updateOrCreate(
[
'orderid' => $orderid,
'antibiotic' => $item['antibiotic'],
],
[
'resistance' => $item['resistance'],
'value' => $item['value'],
'interpretation' => $item['interpretation'],
'glassreportname' => $glassreportname,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]
);
}
}
}
Periksa::where('nofoto', $accession_number)->update([
'status' => 'Data Vitek di Terima',
]);
}
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);
if (isset($headerData[3])){
$accnumber = $headerData[47] ?? null;
$noregister = $headerData[16] ?? null;
$nama = $headerData[18] ?? null;
$urgensi = $headerData[50] ?? null; //A Critical R Normal
$iddokter = $headerData[33] ?? null;
$test_start_datetime = $headerData[52] ?? null;
$result_status_datetime = $headerData[59] ?? null;
$specimen_type = $headerData[60] ?? null;
$resulttype = $headerData[34] ?? null;
$resultstatus = $headerData[63] ?? null;
$preliminary = $headerData[40] ?? null; //P
$test_complete_datetime = $headerData[44] ?? null;
$tesid = $headerData[62] ?? null;
$alamat = $headerData[23] ?? null;
$instrumen = $resultData[2] ?? null;
$body_site = '';
$tengah = '';
$depan = '';
$akhir = '';
$suffix = '';
$title = '';
$concentration_unit = '';
$kode = '';
$antibiotic = '';
$city = '';
$state = '';
$zipcode = '';
$country = '';
if ($resulttype){
$getdataresult = explode('^', $resulttype);
$kode = $getdataresult[3] ?? '';
$concentration_unit = $getdataresult[4] ?? '';
}
if ($specimen_type){
$getdata = explode('\n', $specimen_type);
$specimen_type = $getdata[0];
$body_site = $getdata[1] ?? '';
}
if ($tesid){
$gettgl = explode('^', $tesid);
$tesid = $gettgl[3] ?? null;
}
if ($instrumen){
$gettgl = explode('^', $instrumen);
$instrumen = $gettgl[0];
$media_assay_type = $gettgl[1] ?? null;
$protocol_length = $gettgl[2] ?? null;
$instrument_number = $gettgl[3] ?? null;
$instrument_location = $gettgl[4] ?? null;
$protocol_name = $gettgl[5] ?? null;
} else {
$media_assay_type = null;
$protocol_length = null;
$instrument_number = null;
$instrument_location = null;
$protocol_name = null;
}
if ($isolate == '' OR $isolate == '0' OR is_null($isolate)){
$isolate = false;
} else { $isolate = true; }
if ($test_complete_datetime){
$test_complete_datetime = substr($test_complete_datetime, 0, 14);
//$test_complete_datetime = Carbon::parse($test_complete_datetime)->format('Y-m-d H:i:s');
}
if ($result_status_datetime){
$result_status_datetime = substr($result_status_datetime, 0, 14);
//$result_status_datetime = Carbon::parse($result_status_datetime)->format('Y-m-d H:i:s');
}
if ($test_start_datetime){
$test_start_datetime = substr($test_start_datetime, 0, 14);
//$test_start_datetime = Carbon::parse($test_start_datetime)->format('Y-m-d H:i:s');
}
if ($nama){
$getnama = explode('\015', $nama);
$nama = $getnama[0];
$getnama = explode('\n', $nama);
$nama = $getnama[0];
$akhir = $getnama[1] ?? '';
$depan = $getnama[2] ?? '';
$tengah = $getnama[3] ?? '';
$suffix = $getnama[4] ?? '';
$title = $getnama[5] ?? '';
$nama = $nama.$akhir;
}
if ($alamat){
$getnama = explode('^', $alamat);
$alamat = $getnama[0];
$city = $getnama[1] ?? '';
$state = $getnama[2] ?? '';
$zipcode = $getnama[3] ?? '';
$country = $getnama[4] ?? '';
}
if ($test_start_datetime == ''){ $test_start_datetime = null; }
if ($result_status_datetime == ''){ $result_status_datetime = null; }
if ($test_complete_datetime == ''){ $test_complete_datetime = null; }
$resultSample->sender_name = $headerData[4] ?? 'Unkown';
$resultSample->version_number = $headerData[12] ?? 'V0.0';
$resultSample->message_datetime = $test_start_datetime;
// Patient Record (Segment P)
$resultSample->patient_id = $noregister; // '11607396'
$resultSample->patient_name_last = $nama; // 'ZAKIYATUN'
$resultSample->patient_name_first = $depan; // 'O'
$resultSample->patient_name_middle = $tengah;
$resultSample->patient_name_suffix = $suffix;
$resultSample->patient_name_title = $title;
$resultSample->patient_dob = $headerData[20] ?? null;
$resultSample->patient_sex = $headerData[21] ?? null;
$resultSample->address_street = $alamat;
$resultSample->address_city = $city;
$resultSample->address_state = $state;
$resultSample->address_zip = $zipcode;
$resultSample->address_country = $country;
$resultSample->patient_phone = $headerData[25] ?? null;
$resultSample->admitting_physician = $headerData[27] ?? null;
$resultSample->patient_diagnosis = $headerData[33] ?? null;
$resultSample->patient_therapy = json_encode($headerData);
$resultSample->admit_datetime = null;
$resultSample->room_number = $headerData[46] ?? '00001';
$resultSample->hospital_service = $headerData[45] ?? 'RSSA Malang';
$resultSample->hospital_client = $orderData[4] ?? 'Lab Mikro';
// Order Record (Segment O)
$resultSample->accession_number = $accnumber; // '12345'
$resultSample->isolate_number = $orderData[5] ?? null; // '67890'
$resultSample->organism = $orderData[6] ?? null; // 'E. coli'
$resultSample->exclude_isolate_from_statistics = $isolate; // 'false'
$resultSample->specimen_type = $specimen_type;
$resultSample->body_site = $body_site;
$resultSample->test_id = $tesid; // 'Test123'
$resultSample->urgensi = $urgensi; //A Critical R Normal
// Result Record (Segment R)
$resultSample->result_type_code = $kode;
$resultSample->antibiotic = $antibiotic;
$resultSample->antibiotic_concentration = $concentration_unit; // '100mg'
$resultSample->antibiotic_concentration_units = $concentration_unit; // 'mg'
$resultSample->test_status = $resultstatus; // 'Completed'
$resultSample->result_data = json_encode($orderData); // Additional data (if any)
$resultSample->preliminary_final_status = $preliminary;
$resultSample->test_start_datetime = $test_start_datetime;
$resultSample->result_status_datetime = $result_status_datetime;
$resultSample->test_complete_datetime = $test_complete_datetime;
$resultSample->instrument_type = $instrumen;
$resultSample->media_assay_type = $media_assay_type;
$resultSample->protocol_length = $protocol_length;
$resultSample->instrument_number = $instrument_number;
$resultSample->instrument_location = $instrument_location;
$resultSample->protocol_name = $protocol_name;
$resultSample->additional_result = json_encode($resultData);
if ($noregister){
$resultSample->save();
Log::info("Data ASTM Berhasil di Parse dan di simpan ", $resultSample->toArray());
return response()->json(['message' => 'Data berhasil diproses dan disimpan.']);
}
} else {
Log::debug("Abaikan Data Berikut ". json_encode($headerData));
}
}
}
}
/**
* Proses data ASTM Response
*/
public function processAstmMessages($dataListener) {
foreach ($dataListener as $data) {
try {
// Ambil pesan ASTM dari kolom 'message' atau yang relevan
$response = $data->rawdt;
if ($data->alat == 'BD Mikro 1'){
if ($data->no_id != ''){
$rnmpas = $data->rnmpas;
$getnama = explode('|', $rnmpas);
$resultSample = new ResultSample();
$resultSample->sender_name = $data->alat;
$resultSample->message_datetime = $data->tgl_data;
$resultSample->version_number = 'V1.0';
$resultSample->patient_id = $data->urut;
$resultSample->patient_name_last= $getnama[0];
$resultSample->accession_number = $data->no_id;
$resultSample->test_status = $data->organisme;
$resultSample->save();
DataListiner::where('urut', $data->urut)->update([
'processed' => 1
]);
Periksa::where('nofoto', $data->no_id)->update([
'status' => 'Data BD di Terima',
]);
Log::info("Data ASTM BD ", $resultSample->toArray());
PendaftaranOnListiner::where('rnoreg', $data->no_id)->update([
'rtglast' => date('Y-m-d'),
'flg_vitek1' => 0,
'flg_vitek2' => 0
]);
} else {
DataListiner::where('urut', $data->urut)->update([
'processed' => 9
]);
}
} else {
// Lakukan parsing menggunakan method/fungsi yang sudah dibuat
$result = $this->processAstmResponse($response, $data->alat);
// Jika berhasil, tandai data sudah diproses
if ($result) {
DataListiner::where('urut', $data->urut)->update([
'processed' => 1
]);
} else {
Log::debug($result);
}
}
} catch (\Exception $e) {
Log::critical($e->getMessage());
}
}
}
public function processAstmMessagesLokal($dataListener) {
foreach ($dataListener as $data) {
try {
// Ambil pesan ASTM dari kolom 'message' atau yang relevan
$response = $data->rawdt;
if ($data->alat == 'COM1' OR $data->alat == 'COM3'){
if (isset($data->no_id) AND $data->no_id != ''){
$rnmpas = $data->rnmpas;
$getnama = explode('|', $rnmpas);
$resultSample = new ResultSample();
$resultSample->sender_name = $data->alat;
$resultSample->message_datetime = $data->tgl_data;
$resultSample->version_number = 'V1.0';
$resultSample->patient_id = $data->seq_no;
$resultSample->patient_name_last= $getnama[0];
$resultSample->accession_number = $data->no_id;
$resultSample->test_status = $data->organisme;
$resultSample->save();
DB::table('lis_phoenix')->where('id', $data->id)->update([
'processed' => 1
]);
Periksa::where('nofoto', $data->no_id)->update([
'status' => 'Data BD di Terima',
]);
Log::info("Data ASTM BD ", $resultSample->toArray());
PendaftaranOnListiner::where('rnoreg', $data->no_id)->update([
'rtglast' => date('Y-m-d'),
'flg_vitek1' => 0,
'flg_vitek2' => 0
]);
} else {
DB::table('lis_phoenix')->where('id', $data->id)->update([
'processed' => 9
]);
}
} else {
// Lakukan parsing menggunakan method/fungsi yang sudah dibuat
$result = $this->processAstmResponse($response, $data->alat);
// Jika berhasil, tandai data sudah diproses
if ($result) {
DB::table('lis_phoenix')->where('id', $data->id)->update([
'processed' => 1
]);
} else {
Log::debug($result);
}
}
} catch (\Exception $e) {
Log::critical($e->getMessage());
}
}
}
}