DICOM Destination
Send DICOM data to a PACS or other DICOM-compatible system using C-STORE SCU.
Overview
The DICOM destination acts as a C-STORE Service Class User (SCU) to transmit DICOM objects to a Picture Archiving and Communication System (PACS), a Vendor Neutral Archive (VNA), or any DICOM-compliant Service Class Provider (SCP). This destination handles the DICOM association negotiation, presentation context setup, and C-STORE operations. It is used in radiology and imaging workflows to route, archive, or forward medical images and structured reports.
Configuration
Define a DICOM destination in your root intu.yaml under the destinations key:
# intu.yaml
destinations:
pacs-archive:
type: dicom
dicom:
host: pacs.radiology.hospital.org
port: 11112
ae_title: INTU_SCU
called_ae_title: PACS_SCP
timeout_ms: 60000
tls:
enabled: true
ca_cert: /etc/ssl/certs/pacs-ca.pem
Properties
11112, though actual ports vary by installation.INTU_SCU. Must be registered in the remote SCP's configuration.60000 (60 seconds). Increase for large images or slow networks.16384.TLS
false.Full Example
Receive DICOM images from a modality worklist, apply metadata enrichment, and forward to the hospital PACS archive.
Root Configuration
# intu.yaml
destinations:
hospital-pacs:
type: dicom
dicom:
host: pacs.radiology.hospital.org
port: 11112
ae_title: INTU_ROUTER
called_ae_title: MAIN_PACS
timeout_ms: 120000
max_pdu_length: 65536
tls:
enabled: true
ca_cert: /etc/ssl/certs/pacs-ca.pem
client_cert: /etc/ssl/certs/intu-dicom.pem
client_key: /etc/ssl/private/intu-dicom-key.pem
Channel Configuration
# channels/dicom-router/channel.yaml
name: dicom-router
description: Receive DICOM images and forward to PACS after metadata enrichment
source:
type: dicom
dicom:
port: 11113
ae_title: INTU_SCP
destinations:
- hospital-pacs
Destination Transformer
// channels/dicom-router/transformer.ts
import { Message, Context } from "@intu/sdk";
export default function transform(msg: Message, ctx: Context): Message {
const dicomData = msg.body;
const patientId = dicomData.dataset?.["00100020"]?.Value?.[0] ?? "";
const patientName = dicomData.dataset?.["00100010"]?.Value?.[0]?.Alphabetic ?? "";
const modality = dicomData.dataset?.["00080060"]?.Value?.[0] ?? "";
const studyUid = dicomData.dataset?.["0020000D"]?.Value?.[0] ?? "";
ctx.logger.info(
`Routing ${modality} study ${studyUid} for patient ${patientId}`
);
const enrichedDataset = {
...dicomData.dataset,
"00081090": { vr: "LO", Value: ["INTU_PROCESSED"] },
"00080080": {
vr: "LO",
Value: [dicomData.dataset?.["00080080"]?.Value?.[0] ?? "General Hospital"],
},
};
return {
...msg,
body: {
...dicomData,
dataset: enrichedDataset,
},
};
}
ae_title) and the called AE title
(called_ae_title) must be pre-registered in the remote PACS configuration.
Association requests will be rejected if the AE titles are not recognized.
timeout_ms and
max_pdu_length to prevent timeouts during C-STORE operations.