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) andorthanc/.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/studiesruns 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) andPOST /v1/orthanc/modality/retrieveissues a C-MOVE.GET /v1/orthanc/jobs?jobIds=reports Orthanc job status,GET /v1/orthanc/modality/{id}/linked/storage/enabledtells whether a peer accepts C-STORE, andGET /v1/orthanc/sop-instance/{sopInstanceUID}/findlocates 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>