|
Documentation: PACS integration

Operate

PACS integration

AE titles, DIMSE services, polling load and how modalities are registered.

Fill the AE title matrix with the hospital PACS administrator during the kickoff call, before install. Both sides must register the values for a DIMSE association to succeed.

Role AE Title Host / IP Port Assigned by
api-pacs (calling AE) assigned by customer IT this host none Customer IT
Orthanc (C-STORE listener) assigned by customer IT this host ORTHANC_DICOM_PORT Customer IT (AET), PACS-AI (port)
Remote PACS (called AE) from customer IT from customer IT from customer IT Customer IT
  • Copy the values into api-pacs/.env (ORTHANC_AET) and orthanc/.env (ORTHANC_DICOM_AET, ORTHANC_DICOM_PORT); the customer whitelists the AE title and IP and routes C-STORE back to the host. Restart Orthanc after changing its configuration.
  • DIMSE services used: C-FIND for discovery, C-MOVE for retrieval (Orthanc as destination), C-STORE for receipt. PACS-AI neither provides nor consumes a Modality Worklist (MWL); the hospital RIS or PACS owns it.
  • Remote PACS peers are registered as Orthanc modalities and managed through the API (owner or admin): GET /v1/orthanc/modalities/list, PUT /v1/orthanc/modality/{id}/update (aet, host, port, useDicomTLS), POST /v1/orthanc/modality/{id}/echo, DELETE /v1/orthanc/modality/{id}/remove. POST /v1/orthanc/modality/studies runs a C-FIND with up to 15 optional filters (accession number, institution, modalities in study, patient demographics, referring and requesting physician, study date, time, description, ID and UID) and POST /v1/orthanc/modality/retrieve issues a C-MOVE. GET /v1/orthanc/jobs?jobIds= reports Orthanc job status, GET /v1/orthanc/modality/{id}/linked/storage/enabled tells whether a peer accepts C-STORE, and GET /v1/orthanc/sop-instance/{sopInstanceUID}/find locates a local instance.
  • DICOM-TLS is supported by Orthanc (ORTHANC__DICOM_TLS_* keys) but not enabled in the shipped compose file; add it when the link crosses untrusted infrastructure.

Polling load

Steady state is one C-FIND per ingestion job per minute plus up to one C-MOVE per queued candidate per minute (both loops default to a one-minute period). With N ingestion jobs and a peak of M concurrent retrievals, expect N + M queries per minute against the remote PACS; confirm this is acceptable during the kickoff call.

Connectivity validation

# C-ECHO
echoscu -aet PACS_AI -aec <REMOTE_AE> <REMOTE_HOST> <REMOTE_PORT>

# C-FIND for a known StudyInstanceUID
findscu -v -S -aet PACS_AI -aec <REMOTE_AE> \
  -k QueryRetrieveLevel=STUDY -k StudyInstanceUID=<UID> \
  <REMOTE_HOST> <REMOTE_PORT>
PACS AI Logo status Status Terms and Conditions Privacy Policy Privacy Impact Assessment Document (EFVP)

© 2026 HeartWise AI Lab, Montreal Heart Institute. All rights reserved.