Architecture
dicomqc separates DICOM parsing from validation and reporting.
DICOM files
|
v
Backend
|
v
Normalized metadata model
|
v
Rule engine
|
v
Reports
Backend boundary
The pydicom backend is isolated behind a small protocol:
class DicomBackend:
def read_metadata(self, path):
...
Other modules operate on normalized metadata records and do not import pydicom. This keeps the project open to future backends, including a possible Rust-based reader.
Normalized model
Each record contains file-level metadata such as manufacturer, modality, study UID, and series UID, plus normalized tag records with:
- tag number
- keyword
- VR
- private-tag flag
- redaction-safe value state
Raw values may be used internally by rules, but reports should not expose them.