From adce481226f37b7d1b8be8adef6f54720e78fc7a Mon Sep 17 00:00:00 2001 From: Masroor Ehsan Date: Wed, 22 Jan 2025 19:25:59 +0600 Subject: [PATCH] wip --- app/Services/Pacs/Sync/StudiesSync.php | 47 +++++++++++++++++++++----- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/app/Services/Pacs/Sync/StudiesSync.php b/app/Services/Pacs/Sync/StudiesSync.php index d55efbd..cf56fd2 100644 --- a/app/Services/Pacs/Sync/StudiesSync.php +++ b/app/Services/Pacs/Sync/StudiesSync.php @@ -8,6 +8,7 @@ use App\Services\Pacs\DicomUtils; use App\Services\Pacs\OrthancRestClient; use App\Services\StudyRouter\DicomStudyRouter; +use App\Services\StudyRouter\DicomTagIdentifiers; use Carbon\Carbon; use Exception; use Illuminate\Pipeline\Pipeline; @@ -105,6 +106,40 @@ public function fetchStudyDetails(string $orthanc_uuid): ?array return $study; } + public function matchOrganization(mixed $orthanc_src) + { + $dicomData = [ + DicomTagIdentifiers::PatientName->value => data_get($orthanc_src, 'PatientMainDicomTags.PatientName'), + DicomTagIdentifiers::PatientID->value => data_get($orthanc_src, 'PatientMainDicomTags.PatientID'), + DicomTagIdentifiers::Modality->value => data_get($orthanc_src, 'RequestedTags.Modality'), + DicomTagIdentifiers::BodyPartExamined->value => data_get($orthanc_src, 'RequestedTags.BodyPartExamined'), + DicomTagIdentifiers::InstitutionName->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::InstitutionAddress->value => data_get($orthanc_src, 'RequestedTags.InstitutionAddress'), + DicomTagIdentifiers::StudyDescription->value => $this->getStudyDescription($orthanc_src), + DicomTagIdentifiers::OperatorsName->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::StationName->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::ReferringPhysicianName->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::Manufacturer->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::SoftwareVersions->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + DicomTagIdentifiers::ProtocolName->value => data_get($orthanc_src, 'MainDicomTags.InstitutionName'), + ]; + } + + public function getStudyDescription(mixed $orthanc_src): ?string + { + $result = data_get($orthanc_src, 'MainDicomTags.StudyDescription'); + + if (blank($result)) { + $result = data_get($orthanc_src, 'RequestedTags.AcquisitionDeviceProcessingDescription'); + } + + if (blank($result)) { + $result = data_get($orthanc_src, 'MainDicomTags.AcquisitionDeviceProcessingDescription'); + } + + return $result; + } + public function transformData(mixed $orthanc_src): array { $inst_name = data_get($orthanc_src, 'MainDicomTags.InstitutionName'); @@ -112,6 +147,7 @@ public function transformData(mixed $orthanc_src): array $patient_name = data_get($orthanc_src, 'PatientMainDicomTags.PatientName'); + $descr = $this->getStudyDescription($orthanc_src); $study = [ 'dicom_server_id' => $this->dicomServer->id, 'orthanc_uuid' => strtolower($orthanc_src['ID']), @@ -137,6 +173,8 @@ public function transformData(mixed $orthanc_src): array 'image_count' => data_get($orthanc_src, 'Statistics.CountInstances'), 'series_count' => data_get($orthanc_src, 'Statistics.CountSeries'), 'disk_size' => data_get($orthanc_src, 'Statistics.DiskSize'), + + 'study_description' =>$descr, ]; if ((bool) data_get($orthanc_src, 'IsStable', false)) { @@ -155,15 +193,6 @@ public function transformData(mixed $orthanc_src): array } } - $descr = data_get($orthanc_src, 'MainDicomTags.StudyDescription'); - if (blank($descr)) { - $descr = data_get($orthanc_src, 'RequestedTags.AcquisitionDeviceProcessingDescription'); - } - if (blank($descr)) { - $descr = data_get($orthanc_src, 'MainDicomTags.AcquisitionDeviceProcessingDescription'); - } - $this->setValue($study, 'study_description', trim($descr)); - // check for priority in patient name or description if (preg_match('/\b(urgent|stat)\b/i', implode(' ', [$descr, $patient_name]))) { $this->setValue($study, 'priority', Priority::Stat->value);