This repository provides hands-on examples of DICOM integration using InterSystems IRIS for Health and the dcm4che DICOM simulator.
You'll find:
- A working IRIS production for handling DICOM messages
- Tools to simulate common DICOM workflows (store, query, retrieve)
- A sample WorkList scenario integrated with a MySQL database
Perfect for testing, learning, or building healthcare imaging integrations.
To run this project, youβll need:
- Git
- Docker + Docker Compose
β οΈ On Windows, make sure Docker is using Linux containers - Visual Studio Code with InterSystems ObjectScript Extension Pack
Once youβve got Docker installed, you can get up and running with:
docker-compose build
docker-compose up -d
That's it β you're ready to dive in!
Open the DICOM production interface in your browser:
π DICOM.Production
π Credentials: superuser
/ SYS
Description: A DICOM file containing a PDF report is received by IRIS. The system extracts metadata from the DICOM header (e.g. patient name, study ID) and stores both the PDF and metadata in another system (like an EHR or document store).
-
Open a shell in the tools container:
docker exec -it tools bash
-
Generate a DICOM file with embedded PDF:
./pdf2dcm -f /shared/pdf/metadata.xml -- /shared/pdf/sample.pdf /shared/pdf/embeddedpdf.dcm
-
Send it to IRIS:
./storescu -b DCM_PDF_SCP -c IRIS_PDF_SCU@iris:2010 /shared/pdf/embeddedpdf.dcm
-
π¨ Check the messages in IRIS:
π Message Viewer
Description: IRIS queries a PACS using a DICOM C-FIND to locate imaging studies, then uses C-MOVE to retrieve one of the matching documents.
-
Open the tools container:
docker exec -it tools bash
-
Inspect a DICOM file:
./dcmdump /shared/dicom/d1I00001.dcm
-
Create the DICOMDIR database:
./dcmdir -c /shared/DICOMDIR --fs-id SAMPLEDICOMS --fs-desc /shared/dicom/descriptor /shared/dicom
-
Start the simulated archive:
./dcmqrscp --ae-config /shared/ae.properties -b DCM_QRY_SCP:3010 --dicomdir /shared/DICOMDIR
-
Connect to IRIS:
docker exec -it iris bash iris session iris
-
Run the C-FIND:
do ##class(DICOM.BS.QueryService).TestFind()
π View results in QueryService Messages
-
Request a study using C-MOVE:
do ##class(DICOM.BS.MoveService).TestMove()
π Track the transfer:
MoveService |
DICOM Store In
Description: An imaging device sends a C-FIND request to IRIS to retrieve scheduled studies. IRIS queries an external MySQL database, builds the WorkList response, and sends it back.
-
Enter the MySQL container:
docker exec -it mysql bash mysql --host=localhost --user=testuser testdb -p # Password: testpassword
-
View WorkList data:
SELECT * FROM WorkList;
-
Open the tools container:
docker exec -it tools bash
-
Send a WorkList query:
./findscu -b DCM_WL -c IRIS_WL@iris:1112 -m StudyDate=20250404
π Check DICOM WL Find In Messages
Description: An imaging device sends an image over HTTP using a STOW-RS (HTTP POST) request to IRIS, which receives, extracts, and processes the DICOM image.
-
Open the tools container:
docker exec -it tools bash
-
Send a DICOM image using STOW-RS:
./stowrs --url http://iris:52773/dicom/studies /shared/dicom/d1I00001.dcm
-
In IRIS, check the received message in the DICOM REST Service Messages
You now have a fully working, simulated DICOM integration lab using IRIS for Health and dcm4che. Use it to learn, test, build prototypes β and have fun doing it!