Skip to content

Latest commit

 

History

History
211 lines (140 loc) · 6.71 KB

File metadata and controls

211 lines (140 loc) · 6.71 KB

🧪 Simple DICOM Integration with InterSystems IRIS for Health + dcm4che Simulator

License Docker Ready VS Code Compatible Maintained InterSystems IRIS

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.


🧰 Requirements

To run this project, you’ll need:


🚀 Getting Started

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!


🧭 Explore the IRIS Production

Open the DICOM production interface in your browser:

👉 DICOM.Production
🔐 Credentials: superuser / SYS


📥 Use Case 1: Receiving DICOM with Embedded PDF

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).

How to run it:

  1. Open a shell in the tools container:

    docker exec -it tools bash
  2. Generate a DICOM file with embedded PDF:

    ./pdf2dcm -f /shared/pdf/metadata.xml -- /shared/pdf/sample.pdf /shared/pdf/embeddedpdf.dcm
  3. Send it to IRIS:

    ./storescu -b DCM_PDF_SCP -c IRIS_PDF_SCU@iris:2010 /shared/pdf/embeddedpdf.dcm
  4. 📨 Check the messages in IRIS:
    👉 Message Viewer


🔍 Use Case 2: Query / Retrieve (C-FIND / C-MOVE)

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.

Querying with C-FIND

  1. Open the tools container:

    docker exec -it tools bash
  2. Inspect a DICOM file:

    ./dcmdump /shared/dicom/d1I00001.dcm
  3. Create the DICOMDIR database:

    ./dcmdir -c /shared/DICOMDIR --fs-id SAMPLEDICOMS --fs-desc /shared/dicom/descriptor /shared/dicom
  4. Start the simulated archive:

    ./dcmqrscp --ae-config /shared/ae.properties -b DCM_QRY_SCP:3010 --dicomdir /shared/DICOMDIR
  5. Connect to IRIS:

    docker exec -it iris bash
    iris session iris
  6. Run the C-FIND:

    do ##class(DICOM.BS.QueryService).TestFind()

    👉 View results in QueryService Messages

Retrieving with C-MOVE

  1. Request a study using C-MOVE:

    do ##class(DICOM.BS.MoveService).TestMove()

    👉 Track the transfer:
    MoveService |
    DICOM Store In


📋 Use Case 3: WorkList Management (C-FIND + SQL)

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.

🛢️ Check the external MySQL WorkList DB

  1. Enter the MySQL container:

    docker exec -it mysql bash
    mysql --host=localhost --user=testuser testdb -p  # Password: testpassword
  2. View WorkList data:

    SELECT * FROM WorkList;

📡 Request the WorkList using C-FIND

  1. Open the tools container:

    docker exec -it tools bash
  2. Send a WorkList query:

    ./findscu -b DCM_WL -c IRIS_WL@iris:1112 -m StudyDate=20250404

🧠 See how IRIS handled it

👉 Check DICOM WL Find In Messages


🌐 Use Case 4: Store Document over the Web

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.

  1. Open the tools container:

    docker exec -it tools bash
  2. Run a simulated listener for incoming C-STORE:

    ./storescp -b DCM_STORE_SCP:4010 --response-delay 5000
  3. Send DICOM images using STOW-RS:

    ./stowrs --url http://iris:52773/dicom/studies /shared/dicom/d1I00001.dcm /shared/dicom/d1I00002.dcm /shared/dicom/d1I00003.dcm
  4. In IRIS, check the received message in the DICOM REST Service Messages


🎉 You're All Set!

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!


🔐 Securing DICOM with TLS

Want to add mutual TLS (mTLS) authentication to your DICOM communications? Check out the TLS Setup Guide for step-by-step instructions on creating certificates and configuring secure connections between SCU clients and IRIS.


📚 Learn More