What Is DICOM? (And Why It's More Than a File Format)
If you’ve been in PACS long enough, you’ve heard “it’s a DICOM issue” used as a catch-all diagnosis. That’s usually a sign the team is treating DICOM like “a file format,” when in reality DICOM is three things at once:
- A data model (how imaging data and metadata are represented)
- A set of services (how systems query, move, store, and manage objects)
- A network protocol (how endpoints negotiate and exchange those services)
So yes, a CT image on disk is a DICOM file—but that file is only one piece of a larger interoperability contract. The moment you connect a modality to MWL, push studies to PACS, prefetch priors, route to VNA, or expose studies through web viewers, you’re using DICOM as a distributed system protocol.
A practical way to think about DICOM:
- The “object” is the thing being exchanged (CT image, SR report, presentation state, etc.).
- The “service” is the operation being requested (store it, find it, move it, verify connectivity).
- The “association” is the session and negotiation that makes any of that possible.
When troubleshooting, your job is often to identify which layer is broken:
- Wrong data (tags wrong or missing)
- Wrong service expectations (SCU/SCP mismatch, unsupported SOP class)
- Wrong network negotiation (AE title, port, presentation contexts, transfer syntax)
If you’re looking for a true DICOM standard guide that stays grounded in hospital realities—or a hands-on DICOM protocol reference you can use during go-live and escalations—this article is meant to function like the “mental model + checklist” you keep in your head after years of deployments.
You’ll see several pointers to deeper troubleshooting content (for example: common DICOM errors) and operational execution content (like PACS implementation). We’ll also reference the free DICOM Header Validator tool at /tools/dicom-header-validator (coming soon) as a practical workflow step when validating headers.
DICOM Architecture: Objects, Services, and Networking
The DICOM ecosystem is easiest to navigate when you separate what’s being exchanged (objects) from what’s being done (services), and how it’s transported (networking & negotiation).
Information Objects and SOP Classes
Information Object Definitions (IODs) describe the structure of a type of medical imaging object: which attributes exist and how they relate. In day-to-day ops, you rarely say “IOD,” you say “CT Image,” “MR Image,” “Structured Report,” “Secondary Capture,” etc.
But across systems, those become SOP Classes:
- SOP Class UID is the type identifier for the object (tag (0008,0016)).
- SOP Instance UID is the unique identifier for a specific instance (tag (0008,0018)).
A study is not “one thing” in DICOM terms. It’s a hierarchy:
- Study (identified by Study Instance UID (0020,000D))
- Series (identified by Series Instance UID (0020,000E))
- Instance (each image/object, identified by SOP Instance UID (0008,0018))
Practical implication: if any vendor “regenerates” UIDs during routing, migration, or ingestion, your downstream behaviors can break:
- Viewer hanging protocols stop matching
- Priors linking breaks
- Cross-system reconciliation becomes a nightmare
- Q/R results become inconsistent
Also note: “DICOM image” doesn’t always mean pixel data. Objects include:
- Structured Reports (SR)
- Key Object Selection (KOS)
- Grayscale Softcopy Presentation States (GSPS)
- Encapsulated PDF
- Radiation dose objects
- Segmentation objects, etc.
If your PACS says “we support DICOM,” always ask: Which SOP classes, and under what roles? That’s not pedantry—it's the entire integration.
Service Class User (SCU) vs Service Class Provider (SCP)
In DICOM networking, a system can act as:
- SCU (Service Class User): requests a service
- SCP (Service Class Provider): provides (responds to) a service
In day-to-day work, teams often map this to “client vs server.” Sometimes that’s a helpful mental shortcut, sometimes it causes confusion.
Examples:
- Modality sending images to PACS:
- Modality is Storage SCU
- PACS is Storage SCP
- PACS querying modality worklist from RIS/Broker:
- PACS (or modality) is MWL SCU
- Worklist provider is MWL SCP
- Viewer requesting studies from PACS via Q/R:
- Viewer is Query/Retrieve SCU
- PACS is Query/Retrieve SCP
- PACS pushing to archive/VNA:
- PACS is Storage SCU
- VNA/archive is Storage SCP
A very typical failure pattern:
“Vendor A says they support C-MOVE.”
“Vendor B says they support C-MOVE.”
But one supports only C-MOVE SCP, the other only C-MOVE SCU, and the expected workflow requires the opposite.
Always map the direction of the flow and ask:
- Who initiates the request?
- Who listens?
- Who supports which SOP classes and transfer syntaxes in that role?
DIMSE Messages: The Commands That Drive DICOM Communication
Most “classic DICOM networking” in hospital PACS deployments relies on DIMSE (DICOM Message Service Element). DIMSE sits over the association and defines commands such as:
- C-ECHO: verification (connectivity test)
- C-STORE: store instances (send images/objects)
- C-FIND: query (search)
- C-MOVE: retrieve to a third party (push from SCP to destination)
- C-GET: retrieve over the same association (SCP sends back to requester)
- Plus workflow and management services (MWL, MPPS, Storage Commitment, etc.)
You don’t need to memorize the entire standard, but you should build intuition:
- C-STORE failures are often negotiation/transfer syntax or metadata problems.
- C-FIND failures are often called “permissions,” but are frequently “wrong query level / wrong keys / unsupported matching.”
- C-MOVE failures are often “destination AE not reachable” or “not authorized,” or the SCP is trying to open a new association back to you and can’t.
A clean way to troubleshoot DIMSE issues is to treat them like API calls:
- Request parameters (query keys, destination AE)
- Authentication/authorization (sometimes AE-based ACLs)
- Transport (ports, TLS, firewalls)
- Response codes (status, sub-operations)
DICOM Headers: What's Inside Every Image
When someone says “check the DICOM,” what they usually mean is: check the header (metadata), not the pixel data.
The header contains:
- Patient & encounter identifiers
- Study/series hierarchy (UIDs)
- Modality type and acquisition parameters
- Transfer syntax and encoding details
- Character set and language encoding
- Vendor-specific private tags
- Image geometry, pixel spacing, orientation, etc.
A well-run PACS environment treats headers as production-critical data, not “optional metadata.” Mis-tagging causes operational outages: unreadable images, wrong patient merges, failed prefetch, broken hanging protocols, incorrect routing rules, and failed migration validation.
The Tag System: Group, Element, VR
Each DICOM attribute is identified by a tag:
- (gggg,eeee) where
gggg= group,eeee= element. - Example: (0008,0060) is Modality.
Each attribute has a VR (Value Representation) that defines how it is encoded:
- PN (Person Name), DA (Date), TM (Time), UI (Unique Identifier), CS (Code String), LO (Long String), SQ (Sequence), etc.
Why VR matters practically:
- If a sender encodes a UID as the wrong VR, strict parsers reject it.
- Sequences (SQ) are a common source of vendor mismatch because they contain nested datasets.
- Some issues only appear when a downstream system expects explicit VR or specific endian-ness.
Also remember there are two layers:
- File Meta Information (group 0002) — e.g., (0002,0010) Transfer Syntax UID
- Dataset (the actual DICOM object attributes) — e.g., patient/study/series tags
If you’re troubleshooting storage issues, always check both:
- Does the file meta transfer syntax match what the receiver negotiated?
- Does the dataset align with the negotiated SOP class?
Mandatory vs Optional Tags
In a perfect world, every object would be fully populated per its IOD requirements. In the real world:
- Some modalities are old or under-configured.
- Some gateways “clean” or “coerce” tags.
- Some vendors treat tags as “optional” even when operationally they are not.
DICOM uses concepts like:
- Type 1: mandatory and must have a valid value
- Type 2: mandatory but may be empty
- Type 3: optional
You don’t need to read the standard every day, but you do need to be pragmatic:
- Operationally mandatory ≠ Standard mandatory
- Your PACS/RIS workflow often requires fields to be non-empty even if DICOM allows empty.
Example: a PACS might accept empty Patient ID (0010,0020) (standard could allow empty in some cases), but your enterprise linking depends on it. In migrations, you typically treat Patient ID as “must be valid.”
This is where a validator workflow matters: use a tool (like /tools/dicom-header-validator coming soon) to flag missing / empty high-impact tags and enforce your project’s data contract.
The 5 Tags That Break Most Cross-Vendor Transfers
If I had to pick five tags that repeatedly break multi-vendor transfers, routing, and migrations, it’s these—because when they’re wrong, downstream systems either reject objects or silently misfile them.
-
(0010,0020) Patient ID (LO)
What breaks: reconciliation, patient merges, priors linking, RIS/PACS sync logic.
Common failure: empty, inconsistent formatting, different ID domains without issuer tracking. -
(0008,0050) Accession Number (SH)
What breaks: RIS/PACS order matching, worklist correlation, “study belongs to which order?” logic.
Common failure: missing/blank, truncated, reused across sites, or overwritten by gateway. -
(0020,000D) Study Instance UID (UI)
What breaks: study uniqueness. If this changes in transit, it becomes a “new study.”
Common failure: regenerated by router/archive, duplicate values across studies, or invalid UID format. -
(0020,000E) Series Instance UID (UI)
What breaks: series grouping and viewer behavior.
Common failure: series UID changes per resend; duplicates create series collisions. -
(0002,0010) Transfer Syntax UID (UI) (File Meta)
What breaks: pixel data decoding on the receiver (black images, “cannot display,” or hard reject).
Common failure: sender claims one transfer syntax but encodes another; receiver didn’t negotiate it.
Honorable mentions depending on your environment:
- (0008,0060) Modality (CS): routing rules, hanging protocols
- (0010,0010) Patient Name (PN): display, matching, duplicates
- (0008,0064) Conversion Type (CS): especially with Secondary Capture objects
- Character encoding ((0008,0005)) for non-Latin names
DICOM Networking: How Images Move Between Systems
A lot of teams start troubleshooting at the wrong layer: “the PACS didn’t receive the study.”
In reality, DICOM networking is deterministic. If you map it like a session negotiation + service exchange, you can isolate root cause quickly.
Association Negotiation
Before any DIMSE command happens, the two AEs negotiate an association. This includes:
- Calling AE Title (who initiates)
- Called AE Title (who is being called)
- Presentation Contexts:
- Abstract Syntax: SOP class (e.g., CT Image Storage)
- Transfer Syntax(es): how the data will be encoded (e.g., JPEG Lossless)
- Max PDU length and other transport-level parameters
- Optionally extended negotiation items
Most common real-world association failures:
- Wrong AE Title configured (case sensitivity matters in many implementations)
- Port closed / wrong route / firewall blocks
- Remote system is up but not listening (service down, wrong NIC binding)
- Presentation contexts rejected because SOP class not supported in that role
- Transfer syntax mismatch (sender only supports compressed, receiver only supports uncompressed)
A practitioner tip: treat C-ECHO as “ping,” but not as “full validation.”
You can pass C-ECHO and still fail C-STORE due to transfer syntax or SOP class issues.
Also: AE Title is not authentication. Many sites still rely on it like a password. In modern environments, segment networks and consider DICOM over TLS if supported—but operationally, be aware that “AE Title allowed list” is not real security.
C-STORE, C-FIND, C-MOVE, C-GET Explained
Here’s the practical meaning of the core commands.
C-STORE (Storage):
- “I’m sending you this instance.”
- A successful response means the receiver accepted responsibility for that instance (at least at protocol level).
Common operational failure modes:
- Receiver rejects due to SOP class or transfer syntax not negotiated
- Receiver accepts but later fails ingestion (you see “received” but not indexed)
- Timeouts due to slow storage, small PDU size, or packet loss
C-FIND (Query):
- “Search your database for matching objects.”
- Used for MWL and for Q/R queries (study/series/image level).
Failure modes:
- Wrong Query/Retrieve Level (0008,0052) (e.g., asking SERIES when SCP expects STUDY)
- Using unsupported query keys or matching behavior
- SCP is configured to only allow certain calling AEs
C-MOVE (Retrieve-to-third-party):
- The requester asks the Q/R SCP: “Send matching instances to destination AE X.”
- Important: the SCP will open a new outbound association to the destination AE.
Failure modes:
- Destination AE unreachable from SCP (routing/firewall/NAT)
- Destination AE title mismatch on SCP side
- SCP requires the destination AE to be pre-registered
- SCP can find objects but can’t open the move association → partial move failures
C-GET (Retrieve over same association):
- Similar to C-MOVE, but the SCP sends instances back on the same association (no third-party connection).
- Useful when NAT or firewall prevents the SCP from calling you back.
Failure modes:
- Fewer vendors support it well compared to C-MOVE
- Still can fail due to transfer syntaxes or object availability
A practical troubleshooting pattern:
- If C-MOVE fails and you suspect network return path issues, test C-GET (if supported) to isolate whether the issue is “return association” versus “object availability.”
DICOM Modality Worklist (MWL)
MWL is one of the biggest workflow stabilizers—when it works—and one of the most painful go-live blockers—when it doesn’t.
Conceptually:
- Modality (or modality broker) is MWL SCU
- RIS/Worklist provider is MWL SCP
- Modality sends C-FIND queries with scheduled procedure keys
- MWL SCP responds with matching worklist items
Key tags and practical pitfalls:
- Patient identifiers must match what RIS expects (Patient ID (0010,0020), Accession Number (0008,0050))
- Scheduled procedure and step IDs must be consistent for downstream MPPS / result workflows
- Date/time matching is often broken by:
- timezone assumptions
- formatting differences in DA/TM
- modality querying “today” but SCP storing in different date basis
MWL “looks” like DICOM query, but operationally it’s where RIS, modality, and PACS identity contracts collide. During go-live, treat MWL testing like a mini project:
- Define required fields per modality type
- Validate character set and naming
- Validate multi-site uniqueness (especially accession number domains)
WADO and DICOM Web Services
Modern imaging platforms increasingly expose DICOM objects through HTTP-based services known as DICOMweb. The key services you’ll encounter:
- WADO-URI: older retrieval style via URL parameters (widely implemented)
- WADO-RS: RESTful retrieval of instances/frames/metadata
- QIDO-RS: query/search over HTTP (study/series/instance)
- STOW-RS: store/upload via HTTP
Why this matters operationally:
- Web viewers (zero-footprint) often rely on WADO-RS/QIDO-RS
- Cross-enterprise sharing often uses DICOMweb with token-based auth
- DICOMweb introduces new failure classes: HTTP status codes, CORS, reverse proxy limits, MTU/fragmentation of large responses, and metadata-only retrieval behaviors
Practical pitfalls I see repeatedly:
- DICOMweb metadata returns are huge; proxies/timeouts kill responses.
- Authentication layers cause intermittent “works in one browser” behavior.
- Content negotiation issues (multipart responses, JSON metadata variants)
- If your archive uses DICOMweb but your workflow expects classic DIMSE Q/R, you need to validate both paths.
A simple reality check:
- DIMSE is still dominant in modality-to-PACS.
- DICOMweb is dominant in viewer distribution and modern APIs. Most enterprise deployments now run both, so you need to debug across both.
DICOM Transfer Syntaxes: Compression and Encoding
If DICOM is the contract, transfer syntax is the encoding agreement.
A DICOM transfer syntax defines:
- byte order (little/big endian)
- whether VR is explicit or implicit
- and for pixel data, the compression codec (JPEG, JPEG-LS, JPEG2000, RLE, etc.)
Transfer Syntax UID lives in:
- File meta: (0002,0010) Transfer Syntax UID
- And during association negotiation as a proposed transfer syntax per presentation context
Uncompressed Transfer Syntaxes
The common uncompressed ones you’ll see:
- Implicit VR Little Endian (classic default in many systems)
- Explicit VR Little Endian
- Explicit VR Big Endian (less common now)
Operational notes:
- Some older systems only support implicit VR.
- Some strict systems prefer explicit VR and fail on edge-case encodings.
- Uncompressed means larger network payloads and storage usage—but it is the most interoperable baseline.
When in doubt during go-live:
- Validate that both ends can successfully C-STORE using Explicit VR Little Endian as a “safe baseline” (if supported).
- Then enable compression if needed and supported by both ends.
Lossy vs Lossless Compression
Lossless compression preserves pixel data exactly. Common examples:
- JPEG Lossless
- JPEG-LS Lossless
- JPEG 2000 Lossless
- RLE Lossless
Lossy compression reduces data and changes pixel values. Common examples:
- JPEG baseline (lossy)
- JPEG 2000 lossy
Operationally, compression decisions are not just storage decisions:
- Some advanced tools (CAD, quantitative imaging) require lossless.
- Some regulatory or clinical policies restrict lossy for certain modalities or use cases.
- Some vendors’ decompression performance is poor, causing viewer lag.
You should always clarify:
- Which modalities can be lossy (if any)?
- At what stage is compression applied? Modality, router, PACS ingestion, archive tiering?
- Does the system preserve original + derived? Or only derived?
And from a DICOM compatibility standpoint:
- A receiver must negotiate the transfer syntax to accept it on C-STORE.
- If a sender “forces” compression and the receiver can’t decode, you’ll see either association negotiation failures or silent ingestion failures.
Choosing the Right Transfer Syntax for Your PACS
There’s no universal “best” transfer syntax. The right choice is a balance of:
- Interoperability (what every endpoint supports)
- Performance (CPU decode cost vs network/storage savings)
- Clinical policy (lossy restrictions)
- Lifecycle (migration, archive, cross-site replication)
A practical selection approach:
- Establish a baseline workflow that works uncompressed (or with a broadly supported syntax).
- Confirm each modality’s native output transfer syntax (don’t assume).
- Decide compression policy per modality:
- CT/MR often can be lossless compressed safely if supported widely.
- Mammography and some quantitative workflows may require stricter rules.
- Validate viewer and post-processing performance with real workload.
- Document the chosen transfer syntaxes in the interface spec and in the conformance test pack.
Also: don’t forget multiple transfer syntaxes can be proposed in a single presentation context. If you have mixed endpoints, ordering matters in some implementations (they pick the first acceptable). That can explain “it works with vendor A but fails with vendor B” when both claim support.
Common DICOM Failures and How to Diagnose Them
DICOM failures are rarely mysterious. They become mysterious when logs are missing or when teams don’t separate negotiation from data problems.
For a deeper list, see the dedicated breakdown of common DICOM errors. Here, we’ll focus on the failure classes you’ll see in almost every hospital integration.
Association Rejection Errors
Association rejections typically occur before any C-STORE/C-FIND happens. Common causes:
1) Called AE Title not recognized
- Receiver checks the “Called AE Title” against its configuration and rejects.
- Fix: ensure the sender’s “Remote AE Title” matches exactly what the receiver expects.
2) Calling AE Title not authorized
- Receiver only accepts associations from pre-registered calling AEs.
- Fix: add calling AE title/IP to allowed list.
3) No presentation contexts accepted
- They connected, but they have no shared SOP class / transfer syntax agreement.
- Fix: confirm the sender is proposing the correct SOP class and a transfer syntax the receiver accepts for that role.
4) Network reachability issues
- Timeouts masquerade as DICOM errors.
- Validate with basic TCP checks (port open), then verify service is listening.
Practical workflow
- Step 1: Confirm IP/port reachability and service listening.
- Step 2: Confirm AE titles (called/calling).
- Step 3: Capture association negotiation details (presentation contexts accepted/rejected).
- Step 4: Only then move to data issues.
Example of what you want in logs during escalation:
- Calling AE, Called AE
- Remote IP/port
- SOP class proposed + accepted
- Transfer syntax proposed + accepted
- Reject reason code if rejected
If your vendor logs don’t show this, request “association negotiation logs” explicitly.
Tag Coercion Issues
“Tag coercion” is when a PACS/router modifies DICOM attributes during ingestion or forwarding. Sometimes it’s intentional and necessary (normalizing patient ID, mapping accession number, correcting character sets). Sometimes it’s a hidden behavior that breaks downstream systems.
Common coercion problems:
1) UID regeneration
- Router generates new Study Instance UID (0020,000D) or Series Instance UID (0020,000E).
- Impact: breaks study continuity and reconciliation; migration validation becomes difficult.
- Mitigation: insist on UID preservation unless there is a controlled, documented reason.
2) Patient identity rewriting
- Patient ID (0010,0020) changed to local MRN format.
- Impact: cross-site enterprise workflows break; priors linking fails.
- Mitigation: define identity authority rules; preserve original in Issuer fields if used.
3) Accession number normalization
- Truncation or padding.
- Impact: RIS order matching breaks.
- Mitigation: ensure the accession domain and format are agreed end-to-end.
4) Modality (0008,0060) remapping
- System “corrects” modality values (e.g., “DX” vs “CR” vs “DR”) based on internal rules.
- Impact: routing rules and hanging protocols misfire.
- Mitigation: validate routing conditions with real headers and confirm mapping rules.
A real-world diagnostic pattern:
- Compare the header at source vs at destination.
- Identify which hop changed it (modality, router, PACS ingest, archive export).
- If you don’t have access to intermediate hops, capture a file at each boundary (or use sniffing tools if policy allows).
This is exactly where a header validation and comparison tool is valuable (again: /tools/dicom-header-validator coming soon).
Character Encoding Problems (Specific Character Set)
Character encoding issues look “cosmetic” until they break matching and reconciliation.
The key tag is:
- (0008,0005) Specific Character Set (CS)
If it’s missing or wrong, non-Latin characters (Arabic names, accents, etc.) can become:
- garbled
- replaced with question marks
- re-encoded inconsistently across systems
Common scenarios:
- RIS sends patient name in local language; modality stores it in DICOM with wrong character set.
- PACS stores correctly, but viewer assumes a different encoding.
- Migration tools export/import with lossy text conversion.
How to diagnose:
- Check whether Specific Character Set (0008,0005) exists and what value it has.
- Confirm which encodings your PACS/viewer supports.
- Compare the same tag across the workflow (modality → PACS → archive → viewer).
- If multiple systems write the patient name, determine the authoritative source.
Operational mitigation:
- Agree on encoding policy early for multilingual environments.
- Validate using real patient-name test cases (with non-Latin scripts).
- Avoid “silent fixes” where systems rewrite Patient Name without preserving original.
DICOM Conformance Statements: How to Read Them
A DICOM conformance statement is the vendor’s promise—often written in a way that is technically correct but operationally incomplete.
Your goal reading conformance statements is not to “learn DICOM.” It’s to answer:
- Can system A and B actually interoperate in your workflow?
- Under what roles, SOP classes, and transfer syntaxes?
- What are the limits, optional behaviors, and configuration dependencies?
What to focus on:
1) SOP Classes and Roles Look for tables like:
- CT Image Storage — SCU/SCP supported?
- MR Image Storage — SCU/SCP supported?
- MWL — SCU or SCP?
- MPPS — SCU or SCP?
- Storage Commitment — SCU or SCP?
If you only remember one rule:
Both sides can “support” a service, but if the roles don’t align, the workflow fails.
2) Transfer Syntax support per SOP class Vendors often list transfer syntaxes globally, but operationally support varies per SOP class.
Confirm:
- For CT/MR storage, do they accept JPEG-LS? JPEG2000? Uncompressed?
- For SR objects, do they accept explicit VR only?
- For encapsulated PDF, do they support the encoding you need?
3) Association limits and performance constraints Conformance statements may include:
- max associations
- max PDU size
- max concurrent operations
- supported query keys and matching rules
These become critical in high-volume hospitals:
- “It worked in testing” but fails in production due to concurrency limits.
- MWL queries time out under load because matching is slow or indexes are missing.
4) Implementation details that hide operational constraints Look for sections like:
- “Configuration” or “options”
- “Private attributes”
- “Known limitations”
- “Supported IOD attributes”
If you’re doing integration readiness for go-live, fold this into your PACS implementation execution plan: conformance review is not paperwork—it determines your test cases.
5) Beware of “supports DICOM” claims A vendor can truthfully claim DICOM support while:
- only supporting Secondary Capture storage
- not supporting MWL/MPPS
- supporting only a narrow set of transfer syntaxes
- requiring paid modules for certain SOP classes
Always request the conformance statement for the exact version being deployed. Versions matter.
Validating Your DICOM Implementation
Validation is where experienced teams differentiate themselves. A lot of outages happen not because DICOM is complex, but because validation is treated as “send a few images and call it done.”
Validation should prove:
- Connectivity is stable
- Negotiation is correct
- Metadata is correct
- Workflow contracts are correct (RIS/PACS/modality/viewer)
- Performance under realistic volume is acceptable
- Edge cases are handled (special characters, missing tags, odd studies)
A practical validation approach (that survives go-live):
A) Build a connectivity and role matrix For every node:
- AE Title
- IP/Port
- TLS? (if applicable)
- Supported services (Storage SCP/SCU, MWL SCU/SCP, Q/R)
- Expected transfer syntaxes
- Routing policies (if router involved)
B) Validate negotiation explicitly Don’t just test “it sends.” Capture what was negotiated:
- SOP classes accepted
- transfer syntax chosen
- association parameters
If the vendor won’t provide logs, insist. Otherwise you’re blind at 2 AM.
C) Validate metadata using a defined “golden header checklist” For your environment, define the header contract:
- Patient ID/Issuer rules
- Accession number format rules
- Study/Series UID preservation rules
- Character encoding rules
- Required tags per modality type
Then validate using:
- a header viewer
- and ideally a validator workflow (the role of /tools/dicom-header-validator coming soon)
D) Validate MWL and order correlation end-to-end For each modality type, test:
- correct worklist filtering
- correct population of patient/study identifiers
- correct accession number in stored images matching RIS order
- behavior for reschedules, merges, cancellations (if your workflow requires)
E) Validate Query/Retrieve Test:
- C-FIND at STUDY and SERIES levels
- C-MOVE to a destination AE (verify return path)
- failure handling: what happens if destination is down?
- timeouts under load
F) Validate “non-image” objects if your workflow uses them If you use:
- SR (structured reports)
- presentation states
- key objects Then validate those SOP classes explicitly. They often break because teams only test pixel images.
G) Validate under realistic load A system that passes 10 studies can fail under 300/hour due to:
- association limits
- slow storage
- database indexing issues
- network MTU/fragmentation issues
Load testing doesn’t have to be fancy. It does have to be representative.
H) Document outcomes and decisions During go-live, you need traceability:
- what was tested
- what passed/failed
- what was accepted as limitation
- what remediation was applied (tag coercion rules, compression policy, etc.)
If you want a structured operational framework for this, align it with your PACS implementation plan. Validation isn’t a standalone activity; it’s a go-live gate.
Quick Reference: Essential DICOM Tags Every Admin Should Know
This section is meant to be the “cheat sheet” you keep open when triaging: routing failures, identity mismatches, bad hanging protocols, broken migrations, and viewer display issues.
Below is a reference table of essential tags. It’s not exhaustive, but it includes the tags that most often determine whether a study lands correctly, matches the order, displays properly, and can be retrieved.
| Tag (Group,Element) | Name | VR | What breaks when it’s wrong |
|---|---|---|---|
| (0008,0016) | SOP Class UID | UI | Receiver can reject the object; system misclassifies object type; viewers may not render SR/PR correctly |
| (0008,0018) | SOP Instance UID | UI | Duplicate/invalid UIDs cause collisions; ingestion rejects; retrieval inconsistencies |
| (0020,000D) | Study Instance UID | UI | Study splits/duplicates; priors linking fails; migration validation becomes unreliable |
| (0020,000E) | Series Instance UID | UI | Series grouping breaks; hanging protocols misbehave; duplicates create series collisions |
| (0008,0050) | Accession Number | SH | RIS/PACS matching fails; worklist correlation breaks; study appears “unmatched” |
| (0010,0020) | Patient ID | LO | Patient reconciliation fails; priors not found; merges become dangerous; cross-site identity breaks |
| (0010,0010) | Patient Name | PN | Display issues; duplicate detection impacted; multilingual corruption if encoding mismatched |
| (0010,0030) | Patient’s Birth Date | DA | Patient matching rules can fail; demographic reconciliation errors |
| (0008,0020) | Study Date | DA | Sorting and timeline views wrong; routing rules by date misfire; query filters fail |
| (0008,0030) | Study Time | TM | Timeline inconsistencies; some viewers misorder studies; audit trails impacted |
| (0008,0060) | Modality | CS | Routing rules fail; hanging protocols select wrong layouts; analytics misclassify exams |
| (0008,1030) | Study Description | LO | Hanging protocols and worklists become less usable; often used for routing filters |
| (0018,0015) | Body Part Examined | CS | Hanging protocols/routing rules fail (site-specific); reporting worklists less accurate |
| (0020,0011) | Series Number | IS | Series ordering issues; radiologists complain “series shuffled” |
| (0020,0013) | Instance Number | IS | Image ordering issues; cine playback incorrect; stack navigation breaks |
| (0008,0005) | Specific Character Set | CS | Non-Latin patient names corrupt; matching and display issues across systems |
| (0028,0010) | Rows | US | Pixel decode/display issues; image may not render or appears distorted |
| (0028,0011) | Columns | US | Pixel decode/display issues; image may not render or appears distorted |
| (0028,0004) | Photometric Interpretation | CS | Images look inverted/washed out; “black image” complaints; especially in CR/DX |
| (0028,0100) | Bits Allocated | US | Pixel decode fails; viewer errors; wrong windowing behavior |
| (0028,0101) | Bits Stored | US | Windowing problems; incorrect pixel intensity scaling |
| (0028,1050) | Window Center | DS | Default display wrong; clinicians complain “too dark/too bright” |
| (0028,1051) | Window Width | DS | Default display wrong; hanging protocol behavior inconsistent |
| (0002,0010) | Transfer Syntax UID | UI | Receiver can’t decode pixel data; ingestion rejects or viewer displays garbage |
| (0028,0002) | Samples per Pixel | US | Color vs grayscale decode errors; incorrect rendering |
| (7FE0,0010) | Pixel Data | OB/OW | Missing pixel data leads to empty images; corruption suggests transfer/codec mismatch |
How to use this table during incidents
- If a study is “received but not visible”: focus on identity tags + UIDs + accession number.
- If a study is visible but images look wrong: focus on transfer syntax + photometric interpretation + bits + windowing.
- If Q/R returns weird results: focus on Study/Series UIDs + query keys + Study Date/Time consistency.
- If names are garbled: focus on Specific Character Set (0008,0005) and upstream encoding policies.
Recommended workflow (practical)
- Extract a source DICOM file from modality or router.
- Extract the “same” instance from PACS archive/export.
- Compare:
- Patient ID, Accession Number
- Study/Series/SOP Instance UIDs
- Transfer Syntax UID
- Character Set
- If mismatched, identify which hop coerced the tag and whether it was intended.