Исходные данные.
1. Есть DICOM-сервер Orthanc на который отправляют исследования.
2. Исследования надо хранить еще в месте Б.
3. В месте Б есть NAS толстый, на нем настроена NFS шара
4. В месте Б поднял ВМ куда подключил эту NFS шару.
Задача: запихнуть сложносочиненный скрипт в крон, который с утра начнет выгружать исследования на шару за предыдущий день, расскладываясь по каталогам ГОД-МЕСЯЦ-ЧИСЛО.
Просто выгрузить не проблема: есть требование, что бы архивированные исследования назывались ИД - ФИО
У Orthanc есть апи которое отдается с помощью curl
Cама задача разбивается на 3 этапа:
1. Получаем список исследований за день
Код: Выделить всё
curl -X POST http://IP-SERVER:8042/tools/find -d '{"Level":"Study","Expand":false,"Query":{"StudyDate":"20211215-20211215"}}' > /home/dicom/lists/20211215.list
Spoiler
[
"03f1d5dc-0f5d9538-9ae87d90-ce05730c-b1fb75d9",
"f44a7807-953aad54-4cc7228f-079182ed-a57d0a1f",
"f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8"
]
"03f1d5dc-0f5d9538-9ae87d90-ce05730c-b1fb75d9",
"f44a7807-953aad54-4cc7228f-079182ed-a57d0a1f",
"f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8"
]
Код: Выделить всё
curl http://IP-SERVER:8042/studies/f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8
Spoiler
Код: Выделить всё
curl http://IP-SERVER:8042/studies/f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8
{
"ID" : "f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8",
"IsStable" : true,
"LastUpdate" : "20211215T210045",
"MainDicomTags" : {
"AccessionNumber" : "",
"InstitutionName" : "XXXXXXXXXX",
"ReferringPhysicianName" : "",
"StudyDate" : "20211215",
"StudyDescription" : "Brain Sequens(Adult)",
"StudyID" : "cbf75611-9d86-43",
"StudyInstanceUID" : "1.3.12.2.1107.5.1.7.123080.30000021121302042855600000131",
"StudyTime" : "224051.897821"
},
"ParentPatient" : "bb865f3f-f391dbd6-d6efc35d-ad5c589b-2ed348ec",
"PatientMainDicomTags" : {
"PatientBirthDate" : "19880416",
--->> "PatientID" : "0003540",
--->> "PatientName" : "FAMILIYA I.O.",
"PatientSex" : "M"
},
"Series" : [
"b4f835f9-adbd89c7-30786772-501a2bcf-a3b156af",
"41eda6db-7da77bb1-38120a10-1c032749-f58f2f19",
"2d9d3406-ad3934a4-cc03ee3c-a47b2af3-441a9812",
"1d093b22-ee1c911a-fef45856-0e714bc2-1178deb4",
"a67df51a-f11e2b3d-c029d6d1-af11039e-aaf9dcf2",
"9cc0ab2a-f66670b3-334d936e-2f0fe811-d6491dda",
"bd03d0d3-b0e8ea86-03f706e3-7fed7200-cccdcd8e",
"edad3ac1-15c37536-6c680b46-a9219b6b-9c5aa712",
"4b3b67da-b62b2d12-fdac386c-89925169-c588ba08",
"9084284b-46737e81-cec45f02-560b272d-2d4e5cd0",
"364197dd-55d25084-5bd47538-5fa9ac14-670671cc",
"356adb83-bf09ce1c-4fb8cbdd-e8f0adc2-7f499eec"
],
"Type" : "Study"
}
Код: Выделить всё
curl http://SERVER-IP:8042/studies/f5009020-4969c539-2098a2f8-7c5cfb3a-55d84da8/archive > файлик.zip
Я в группе дисскусии задал вопрос, как это правильнее сделать, но сгородить конструкцию надо уже..
Заранее спасибо за идеи компоновки реализации.