@cosyte/dicom 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -11,7 +11,7 @@ var __export = (target, all) => {
11
11
  };
12
12
 
13
13
  // src/version.ts
14
- var VERSION = "0.0.12";
14
+ var VERSION = "0.0.14";
15
15
 
16
16
  // src/dictionary/index.ts
17
17
  var dictionary_exports = {};
@@ -10579,6 +10579,11 @@ var UIDS = {
10579
10579
  "1.2.840.10008.1.2.4.110": { uid: "1.2.840.10008.1.2.4.110", name: "JPEG XL Lossless", type: "TransferSyntax", retired: false },
10580
10580
  "1.2.840.10008.1.2.4.111": { uid: "1.2.840.10008.1.2.4.111", name: "JPEG XL JPEG Recompression", type: "TransferSyntax", retired: false },
10581
10581
  "1.2.840.10008.1.2.4.112": { uid: "1.2.840.10008.1.2.4.112", name: "JPEG XL", type: "TransferSyntax", retired: false },
10582
+ "1.2.840.10008.1.2.4.201": { uid: "1.2.840.10008.1.2.4.201", name: "High-Throughput JPEG 2000 Image Compression (Lossless Only)", type: "TransferSyntax", retired: false },
10583
+ "1.2.840.10008.1.2.4.202": { uid: "1.2.840.10008.1.2.4.202", name: "High-Throughput JPEG 2000 with RPCL Options Image Compression (Lossless Only)", type: "TransferSyntax", retired: false },
10584
+ "1.2.840.10008.1.2.4.203": { uid: "1.2.840.10008.1.2.4.203", name: "High-Throughput JPEG 2000 Image Compression", type: "TransferSyntax", retired: false },
10585
+ "1.2.840.10008.1.2.4.204": { uid: "1.2.840.10008.1.2.4.204", name: "JPIP HTJ2K Referenced", type: "TransferSyntax", retired: false },
10586
+ "1.2.840.10008.1.2.4.205": { uid: "1.2.840.10008.1.2.4.205", name: "JPIP HTJ2K Referenced Deflate", type: "TransferSyntax", retired: false },
10582
10587
  "1.2.840.10008.1.2.4.50": { uid: "1.2.840.10008.1.2.4.50", name: "JPEG Baseline (Process 1)", type: "TransferSyntax", retired: false },
10583
10588
  "1.2.840.10008.1.2.4.51": { uid: "1.2.840.10008.1.2.4.51", name: "JPEG Extended (Process 2 & 4)", type: "TransferSyntax", retired: false },
10584
10589
  "1.2.840.10008.1.2.4.52": { uid: "1.2.840.10008.1.2.4.52", name: "JPEG Extended (Process 3 & 5)", type: "TransferSyntax", retired: true },
@@ -10611,20 +10616,98 @@ var UIDS = {
10611
10616
  "1.2.840.10008.1.2.7.1": { uid: "1.2.840.10008.1.2.7.1", name: "SMPTE ST 2110-20 Uncompressed Progressive Active Video", type: "TransferSyntax", retired: false },
10612
10617
  "1.2.840.10008.1.2.7.2": { uid: "1.2.840.10008.1.2.7.2", name: "SMPTE ST 2110-20 Uncompressed Interlaced Active Video", type: "TransferSyntax", retired: false },
10613
10618
  "1.2.840.10008.1.2.7.3": { uid: "1.2.840.10008.1.2.7.3", name: "SMPTE ST 2110-30 PCM Digital Audio", type: "TransferSyntax", retired: false },
10619
+ "1.2.840.10008.1.2.8.1": { uid: "1.2.840.10008.1.2.8.1", name: "Deflated Image Frame Compression", type: "TransferSyntax", retired: false },
10620
+ "1.2.840.10008.1.20": { uid: "1.2.840.10008.1.20", name: "Papyrus 3 Implicit VR Little Endian", type: "TransferSyntax", retired: true },
10614
10621
  "1.2.840.10008.1.20.1": { uid: "1.2.840.10008.1.20.1", name: "Storage Commitment Push Model SOP Class", type: "SOPClass", retired: false },
10615
10622
  "1.2.840.10008.1.20.1.1": { uid: "1.2.840.10008.1.20.1.1", name: "Storage Commitment Push Model SOP Instance", type: "WellKnownSOPInstance", retired: false },
10623
+ "1.2.840.10008.1.20.2": { uid: "1.2.840.10008.1.20.2", name: "Storage Commitment Pull Model SOP Class", type: "SOPClass", retired: true },
10624
+ "1.2.840.10008.1.20.2.1": { uid: "1.2.840.10008.1.20.2.1", name: "Storage Commitment Pull Model SOP Instance", type: "WellKnownSOPInstance", retired: true },
10616
10625
  "1.2.840.10008.1.3.10": { uid: "1.2.840.10008.1.3.10", name: "Media Storage Directory Storage", type: "SOPClass", retired: false },
10617
10626
  "1.2.840.10008.1.4.1.1": { uid: "1.2.840.10008.1.4.1.1", name: "Talairach Brain Atlas Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10627
+ "1.2.840.10008.1.4.1.10": { uid: "1.2.840.10008.1.4.1.10", name: "SPM2 GRAY Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10628
+ "1.2.840.10008.1.4.1.11": { uid: "1.2.840.10008.1.4.1.11", name: "SPM2 WHITE Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10629
+ "1.2.840.10008.1.4.1.12": { uid: "1.2.840.10008.1.4.1.12", name: "SPM2 CSF Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10630
+ "1.2.840.10008.1.4.1.13": { uid: "1.2.840.10008.1.4.1.13", name: "SPM2 BRAINMASK Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10631
+ "1.2.840.10008.1.4.1.14": { uid: "1.2.840.10008.1.4.1.14", name: "SPM2 AVG305T1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10632
+ "1.2.840.10008.1.4.1.15": { uid: "1.2.840.10008.1.4.1.15", name: "SPM2 AVG152T1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10633
+ "1.2.840.10008.1.4.1.16": { uid: "1.2.840.10008.1.4.1.16", name: "SPM2 AVG152T2 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10634
+ "1.2.840.10008.1.4.1.17": { uid: "1.2.840.10008.1.4.1.17", name: "SPM2 AVG152PD Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10635
+ "1.2.840.10008.1.4.1.18": { uid: "1.2.840.10008.1.4.1.18", name: "SPM2 SINGLESUBJT1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10618
10636
  "1.2.840.10008.1.4.1.2": { uid: "1.2.840.10008.1.4.1.2", name: "SPM2 T1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10619
10637
  "1.2.840.10008.1.4.1.3": { uid: "1.2.840.10008.1.4.1.3", name: "SPM2 T2 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10620
10638
  "1.2.840.10008.1.4.1.4": { uid: "1.2.840.10008.1.4.1.4", name: "SPM2 PD Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10621
10639
  "1.2.840.10008.1.4.1.5": { uid: "1.2.840.10008.1.4.1.5", name: "SPM2 EPI Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10640
+ "1.2.840.10008.1.4.1.6": { uid: "1.2.840.10008.1.4.1.6", name: "SPM2 FIL T1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10641
+ "1.2.840.10008.1.4.1.7": { uid: "1.2.840.10008.1.4.1.7", name: "SPM2 PET Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10642
+ "1.2.840.10008.1.4.1.8": { uid: "1.2.840.10008.1.4.1.8", name: "SPM2 TRANSM Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10643
+ "1.2.840.10008.1.4.1.9": { uid: "1.2.840.10008.1.4.1.9", name: "SPM2 SPECT Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10622
10644
  "1.2.840.10008.1.4.2.1": { uid: "1.2.840.10008.1.4.2.1", name: "ICBM 452 T1 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10623
10645
  "1.2.840.10008.1.4.2.2": { uid: "1.2.840.10008.1.4.2.2", name: "ICBM Single Subject MRI Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10646
+ "1.2.840.10008.1.4.3.1": { uid: "1.2.840.10008.1.4.3.1", name: "IEC 61217 Fixed Coordinate System Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10647
+ "1.2.840.10008.1.4.3.2": { uid: "1.2.840.10008.1.4.3.2", name: "Standard Robotic-Arm Coordinate System Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10648
+ "1.2.840.10008.1.4.3.3": { uid: "1.2.840.10008.1.4.3.3", name: "IEC 61217 Table Top Coordinate System Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10649
+ "1.2.840.10008.1.4.4.1": { uid: "1.2.840.10008.1.4.4.1", name: "SRI24 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10650
+ "1.2.840.10008.1.4.5.1": { uid: "1.2.840.10008.1.4.5.1", name: "Colin27 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10651
+ "1.2.840.10008.1.4.6.1": { uid: "1.2.840.10008.1.4.6.1", name: "LPBA40/AIR Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10652
+ "1.2.840.10008.1.4.6.2": { uid: "1.2.840.10008.1.4.6.2", name: "LPBA40/FLIRT Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10653
+ "1.2.840.10008.1.4.6.3": { uid: "1.2.840.10008.1.4.6.3", name: "LPBA40/SPM5 Frame of Reference", type: "WellKnownFrameOfReference", retired: false },
10624
10654
  "1.2.840.10008.1.40": { uid: "1.2.840.10008.1.40", name: "Procedural Event Logging SOP Class", type: "SOPClass", retired: false },
10625
10655
  "1.2.840.10008.1.40.1": { uid: "1.2.840.10008.1.40.1", name: "Procedural Event Logging SOP Instance", type: "WellKnownSOPInstance", retired: false },
10626
10656
  "1.2.840.10008.1.42": { uid: "1.2.840.10008.1.42", name: "Substance Administration Logging SOP Class", type: "SOPClass", retired: false },
10627
10657
  "1.2.840.10008.1.42.1": { uid: "1.2.840.10008.1.42.1", name: "Substance Administration Logging SOP Instance", type: "WellKnownSOPInstance", retired: false },
10658
+ "1.2.840.10008.1.5.1": { uid: "1.2.840.10008.1.5.1", name: "Hot Iron Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10659
+ "1.2.840.10008.1.5.2": { uid: "1.2.840.10008.1.5.2", name: "PET Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10660
+ "1.2.840.10008.1.5.3": { uid: "1.2.840.10008.1.5.3", name: "Hot Metal Blue Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10661
+ "1.2.840.10008.1.5.4": { uid: "1.2.840.10008.1.5.4", name: "PET 20 Step Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10662
+ "1.2.840.10008.1.5.5": { uid: "1.2.840.10008.1.5.5", name: "Spring Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10663
+ "1.2.840.10008.1.5.6": { uid: "1.2.840.10008.1.5.6", name: "Summer Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10664
+ "1.2.840.10008.1.5.7": { uid: "1.2.840.10008.1.5.7", name: "Fall Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10665
+ "1.2.840.10008.1.5.8": { uid: "1.2.840.10008.1.5.8", name: "Winter Color Palette SOP Instance", type: "WellKnownSOPInstance", retired: false },
10666
+ "1.2.840.10008.1.9": { uid: "1.2.840.10008.1.9", name: "Basic Study Content Notification SOP Class", type: "SOPClass", retired: true },
10667
+ "1.2.840.10008.10.1": { uid: "1.2.840.10008.10.1", name: "Video Endoscopic Image Real-Time Communication", type: "SOPClass", retired: false },
10668
+ "1.2.840.10008.10.2": { uid: "1.2.840.10008.10.2", name: "Video Photographic Image Real-Time Communication", type: "SOPClass", retired: false },
10669
+ "1.2.840.10008.10.3": { uid: "1.2.840.10008.10.3", name: "Audio Waveform Real-Time Communication", type: "SOPClass", retired: false },
10670
+ "1.2.840.10008.10.4": { uid: "1.2.840.10008.10.4", name: "Rendition Selection Document Real-Time Communication", type: "SOPClass", retired: false },
10671
+ "1.2.840.10008.15.0.3.1": { uid: "1.2.840.10008.15.0.3.1", name: "dicomDeviceName", type: "Other", retired: false },
10672
+ "1.2.840.10008.15.0.3.10": { uid: "1.2.840.10008.15.0.3.10", name: "dicomAssociationInitiator", type: "Other", retired: false },
10673
+ "1.2.840.10008.15.0.3.11": { uid: "1.2.840.10008.15.0.3.11", name: "dicomAssociationAcceptor", type: "Other", retired: false },
10674
+ "1.2.840.10008.15.0.3.12": { uid: "1.2.840.10008.15.0.3.12", name: "dicomHostname", type: "Other", retired: false },
10675
+ "1.2.840.10008.15.0.3.13": { uid: "1.2.840.10008.15.0.3.13", name: "dicomPort", type: "Other", retired: false },
10676
+ "1.2.840.10008.15.0.3.14": { uid: "1.2.840.10008.15.0.3.14", name: "dicomSOPClass", type: "Other", retired: false },
10677
+ "1.2.840.10008.15.0.3.15": { uid: "1.2.840.10008.15.0.3.15", name: "dicomTransferRole", type: "Other", retired: false },
10678
+ "1.2.840.10008.15.0.3.16": { uid: "1.2.840.10008.15.0.3.16", name: "dicomTransferSyntax", type: "Other", retired: false },
10679
+ "1.2.840.10008.15.0.3.17": { uid: "1.2.840.10008.15.0.3.17", name: "dicomPrimaryDeviceType", type: "Other", retired: false },
10680
+ "1.2.840.10008.15.0.3.18": { uid: "1.2.840.10008.15.0.3.18", name: "dicomRelatedDeviceReference", type: "Other", retired: false },
10681
+ "1.2.840.10008.15.0.3.19": { uid: "1.2.840.10008.15.0.3.19", name: "dicomPreferredCalledAETitle", type: "Other", retired: false },
10682
+ "1.2.840.10008.15.0.3.2": { uid: "1.2.840.10008.15.0.3.2", name: "dicomDescription", type: "Other", retired: false },
10683
+ "1.2.840.10008.15.0.3.20": { uid: "1.2.840.10008.15.0.3.20", name: "dicomTLSCyphersuite", type: "Other", retired: false },
10684
+ "1.2.840.10008.15.0.3.21": { uid: "1.2.840.10008.15.0.3.21", name: "dicomAuthorizedNodeCertificateReference", type: "Other", retired: false },
10685
+ "1.2.840.10008.15.0.3.22": { uid: "1.2.840.10008.15.0.3.22", name: "dicomThisNodeCertificateReference", type: "Other", retired: false },
10686
+ "1.2.840.10008.15.0.3.23": { uid: "1.2.840.10008.15.0.3.23", name: "dicomInstalled", type: "Other", retired: false },
10687
+ "1.2.840.10008.15.0.3.24": { uid: "1.2.840.10008.15.0.3.24", name: "dicomStationName", type: "Other", retired: false },
10688
+ "1.2.840.10008.15.0.3.25": { uid: "1.2.840.10008.15.0.3.25", name: "dicomDeviceSerialNumber", type: "Other", retired: false },
10689
+ "1.2.840.10008.15.0.3.26": { uid: "1.2.840.10008.15.0.3.26", name: "dicomInstitutionName", type: "Other", retired: false },
10690
+ "1.2.840.10008.15.0.3.27": { uid: "1.2.840.10008.15.0.3.27", name: "dicomInstitutionAddress", type: "Other", retired: false },
10691
+ "1.2.840.10008.15.0.3.28": { uid: "1.2.840.10008.15.0.3.28", name: "dicomInstitutionDepartmentName", type: "Other", retired: false },
10692
+ "1.2.840.10008.15.0.3.29": { uid: "1.2.840.10008.15.0.3.29", name: "dicomIssuerOfPatientID", type: "Other", retired: false },
10693
+ "1.2.840.10008.15.0.3.3": { uid: "1.2.840.10008.15.0.3.3", name: "dicomManufacturer", type: "Other", retired: false },
10694
+ "1.2.840.10008.15.0.3.30": { uid: "1.2.840.10008.15.0.3.30", name: "dicomPreferredCallingAETitle", type: "Other", retired: false },
10695
+ "1.2.840.10008.15.0.3.31": { uid: "1.2.840.10008.15.0.3.31", name: "dicomSupportedCharacterSet", type: "Other", retired: false },
10696
+ "1.2.840.10008.15.0.3.4": { uid: "1.2.840.10008.15.0.3.4", name: "dicomManufacturerModelName", type: "Other", retired: false },
10697
+ "1.2.840.10008.15.0.3.5": { uid: "1.2.840.10008.15.0.3.5", name: "dicomSoftwareVersion", type: "Other", retired: false },
10698
+ "1.2.840.10008.15.0.3.6": { uid: "1.2.840.10008.15.0.3.6", name: "dicomVendorData", type: "Other", retired: false },
10699
+ "1.2.840.10008.15.0.3.7": { uid: "1.2.840.10008.15.0.3.7", name: "dicomAETitle", type: "Other", retired: false },
10700
+ "1.2.840.10008.15.0.3.8": { uid: "1.2.840.10008.15.0.3.8", name: "dicomNetworkConnectionReference", type: "Other", retired: false },
10701
+ "1.2.840.10008.15.0.3.9": { uid: "1.2.840.10008.15.0.3.9", name: "dicomApplicationCluster", type: "Other", retired: false },
10702
+ "1.2.840.10008.15.0.4.1": { uid: "1.2.840.10008.15.0.4.1", name: "dicomConfigurationRoot", type: "Other", retired: false },
10703
+ "1.2.840.10008.15.0.4.2": { uid: "1.2.840.10008.15.0.4.2", name: "dicomDevicesRoot", type: "Other", retired: false },
10704
+ "1.2.840.10008.15.0.4.3": { uid: "1.2.840.10008.15.0.4.3", name: "dicomUniqueAETitlesRegistryRoot", type: "Other", retired: false },
10705
+ "1.2.840.10008.15.0.4.4": { uid: "1.2.840.10008.15.0.4.4", name: "dicomDevice", type: "Other", retired: false },
10706
+ "1.2.840.10008.15.0.4.5": { uid: "1.2.840.10008.15.0.4.5", name: "dicomNetworkAE", type: "Other", retired: false },
10707
+ "1.2.840.10008.15.0.4.6": { uid: "1.2.840.10008.15.0.4.6", name: "dicomNetworkConnection", type: "Other", retired: false },
10708
+ "1.2.840.10008.15.0.4.7": { uid: "1.2.840.10008.15.0.4.7", name: "dicomUniqueAETitle", type: "Other", retired: false },
10709
+ "1.2.840.10008.15.0.4.8": { uid: "1.2.840.10008.15.0.4.8", name: "dicomTransferCapability", type: "Other", retired: false },
10710
+ "1.2.840.10008.15.1.1": { uid: "1.2.840.10008.15.1.1", name: "Universal Coordinated Time", type: "Other", retired: false },
10628
10711
  "1.2.840.10008.2.16.10": { uid: "1.2.840.10008.2.16.10", name: "Dublin Core", type: "CodingScheme", retired: false },
10629
10712
  "1.2.840.10008.2.16.11": { uid: "1.2.840.10008.2.16.11", name: "New York University Melanoma Clinical Cooperative Group", type: "CodingScheme", retired: false },
10630
10713
  "1.2.840.10008.2.16.12": { uid: "1.2.840.10008.2.16.12", name: "Mayo Clinic Non-radiological Images Specific Body Structure Anatomical Surface Region Guide", type: "CodingScheme", retired: false },
@@ -10640,7 +10723,50 @@ var UIDS = {
10640
10723
  "1.2.840.10008.2.16.7": { uid: "1.2.840.10008.2.16.7", name: "Integrated Taxonomic Information System (ITIS) Taxonomic Serial Number (TSN)", type: "CodingScheme", retired: false },
10641
10724
  "1.2.840.10008.2.16.8": { uid: "1.2.840.10008.2.16.8", name: "Mouse Genome Initiative (MGI)", type: "CodingScheme", retired: false },
10642
10725
  "1.2.840.10008.2.16.9": { uid: "1.2.840.10008.2.16.9", name: "PubChem Compound CID", type: "CodingScheme", retired: false },
10726
+ "1.2.840.10008.2.6.1": { uid: "1.2.840.10008.2.6.1", name: "DICOM UID Registry", type: "CodingScheme", retired: false },
10643
10727
  "1.2.840.10008.3.1.1.1": { uid: "1.2.840.10008.3.1.1.1", name: "DICOM Application Context Name", type: "ApplicationContext", retired: false },
10728
+ "1.2.840.10008.3.1.2.1.1": { uid: "1.2.840.10008.3.1.2.1.1", name: "Detached Patient Management SOP Class", type: "SOPClass", retired: true },
10729
+ "1.2.840.10008.3.1.2.1.4": { uid: "1.2.840.10008.3.1.2.1.4", name: "Detached Patient Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10730
+ "1.2.840.10008.3.1.2.2.1": { uid: "1.2.840.10008.3.1.2.2.1", name: "Detached Visit Management SOP Class", type: "SOPClass", retired: true },
10731
+ "1.2.840.10008.3.1.2.3.1": { uid: "1.2.840.10008.3.1.2.3.1", name: "Detached Study Management SOP Class", type: "SOPClass", retired: true },
10732
+ "1.2.840.10008.3.1.2.3.2": { uid: "1.2.840.10008.3.1.2.3.2", name: "Study Component Management SOP Class", type: "SOPClass", retired: true },
10733
+ "1.2.840.10008.3.1.2.3.3": { uid: "1.2.840.10008.3.1.2.3.3", name: "Modality Performed Procedure Step SOP Class", type: "SOPClass", retired: false },
10734
+ "1.2.840.10008.3.1.2.3.4": { uid: "1.2.840.10008.3.1.2.3.4", name: "Modality Performed Procedure Step Retrieve SOP Class", type: "SOPClass", retired: false },
10735
+ "1.2.840.10008.3.1.2.3.5": { uid: "1.2.840.10008.3.1.2.3.5", name: "Modality Performed Procedure Step Notification SOP Class", type: "SOPClass", retired: false },
10736
+ "1.2.840.10008.3.1.2.5.1": { uid: "1.2.840.10008.3.1.2.5.1", name: "Detached Results Management SOP Class", type: "SOPClass", retired: true },
10737
+ "1.2.840.10008.3.1.2.5.4": { uid: "1.2.840.10008.3.1.2.5.4", name: "Detached Results Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10738
+ "1.2.840.10008.3.1.2.5.5": { uid: "1.2.840.10008.3.1.2.5.5", name: "Detached Study Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10739
+ "1.2.840.10008.3.1.2.6.1": { uid: "1.2.840.10008.3.1.2.6.1", name: "Detached Interpretation Management SOP Class", type: "SOPClass", retired: true },
10740
+ "1.2.840.10008.4.2": { uid: "1.2.840.10008.4.2", name: "Storage Service Class", type: "ServiceClass", retired: false },
10741
+ "1.2.840.10008.5.1.1.1": { uid: "1.2.840.10008.5.1.1.1", name: "Basic Film Session SOP Class", type: "SOPClass", retired: false },
10742
+ "1.2.840.10008.5.1.1.14": { uid: "1.2.840.10008.5.1.1.14", name: "Print Job SOP Class", type: "SOPClass", retired: false },
10743
+ "1.2.840.10008.5.1.1.15": { uid: "1.2.840.10008.5.1.1.15", name: "Basic Annotation Box SOP Class", type: "SOPClass", retired: false },
10744
+ "1.2.840.10008.5.1.1.16": { uid: "1.2.840.10008.5.1.1.16", name: "Printer SOP Class", type: "SOPClass", retired: false },
10745
+ "1.2.840.10008.5.1.1.16.376": { uid: "1.2.840.10008.5.1.1.16.376", name: "Printer Configuration Retrieval SOP Class", type: "SOPClass", retired: false },
10746
+ "1.2.840.10008.5.1.1.17": { uid: "1.2.840.10008.5.1.1.17", name: "Printer SOP Instance", type: "WellKnownSOPInstance", retired: false },
10747
+ "1.2.840.10008.5.1.1.17.376": { uid: "1.2.840.10008.5.1.1.17.376", name: "Printer Configuration Retrieval SOP Instance", type: "WellKnownSOPInstance", retired: false },
10748
+ "1.2.840.10008.5.1.1.18": { uid: "1.2.840.10008.5.1.1.18", name: "Basic Color Print Management Meta SOP Class", type: "MetaSOPClass", retired: false },
10749
+ "1.2.840.10008.5.1.1.18.1": { uid: "1.2.840.10008.5.1.1.18.1", name: "Referenced Color Print Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10750
+ "1.2.840.10008.5.1.1.2": { uid: "1.2.840.10008.5.1.1.2", name: "Basic Film Box SOP Class", type: "SOPClass", retired: false },
10751
+ "1.2.840.10008.5.1.1.22": { uid: "1.2.840.10008.5.1.1.22", name: "VOI LUT Box SOP Class", type: "SOPClass", retired: false },
10752
+ "1.2.840.10008.5.1.1.23": { uid: "1.2.840.10008.5.1.1.23", name: "Presentation LUT SOP Class", type: "SOPClass", retired: false },
10753
+ "1.2.840.10008.5.1.1.24": { uid: "1.2.840.10008.5.1.1.24", name: "Image Overlay Box SOP Class", type: "SOPClass", retired: true },
10754
+ "1.2.840.10008.5.1.1.24.1": { uid: "1.2.840.10008.5.1.1.24.1", name: "Basic Print Image Overlay Box SOP Class", type: "SOPClass", retired: true },
10755
+ "1.2.840.10008.5.1.1.25": { uid: "1.2.840.10008.5.1.1.25", name: "Print Queue SOP Instance", type: "WellKnownSOPInstance", retired: true },
10756
+ "1.2.840.10008.5.1.1.26": { uid: "1.2.840.10008.5.1.1.26", name: "Print Queue Management SOP Class", type: "SOPClass", retired: true },
10757
+ "1.2.840.10008.5.1.1.27": { uid: "1.2.840.10008.5.1.1.27", name: "Stored Print Storage SOP Class", type: "SOPClass", retired: true },
10758
+ "1.2.840.10008.5.1.1.29": { uid: "1.2.840.10008.5.1.1.29", name: "Hardcopy Grayscale Image Storage SOP Class", type: "SOPClass", retired: true },
10759
+ "1.2.840.10008.5.1.1.30": { uid: "1.2.840.10008.5.1.1.30", name: "Hardcopy Color Image Storage SOP Class", type: "SOPClass", retired: true },
10760
+ "1.2.840.10008.5.1.1.31": { uid: "1.2.840.10008.5.1.1.31", name: "Pull Print Request SOP Class", type: "SOPClass", retired: true },
10761
+ "1.2.840.10008.5.1.1.32": { uid: "1.2.840.10008.5.1.1.32", name: "Pull Stored Print Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10762
+ "1.2.840.10008.5.1.1.33": { uid: "1.2.840.10008.5.1.1.33", name: "Media Creation Management SOP Class UID", type: "SOPClass", retired: false },
10763
+ "1.2.840.10008.5.1.1.4": { uid: "1.2.840.10008.5.1.1.4", name: "Basic Grayscale Image Box SOP Class", type: "SOPClass", retired: false },
10764
+ "1.2.840.10008.5.1.1.4.1": { uid: "1.2.840.10008.5.1.1.4.1", name: "Basic Color Image Box SOP Class", type: "SOPClass", retired: false },
10765
+ "1.2.840.10008.5.1.1.4.2": { uid: "1.2.840.10008.5.1.1.4.2", name: "Referenced Image Box SOP Class", type: "SOPClass", retired: true },
10766
+ "1.2.840.10008.5.1.1.40": { uid: "1.2.840.10008.5.1.1.40", name: "Display System SOP Class", type: "SOPClass", retired: false },
10767
+ "1.2.840.10008.5.1.1.40.1": { uid: "1.2.840.10008.5.1.1.40.1", name: "Display System SOP Instance", type: "WellKnownSOPInstance", retired: false },
10768
+ "1.2.840.10008.5.1.1.9": { uid: "1.2.840.10008.5.1.1.9", name: "Basic Grayscale Print Management Meta SOP Class", type: "MetaSOPClass", retired: false },
10769
+ "1.2.840.10008.5.1.1.9.1": { uid: "1.2.840.10008.5.1.1.9.1", name: "Referenced Grayscale Print Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10644
10770
  "1.2.840.10008.5.1.4.1.1.1": { uid: "1.2.840.10008.5.1.4.1.1.1", name: "Computed Radiography Image Storage", type: "SOPClass", retired: false },
10645
10771
  "1.2.840.10008.5.1.4.1.1.1.1": { uid: "1.2.840.10008.5.1.4.1.1.1.1", name: "Digital X-Ray Image Storage - For Presentation", type: "SOPClass", retired: false },
10646
10772
  "1.2.840.10008.5.1.4.1.1.1.1.1": { uid: "1.2.840.10008.5.1.4.1.1.1.1.1", name: "Digital X-Ray Image Storage - For Processing", type: "SOPClass", retired: false },
@@ -10648,11 +10774,13 @@ var UIDS = {
10648
10774
  "1.2.840.10008.5.1.4.1.1.1.2.1": { uid: "1.2.840.10008.5.1.4.1.1.1.2.1", name: "Digital Mammography X-Ray Image Storage - For Processing", type: "SOPClass", retired: false },
10649
10775
  "1.2.840.10008.5.1.4.1.1.1.3": { uid: "1.2.840.10008.5.1.4.1.1.1.3", name: "Digital Intra-Oral X-Ray Image Storage - For Presentation", type: "SOPClass", retired: false },
10650
10776
  "1.2.840.10008.5.1.4.1.1.1.3.1": { uid: "1.2.840.10008.5.1.4.1.1.1.3.1", name: "Digital Intra-Oral X-Ray Image Storage - For Processing", type: "SOPClass", retired: false },
10777
+ "1.2.840.10008.5.1.4.1.1.10": { uid: "1.2.840.10008.5.1.4.1.1.10", name: "Standalone Modality LUT Storage", type: "SOPClass", retired: true },
10651
10778
  "1.2.840.10008.5.1.4.1.1.104.1": { uid: "1.2.840.10008.5.1.4.1.1.104.1", name: "Encapsulated PDF Storage", type: "SOPClass", retired: false },
10652
10779
  "1.2.840.10008.5.1.4.1.1.104.2": { uid: "1.2.840.10008.5.1.4.1.1.104.2", name: "Encapsulated CDA Storage", type: "SOPClass", retired: false },
10653
10780
  "1.2.840.10008.5.1.4.1.1.104.3": { uid: "1.2.840.10008.5.1.4.1.1.104.3", name: "Encapsulated STL Storage", type: "SOPClass", retired: false },
10654
10781
  "1.2.840.10008.5.1.4.1.1.104.4": { uid: "1.2.840.10008.5.1.4.1.1.104.4", name: "Encapsulated OBJ Storage", type: "SOPClass", retired: false },
10655
10782
  "1.2.840.10008.5.1.4.1.1.104.5": { uid: "1.2.840.10008.5.1.4.1.1.104.5", name: "Encapsulated MTL Storage", type: "SOPClass", retired: false },
10783
+ "1.2.840.10008.5.1.4.1.1.11": { uid: "1.2.840.10008.5.1.4.1.1.11", name: "Standalone VOI LUT Storage", type: "SOPClass", retired: true },
10656
10784
  "1.2.840.10008.5.1.4.1.1.11.1": { uid: "1.2.840.10008.5.1.4.1.1.11.1", name: "Grayscale Softcopy Presentation State Storage", type: "SOPClass", retired: false },
10657
10785
  "1.2.840.10008.5.1.4.1.1.11.10": { uid: "1.2.840.10008.5.1.4.1.1.11.10", name: "Segmented Volume Rendering Volumetric Presentation State Storage", type: "SOPClass", retired: false },
10658
10786
  "1.2.840.10008.5.1.4.1.1.11.11": { uid: "1.2.840.10008.5.1.4.1.1.11.11", name: "Multiple Volume Rendering Volumetric Presentation State Storage", type: "SOPClass", retired: false },
@@ -10669,8 +10797,10 @@ var UIDS = {
10669
10797
  "1.2.840.10008.5.1.4.1.1.12.1.1": { uid: "1.2.840.10008.5.1.4.1.1.12.1.1", name: "Enhanced XA Image Storage", type: "SOPClass", retired: false },
10670
10798
  "1.2.840.10008.5.1.4.1.1.12.2": { uid: "1.2.840.10008.5.1.4.1.1.12.2", name: "X-Ray Radiofluoroscopic Image Storage", type: "SOPClass", retired: false },
10671
10799
  "1.2.840.10008.5.1.4.1.1.12.2.1": { uid: "1.2.840.10008.5.1.4.1.1.12.2.1", name: "Enhanced XRF Image Storage", type: "SOPClass", retired: false },
10800
+ "1.2.840.10008.5.1.4.1.1.12.3": { uid: "1.2.840.10008.5.1.4.1.1.12.3", name: "X-Ray Angiographic Bi-Plane Image Storage", type: "SOPClass", retired: true },
10672
10801
  "1.2.840.10008.5.1.4.1.1.128": { uid: "1.2.840.10008.5.1.4.1.1.128", name: "Positron Emission Tomography Image Storage", type: "SOPClass", retired: false },
10673
10802
  "1.2.840.10008.5.1.4.1.1.128.1": { uid: "1.2.840.10008.5.1.4.1.1.128.1", name: "Legacy Converted Enhanced PET Image Storage", type: "SOPClass", retired: false },
10803
+ "1.2.840.10008.5.1.4.1.1.129": { uid: "1.2.840.10008.5.1.4.1.1.129", name: "Standalone PET Curve Storage", type: "SOPClass", retired: true },
10674
10804
  "1.2.840.10008.5.1.4.1.1.13.1.1": { uid: "1.2.840.10008.5.1.4.1.1.13.1.1", name: "X-Ray 3D Angiographic Image Storage", type: "SOPClass", retired: false },
10675
10805
  "1.2.840.10008.5.1.4.1.1.13.1.2": { uid: "1.2.840.10008.5.1.4.1.1.13.1.2", name: "X-Ray 3D Craniofacial Image Storage", type: "SOPClass", retired: false },
10676
10806
  "1.2.840.10008.5.1.4.1.1.13.1.3": { uid: "1.2.840.10008.5.1.4.1.1.13.1.3", name: "Breast Tomosynthesis Image Storage", type: "SOPClass", retired: false },
@@ -10683,13 +10813,26 @@ var UIDS = {
10683
10813
  "1.2.840.10008.5.1.4.1.1.2": { uid: "1.2.840.10008.5.1.4.1.1.2", name: "CT Image Storage", type: "SOPClass", retired: false },
10684
10814
  "1.2.840.10008.5.1.4.1.1.2.1": { uid: "1.2.840.10008.5.1.4.1.1.2.1", name: "Enhanced CT Image Storage", type: "SOPClass", retired: false },
10685
10815
  "1.2.840.10008.5.1.4.1.1.2.2": { uid: "1.2.840.10008.5.1.4.1.1.2.2", name: "Legacy Converted Enhanced CT Image Storage", type: "SOPClass", retired: false },
10816
+ "1.2.840.10008.5.1.4.1.1.2.3": { uid: "1.2.840.10008.5.1.4.1.1.2.3", name: "CT Image Storage - For Processing", type: "SOPClass", retired: false },
10817
+ "1.2.840.10008.5.1.4.1.1.2.4": { uid: "1.2.840.10008.5.1.4.1.1.2.4", name: "Enhanced CT Image Storage - For Processing", type: "SOPClass", retired: false },
10818
+ "1.2.840.10008.5.1.4.1.1.2.5": { uid: "1.2.840.10008.5.1.4.1.1.2.5", name: "Legacy Converted Enhanced CT Image Storage - For Processing", type: "SOPClass", retired: false },
10686
10819
  "1.2.840.10008.5.1.4.1.1.20": { uid: "1.2.840.10008.5.1.4.1.1.20", name: "Nuclear Medicine Image Storage", type: "SOPClass", retired: false },
10687
10820
  "1.2.840.10008.5.1.4.1.1.200.1": { uid: "1.2.840.10008.5.1.4.1.1.200.1", name: "CT Defined Procedure Protocol Storage", type: "SOPClass", retired: false },
10688
10821
  "1.2.840.10008.5.1.4.1.1.200.2": { uid: "1.2.840.10008.5.1.4.1.1.200.2", name: "CT Performed Procedure Protocol Storage", type: "SOPClass", retired: false },
10689
10822
  "1.2.840.10008.5.1.4.1.1.200.3": { uid: "1.2.840.10008.5.1.4.1.1.200.3", name: "Protocol Approval Storage", type: "SOPClass", retired: false },
10823
+ "1.2.840.10008.5.1.4.1.1.200.4": { uid: "1.2.840.10008.5.1.4.1.1.200.4", name: "Protocol Approval Information Model - FIND", type: "SOPClass", retired: false },
10824
+ "1.2.840.10008.5.1.4.1.1.200.5": { uid: "1.2.840.10008.5.1.4.1.1.200.5", name: "Protocol Approval Information Model - MOVE", type: "SOPClass", retired: false },
10825
+ "1.2.840.10008.5.1.4.1.1.200.6": { uid: "1.2.840.10008.5.1.4.1.1.200.6", name: "Protocol Approval Information Model - GET", type: "SOPClass", retired: false },
10690
10826
  "1.2.840.10008.5.1.4.1.1.200.7": { uid: "1.2.840.10008.5.1.4.1.1.200.7", name: "XA Defined Procedure Protocol Storage", type: "SOPClass", retired: false },
10691
10827
  "1.2.840.10008.5.1.4.1.1.200.8": { uid: "1.2.840.10008.5.1.4.1.1.200.8", name: "XA Performed Procedure Protocol Storage", type: "SOPClass", retired: false },
10692
10828
  "1.2.840.10008.5.1.4.1.1.201.1": { uid: "1.2.840.10008.5.1.4.1.1.201.1", name: "Inventory Storage", type: "SOPClass", retired: false },
10829
+ "1.2.840.10008.5.1.4.1.1.201.1.1": { uid: "1.2.840.10008.5.1.4.1.1.201.1.1", name: "Storage Management SOP Instance", type: "WellKnownSOPInstance", retired: false },
10830
+ "1.2.840.10008.5.1.4.1.1.201.2": { uid: "1.2.840.10008.5.1.4.1.1.201.2", name: "Inventory - FIND", type: "SOPClass", retired: false },
10831
+ "1.2.840.10008.5.1.4.1.1.201.3": { uid: "1.2.840.10008.5.1.4.1.1.201.3", name: "Inventory - MOVE", type: "SOPClass", retired: false },
10832
+ "1.2.840.10008.5.1.4.1.1.201.4": { uid: "1.2.840.10008.5.1.4.1.1.201.4", name: "Inventory - GET", type: "SOPClass", retired: false },
10833
+ "1.2.840.10008.5.1.4.1.1.201.5": { uid: "1.2.840.10008.5.1.4.1.1.201.5", name: "Inventory Creation", type: "SOPClass", retired: false },
10834
+ "1.2.840.10008.5.1.4.1.1.201.6": { uid: "1.2.840.10008.5.1.4.1.1.201.6", name: "Repository Query", type: "SOPClass", retired: false },
10835
+ "1.2.840.10008.5.1.4.1.1.3": { uid: "1.2.840.10008.5.1.4.1.1.3", name: "Ultrasound Multi-frame Image Storage", type: "SOPClass", retired: true },
10693
10836
  "1.2.840.10008.5.1.4.1.1.3.1": { uid: "1.2.840.10008.5.1.4.1.1.3.1", name: "Ultrasound Multi-frame Image Storage", type: "SOPClass", retired: false },
10694
10837
  "1.2.840.10008.5.1.4.1.1.30": { uid: "1.2.840.10008.5.1.4.1.1.30", name: "Parametric Map Storage", type: "SOPClass", retired: false },
10695
10838
  "1.2.840.10008.5.1.4.1.1.4": { uid: "1.2.840.10008.5.1.4.1.1.4", name: "MR Image Storage", type: "SOPClass", retired: false },
@@ -10722,9 +10865,23 @@ var UIDS = {
10722
10865
  "1.2.840.10008.5.1.4.1.1.481.7": { uid: "1.2.840.10008.5.1.4.1.1.481.7", name: "RT Treatment Summary Record Storage", type: "SOPClass", retired: false },
10723
10866
  "1.2.840.10008.5.1.4.1.1.481.8": { uid: "1.2.840.10008.5.1.4.1.1.481.8", name: "RT Ion Plan Storage", type: "SOPClass", retired: false },
10724
10867
  "1.2.840.10008.5.1.4.1.1.481.9": { uid: "1.2.840.10008.5.1.4.1.1.481.9", name: "RT Ion Beams Treatment Record Storage", type: "SOPClass", retired: false },
10868
+ "1.2.840.10008.5.1.4.1.1.5": { uid: "1.2.840.10008.5.1.4.1.1.5", name: "Nuclear Medicine Image Storage", type: "SOPClass", retired: true },
10869
+ "1.2.840.10008.5.1.4.1.1.501.1": { uid: "1.2.840.10008.5.1.4.1.1.501.1", name: "DICOS CT Image Storage", type: "SOPClass", retired: false },
10870
+ "1.2.840.10008.5.1.4.1.1.501.2.1": { uid: "1.2.840.10008.5.1.4.1.1.501.2.1", name: "DICOS Digital X-Ray Image Storage - For Presentation", type: "SOPClass", retired: false },
10871
+ "1.2.840.10008.5.1.4.1.1.501.2.2": { uid: "1.2.840.10008.5.1.4.1.1.501.2.2", name: "DICOS Digital X-Ray Image Storage - For Processing", type: "SOPClass", retired: false },
10872
+ "1.2.840.10008.5.1.4.1.1.501.3": { uid: "1.2.840.10008.5.1.4.1.1.501.3", name: "DICOS Threat Detection Report Storage", type: "SOPClass", retired: false },
10873
+ "1.2.840.10008.5.1.4.1.1.501.4": { uid: "1.2.840.10008.5.1.4.1.1.501.4", name: "DICOS 2D AIT Storage", type: "SOPClass", retired: false },
10874
+ "1.2.840.10008.5.1.4.1.1.501.5": { uid: "1.2.840.10008.5.1.4.1.1.501.5", name: "DICOS 3D AIT Storage", type: "SOPClass", retired: false },
10875
+ "1.2.840.10008.5.1.4.1.1.501.6": { uid: "1.2.840.10008.5.1.4.1.1.501.6", name: "DICOS Quadrupole Resonance (QR) Storage", type: "SOPClass", retired: false },
10876
+ "1.2.840.10008.5.1.4.1.1.6": { uid: "1.2.840.10008.5.1.4.1.1.6", name: "Ultrasound Image Storage", type: "SOPClass", retired: true },
10725
10877
  "1.2.840.10008.5.1.4.1.1.6.1": { uid: "1.2.840.10008.5.1.4.1.1.6.1", name: "Ultrasound Image Storage", type: "SOPClass", retired: false },
10726
10878
  "1.2.840.10008.5.1.4.1.1.6.2": { uid: "1.2.840.10008.5.1.4.1.1.6.2", name: "Enhanced US Volume Storage", type: "SOPClass", retired: false },
10727
10879
  "1.2.840.10008.5.1.4.1.1.6.3": { uid: "1.2.840.10008.5.1.4.1.1.6.3", name: "Photoacoustic Image Storage", type: "SOPClass", retired: false },
10880
+ "1.2.840.10008.5.1.4.1.1.601.1": { uid: "1.2.840.10008.5.1.4.1.1.601.1", name: "Eddy Current Image Storage", type: "SOPClass", retired: false },
10881
+ "1.2.840.10008.5.1.4.1.1.601.2": { uid: "1.2.840.10008.5.1.4.1.1.601.2", name: "Eddy Current Multi-frame Image Storage", type: "SOPClass", retired: false },
10882
+ "1.2.840.10008.5.1.4.1.1.601.3": { uid: "1.2.840.10008.5.1.4.1.1.601.3", name: "Thermography Image Storage", type: "SOPClass", retired: false },
10883
+ "1.2.840.10008.5.1.4.1.1.601.4": { uid: "1.2.840.10008.5.1.4.1.1.601.4", name: "Thermography Multi-frame Image Storage", type: "SOPClass", retired: false },
10884
+ "1.2.840.10008.5.1.4.1.1.601.5": { uid: "1.2.840.10008.5.1.4.1.1.601.5", name: "Ultrasound Waveform Storage", type: "SOPClass", retired: false },
10728
10885
  "1.2.840.10008.5.1.4.1.1.66": { uid: "1.2.840.10008.5.1.4.1.1.66", name: "Raw Data Storage", type: "SOPClass", retired: false },
10729
10886
  "1.2.840.10008.5.1.4.1.1.66.1": { uid: "1.2.840.10008.5.1.4.1.1.66.1", name: "Spatial Registration Storage", type: "SOPClass", retired: false },
10730
10887
  "1.2.840.10008.5.1.4.1.1.66.2": { uid: "1.2.840.10008.5.1.4.1.1.66.2", name: "Spatial Fiducials Storage", type: "SOPClass", retired: false },
@@ -10732,6 +10889,8 @@ var UIDS = {
10732
10889
  "1.2.840.10008.5.1.4.1.1.66.4": { uid: "1.2.840.10008.5.1.4.1.1.66.4", name: "Segmentation Storage", type: "SOPClass", retired: false },
10733
10890
  "1.2.840.10008.5.1.4.1.1.66.5": { uid: "1.2.840.10008.5.1.4.1.1.66.5", name: "Surface Segmentation Storage", type: "SOPClass", retired: false },
10734
10891
  "1.2.840.10008.5.1.4.1.1.66.6": { uid: "1.2.840.10008.5.1.4.1.1.66.6", name: "Tractography Results Storage", type: "SOPClass", retired: false },
10892
+ "1.2.840.10008.5.1.4.1.1.66.7": { uid: "1.2.840.10008.5.1.4.1.1.66.7", name: "Label Map Segmentation Storage", type: "SOPClass", retired: false },
10893
+ "1.2.840.10008.5.1.4.1.1.66.8": { uid: "1.2.840.10008.5.1.4.1.1.66.8", name: "Height Map Segmentation Storage", type: "SOPClass", retired: false },
10735
10894
  "1.2.840.10008.5.1.4.1.1.67": { uid: "1.2.840.10008.5.1.4.1.1.67", name: "Real World Value Mapping Storage", type: "SOPClass", retired: false },
10736
10895
  "1.2.840.10008.5.1.4.1.1.68.1": { uid: "1.2.840.10008.5.1.4.1.1.68.1", name: "Surface Scan Mesh Storage", type: "SOPClass", retired: false },
10737
10896
  "1.2.840.10008.5.1.4.1.1.68.2": { uid: "1.2.840.10008.5.1.4.1.1.68.2", name: "Surface Scan Point Cloud Storage", type: "SOPClass", retired: false },
@@ -10740,6 +10899,7 @@ var UIDS = {
10740
10899
  "1.2.840.10008.5.1.4.1.1.7.2": { uid: "1.2.840.10008.5.1.4.1.1.7.2", name: "Multi-frame Grayscale Byte Secondary Capture Image Storage", type: "SOPClass", retired: false },
10741
10900
  "1.2.840.10008.5.1.4.1.1.7.3": { uid: "1.2.840.10008.5.1.4.1.1.7.3", name: "Multi-frame Grayscale Word Secondary Capture Image Storage", type: "SOPClass", retired: false },
10742
10901
  "1.2.840.10008.5.1.4.1.1.7.4": { uid: "1.2.840.10008.5.1.4.1.1.7.4", name: "Multi-frame True Color Secondary Capture Image Storage", type: "SOPClass", retired: false },
10902
+ "1.2.840.10008.5.1.4.1.1.77.1": { uid: "1.2.840.10008.5.1.4.1.1.77.1", name: "VL Image Storage - Trial", type: "SOPClass", retired: true },
10743
10903
  "1.2.840.10008.5.1.4.1.1.77.1.1": { uid: "1.2.840.10008.5.1.4.1.1.77.1.1", name: "VL Endoscopic Image Storage", type: "SOPClass", retired: false },
10744
10904
  "1.2.840.10008.5.1.4.1.1.77.1.1.1": { uid: "1.2.840.10008.5.1.4.1.1.77.1.1.1", name: "Video Endoscopic Image Storage", type: "SOPClass", retired: false },
10745
10905
  "1.2.840.10008.5.1.4.1.1.77.1.2": { uid: "1.2.840.10008.5.1.4.1.1.77.1.2", name: "VL Microscopic Image Storage", type: "SOPClass", retired: false },
@@ -10759,6 +10919,7 @@ var UIDS = {
10759
10919
  "1.2.840.10008.5.1.4.1.1.77.1.7": { uid: "1.2.840.10008.5.1.4.1.1.77.1.7", name: "Dermoscopic Photography Image Storage", type: "SOPClass", retired: false },
10760
10920
  "1.2.840.10008.5.1.4.1.1.77.1.8": { uid: "1.2.840.10008.5.1.4.1.1.77.1.8", name: "Confocal Microscopy Image Storage", type: "SOPClass", retired: false },
10761
10921
  "1.2.840.10008.5.1.4.1.1.77.1.9": { uid: "1.2.840.10008.5.1.4.1.1.77.1.9", name: "Confocal Microscopy Tiled Pyramidal Image Storage", type: "SOPClass", retired: false },
10922
+ "1.2.840.10008.5.1.4.1.1.77.2": { uid: "1.2.840.10008.5.1.4.1.1.77.2", name: "VL Multi-frame Image Storage - Trial", type: "SOPClass", retired: true },
10762
10923
  "1.2.840.10008.5.1.4.1.1.78.1": { uid: "1.2.840.10008.5.1.4.1.1.78.1", name: "Lensometry Measurements Storage", type: "SOPClass", retired: false },
10763
10924
  "1.2.840.10008.5.1.4.1.1.78.2": { uid: "1.2.840.10008.5.1.4.1.1.78.2", name: "Autorefraction Measurements Storage", type: "SOPClass", retired: false },
10764
10925
  "1.2.840.10008.5.1.4.1.1.78.3": { uid: "1.2.840.10008.5.1.4.1.1.78.3", name: "Keratometry Measurements Storage", type: "SOPClass", retired: false },
@@ -10768,14 +10929,19 @@ var UIDS = {
10768
10929
  "1.2.840.10008.5.1.4.1.1.78.7": { uid: "1.2.840.10008.5.1.4.1.1.78.7", name: "Ophthalmic Axial Measurements Storage", type: "SOPClass", retired: false },
10769
10930
  "1.2.840.10008.5.1.4.1.1.78.8": { uid: "1.2.840.10008.5.1.4.1.1.78.8", name: "Intraocular Lens Calculations Storage", type: "SOPClass", retired: false },
10770
10931
  "1.2.840.10008.5.1.4.1.1.79.1": { uid: "1.2.840.10008.5.1.4.1.1.79.1", name: "Macular Grid Thickness and Volume Report Storage", type: "SOPClass", retired: false },
10932
+ "1.2.840.10008.5.1.4.1.1.8": { uid: "1.2.840.10008.5.1.4.1.1.8", name: "Standalone Overlay Storage", type: "SOPClass", retired: true },
10771
10933
  "1.2.840.10008.5.1.4.1.1.80.1": { uid: "1.2.840.10008.5.1.4.1.1.80.1", name: "Ophthalmic Visual Field Static Perimetry Measurements Storage", type: "SOPClass", retired: false },
10772
10934
  "1.2.840.10008.5.1.4.1.1.81.1": { uid: "1.2.840.10008.5.1.4.1.1.81.1", name: "Ophthalmic Thickness Map Storage", type: "SOPClass", retired: false },
10773
10935
  "1.2.840.10008.5.1.4.1.1.82.1": { uid: "1.2.840.10008.5.1.4.1.1.82.1", name: "Corneal Topography Map Storage", type: "SOPClass", retired: false },
10936
+ "1.2.840.10008.5.1.4.1.1.88.1": { uid: "1.2.840.10008.5.1.4.1.1.88.1", name: "Text SR Storage - Trial", type: "SOPClass", retired: true },
10774
10937
  "1.2.840.10008.5.1.4.1.1.88.11": { uid: "1.2.840.10008.5.1.4.1.1.88.11", name: "Basic Text SR Storage", type: "SOPClass", retired: false },
10938
+ "1.2.840.10008.5.1.4.1.1.88.2": { uid: "1.2.840.10008.5.1.4.1.1.88.2", name: "Audio SR Storage - Trial", type: "SOPClass", retired: true },
10775
10939
  "1.2.840.10008.5.1.4.1.1.88.22": { uid: "1.2.840.10008.5.1.4.1.1.88.22", name: "Enhanced SR Storage", type: "SOPClass", retired: false },
10940
+ "1.2.840.10008.5.1.4.1.1.88.3": { uid: "1.2.840.10008.5.1.4.1.1.88.3", name: "Detail SR Storage - Trial", type: "SOPClass", retired: true },
10776
10941
  "1.2.840.10008.5.1.4.1.1.88.33": { uid: "1.2.840.10008.5.1.4.1.1.88.33", name: "Comprehensive SR Storage", type: "SOPClass", retired: false },
10777
10942
  "1.2.840.10008.5.1.4.1.1.88.34": { uid: "1.2.840.10008.5.1.4.1.1.88.34", name: "Comprehensive 3D SR Storage", type: "SOPClass", retired: false },
10778
10943
  "1.2.840.10008.5.1.4.1.1.88.35": { uid: "1.2.840.10008.5.1.4.1.1.88.35", name: "Extensible SR Storage", type: "SOPClass", retired: false },
10944
+ "1.2.840.10008.5.1.4.1.1.88.4": { uid: "1.2.840.10008.5.1.4.1.1.88.4", name: "Comprehensive SR Storage - Trial", type: "SOPClass", retired: true },
10779
10945
  "1.2.840.10008.5.1.4.1.1.88.40": { uid: "1.2.840.10008.5.1.4.1.1.88.40", name: "Procedure Log Storage", type: "SOPClass", retired: false },
10780
10946
  "1.2.840.10008.5.1.4.1.1.88.50": { uid: "1.2.840.10008.5.1.4.1.1.88.50", name: "Mammography CAD SR Storage", type: "SOPClass", retired: false },
10781
10947
  "1.2.840.10008.5.1.4.1.1.88.59": { uid: "1.2.840.10008.5.1.4.1.1.88.59", name: "Key Object Selection Document Storage", type: "SOPClass", retired: false },
@@ -10790,10 +10956,15 @@ var UIDS = {
10790
10956
  "1.2.840.10008.5.1.4.1.1.88.74": { uid: "1.2.840.10008.5.1.4.1.1.88.74", name: "Planned Imaging Agent Administration SR Storage", type: "SOPClass", retired: false },
10791
10957
  "1.2.840.10008.5.1.4.1.1.88.75": { uid: "1.2.840.10008.5.1.4.1.1.88.75", name: "Performed Imaging Agent Administration SR Storage", type: "SOPClass", retired: false },
10792
10958
  "1.2.840.10008.5.1.4.1.1.88.76": { uid: "1.2.840.10008.5.1.4.1.1.88.76", name: "Enhanced X-Ray Radiation Dose SR Storage", type: "SOPClass", retired: false },
10959
+ "1.2.840.10008.5.1.4.1.1.88.77": { uid: "1.2.840.10008.5.1.4.1.1.88.77", name: "Waveform Annotation SR Storage", type: "SOPClass", retired: false },
10960
+ "1.2.840.10008.5.1.4.1.1.9": { uid: "1.2.840.10008.5.1.4.1.1.9", name: "Standalone Curve Storage", type: "SOPClass", retired: true },
10961
+ "1.2.840.10008.5.1.4.1.1.9.1": { uid: "1.2.840.10008.5.1.4.1.1.9.1", name: "Waveform Storage - Trial", type: "SOPClass", retired: true },
10793
10962
  "1.2.840.10008.5.1.4.1.1.9.1.1": { uid: "1.2.840.10008.5.1.4.1.1.9.1.1", name: "12-lead ECG Waveform Storage", type: "SOPClass", retired: false },
10794
10963
  "1.2.840.10008.5.1.4.1.1.9.1.2": { uid: "1.2.840.10008.5.1.4.1.1.9.1.2", name: "General ECG Waveform Storage", type: "SOPClass", retired: false },
10795
10964
  "1.2.840.10008.5.1.4.1.1.9.1.3": { uid: "1.2.840.10008.5.1.4.1.1.9.1.3", name: "Ambulatory ECG Waveform Storage", type: "SOPClass", retired: false },
10796
10965
  "1.2.840.10008.5.1.4.1.1.9.1.4": { uid: "1.2.840.10008.5.1.4.1.1.9.1.4", name: "General 32-bit ECG Waveform Storage", type: "SOPClass", retired: false },
10966
+ "1.2.840.10008.5.1.4.1.1.9.100.1": { uid: "1.2.840.10008.5.1.4.1.1.9.100.1", name: "Waveform Presentation State Storage", type: "SOPClass", retired: false },
10967
+ "1.2.840.10008.5.1.4.1.1.9.100.2": { uid: "1.2.840.10008.5.1.4.1.1.9.100.2", name: "Waveform Acquisition Presentation State Storage", type: "SOPClass", retired: false },
10797
10968
  "1.2.840.10008.5.1.4.1.1.9.2.1": { uid: "1.2.840.10008.5.1.4.1.1.9.2.1", name: "Hemodynamic Waveform Storage", type: "SOPClass", retired: false },
10798
10969
  "1.2.840.10008.5.1.4.1.1.9.3.1": { uid: "1.2.840.10008.5.1.4.1.1.9.3.1", name: "Cardiac Electrophysiology Waveform Storage", type: "SOPClass", retired: false },
10799
10970
  "1.2.840.10008.5.1.4.1.1.9.4.1": { uid: "1.2.840.10008.5.1.4.1.1.9.4.1", name: "Basic Voice Audio Waveform Storage", type: "SOPClass", retired: false },
@@ -10814,14 +10985,69 @@ var UIDS = {
10814
10985
  "1.2.840.10008.5.1.4.1.2.2.1": { uid: "1.2.840.10008.5.1.4.1.2.2.1", name: "Study Root Query/Retrieve Information Model - FIND", type: "SOPClass", retired: false },
10815
10986
  "1.2.840.10008.5.1.4.1.2.2.2": { uid: "1.2.840.10008.5.1.4.1.2.2.2", name: "Study Root Query/Retrieve Information Model - MOVE", type: "SOPClass", retired: false },
10816
10987
  "1.2.840.10008.5.1.4.1.2.2.3": { uid: "1.2.840.10008.5.1.4.1.2.2.3", name: "Study Root Query/Retrieve Information Model - GET", type: "SOPClass", retired: false },
10988
+ "1.2.840.10008.5.1.4.1.2.3.1": { uid: "1.2.840.10008.5.1.4.1.2.3.1", name: "Patient/Study Only Query/Retrieve Information Model - FIND", type: "SOPClass", retired: true },
10989
+ "1.2.840.10008.5.1.4.1.2.3.2": { uid: "1.2.840.10008.5.1.4.1.2.3.2", name: "Patient/Study Only Query/Retrieve Information Model - MOVE", type: "SOPClass", retired: true },
10990
+ "1.2.840.10008.5.1.4.1.2.3.3": { uid: "1.2.840.10008.5.1.4.1.2.3.3", name: "Patient/Study Only Query/Retrieve Information Model - GET", type: "SOPClass", retired: true },
10991
+ "1.2.840.10008.5.1.4.1.2.4.2": { uid: "1.2.840.10008.5.1.4.1.2.4.2", name: "Composite Instance Root Retrieve - MOVE", type: "SOPClass", retired: false },
10992
+ "1.2.840.10008.5.1.4.1.2.4.3": { uid: "1.2.840.10008.5.1.4.1.2.4.3", name: "Composite Instance Root Retrieve - GET", type: "SOPClass", retired: false },
10993
+ "1.2.840.10008.5.1.4.1.2.5.3": { uid: "1.2.840.10008.5.1.4.1.2.5.3", name: "Composite Instance Retrieve Without Bulk Data - GET", type: "SOPClass", retired: false },
10994
+ "1.2.840.10008.5.1.4.20.1": { uid: "1.2.840.10008.5.1.4.20.1", name: "Defined Procedure Protocol Information Model - FIND", type: "SOPClass", retired: false },
10995
+ "1.2.840.10008.5.1.4.20.2": { uid: "1.2.840.10008.5.1.4.20.2", name: "Defined Procedure Protocol Information Model - MOVE", type: "SOPClass", retired: false },
10996
+ "1.2.840.10008.5.1.4.20.3": { uid: "1.2.840.10008.5.1.4.20.3", name: "Defined Procedure Protocol Information Model - GET", type: "SOPClass", retired: false },
10817
10997
  "1.2.840.10008.5.1.4.31": { uid: "1.2.840.10008.5.1.4.31", name: "Modality Worklist Information Model - FIND", type: "SOPClass", retired: false },
10998
+ "1.2.840.10008.5.1.4.32": { uid: "1.2.840.10008.5.1.4.32", name: "General Purpose Worklist Management Meta SOP Class", type: "MetaSOPClass", retired: true },
10999
+ "1.2.840.10008.5.1.4.32.1": { uid: "1.2.840.10008.5.1.4.32.1", name: "General Purpose Worklist Information Model - FIND", type: "SOPClass", retired: true },
11000
+ "1.2.840.10008.5.1.4.32.2": { uid: "1.2.840.10008.5.1.4.32.2", name: "General Purpose Scheduled Procedure Step SOP Class", type: "SOPClass", retired: true },
11001
+ "1.2.840.10008.5.1.4.32.3": { uid: "1.2.840.10008.5.1.4.32.3", name: "General Purpose Performed Procedure Step SOP Class", type: "SOPClass", retired: true },
11002
+ "1.2.840.10008.5.1.4.33": { uid: "1.2.840.10008.5.1.4.33", name: "Instance Availability Notification SOP Class", type: "SOPClass", retired: false },
11003
+ "1.2.840.10008.5.1.4.34.1": { uid: "1.2.840.10008.5.1.4.34.1", name: "RT Beams Delivery Instruction Storage - Trial", type: "SOPClass", retired: true },
10818
11004
  "1.2.840.10008.5.1.4.34.10": { uid: "1.2.840.10008.5.1.4.34.10", name: "RT Brachy Application Setup Delivery Instruction Storage", type: "SOPClass", retired: false },
11005
+ "1.2.840.10008.5.1.4.34.2": { uid: "1.2.840.10008.5.1.4.34.2", name: "RT Conventional Machine Verification - Trial", type: "SOPClass", retired: true },
11006
+ "1.2.840.10008.5.1.4.34.3": { uid: "1.2.840.10008.5.1.4.34.3", name: "RT Ion Machine Verification - Trial", type: "SOPClass", retired: true },
11007
+ "1.2.840.10008.5.1.4.34.4": { uid: "1.2.840.10008.5.1.4.34.4", name: "Unified Worklist and Procedure Step Service Class - Trial", type: "ServiceClass", retired: true },
11008
+ "1.2.840.10008.5.1.4.34.4.1": { uid: "1.2.840.10008.5.1.4.34.4.1", name: "Unified Procedure Step - Push SOP Class - Trial", type: "SOPClass", retired: true },
11009
+ "1.2.840.10008.5.1.4.34.4.2": { uid: "1.2.840.10008.5.1.4.34.4.2", name: "Unified Procedure Step - Watch SOP Class - Trial", type: "SOPClass", retired: true },
11010
+ "1.2.840.10008.5.1.4.34.4.3": { uid: "1.2.840.10008.5.1.4.34.4.3", name: "Unified Procedure Step - Pull SOP Class - Trial", type: "SOPClass", retired: true },
11011
+ "1.2.840.10008.5.1.4.34.4.4": { uid: "1.2.840.10008.5.1.4.34.4.4", name: "Unified Procedure Step - Event SOP Class - Trial", type: "SOPClass", retired: true },
11012
+ "1.2.840.10008.5.1.4.34.5": { uid: "1.2.840.10008.5.1.4.34.5", name: "UPS Global Subscription SOP Instance", type: "WellKnownSOPInstance", retired: false },
11013
+ "1.2.840.10008.5.1.4.34.5.1": { uid: "1.2.840.10008.5.1.4.34.5.1", name: "UPS Filtered Global Subscription SOP Instance", type: "WellKnownSOPInstance", retired: false },
11014
+ "1.2.840.10008.5.1.4.34.6": { uid: "1.2.840.10008.5.1.4.34.6", name: "Unified Worklist and Procedure Step Service Class", type: "ServiceClass", retired: false },
11015
+ "1.2.840.10008.5.1.4.34.6.1": { uid: "1.2.840.10008.5.1.4.34.6.1", name: "Unified Procedure Step - Push SOP Class", type: "SOPClass", retired: false },
11016
+ "1.2.840.10008.5.1.4.34.6.2": { uid: "1.2.840.10008.5.1.4.34.6.2", name: "Unified Procedure Step - Watch SOP Class", type: "SOPClass", retired: false },
11017
+ "1.2.840.10008.5.1.4.34.6.3": { uid: "1.2.840.10008.5.1.4.34.6.3", name: "Unified Procedure Step - Pull SOP Class", type: "SOPClass", retired: false },
11018
+ "1.2.840.10008.5.1.4.34.6.4": { uid: "1.2.840.10008.5.1.4.34.6.4", name: "Unified Procedure Step - Event SOP Class", type: "SOPClass", retired: false },
11019
+ "1.2.840.10008.5.1.4.34.6.5": { uid: "1.2.840.10008.5.1.4.34.6.5", name: "Unified Procedure Step - Query SOP Class", type: "SOPClass", retired: false },
10819
11020
  "1.2.840.10008.5.1.4.34.7": { uid: "1.2.840.10008.5.1.4.34.7", name: "RT Beams Delivery Instruction Storage", type: "SOPClass", retired: false },
11021
+ "1.2.840.10008.5.1.4.34.8": { uid: "1.2.840.10008.5.1.4.34.8", name: "RT Conventional Machine Verification", type: "SOPClass", retired: false },
11022
+ "1.2.840.10008.5.1.4.34.9": { uid: "1.2.840.10008.5.1.4.34.9", name: "RT Ion Machine Verification", type: "SOPClass", retired: false },
11023
+ "1.2.840.10008.5.1.4.37.1": { uid: "1.2.840.10008.5.1.4.37.1", name: "General Relevant Patient Information Query", type: "SOPClass", retired: false },
11024
+ "1.2.840.10008.5.1.4.37.2": { uid: "1.2.840.10008.5.1.4.37.2", name: "Breast Imaging Relevant Patient Information Query", type: "SOPClass", retired: false },
11025
+ "1.2.840.10008.5.1.4.37.3": { uid: "1.2.840.10008.5.1.4.37.3", name: "Cardiac Relevant Patient Information Query", type: "SOPClass", retired: false },
10820
11026
  "1.2.840.10008.5.1.4.38.1": { uid: "1.2.840.10008.5.1.4.38.1", name: "Hanging Protocol Storage", type: "SOPClass", retired: false },
11027
+ "1.2.840.10008.5.1.4.38.2": { uid: "1.2.840.10008.5.1.4.38.2", name: "Hanging Protocol Information Model - FIND", type: "SOPClass", retired: false },
11028
+ "1.2.840.10008.5.1.4.38.3": { uid: "1.2.840.10008.5.1.4.38.3", name: "Hanging Protocol Information Model - MOVE", type: "SOPClass", retired: false },
11029
+ "1.2.840.10008.5.1.4.38.4": { uid: "1.2.840.10008.5.1.4.38.4", name: "Hanging Protocol Information Model - GET", type: "SOPClass", retired: false },
10821
11030
  "1.2.840.10008.5.1.4.39.1": { uid: "1.2.840.10008.5.1.4.39.1", name: "Color Palette Storage", type: "SOPClass", retired: false },
11031
+ "1.2.840.10008.5.1.4.39.2": { uid: "1.2.840.10008.5.1.4.39.2", name: "Color Palette Query/Retrieve Information Model - FIND", type: "SOPClass", retired: false },
11032
+ "1.2.840.10008.5.1.4.39.3": { uid: "1.2.840.10008.5.1.4.39.3", name: "Color Palette Query/Retrieve Information Model - MOVE", type: "SOPClass", retired: false },
11033
+ "1.2.840.10008.5.1.4.39.4": { uid: "1.2.840.10008.5.1.4.39.4", name: "Color Palette Query/Retrieve Information Model - GET", type: "SOPClass", retired: false },
11034
+ "1.2.840.10008.5.1.4.41": { uid: "1.2.840.10008.5.1.4.41", name: "Product Characteristics Query SOP Class", type: "SOPClass", retired: false },
11035
+ "1.2.840.10008.5.1.4.42": { uid: "1.2.840.10008.5.1.4.42", name: "Substance Approval Query SOP Class", type: "SOPClass", retired: false },
10822
11036
  "1.2.840.10008.5.1.4.43.1": { uid: "1.2.840.10008.5.1.4.43.1", name: "Generic Implant Template Storage", type: "SOPClass", retired: false },
11037
+ "1.2.840.10008.5.1.4.43.2": { uid: "1.2.840.10008.5.1.4.43.2", name: "Generic Implant Template Information Model - FIND", type: "SOPClass", retired: false },
11038
+ "1.2.840.10008.5.1.4.43.3": { uid: "1.2.840.10008.5.1.4.43.3", name: "Generic Implant Template Information Model - MOVE", type: "SOPClass", retired: false },
11039
+ "1.2.840.10008.5.1.4.43.4": { uid: "1.2.840.10008.5.1.4.43.4", name: "Generic Implant Template Information Model - GET", type: "SOPClass", retired: false },
10823
11040
  "1.2.840.10008.5.1.4.44.1": { uid: "1.2.840.10008.5.1.4.44.1", name: "Implant Assembly Template Storage", type: "SOPClass", retired: false },
10824
- "1.2.840.10008.5.1.4.45.1": { uid: "1.2.840.10008.5.1.4.45.1", name: "Implant Template Group Storage", type: "SOPClass", retired: false }
11041
+ "1.2.840.10008.5.1.4.44.2": { uid: "1.2.840.10008.5.1.4.44.2", name: "Implant Assembly Template Information Model - FIND", type: "SOPClass", retired: false },
11042
+ "1.2.840.10008.5.1.4.44.3": { uid: "1.2.840.10008.5.1.4.44.3", name: "Implant Assembly Template Information Model - MOVE", type: "SOPClass", retired: false },
11043
+ "1.2.840.10008.5.1.4.44.4": { uid: "1.2.840.10008.5.1.4.44.4", name: "Implant Assembly Template Information Model - GET", type: "SOPClass", retired: false },
11044
+ "1.2.840.10008.5.1.4.45.1": { uid: "1.2.840.10008.5.1.4.45.1", name: "Implant Template Group Storage", type: "SOPClass", retired: false },
11045
+ "1.2.840.10008.5.1.4.45.2": { uid: "1.2.840.10008.5.1.4.45.2", name: "Implant Template Group Information Model - FIND", type: "SOPClass", retired: false },
11046
+ "1.2.840.10008.5.1.4.45.3": { uid: "1.2.840.10008.5.1.4.45.3", name: "Implant Template Group Information Model - MOVE", type: "SOPClass", retired: false },
11047
+ "1.2.840.10008.5.1.4.45.4": { uid: "1.2.840.10008.5.1.4.45.4", name: "Implant Template Group Information Model - GET", type: "SOPClass", retired: false },
11048
+ "1.2.840.10008.7.1.1": { uid: "1.2.840.10008.7.1.1", name: "Native DICOM Model", type: "Other", retired: false },
11049
+ "1.2.840.10008.7.1.2": { uid: "1.2.840.10008.7.1.2", name: "Abstract Multi-Dimensional Image Model", type: "Other", retired: false },
11050
+ "1.2.840.10008.8.1.1": { uid: "1.2.840.10008.8.1.1", name: "DICOM Content Mapping Resource", type: "Other", retired: false }
10825
11051
  };
10826
11052
 
10827
11053
  // src/dictionary/index.ts
@@ -11503,6 +11729,277 @@ function makeEmitter(ctx) {
11503
11729
  }
11504
11730
  };
11505
11731
  }
11732
+
11733
+ // src/parser/endian.ts
11734
+ var BE_VR_STRIDE = Object.freeze({
11735
+ // 2-byte swaps
11736
+ AT: 2,
11737
+ US: 2,
11738
+ SS: 2,
11739
+ OW: 2,
11740
+ // 4-byte swaps
11741
+ UL: 4,
11742
+ SL: 4,
11743
+ FL: 4,
11744
+ OF: 4,
11745
+ OL: 4,
11746
+ // 8-byte swaps (64-bit floats + 2018 64-bit integer additions)
11747
+ FD: 8,
11748
+ OD: 8,
11749
+ OV: 8,
11750
+ SV: 8,
11751
+ UV: 8,
11752
+ // No swap - byte streams (D-24) and ASCII / spec-defined VRs.
11753
+ OB: 0,
11754
+ UN: 0,
11755
+ AE: 0,
11756
+ AS: 0,
11757
+ CS: 0,
11758
+ DA: 0,
11759
+ DS: 0,
11760
+ DT: 0,
11761
+ IS: 0,
11762
+ LO: 0,
11763
+ LT: 0,
11764
+ PN: 0,
11765
+ SH: 0,
11766
+ ST: 0,
11767
+ TM: 0,
11768
+ UC: 0,
11769
+ UI: 0,
11770
+ UR: 0,
11771
+ UT: 0,
11772
+ SQ: 0
11773
+ });
11774
+ var KNOWN_VRS = Object.freeze(
11775
+ new Set(Object.keys(BE_VR_STRIDE))
11776
+ );
11777
+ function isRecognizedVr(vr) {
11778
+ return KNOWN_VRS.has(vr);
11779
+ }
11780
+
11781
+ // src/parser/tokens.ts
11782
+ var WITHHELD = "<withheld>";
11783
+ function safePrivateCreator(creator, profile) {
11784
+ if (profile === void 0) return WITHHELD;
11785
+ return profile.privateDictionary.has(creator) ? creator : WITHHELD;
11786
+ }
11787
+ function renderVr(vr) {
11788
+ return vr !== void 0 && KNOWN_VRS.has(vr) ? vr : WITHHELD;
11789
+ }
11790
+
11791
+ // src/parser/fatals.ts
11792
+ var SUPPORTED_TRANSFER_SYNTAXES = "1.2.840.10008.1.2, 1.2.840.10008.1.2.1, 1.2.840.10008.1.2.2, 1.2.840.10008.1.2.1.99";
11793
+ var ZLIB_CODES = Object.freeze(
11794
+ /* @__PURE__ */ new Set([
11795
+ "Z_OK",
11796
+ "Z_STREAM_END",
11797
+ "Z_NEED_DICT",
11798
+ "Z_ERRNO",
11799
+ "Z_STREAM_ERROR",
11800
+ "Z_DATA_ERROR",
11801
+ "Z_MEM_ERROR",
11802
+ "Z_BUF_ERROR",
11803
+ "Z_VERSION_ERROR"
11804
+ ])
11805
+ );
11806
+ var FATAL_MESSAGES = Object.freeze({
11807
+ EMPTY_INPUT: {
11808
+ code: FATAL_CODES.EMPTY_INPUT,
11809
+ message: "Input is empty."
11810
+ },
11811
+ EMPTY_INPUT_AFTER_NORMALIZATION: {
11812
+ code: FATAL_CODES.EMPTY_INPUT,
11813
+ message: "Input is empty after normalization."
11814
+ },
11815
+ NOT_DICOM_PART_10_REQUIRED: {
11816
+ code: FATAL_CODES.NOT_DICOM_PART_10,
11817
+ message: "Missing DICM magic at offset 128 (stripPreamble='require')."
11818
+ },
11819
+ NOT_DICOM_PART_10: {
11820
+ code: FATAL_CODES.NOT_DICOM_PART_10,
11821
+ message: "Input is not a DICOM Part 10 file (no DICM magic at offset 128 and no recognizable File Meta group at offset 0)."
11822
+ },
11823
+ // `{ts}` is NOT the UID. It is the PS3.6 registry's own name for the UID, or a
11824
+ // fixed phrase when PS3.6 does not publish one - see `renderTransferSyntax`.
11825
+ UNSUPPORTED_TRANSFER_SYNTAX: {
11826
+ code: FATAL_CODES.UNSUPPORTED_TRANSFER_SYNTAX,
11827
+ message: `{ts} in (0002,0010) is not supported by @cosyte/dicom v1 (supported: ${SUPPORTED_TRANSFER_SYNTAXES}).`
11828
+ },
11829
+ FILE_META_TRUNCATED: {
11830
+ code: FATAL_CODES.INVALID_FILE_META,
11831
+ message: "File Meta is truncated."
11832
+ },
11833
+ // The declared group length is deliberately absent. It is four bytes of the
11834
+ // document read as a 32-bit integer, and this code fires precisely when those
11835
+ // four bytes are not what they claim to be.
11836
+ FILE_META_GROUP_LENGTH_OVERRUNS: {
11837
+ code: FATAL_CODES.INVALID_FILE_META,
11838
+ message: "(0002,0000) FileMetaInformationGroupLength declares more bytes than remain in the input; {n} bytes remain. The declared length is withheld; the byte offset locates the group."
11839
+ },
11840
+ FILE_META_TRANSFER_SYNTAX_MISSING: {
11841
+ code: FATAL_CODES.INVALID_FILE_META,
11842
+ message: "Required File Meta element (0002,0010) Transfer Syntax UID is missing or not UI."
11843
+ },
11844
+ TRUNCATED_DATASET_HEADER: {
11845
+ code: FATAL_CODES.INVALID_FILE_META,
11846
+ message: "Truncated dataset (header read past buffer end)."
11847
+ },
11848
+ TRUNCATED_FFFE_HEADER: {
11849
+ code: FATAL_CODES.INVALID_FILE_META,
11850
+ message: "Truncated dataset (FFFE header read past buffer end)."
11851
+ },
11852
+ TRUNCATED_EXPLICIT_VR_HEADER: {
11853
+ code: FATAL_CODES.INVALID_FILE_META,
11854
+ message: "Truncated dataset (Explicit VR header read past buffer end)."
11855
+ },
11856
+ SQ_ITEM_HEADER_TRUNCATED: {
11857
+ code: FATAL_CODES.INVALID_FILE_META,
11858
+ message: "Truncated dataset (SQ item header read past buffer end)."
11859
+ },
11860
+ // Neither the marker's element number nor its length field is here. Both are
11861
+ // read at a position the reader may have desynchronized to, so both are
11862
+ // document content: the length field measured as 1109414477, `"MR B"`.
11863
+ UNEXPECTED_FFFE_AT_DATASET_LEVEL: {
11864
+ code: FATAL_CODES.INVALID_FILE_META,
11865
+ message: "An (FFFE,xxxx) delimitation item appears at Data Set level under Explicit VR, where no sequence is open. Its element number and its length field are withheld; the byte offset locates it."
11866
+ },
11867
+ UNEXPECTED_FFFE_AT_DATASET_ROOT: {
11868
+ code: FATAL_CODES.INVALID_FILE_META,
11869
+ message: "An (FFFE,xxxx) delimitation item appears at Data Set level under Implicit VR LE, where no sequence is open. Its element number is withheld; the byte offset locates it."
11870
+ },
11871
+ UNDEFINED_LENGTH_ON_NON_SQ_EXPLICIT: {
11872
+ code: FATAL_CODES.INVALID_FILE_META,
11873
+ message: "An element with VR={vr} declares undefined length (0xFFFFFFFF) under Explicit VR. PS3.5 2026c permits that for a Sequence (7.5.2 Delimitation of The Sequence of Items), for encapsulated (7FE0,0010) Pixel Data (A.4), and for the UN form CP-246 addresses (6.2.2 Unknown (UN) Value Representation), and this element is none of them. Its tag is withheld; the byte offset locates it."
11874
+ },
11875
+ UNDEFINED_LENGTH_ON_NON_SQ_IMPLICIT: {
11876
+ code: FATAL_CODES.INVALID_FILE_META,
11877
+ message: "An element whose VR resolved to {vr} declares undefined length (0xFFFFFFFF) under Implicit VR LE, and the descent as an Implicit VR LE item stream (PS3.5 2026c 6.2.2, the UN form CP-246 addresses) did not succeed. Its tag is withheld; the byte offset locates it."
11878
+ },
11879
+ ELEMENT_LENGTH_EXCEEDS_BUFFER: {
11880
+ code: FATAL_CODES.INVALID_FILE_META,
11881
+ message: "An element declares a Value Length reaching past the end of the bytes being read; {n} bytes remain. Its tag and its declared length are withheld; the byte offset locates it."
11882
+ },
11883
+ UNEXPECTED_TAG_INSIDE_SEQUENCE: {
11884
+ code: FATAL_CODES.INVALID_FILE_META,
11885
+ message: "A sequence's item stream holds a tag that is neither (FFFE,E000) Item nor (FFFE,E0DD) Sequence Delimitation Item (PS3.5 7.5). That tag is withheld: a value being read as an item stream makes its four bytes document content. The byte offset locates it."
11886
+ },
11887
+ ENCAPSULATED_FRAGMENT_EXCEEDS_BUFFER: {
11888
+ code: FATAL_CODES.INVALID_FILE_META,
11889
+ message: "An encapsulated Pixel Data fragment declares a length reaching past the end of the bytes being read. The declared length is withheld; the byte offset locates the fragment."
11890
+ },
11891
+ ITEM_LENGTH_EXCEEDS_BUFFER: {
11892
+ code: FATAL_CODES.INVALID_FILE_META,
11893
+ message: "An (FFFE,E000) Item declares a length reaching past the end of the bytes being read. The declared length is withheld; the byte offset locates the item."
11894
+ },
11895
+ SQ_NESTING_DEPTH_EXCEEDED: {
11896
+ code: FATAL_CODES.INVALID_FILE_META,
11897
+ message: "SQ nesting depth exceeds {n}."
11898
+ },
11899
+ INFLATED_PAYLOAD_EXCEEDS_CAP: {
11900
+ code: FATAL_CODES.INVALID_FILE_META,
11901
+ message: "Inflated Deflated TS payload exceeds {n}-byte cap."
11902
+ },
11903
+ // `{zlib}` is a member of the nine-name `zlib.codes` table or nothing. zlib's
11904
+ // own `err.message` is never forwarded: it is a string from a library handed
11905
+ // the sender's bytes, which is the one shape of third-party text this parser
11906
+ // cannot vouch for.
11907
+ INFLATE_FAILED: {
11908
+ code: FATAL_CODES.INVALID_FILE_META,
11909
+ message: "Failed to inflate Deflated TS payload (zlib error code: {zlib})."
11910
+ }
11911
+ });
11912
+ function renderTransferSyntax(ts) {
11913
+ if (ts === void 0) return "The Transfer Syntax UID";
11914
+ const name = uid(ts)?.name ?? "";
11915
+ return name.length > 0 ? `Transfer Syntax ${name}` : "The Transfer Syntax UID";
11916
+ }
11917
+ function renderZlibCode(code) {
11918
+ return code !== void 0 && ZLIB_CODES.has(code) ? code : WITHHELD;
11919
+ }
11920
+ function build(key, byteOffset, snippet, tokens = {}) {
11921
+ const entry = FATAL_MESSAGES[key];
11922
+ const message = entry.message.replace("{vr}", renderVr(tokens.vr)).replace("{ts}", renderTransferSyntax(tokens.ts)).replace("{zlib}", renderZlibCode(tokens.zlib)).replace("{n}", String(tokens.n ?? 0));
11923
+ return new DicomParseError(entry.code, message, byteOffset, snippet);
11924
+ }
11925
+ function at(key, buffer, offset, tokens = {}) {
11926
+ return build(key, offset, buildSnippet(buffer, offset), tokens);
11927
+ }
11928
+ function emptyInput() {
11929
+ return build("EMPTY_INPUT", 0, "");
11930
+ }
11931
+ function emptyInputAfterNormalization() {
11932
+ return build("EMPTY_INPUT_AFTER_NORMALIZATION", 0, "");
11933
+ }
11934
+ function notDicomPart10Required(buffer, offset) {
11935
+ return at("NOT_DICOM_PART_10_REQUIRED", buffer, offset);
11936
+ }
11937
+ function notDicomPart10(buffer, offset) {
11938
+ return at("NOT_DICOM_PART_10", buffer, offset);
11939
+ }
11940
+ function unsupportedTransferSyntax(buffer, offset, ts) {
11941
+ const name = uid(ts)?.name ?? "";
11942
+ return build(
11943
+ "UNSUPPORTED_TRANSFER_SYNTAX",
11944
+ offset,
11945
+ name.length > 0 ? name : buildSnippet(buffer, offset),
11946
+ { ts }
11947
+ );
11948
+ }
11949
+ function fileMetaTruncated(buffer, offset) {
11950
+ return at("FILE_META_TRUNCATED", buffer, offset);
11951
+ }
11952
+ function fileMetaGroupLengthOverruns(buffer, offset, remaining) {
11953
+ return at("FILE_META_GROUP_LENGTH_OVERRUNS", buffer, offset, { n: remaining });
11954
+ }
11955
+ function fileMetaTransferSyntaxMissing(buffer, offset) {
11956
+ return at("FILE_META_TRANSFER_SYNTAX_MISSING", buffer, offset);
11957
+ }
11958
+ function truncatedDatasetHeader(buffer, offset) {
11959
+ return at("TRUNCATED_DATASET_HEADER", buffer, offset);
11960
+ }
11961
+ function truncatedFffeHeader(buffer, offset) {
11962
+ return at("TRUNCATED_FFFE_HEADER", buffer, offset);
11963
+ }
11964
+ function truncatedExplicitVrHeader(buffer, offset) {
11965
+ return at("TRUNCATED_EXPLICIT_VR_HEADER", buffer, offset);
11966
+ }
11967
+ function sqItemHeaderTruncated(buffer, offset) {
11968
+ return at("SQ_ITEM_HEADER_TRUNCATED", buffer, offset);
11969
+ }
11970
+ function unexpectedFffeAtDatasetLevel(buffer, offset) {
11971
+ return at("UNEXPECTED_FFFE_AT_DATASET_LEVEL", buffer, offset);
11972
+ }
11973
+ function unexpectedFffeAtDatasetRoot(buffer, offset) {
11974
+ return at("UNEXPECTED_FFFE_AT_DATASET_ROOT", buffer, offset);
11975
+ }
11976
+ function undefinedLengthOnNonSqExplicit(buffer, offset, vr) {
11977
+ return at("UNDEFINED_LENGTH_ON_NON_SQ_EXPLICIT", buffer, offset, { vr });
11978
+ }
11979
+ function undefinedLengthOnNonSqImplicit(buffer, offset, vr) {
11980
+ return at("UNDEFINED_LENGTH_ON_NON_SQ_IMPLICIT", buffer, offset, { vr });
11981
+ }
11982
+ function elementLengthExceedsBuffer(buffer, offset, remaining) {
11983
+ return at("ELEMENT_LENGTH_EXCEEDS_BUFFER", buffer, offset, { n: remaining });
11984
+ }
11985
+ function unexpectedTagInsideSequence(buffer, offset) {
11986
+ return at("UNEXPECTED_TAG_INSIDE_SEQUENCE", buffer, offset);
11987
+ }
11988
+ function encapsulatedFragmentExceedsBuffer(buffer, offset) {
11989
+ return at("ENCAPSULATED_FRAGMENT_EXCEEDS_BUFFER", buffer, offset);
11990
+ }
11991
+ function itemLengthExceedsBuffer(buffer, offset) {
11992
+ return at("ITEM_LENGTH_EXCEEDS_BUFFER", buffer, offset);
11993
+ }
11994
+ function sqNestingDepthExceeded(buffer, offset, limit) {
11995
+ return at("SQ_NESTING_DEPTH_EXCEEDED", buffer, offset, { n: limit });
11996
+ }
11997
+ function inflatedPayloadExceedsCap(buffer, offset, cap) {
11998
+ return at("INFLATED_PAYLOAD_EXCEEDS_CAP", buffer, offset, { n: cap });
11999
+ }
12000
+ function inflateFailed(buffer, offset, code) {
12001
+ return at("INFLATE_FAILED", buffer, offset, ...code !== void 0 ? [{ zlib: code }] : []);
12002
+ }
11506
12003
  function copyValueBytes(src) {
11507
12004
  const out = buffer.Buffer.allocUnsafeSlow(src.length);
11508
12005
  src.copy(out);
@@ -11574,13 +12071,6 @@ var ByteCursor = class {
11574
12071
  }
11575
12072
  };
11576
12073
 
11577
- // src/parser/tokens.ts
11578
- var WITHHELD = "<withheld>";
11579
- function safePrivateCreator(creator, profile) {
11580
- if (profile === void 0) return WITHHELD;
11581
- return profile.privateDictionary.has(creator) ? creator : WITHHELD;
11582
- }
11583
-
11584
12074
  // src/dataset/vr/charset.ts
11585
12075
  var TERM_TO_LABEL = /* @__PURE__ */ new Map([
11586
12076
  // Default repertoire (ISO 646 IRV / ASCII). Latin-1 is a lenient,
@@ -11662,54 +12152,6 @@ function decodeText(bytes, terms) {
11662
12152
  }
11663
12153
  }
11664
12154
 
11665
- // src/parser/endian.ts
11666
- var BE_VR_STRIDE = Object.freeze({
11667
- // 2-byte swaps
11668
- AT: 2,
11669
- US: 2,
11670
- SS: 2,
11671
- OW: 2,
11672
- // 4-byte swaps
11673
- UL: 4,
11674
- SL: 4,
11675
- FL: 4,
11676
- OF: 4,
11677
- OL: 4,
11678
- // 8-byte swaps (64-bit floats + 2018 64-bit integer additions)
11679
- FD: 8,
11680
- OD: 8,
11681
- OV: 8,
11682
- SV: 8,
11683
- UV: 8,
11684
- // No swap - byte streams (D-24) and ASCII / spec-defined VRs.
11685
- OB: 0,
11686
- UN: 0,
11687
- AE: 0,
11688
- AS: 0,
11689
- CS: 0,
11690
- DA: 0,
11691
- DS: 0,
11692
- DT: 0,
11693
- IS: 0,
11694
- LO: 0,
11695
- LT: 0,
11696
- PN: 0,
11697
- SH: 0,
11698
- ST: 0,
11699
- TM: 0,
11700
- UC: 0,
11701
- UI: 0,
11702
- UR: 0,
11703
- UT: 0,
11704
- SQ: 0
11705
- });
11706
- var KNOWN_VRS = Object.freeze(
11707
- new Set(Object.keys(BE_VR_STRIDE))
11708
- );
11709
- function isRecognizedVr(vr) {
11710
- return KNOWN_VRS.has(vr);
11711
- }
11712
-
11713
12155
  // src/parser/warnings.ts
11714
12156
  var WARNING_CODES = {
11715
12157
  // === Phase 2 actively emits (D-08 active list - alphabetical-within-prefix per CONTEXT specifics §) ===
@@ -11766,7 +12208,11 @@ var WARNING_MESSAGES = Object.freeze({
11766
12208
  DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR: "Element ({tag}) uses undefined length (0xFFFFFFFF) under an Explicit VR transfer syntax.",
11767
12209
  DICOM_ODD_LENGTH_VALUE_PADDED: "Element ({tag}) has odd declared length {n}; cursor advanced by one padding byte to maintain alignment.",
11768
12210
  DICOM_VR_MISMATCH: "Element ({tag}) on-wire VR is {vr2}; dictionary lists {vr}. Trusting on-wire VR.",
11769
- DICOM_PRIVATE_TAG_NO_CREATOR: "Private element ({tag}) has no Private Creator registered for its block; treating as VR=UN.",
12211
+ // No tag, and the reason is the one `nonzeroReservedBytes` states: this code's
12212
+ // three siblings below fire only on an ODD group, and an odd group is the one
12213
+ // class of tag no closed table this library holds can ever vouch for. See
12214
+ // `privateTagNoCreator`.
12215
+ DICOM_PRIVATE_TAG_NO_CREATOR: "A private element has no Private Creator registered for its block; treating as VR=UN. Its tag is withheld; the byte offset identifies the element.",
11770
12216
  DICOM_GROUP_LENGTH_IN_DATASET: "Retired Group Length element ({tag}) encountered in dataset; preserved as-is.",
11771
12217
  // The tag is deliberately absent, and this is the only *parser* message where
11772
12218
  // that is true. See `nonzeroReservedBytes`. Kept terse for the same reason the
@@ -11812,14 +12258,18 @@ var WARNING_MESSAGES = Object.freeze({
11812
12258
  // `endLimit < buffer.length` conjunct bounds it by the buffer.
11813
12259
  DICOM_ITEM_CROSSES_SEQUENCE_END: "Item ({tag}) declares a length reaching past its enclosing sequence's declared end, so it reads the enclosing Data Set's bytes; {n2} bytes remained inside the sequence. The file's two length fields disagree (PS3.5 7.5.1 and 7.5.2 govern them); the item's is used. The declared length is withheld; the byte offset locates the item.",
11814
12260
  DICOM_PIXEL_DATA_LENGTH_MISMATCH: "(7FE0,0010) PixelData declared length {n} does not match computed {n2} bytes.",
11815
- DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR: "Private element ({tag}) under Implicit VR LE has no VR override; falling back to UN.",
11816
- DICOM_PRIVATE_CREATOR_UNKNOWN: "Private element ({tag}) has a Private Creator the active profile's private dictionary does not name; falling back to UN. The creator string is not reproduced here - read the (gggg,00EE) element if you need it.",
12261
+ DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR: "A private element under Implicit VR LE has no VR override; falling back to UN. Its tag is withheld; the byte offset identifies the element.",
12262
+ DICOM_PRIVATE_CREATOR_UNKNOWN: "A private element has a Private Creator the active profile's private dictionary does not name; falling back to UN. The creator string is not reproduced here - read the (gggg,00EE) element if you need it. Its tag is withheld; the byte offset identifies the element.",
11817
12263
  DICOM_BURNED_IN_ANNOTATION_NOT_REMOVED: "Pixel Data is present and Burned In Annotation is not 'NO'; this metadata-only de-identifier cannot inspect or clean pixels. Recognizable text may remain burned into the image.",
11818
- DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED: "Element ({tag}) {vr} was kept by the action table, but its value ends with {n} whole Data Element(s) - an over-declared Value Length swallowed what followed it. Emptied rather than kept, because the action table cannot see an attribute encoded inside a value. Read report.embeddedAttributes for the tags that were hidden there.",
12264
+ DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED: "Element ({tag}) {vr} was kept by the action table, but its value ends with {n} whole Data Element(s) - an over-declared Value Length swallowed what followed it. Emptied rather than kept, because the action table cannot see an attribute encoded inside a value. report.embeddedAttributes names the ones this run acts on that also have a literal Table E.1-1 row, which may be none of them.",
11819
12265
  // Deliberately short. One of these is raised per un-auditable element, so a
11820
12266
  // long message is multiplied by an element count the input controls; the
11821
12267
  // reasoning belongs in the docs, not in a string repeated thousands of times.
11822
- DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE: "Element ({tag}) is VR=SQ with no parsed items, so its {n} value bytes could not be audited (PS3.15 E.1.1); emptied. See report.unauditableSequences.",
12268
+ // 🛑 IT DOES NOT SAY "is VR=SQ", AND THAT IS NOT A WORDING PREFERENCE. One of
12269
+ // its two producers is an element the profile declares a Sequence while the
12270
+ // wire says UN or OB, so naming a VR here would state a fact about the file
12271
+ // that the file contradicts - on the one channel this class designates.
12272
+ DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE: "Element ({tag}) is a Sequence carrier with no parsed items, so its {n} recorded bytes could not be audited (PS3.15 E.1.1); emptied. See report.unauditableSequences.",
11823
12273
  // Deliberately short for the same reason as the code above: one per element,
11824
12274
  // and the element count is chosen by the input.
11825
12275
  //
@@ -11846,130 +12296,127 @@ var TAG_SHAPE = /^[0-9A-F]{8}$/u;
11846
12296
  function renderTag(tag) {
11847
12297
  return tag !== void 0 && TAG_SHAPE.test(tag) ? tag : WITHHELD;
11848
12298
  }
11849
- function renderVr(vr) {
11850
- return vr !== void 0 && KNOWN_VRS.has(vr) ? vr : WITHHELD;
11851
- }
11852
- function build(code, position, tokens = {}) {
12299
+ function build2(code, position, tokens = {}) {
11853
12300
  const message = WARNING_MESSAGES[code].replace("{tag}", renderTag(tokens.tag)).replace("{vr2}", renderVr(tokens.vr2)).replace("{vr}", renderVr(tokens.vr)).replace("{n2}", String(tokens.n2 ?? 0)).replace("{n}", String(tokens.n ?? 0));
11854
12301
  return { code, message, position };
11855
12302
  }
11856
12303
  function missingPreamble(position) {
11857
- return build(WARNING_CODES.DICOM_MISSING_PREAMBLE, position);
12304
+ return build2(WARNING_CODES.DICOM_MISSING_PREAMBLE, position);
11858
12305
  }
11859
12306
  function fileMetaGroupLengthMissing(position) {
11860
- return build(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISSING, position);
12307
+ return build2(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISSING, position);
11861
12308
  }
11862
12309
  function fileMetaGroupLengthMismatch(position, declared, actual) {
11863
- return build(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISMATCH, position, {
12310
+ return build2(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISMATCH, position, {
11864
12311
  n: declared,
11865
12312
  n2: actual
11866
12313
  });
11867
12314
  }
11868
12315
  function undefinedLengthInExplicitVR(position, tag) {
11869
- return build(WARNING_CODES.DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR, position, { tag });
12316
+ return build2(WARNING_CODES.DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR, position, { tag });
11870
12317
  }
11871
12318
  function oddLengthValuePadded(position, tag, declaredLength) {
11872
- return build(WARNING_CODES.DICOM_ODD_LENGTH_VALUE_PADDED, position, {
12319
+ return build2(WARNING_CODES.DICOM_ODD_LENGTH_VALUE_PADDED, position, {
11873
12320
  tag,
11874
12321
  n: declaredLength
11875
12322
  });
11876
12323
  }
11877
12324
  function vrMismatch(position, tag, dictVR, fileVR) {
11878
- return build(WARNING_CODES.DICOM_VR_MISMATCH, position, { tag, vr: dictVR, vr2: fileVR });
12325
+ return build2(WARNING_CODES.DICOM_VR_MISMATCH, position, { tag, vr: dictVR, vr2: fileVR });
11879
12326
  }
11880
- function privateTagNoCreator(position, tag) {
11881
- return build(WARNING_CODES.DICOM_PRIVATE_TAG_NO_CREATOR, position, { tag });
12327
+ function privateTagNoCreator(position) {
12328
+ return build2(WARNING_CODES.DICOM_PRIVATE_TAG_NO_CREATOR, position);
11882
12329
  }
11883
12330
  function groupLengthInDataset(position, tag) {
11884
- return build(WARNING_CODES.DICOM_GROUP_LENGTH_IN_DATASET, position, { tag });
12331
+ return build2(WARNING_CODES.DICOM_GROUP_LENGTH_IN_DATASET, position, { tag });
11885
12332
  }
11886
12333
  function nonzeroReservedBytes(position, first, second) {
11887
- return build(WARNING_CODES.DICOM_NONZERO_RESERVED_BYTES, position, {
12334
+ return build2(WARNING_CODES.DICOM_NONZERO_RESERVED_BYTES, position, {
11888
12335
  n: first,
11889
12336
  n2: second
11890
12337
  });
11891
12338
  }
11892
12339
  function unParsedAsSQ(position, tag) {
11893
- return build(WARNING_CODES.DICOM_UN_PARSED_AS_SQ, position, { tag });
12340
+ return build2(WARNING_CODES.DICOM_UN_PARSED_AS_SQ, position, { tag });
11894
12341
  }
11895
12342
  function sqNotDescended(position, tag) {
11896
- return build(WARNING_CODES.DICOM_SQ_NOT_DESCENDED, position, { tag });
12343
+ return build2(WARNING_CODES.DICOM_SQ_NOT_DESCENDED, position, { tag });
11897
12344
  }
11898
12345
  function itemCrossesSequenceEnd(position, tag, availableLength) {
11899
- return build(WARNING_CODES.DICOM_ITEM_CROSSES_SEQUENCE_END, position, {
12346
+ return build2(WARNING_CODES.DICOM_ITEM_CROSSES_SEQUENCE_END, position, {
11900
12347
  tag,
11901
12348
  n2: availableLength
11902
12349
  });
11903
12350
  }
11904
12351
  function emptyItemInSequence(position, tag) {
11905
- return build(WARNING_CODES.DICOM_EMPTY_ITEM_IN_SEQUENCE, position, { tag });
12352
+ return build2(WARNING_CODES.DICOM_EMPTY_ITEM_IN_SEQUENCE, position, { tag });
11906
12353
  }
11907
12354
  function duplicateTagInDataSet(position) {
11908
- return build(WARNING_CODES.DICOM_DUPLICATE_TAG_IN_DATA_SET, position);
12355
+ return build2(WARNING_CODES.DICOM_DUPLICATE_TAG_IN_DATA_SET, position);
11909
12356
  }
11910
12357
  function duplicateFileMetaElement(position) {
11911
- return build(WARNING_CODES.DICOM_DUPLICATE_FILE_META_ELEMENT, position);
12358
+ return build2(WARNING_CODES.DICOM_DUPLICATE_FILE_META_ELEMENT, position);
11912
12359
  }
11913
- function implicitVRForPrivateTagWithoutVR(position, tag) {
11914
- return build(WARNING_CODES.DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR, position, { tag });
12360
+ function implicitVRForPrivateTagWithoutVR(position) {
12361
+ return build2(WARNING_CODES.DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR, position);
11915
12362
  }
11916
- function privateCreatorUnknown(position, tag) {
11917
- return build(WARNING_CODES.DICOM_PRIVATE_CREATOR_UNKNOWN, position, { tag });
12363
+ function privateCreatorUnknown(position) {
12364
+ return build2(WARNING_CODES.DICOM_PRIVATE_CREATOR_UNKNOWN, position);
11918
12365
  }
11919
12366
  function burnedInAnnotationNotRemoved(position) {
11920
- return build(WARNING_CODES.DICOM_BURNED_IN_ANNOTATION_NOT_REMOVED, position);
12367
+ return build2(WARNING_CODES.DICOM_BURNED_IN_ANNOTATION_NOT_REMOVED, position);
11921
12368
  }
11922
12369
  function deidentMethodNotAdded(position) {
11923
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_ADDED, position);
12370
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_ADDED, position);
11924
12371
  }
11925
12372
  function deidentMethodNotLo(position) {
11926
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_LO, position);
12373
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_LO, position);
11927
12374
  }
11928
12375
  function deidentMethodPriorRetained(position) {
11929
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_PRIOR_RETAINED, position);
12376
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_PRIOR_RETAINED, position);
11930
12377
  }
11931
12378
  function embeddedAttributeRemoved(position, tag, vr, count) {
11932
- return build(WARNING_CODES.DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED, position, {
12379
+ return build2(WARNING_CODES.DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED, position, {
11933
12380
  tag,
11934
12381
  vr,
11935
12382
  n: count
11936
12383
  });
11937
12384
  }
11938
12385
  function sequenceNotAuditable(position, tag, byteLength) {
11939
- return build(WARNING_CODES.DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE, position, {
12386
+ return build2(WARNING_CODES.DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE, position, {
11940
12387
  tag,
11941
12388
  n: byteLength
11942
12389
  });
11943
12390
  }
11944
12391
  function undefinedVrNotAuditable(position, byteLength) {
11945
- return build(WARNING_CODES.DICOM_DEIDENT_UNDEFINED_VR_NOT_AUDITABLE, position, {
12392
+ return build2(WARNING_CODES.DICOM_DEIDENT_UNDEFINED_VR_NOT_AUDITABLE, position, {
11946
12393
  n: byteLength,
11947
12394
  n2: position.byteOffset
11948
12395
  });
11949
12396
  }
11950
12397
  function bomInTextVR(position, tag, vr) {
11951
- return build(WARNING_CODES.DICOM_BOM_IN_TEXT_VR, position, { tag, vr });
12398
+ return build2(WARNING_CODES.DICOM_BOM_IN_TEXT_VR, position, { tag, vr });
11952
12399
  }
11953
12400
  function trailingNullInTextVR(position, tag, vr) {
11954
- return build(WARNING_CODES.DICOM_TRAILING_NULL_IN_TEXT_VR, position, { tag, vr });
12401
+ return build2(WARNING_CODES.DICOM_TRAILING_NULL_IN_TEXT_VR, position, { tag, vr });
11955
12402
  }
11956
12403
  function uiTrailingSpace(position, tag) {
11957
- return build(WARNING_CODES.DICOM_UI_TRAILING_SPACE, position, { tag });
12404
+ return build2(WARNING_CODES.DICOM_UI_TRAILING_SPACE, position, { tag });
11958
12405
  }
11959
12406
  function nonAsciiInAsciiVR(position, tag, vr) {
11960
- return build(WARNING_CODES.DICOM_NON_ASCII_IN_ASCII_VR, position, { tag, vr });
12407
+ return build2(WARNING_CODES.DICOM_NON_ASCII_IN_ASCII_VR, position, { tag, vr });
11961
12408
  }
11962
12409
  function isNonintegerValue(position, tag) {
11963
- return build(WARNING_CODES.DICOM_IS_NONINTEGER_VALUE, position, { tag });
12410
+ return build2(WARNING_CODES.DICOM_IS_NONINTEGER_VALUE, position, { tag });
11964
12411
  }
11965
12412
  function daLegacyFormat(position, tag) {
11966
- return build(WARNING_CODES.DICOM_DA_LEGACY_FORMAT, position, { tag });
12413
+ return build2(WARNING_CODES.DICOM_DA_LEGACY_FORMAT, position, { tag });
11967
12414
  }
11968
12415
  function dtNonstandardOffset(position, tag) {
11969
- return build(WARNING_CODES.DICOM_DT_NONSTANDARD_OFFSET, position, { tag });
12416
+ return build2(WARNING_CODES.DICOM_DT_NONSTANDARD_OFFSET, position, { tag });
11970
12417
  }
11971
12418
  function unsupportedCharset(position, valueIndex) {
11972
- return build(WARNING_CODES.DICOM_UNSUPPORTED_CHARSET, position, { n: valueIndex });
12419
+ return build2(WARNING_CODES.DICOM_UNSUPPORTED_CHARSET, position, { n: valueIndex });
11973
12420
  }
11974
12421
 
11975
12422
  // src/profiles/lookup.ts
@@ -12019,18 +12466,18 @@ function resolveImplicitVR(tag, ctx, emit, position) {
12019
12466
  }
12020
12467
  const creator = resolvePrivateCreator(tag, ctx);
12021
12468
  if (creator === void 0) {
12022
- emit(privateTagNoCreator(position, tag));
12023
- emit(implicitVRForPrivateTagWithoutVR(position, tag));
12469
+ emit(privateTagNoCreator(position));
12470
+ emit(implicitVRForPrivateTagWithoutVR(position));
12024
12471
  return "UN";
12025
12472
  }
12026
12473
  if (ctx.profile !== void 0) {
12027
12474
  const def = resolvePrivateTag(ctx.profile, tag, creator);
12028
12475
  if (def !== void 0) return def.vr;
12029
12476
  if (!ctx.profile.privateDictionary.has(creator)) {
12030
- emit(privateCreatorUnknown(position, tag));
12477
+ emit(privateCreatorUnknown(position));
12031
12478
  }
12032
12479
  }
12033
- emit(implicitVRForPrivateTagWithoutVR(position, tag));
12480
+ emit(implicitVRForPrivateTagWithoutVR(position));
12034
12481
  return "UN";
12035
12482
  }
12036
12483
  const direct = TAGS[tag];
@@ -12144,12 +12591,7 @@ function parseFileMeta(buffer$1, datasetStart, ctx, emit) {
12144
12591
  firstElement = readExplicitLeElement(cursor);
12145
12592
  } catch (err) {
12146
12593
  if (err instanceof RangeError) {
12147
- throw new DicomParseError(
12148
- FATAL_CODES.INVALID_FILE_META,
12149
- "File Meta is truncated.",
12150
- fmStart,
12151
- buildSnippet(buffer$1, fmStart)
12152
- );
12594
+ throw fileMetaTruncated(buffer$1, fmStart);
12153
12595
  }
12154
12596
  throw err;
12155
12597
  }
@@ -12159,12 +12601,7 @@ function parseFileMeta(buffer$1, datasetStart, ctx, emit) {
12159
12601
  if (firstElement.tag === "00020000" && firstElement.vr === "UL" && firstElement.value.length === 4) {
12160
12602
  declaredFmLength = firstElement.value.readUInt32LE(0);
12161
12603
  if (cursor.position + declaredFmLength > buffer$1.length) {
12162
- throw new DicomParseError(
12163
- FATAL_CODES.INVALID_FILE_META,
12164
- `File Meta group length declares ${String(declaredFmLength)} bytes but only ${String(buffer$1.length - cursor.position)} bytes remain.`,
12165
- fmStart,
12166
- buildSnippet(buffer$1, fmStart)
12167
- );
12604
+ throw fileMetaGroupLengthOverruns(buffer$1, fmStart, buffer$1.length - cursor.position);
12168
12605
  }
12169
12606
  } else {
12170
12607
  emit(fileMetaGroupLengthMissing({ byteOffset: fmStart, fileMeta: true }));
@@ -12181,12 +12618,7 @@ function parseFileMeta(buffer$1, datasetStart, ctx, emit) {
12181
12618
  next = readExplicitLeElement(cursor);
12182
12619
  } catch (err) {
12183
12620
  if (err instanceof RangeError) {
12184
- throw new DicomParseError(
12185
- FATAL_CODES.INVALID_FILE_META,
12186
- "File Meta is truncated.",
12187
- fmStart,
12188
- buildSnippet(buffer$1, fmStart)
12189
- );
12621
+ throw fileMetaTruncated(buffer$1, fmStart);
12190
12622
  }
12191
12623
  throw err;
12192
12624
  }
@@ -12210,12 +12642,7 @@ function parseFileMeta(buffer$1, datasetStart, ctx, emit) {
12210
12642
  next = readExplicitLeElement(cursor);
12211
12643
  } catch (err) {
12212
12644
  if (err instanceof RangeError) {
12213
- throw new DicomParseError(
12214
- FATAL_CODES.INVALID_FILE_META,
12215
- "File Meta is truncated.",
12216
- fmStart,
12217
- buildSnippet(buffer$1, fmStart)
12218
- );
12645
+ throw fileMetaTruncated(buffer$1, fmStart);
12219
12646
  }
12220
12647
  throw err;
12221
12648
  }
@@ -12234,12 +12661,7 @@ function parseFileMeta(buffer$1, datasetStart, ctx, emit) {
12234
12661
  }
12235
12662
  const tsElement = fmElements.find((e) => e.tag === "00020010");
12236
12663
  if (tsElement === void 0 || tsElement.vr !== "UI") {
12237
- throw new DicomParseError(
12238
- FATAL_CODES.INVALID_FILE_META,
12239
- "Required File Meta element (0002,0010) Transfer Syntax UID is missing or not UI.",
12240
- fmStart,
12241
- buildSnippet(buffer$1, fmStart)
12242
- );
12664
+ throw fileMetaTransferSyntaxMissing(buffer$1, fmStart);
12243
12665
  }
12244
12666
  const extraElements = fmElements.filter((e) => !MODELED_FM_TAGS.has(e.tag)).map((e) => Object.freeze({ tag: e.tag, vr: e.vr, value: buffer.Buffer.from(e.value) }));
12245
12667
  const fileMeta = {
@@ -12323,23 +12745,13 @@ function parsePart10Header(buffer, ctx, emit) {
12323
12745
  return { datasetStart: 132, hadPreamble: true };
12324
12746
  }
12325
12747
  if (ctx.stripPreamble === "require") {
12326
- throw new DicomParseError(
12327
- FATAL_CODES.NOT_DICOM_PART_10,
12328
- "Missing DICM magic at offset 128 (stripPreamble='require').",
12329
- 0,
12330
- buildSnippet(buffer, 0)
12331
- );
12748
+ throw notDicomPart10Required(buffer, 0);
12332
12749
  }
12333
12750
  if (looksLikeFileMetaGroupLengthAtOffsetZero(buffer)) {
12334
12751
  emit(missingPreamble({ byteOffset: 0 }));
12335
12752
  return { datasetStart: 0, hadPreamble: false };
12336
12753
  }
12337
- throw new DicomParseError(
12338
- FATAL_CODES.NOT_DICOM_PART_10,
12339
- "Input is not a DICOM Part 10 file (no DICM magic at offset 128 and no recognizable File Meta group at offset 0).",
12340
- 0,
12341
- buildSnippet(buffer, 0)
12342
- );
12754
+ throw notDicomPart10(buffer, 0);
12343
12755
  }
12344
12756
  function looksLikeFileMetaGroupLengthAtOffsetZero(buffer) {
12345
12757
  if (buffer.length < 12) return false;
@@ -12750,12 +13162,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12750
13162
  ctx.nestingDepth += 1;
12751
13163
  if (ctx.nestingDepth > NESTING_DEPTH_LIMIT) {
12752
13164
  ctx.nestingDepth -= 1;
12753
- throw new DicomParseError(
12754
- FATAL_CODES.INVALID_FILE_META,
12755
- `SQ nesting depth exceeds ${String(NESTING_DEPTH_LIMIT)}.`,
12756
- valueStart,
12757
- buildSnippet(buffer, valueStart)
12758
- );
13165
+ throw sqNestingDepthExceeded(buffer, valueStart, NESTING_DEPTH_LIMIT);
12759
13166
  }
12760
13167
  ctx.encodingContextStack.push(
12761
13168
  opts.encapsulatedPixelData === true ? "EncapsulatedPixelData" : "SqItem"
@@ -12791,12 +13198,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12791
13198
  itemLength = cursor.readUInt32();
12792
13199
  } catch (err) {
12793
13200
  if (err instanceof RangeError) {
12794
- throw new DicomParseError(
12795
- FATAL_CODES.INVALID_FILE_META,
12796
- "Truncated dataset (SQ item header read past buffer end).",
12797
- itemHeaderStart,
12798
- buildSnippet(buffer, itemHeaderStart)
12799
- );
13201
+ throw sqItemHeaderTruncated(buffer, itemHeaderStart);
12800
13202
  }
12801
13203
  throw err;
12802
13204
  }
@@ -12805,12 +13207,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12805
13207
  return { items, endOffset: cursor.position };
12806
13208
  }
12807
13209
  if (itemTag !== ITEM_TAG) {
12808
- throw new DicomParseError(
12809
- FATAL_CODES.INVALID_FILE_META,
12810
- `Unexpected tag ${itemTag} inside sequence (expected FFFE,E000 or FFFE,E0DD).`,
12811
- itemHeaderStart,
12812
- buildSnippet(buffer, itemHeaderStart)
12813
- );
13210
+ throw unexpectedTagInsideSequence(buffer, itemHeaderStart);
12814
13211
  }
12815
13212
  if (itemLength === 0) {
12816
13213
  emit(emptyItemInSequence({ byteOffset: itemHeaderStart }, itemTag));
@@ -12826,12 +13223,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12826
13223
  }
12827
13224
  if (opts.encapsulatedPixelData === true) {
12828
13225
  if (cursor.position + itemLength > buffer.length) {
12829
- throw new DicomParseError(
12830
- FATAL_CODES.INVALID_FILE_META,
12831
- `Encapsulated pixel data fragment length=${String(itemLength)} exceeds remaining buffer.`,
12832
- itemHeaderStart,
12833
- buildSnippet(buffer, itemHeaderStart)
12834
- );
13226
+ throw encapsulatedFragmentExceedsBuffer(buffer, itemHeaderStart);
12835
13227
  }
12836
13228
  cursor.position += itemLength;
12837
13229
  items.push(new Item({ warnings: [], elements: /* @__PURE__ */ new Map(), index: itemIndex }));
@@ -12857,15 +13249,17 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12857
13249
  );
12858
13250
  }
12859
13251
  if (cursor.position + itemLength > buffer.length) {
12860
- throw new DicomParseError(
12861
- FATAL_CODES.INVALID_FILE_META,
12862
- `Item length=${String(itemLength)} exceeds remaining buffer.`,
12863
- itemHeaderStart,
12864
- buildSnippet(buffer, itemHeaderStart)
12865
- );
13252
+ throw itemLengthExceedsBuffer(buffer, itemHeaderStart);
12866
13253
  }
12867
13254
  const itemSlice = buffer.subarray(cursor.position, cursor.position + itemLength);
12868
- const inner = opts.innerStrategy(itemSlice, 0, ctx, emit);
13255
+ const enclosingFrame = ctx.buffer;
13256
+ let inner;
13257
+ try {
13258
+ ctx.buffer = itemSlice;
13259
+ inner = opts.innerStrategy(itemSlice, 0, ctx, emit);
13260
+ } finally {
13261
+ ctx.buffer = enclosingFrame;
13262
+ }
12869
13263
  items.push(new Item({ warnings: [], elements: inner.elements, index: itemIndex }));
12870
13264
  cursor.position += itemLength;
12871
13265
  }
@@ -12889,11 +13283,18 @@ function tryParseDefinedLengthSQ(buffer, valueStart, valueLength, ctx, emit, imp
12889
13283
  const savedWarningsLen = ctx.warnings.length;
12890
13284
  try {
12891
13285
  const slice = buffer.subarray(valueStart, valueStart + valueLength);
12892
- const result = parseSequence(slice, 0, ctx, emit, {
12893
- explicitLength: valueLength,
12894
- littleEndian: true,
12895
- innerStrategy: implicitLeInner
12896
- });
13286
+ const enclosingFrame = ctx.buffer;
13287
+ let result;
13288
+ try {
13289
+ ctx.buffer = slice;
13290
+ result = parseSequence(slice, 0, ctx, emit, {
13291
+ explicitLength: valueLength,
13292
+ littleEndian: true,
13293
+ innerStrategy: implicitLeInner
13294
+ });
13295
+ } finally {
13296
+ ctx.buffer = enclosingFrame;
13297
+ }
12897
13298
  return { success: true, items: result.items };
12898
13299
  } catch (err) {
12899
13300
  if (isStrictEscalation(err)) throw err;
@@ -12920,7 +13321,14 @@ function tryParseUnAsSQ(buffer, valueStart, valueLength, ctx, emit, implicitLeIn
12920
13321
  // CP-246: Implicit VR LE inner per D-30.
12921
13322
  innerStrategy: implicitLeInner
12922
13323
  };
12923
- const result = parseSequence(slice, 0, ctx, emit, opts);
13324
+ const enclosingFrame = ctx.buffer;
13325
+ let result;
13326
+ try {
13327
+ ctx.buffer = slice;
13328
+ result = parseSequence(slice, 0, ctx, emit, opts);
13329
+ } finally {
13330
+ ctx.buffer = enclosingFrame;
13331
+ }
12924
13332
  emit(unParsedAsSQ({ byteOffset: valueStart }, tag));
12925
13333
  return {
12926
13334
  success: true,
@@ -12957,12 +13365,7 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
12957
13365
  length = cursor.readUInt32();
12958
13366
  } catch (err) {
12959
13367
  if (err instanceof RangeError) {
12960
- throw new DicomParseError(
12961
- FATAL_CODES.INVALID_FILE_META,
12962
- "Truncated dataset (header read past buffer end).",
12963
- headerStart,
12964
- buildSnippet(buffer, headerStart)
12965
- );
13368
+ throw truncatedDatasetHeader(buffer, headerStart);
12966
13369
  }
12967
13370
  throw err;
12968
13371
  }
@@ -12971,12 +13374,7 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
12971
13374
  if (opts.stopOnItemDelim === true && tag === "FFFEE00D") {
12972
13375
  return { elements, endOffset: cursor.position };
12973
13376
  }
12974
- throw new DicomParseError(
12975
- FATAL_CODES.INVALID_FILE_META,
12976
- `Unexpected FFFE marker (${tag}) at dataset root.`,
12977
- headerStart,
12978
- buildSnippet(buffer, headerStart)
12979
- );
13377
+ throw unexpectedFffeAtDatasetRoot(buffer, headerStart);
12980
13378
  }
12981
13379
  const position = { byteOffset: headerStart };
12982
13380
  const vr = resolveImplicitVR(tag, ctx, emit, position);
@@ -13043,20 +13441,10 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
13043
13441
  continue;
13044
13442
  }
13045
13443
  }
13046
- throw new DicomParseError(
13047
- FATAL_CODES.INVALID_FILE_META,
13048
- `Undefined length on non-SQ element ${tag} (vr=${vr}) under Implicit VR LE.`,
13049
- headerStart,
13050
- buildSnippet(buffer, headerStart)
13051
- );
13444
+ throw undefinedLengthOnNonSqImplicit(buffer, headerStart, vr);
13052
13445
  }
13053
13446
  if (cursor.position + length > buffer.length) {
13054
- throw new DicomParseError(
13055
- FATAL_CODES.INVALID_FILE_META,
13056
- `Element ${tag} declared length=${String(length)} exceeds remaining buffer (${String(buffer.length - cursor.position)} bytes).`,
13057
- headerStart,
13058
- buildSnippet(buffer, headerStart)
13059
- );
13447
+ throw elementLengthExceedsBuffer(buffer, headerStart, buffer.length - cursor.position);
13060
13448
  }
13061
13449
  const valueStart = cursor.position;
13062
13450
  const valueEnd = valueStart + length;
@@ -13132,31 +13520,20 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13132
13520
  peekGroup = cursor.readUInt16At(cursor.position);
13133
13521
  } catch (err) {
13134
13522
  if (err instanceof RangeError) {
13135
- throw new DicomParseError(
13136
- FATAL_CODES.INVALID_FILE_META,
13137
- "Truncated dataset (header read past buffer end).",
13138
- headerStart,
13139
- buildSnippet(buffer, headerStart)
13140
- );
13523
+ throw truncatedDatasetHeader(buffer, headerStart);
13141
13524
  }
13142
13525
  throw err;
13143
13526
  }
13144
13527
  if (peekGroup === 65534) {
13145
13528
  let grp;
13146
13529
  let ele;
13147
- let len;
13148
13530
  try {
13149
13531
  grp = cursor.readUInt16();
13150
13532
  ele = cursor.readUInt16();
13151
- len = cursor.readUInt32();
13533
+ cursor.readUInt32();
13152
13534
  } catch (err) {
13153
13535
  if (err instanceof RangeError) {
13154
- throw new DicomParseError(
13155
- FATAL_CODES.INVALID_FILE_META,
13156
- "Truncated dataset (FFFE header read past buffer end).",
13157
- headerStart,
13158
- buildSnippet(buffer, headerStart)
13159
- );
13536
+ throw truncatedFffeHeader(buffer, headerStart);
13160
13537
  }
13161
13538
  throw err;
13162
13539
  }
@@ -13164,24 +13541,14 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13164
13541
  if (opts.stopOnItemDelim === true && fffeTag === "FFFEE00D") {
13165
13542
  return { elements, endOffset: cursor.position };
13166
13543
  }
13167
- throw new DicomParseError(
13168
- FATAL_CODES.INVALID_FILE_META,
13169
- `Unexpected FFFE marker ${fffeTag} (length=${String(len)}) at dataset level.`,
13170
- headerStart,
13171
- buildSnippet(buffer, headerStart)
13172
- );
13544
+ throw unexpectedFffeAtDatasetLevel(buffer, headerStart);
13173
13545
  }
13174
13546
  let header;
13175
13547
  try {
13176
13548
  header = readExplicitElementHeader(cursor, ctx, emit);
13177
13549
  } catch (err) {
13178
13550
  if (err instanceof RangeError) {
13179
- throw new DicomParseError(
13180
- FATAL_CODES.INVALID_FILE_META,
13181
- "Truncated dataset (Explicit VR header read past buffer end).",
13182
- headerStart,
13183
- buildSnippet(buffer, headerStart)
13184
- );
13551
+ throw truncatedExplicitVrHeader(buffer, headerStart);
13185
13552
  }
13186
13553
  throw err;
13187
13554
  }
@@ -13321,20 +13688,10 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13321
13688
  continue;
13322
13689
  }
13323
13690
  if (length === UNDEFINED_LENGTH2) {
13324
- throw new DicomParseError(
13325
- FATAL_CODES.INVALID_FILE_META,
13326
- `Undefined length on non-SQ element ${tag} (vr=${vr}) under Explicit VR.`,
13327
- headerStart,
13328
- buildSnippet(buffer, headerStart)
13329
- );
13691
+ throw undefinedLengthOnNonSqExplicit(buffer, headerStart, vr);
13330
13692
  }
13331
13693
  if (cursor.position + length > buffer.length) {
13332
- throw new DicomParseError(
13333
- FATAL_CODES.INVALID_FILE_META,
13334
- `Element ${tag} declared length=${String(length)} exceeds remaining buffer (${String(buffer.length - cursor.position)} bytes).`,
13335
- headerStart,
13336
- buildSnippet(buffer, headerStart)
13337
- );
13694
+ throw elementLengthExceedsBuffer(buffer, headerStart, buffer.length - cursor.position);
13338
13695
  }
13339
13696
  const valueStart = cursor.position;
13340
13697
  const valueEnd = valueStart + length;
@@ -13395,20 +13752,9 @@ function parseDeflatedLEWithCap(buffer, datasetStart, ctx, emit, maxInflatedByte
13395
13752
  const code = errAny.code;
13396
13753
  const message = errAny.message ?? String(err);
13397
13754
  if (code === "ERR_BUFFER_TOO_LARGE" || err instanceof RangeError && /maxOutputLength|too large/i.test(message)) {
13398
- throw new DicomParseError(
13399
- FATAL_CODES.INVALID_FILE_META,
13400
- `Inflated Deflated TS payload exceeds ${String(maxInflatedBytes)}-byte cap.`,
13401
- datasetStart,
13402
- buildSnippet(buffer, datasetStart)
13403
- );
13755
+ throw inflatedPayloadExceedsCap(buffer, datasetStart, maxInflatedBytes);
13404
13756
  }
13405
- const zlibCode = typeof code === "string" && code.length > 0 ? code : "unknown";
13406
- throw new DicomParseError(
13407
- FATAL_CODES.INVALID_FILE_META,
13408
- `Failed to inflate Deflated TS payload (zlib error code: ${zlibCode}).`,
13409
- datasetStart,
13410
- buildSnippet(buffer, datasetStart)
13411
- );
13757
+ throw inflateFailed(buffer, datasetStart, code);
13412
13758
  }
13413
13759
  const innerCtx = { ...ctx, buffer: inflated };
13414
13760
  const innerChokepoint = makeEmitter(innerCtx);
@@ -13444,19 +13790,13 @@ var TRANSFER_SYNTAX_PARSERS = Object.freeze({
13444
13790
  });
13445
13791
 
13446
13792
  // src/parser/index.ts
13447
- var SUPPORTED_TRANSFER_SYNTAXES = Object.keys(TRANSFER_SYNTAX_PARSERS).join(", ");
13448
13793
  function parseDicom(input, options = {}) {
13449
13794
  if (rawInputIsEmpty(input)) {
13450
- throw new DicomParseError(FATAL_CODES.EMPTY_INPUT, "Input is empty.", 0, "");
13795
+ throw emptyInput();
13451
13796
  }
13452
13797
  const buffer = normalizeInput(input);
13453
13798
  if (buffer.length === 0) {
13454
- throw new DicomParseError(
13455
- FATAL_CODES.EMPTY_INPUT,
13456
- "Input is empty after normalization.",
13457
- 0,
13458
- ""
13459
- );
13799
+ throw emptyInputAfterNormalization();
13460
13800
  }
13461
13801
  const warnings = [];
13462
13802
  const ctx = buildContext(buffer, options, warnings);
@@ -13466,14 +13806,7 @@ function parseDicom(input, options = {}) {
13466
13806
  const tsUid = fileMeta.transferSyntaxUID;
13467
13807
  const strategy = TRANSFER_SYNTAX_PARSERS[tsUid];
13468
13808
  if (strategy === void 0) {
13469
- const tsName = uid(tsUid)?.name ?? "";
13470
- const named = tsName.length > 0 ? `Transfer Syntax ${tsName}` : "The Transfer Syntax UID";
13471
- throw new DicomParseError(
13472
- FATAL_CODES.UNSUPPORTED_TRANSFER_SYNTAX,
13473
- `${named} in (0002,0010) is not supported by @cosyte/dicom v1 (supported: ${SUPPORTED_TRANSFER_SYNTAXES}).`,
13474
- fileMetaEnd,
13475
- tsName.length > 0 ? tsName : buildSnippet(buffer, fileMetaEnd)
13476
- );
13809
+ throw unsupportedTransferSyntax(buffer, fileMetaEnd, tsUid);
13477
13810
  }
13478
13811
  const { elements } = strategy(buffer, fileMetaEnd, ctx, emit);
13479
13812
  return new Dataset({ fileMeta, warnings: ctx.warnings, elements });
@@ -14896,6 +15229,10 @@ function hasByteOutsideRepertoire(region, carrierVr) {
14896
15229
  }
14897
15230
  return false;
14898
15231
  }
15232
+ function isTableBound(tag) {
15233
+ const action = annexE(tag);
15234
+ return action !== void 0 && action.repeatingGroup === void 0;
15235
+ }
14899
15236
  function findEmbeddedAttributes(value, carrierVr, encoding, isActionable) {
14900
15237
  if (!isScannableCarrier(carrierVr)) return void 0;
14901
15238
  if (value.length < MIN_HEADER) return void 0;
@@ -14919,15 +15256,19 @@ function findEmbeddedAttributes(value, carrierVr, encoding, isActionable) {
14919
15256
  for (let off = 0; off + MIN_HEADER <= n; off += 2) {
14920
15257
  if (hit[off >> 1] !== 1) continue;
14921
15258
  if (!hasByteOutsideRepertoire(window.subarray(off), carrierVr)) return void 0;
14922
- const tags = [];
15259
+ const hidden = [];
15260
+ let elementCount = 0;
14923
15261
  let pos = off;
14924
15262
  while (pos < n) {
14925
15263
  const decoded = decodeAt(window, pos, encoding);
14926
15264
  if (decoded === void 0) break;
14927
- if (decoded.tag !== void 0) tags.push(decoded.tag);
15265
+ if (decoded.tag !== void 0) {
15266
+ elementCount += 1;
15267
+ if (isActionable(decoded.tag) && isTableBound(decoded.tag)) hidden.push(decoded.tag);
15268
+ }
14928
15269
  pos = decoded.next;
14929
15270
  }
14930
- return tags;
15271
+ return { hidden, elementCount };
14931
15272
  }
14932
15273
  return void 0;
14933
15274
  }
@@ -15132,8 +15473,8 @@ function keepOrEmpty(el, ctx, contextPath, out) {
15132
15473
  emptyUndefinedVrElement(el, ctx, contextPath, out);
15133
15474
  return false;
15134
15475
  }
15135
- const hidden = findEmbeddedAttributes(el.rawBytes, el.vr, ctx.encoding, (t) => actsOnTag(t, ctx));
15136
- if (hidden === void 0) {
15476
+ const run = findEmbeddedAttributes(el.rawBytes, el.vr, ctx.encoding, (t) => actsOnTag(t, ctx));
15477
+ if (run === void 0) {
15137
15478
  out.elements.set(el.tag, el);
15138
15479
  return true;
15139
15480
  }
@@ -15141,11 +15482,11 @@ function keepOrEmpty(el, ctx, contextPath, out) {
15141
15482
  out.embeddedAttributes.push({
15142
15483
  tag: el.tag,
15143
15484
  vr: el.vr,
15144
- hidden,
15485
+ hidden: run.hidden,
15145
15486
  ...contextPath.length > 0 ? { contextPath: [...contextPath] } : {}
15146
15487
  });
15147
15488
  out.warnings.push(
15148
- embeddedAttributeRemoved({ byteOffset: el.byteOffset }, el.tag, el.vr, hidden.length)
15489
+ embeddedAttributeRemoved({ byteOffset: el.byteOffset }, el.tag, el.vr, run.elementCount)
15149
15490
  );
15150
15491
  return false;
15151
15492
  }
@@ -15164,7 +15505,10 @@ function isUnauditableSequence(el) {
15164
15505
  return el.vr === "SQ" && el.items === void 0;
15165
15506
  }
15166
15507
  function emptyUnauditableSequence(el, ctx, contextPath, out) {
15167
- out.elements.set(el.tag, rebuildSequence(el, [], ctx.encoding));
15508
+ emptyUnauditableCarrier(el, ctx, contextPath, out, rebuildSequence(el, [], ctx.encoding));
15509
+ }
15510
+ function emptyUnauditableCarrier(el, ctx, contextPath, out, replacement) {
15511
+ out.elements.set(el.tag, replacement);
15168
15512
  if (ctx.budget.unauditableSequences >= MAX_UNAUDITABLE_SEQUENCE_FINDINGS) return;
15169
15513
  ctx.budget.unauditableSequences += 1;
15170
15514
  out.unauditableSequences.push({
@@ -15199,15 +15543,15 @@ function itemStreamOverrunsSequence(el, encoding) {
15199
15543
  function settledBound(source, encoding) {
15200
15544
  let index = source.length;
15201
15545
  let byteOffset;
15202
- for (const [at, el] of source.entries()) {
15546
+ for (const [at2, el] of source.entries()) {
15203
15547
  if (!itemStreamOverrunsSequence(el, encoding) && !isUnauditableSequence(el)) continue;
15204
- if (index === source.length) index = at + 1;
15548
+ if (index === source.length) index = at2 + 1;
15205
15549
  if (byteOffset === void 0 || el.byteOffset < byteOffset) byteOffset = el.byteOffset;
15206
15550
  }
15207
15551
  return { index, byteOffset };
15208
15552
  }
15209
- function isSettled(el, at, bound) {
15210
- return at < bound.index && (bound.byteOffset === void 0 || el.byteOffset <= bound.byteOffset);
15553
+ function isSettled(el, at2, bound) {
15554
+ return at2 < bound.index && (bound.byteOffset === void 0 || el.byteOffset <= bound.byteOffset);
15211
15555
  }
15212
15556
  function keepsPrivate(el, ctx, creators) {
15213
15557
  if (!ctx.active.has("RetainSafePrivate") || ctx.profile === void 0) return false;
@@ -15218,6 +15562,27 @@ function keepsPrivate(el, ctx, creators) {
15218
15562
  if (creator === void 0) return false;
15219
15563
  return resolvePrivateTag(ctx.profile, el.tag, creator) !== void 0;
15220
15564
  }
15565
+ function declaredPrivateVr(el, ctx, creators) {
15566
+ if (ctx.profile === void 0 || isPrivateCreatorElement(el.tag)) return void 0;
15567
+ const creator = creatorFor(el.tag, creators);
15568
+ if (creator === void 0) return void 0;
15569
+ return resolvePrivateTag(ctx.profile, el.tag, creator)?.vr;
15570
+ }
15571
+ function keepRetainedPrivate(el, ctx, contextPath, out, reservationsUsable, creators) {
15572
+ if (el.vr === "SQ") {
15573
+ if (isUnauditableSequence(el)) {
15574
+ emptyUnauditableSequence(el, ctx, contextPath, out);
15575
+ return;
15576
+ }
15577
+ out.elements.set(el.tag, descendSequence(el, ctx, contextPath, out, reservationsUsable));
15578
+ return;
15579
+ }
15580
+ if (!hasUndefinedVr(el) && el.length > 0 && declaredPrivateVr(el, ctx, creators) === "SQ") {
15581
+ emptyUnauditableCarrier(el, ctx, contextPath, out, freshScalar(el, buffer.Buffer.alloc(0), 0));
15582
+ return;
15583
+ }
15584
+ keepOrEmpty(el, ctx, contextPath, out);
15585
+ }
15221
15586
  function processElements(source, ctx, contextPath, reservationsUsable) {
15222
15587
  const out = {
15223
15588
  elements: /* @__PURE__ */ new Map(),
@@ -15229,11 +15594,11 @@ function processElements(source, ctx, contextPath, reservationsUsable) {
15229
15594
  warnings: []
15230
15595
  };
15231
15596
  const bound = settledBound(source, ctx.encoding);
15232
- const creators = creatorsInScope(source.filter((el, at) => isSettled(el, at, bound)));
15233
- for (const [at, el] of source.entries()) {
15597
+ const creators = creatorsInScope(source.filter((el, at2) => isSettled(el, at2, bound)));
15598
+ for (const [at2, el] of source.entries()) {
15234
15599
  if (isPrivateTag(el.tag)) {
15235
- if (reservationsUsable && isSettled(el, at, bound) && keepsPrivate(el, ctx, creators))
15236
- keepOrEmpty(el, ctx, contextPath, out);
15600
+ if (reservationsUsable && isSettled(el, at2, bound) && keepsPrivate(el, ctx, creators))
15601
+ keepRetainedPrivate(el, ctx, contextPath, out, reservationsUsable, creators);
15237
15602
  else out.removedPrivateTags.push(el.tag);
15238
15603
  continue;
15239
15604
  }