This commit is contained in:
Dwi Swandhana
2026-04-10 18:11:25 +07:00
parent f84131e6bf
commit b0da4e5433
@@ -14,6 +14,7 @@ use App\RekapAntibiotik;
use App\PendaftaranOnListiner;
use App\Organisms;
use App\KomponenJawaban;
use App\Riwayat;
// Proses untuk Growth and Detection Result
function processGrowthDetectionResult($rawData){
@@ -869,6 +870,60 @@ class AstmMessageService
return $messages;
}
protected function formatLocalInstrumentText(array $parsed, string $alat, ?string $accessionNumber, ?string $messageDateTime): string
{
$msh = $parsed['MSH'][0] ?? [];
$pid = $parsed['PID'][0] ?? [];
$obr = $parsed['OBR'][0] ?? [];
$obx = $parsed['OBX'][0] ?? [];
$nte = $parsed['NTE'][0] ?? [];
$qpd = $parsed['QPD'][0] ?? [];
$qid = $parsed['QID'][0] ?? [];
$spm = $parsed['SPM'][0] ?? [];
$messageType = $msh[8] ?? '-';
$patientName = $pid[3] ?? $pid[5] ?? '-';
$patientName = trim((string) $patientName, "\" \t\n\r\0\x0B");
$testId = $obr[4] ?? ($qpd[1] ?? '-');
$receivedAt = $messageDateTime ?? '-';
if (str_starts_with($alat, 'MYLA')) {
$organism = $obx[5] ?? '-';
$status = $obx[11] ?? '-';
$resultAt = $this->astmToDateTime($obx[14] ?? null) ?? '-';
$comment = $nte[3] ?? '-';
$specimen = $spm[3] ?? '-';
return trim(implode("\n", [
'HASIL ALAT MYLA',
'No. Foto: '.($accessionNumber ?: '-'),
'No. Spesimen: '.$specimen,
'Pasien: '.$patientName,
'Jenis Pesan: '.$messageType,
'Test: '.$testId,
'Hasil: '.$organism,
'Status: '.$status,
'Komentar: '.$comment,
'Tanggal Hasil: '.$resultAt,
'Tanggal Diterima LIS: '.$receivedAt,
]));
}
$orderAt = $this->astmToDateTime($parsed['ORC'][0][8] ?? null) ?? '-';
$queryId = $qid[1] ?? ($msh[9] ?? '-');
return trim(implode("\n", [
'HASIL ALAT GENEXPERT',
'No. Foto: '.($accessionNumber ?: '-'),
'Pasien: '.$patientName,
'Jenis Pesan: '.$messageType,
'Test/Assay: '.$testId,
'Order/Run ID: '.$queryId,
'Tanggal Order: '.$orderAt,
'Tanggal Diterima LIS: '.$receivedAt,
'Catatan: Payload alat disimpan sebagai raw untuk ditinjau analis.',
]));
}
protected function saveInstrumentRawResult(string $raw, string $alat): bool
{
try {
@@ -931,6 +986,18 @@ class AstmMessageService
];
$resultSample->save();
if ($accessionNumber) {
$teksHasil = $this->formatLocalInstrumentText($parsed, $alat, $accessionNumber, $messageDateTime);
Riwayat::create([
'nofoto' => $accessionNumber,
'jawaban' => $teksHasil,
'inputor' => $alat,
'keterangan' => $messageDateTime ?: date('Y-m-d H:i:s'),
'verifikasi' => '',
]);
}
return true;
} catch (\Throwable $e) {
Log::error('Local instrument fallback parse error', [