@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.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Buffer } from 'buffer';
2
- import { inflateRawSync, deflateRawSync } from 'zlib';
2
+ import { deflateRawSync, inflateRawSync } from 'zlib';
3
3
  import { createHash } from 'crypto';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -9,7 +9,7 @@ var __export = (target, all) => {
9
9
  };
10
10
 
11
11
  // src/version.ts
12
- var VERSION = "0.0.12";
12
+ var VERSION = "0.0.14";
13
13
 
14
14
  // src/dictionary/index.ts
15
15
  var dictionary_exports = {};
@@ -10577,6 +10577,11 @@ var UIDS = {
10577
10577
  "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 },
10578
10578
  "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 },
10579
10579
  "1.2.840.10008.1.2.4.112": { uid: "1.2.840.10008.1.2.4.112", name: "JPEG XL", type: "TransferSyntax", retired: false },
10580
+ "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 },
10581
+ "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 },
10582
+ "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 },
10583
+ "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 },
10584
+ "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 },
10580
10585
  "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 },
10581
10586
  "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 },
10582
10587
  "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 },
@@ -10609,20 +10614,98 @@ var UIDS = {
10609
10614
  "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 },
10610
10615
  "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 },
10611
10616
  "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 },
10617
+ "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 },
10618
+ "1.2.840.10008.1.20": { uid: "1.2.840.10008.1.20", name: "Papyrus 3 Implicit VR Little Endian", type: "TransferSyntax", retired: true },
10612
10619
  "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 },
10613
10620
  "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 },
10621
+ "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 },
10622
+ "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 },
10614
10623
  "1.2.840.10008.1.3.10": { uid: "1.2.840.10008.1.3.10", name: "Media Storage Directory Storage", type: "SOPClass", retired: false },
10615
10624
  "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 },
10625
+ "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 },
10626
+ "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 },
10627
+ "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 },
10628
+ "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 },
10629
+ "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 },
10630
+ "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 },
10631
+ "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 },
10632
+ "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 },
10633
+ "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 },
10616
10634
  "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 },
10617
10635
  "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 },
10618
10636
  "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 },
10619
10637
  "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 },
10638
+ "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 },
10639
+ "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 },
10640
+ "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 },
10641
+ "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 },
10620
10642
  "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 },
10621
10643
  "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 },
10644
+ "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 },
10645
+ "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 },
10646
+ "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 },
10647
+ "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 },
10648
+ "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 },
10649
+ "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 },
10650
+ "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 },
10651
+ "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 },
10622
10652
  "1.2.840.10008.1.40": { uid: "1.2.840.10008.1.40", name: "Procedural Event Logging SOP Class", type: "SOPClass", retired: false },
10623
10653
  "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 },
10624
10654
  "1.2.840.10008.1.42": { uid: "1.2.840.10008.1.42", name: "Substance Administration Logging SOP Class", type: "SOPClass", retired: false },
10625
10655
  "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 },
10656
+ "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 },
10657
+ "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 },
10658
+ "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 },
10659
+ "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 },
10660
+ "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 },
10661
+ "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 },
10662
+ "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 },
10663
+ "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 },
10664
+ "1.2.840.10008.1.9": { uid: "1.2.840.10008.1.9", name: "Basic Study Content Notification SOP Class", type: "SOPClass", retired: true },
10665
+ "1.2.840.10008.10.1": { uid: "1.2.840.10008.10.1", name: "Video Endoscopic Image Real-Time Communication", type: "SOPClass", retired: false },
10666
+ "1.2.840.10008.10.2": { uid: "1.2.840.10008.10.2", name: "Video Photographic Image Real-Time Communication", type: "SOPClass", retired: false },
10667
+ "1.2.840.10008.10.3": { uid: "1.2.840.10008.10.3", name: "Audio Waveform Real-Time Communication", type: "SOPClass", retired: false },
10668
+ "1.2.840.10008.10.4": { uid: "1.2.840.10008.10.4", name: "Rendition Selection Document Real-Time Communication", type: "SOPClass", retired: false },
10669
+ "1.2.840.10008.15.0.3.1": { uid: "1.2.840.10008.15.0.3.1", name: "dicomDeviceName", type: "Other", retired: false },
10670
+ "1.2.840.10008.15.0.3.10": { uid: "1.2.840.10008.15.0.3.10", name: "dicomAssociationInitiator", type: "Other", retired: false },
10671
+ "1.2.840.10008.15.0.3.11": { uid: "1.2.840.10008.15.0.3.11", name: "dicomAssociationAcceptor", type: "Other", retired: false },
10672
+ "1.2.840.10008.15.0.3.12": { uid: "1.2.840.10008.15.0.3.12", name: "dicomHostname", type: "Other", retired: false },
10673
+ "1.2.840.10008.15.0.3.13": { uid: "1.2.840.10008.15.0.3.13", name: "dicomPort", type: "Other", retired: false },
10674
+ "1.2.840.10008.15.0.3.14": { uid: "1.2.840.10008.15.0.3.14", name: "dicomSOPClass", type: "Other", retired: false },
10675
+ "1.2.840.10008.15.0.3.15": { uid: "1.2.840.10008.15.0.3.15", name: "dicomTransferRole", type: "Other", retired: false },
10676
+ "1.2.840.10008.15.0.3.16": { uid: "1.2.840.10008.15.0.3.16", name: "dicomTransferSyntax", type: "Other", retired: false },
10677
+ "1.2.840.10008.15.0.3.17": { uid: "1.2.840.10008.15.0.3.17", name: "dicomPrimaryDeviceType", type: "Other", retired: false },
10678
+ "1.2.840.10008.15.0.3.18": { uid: "1.2.840.10008.15.0.3.18", name: "dicomRelatedDeviceReference", type: "Other", retired: false },
10679
+ "1.2.840.10008.15.0.3.19": { uid: "1.2.840.10008.15.0.3.19", name: "dicomPreferredCalledAETitle", type: "Other", retired: false },
10680
+ "1.2.840.10008.15.0.3.2": { uid: "1.2.840.10008.15.0.3.2", name: "dicomDescription", type: "Other", retired: false },
10681
+ "1.2.840.10008.15.0.3.20": { uid: "1.2.840.10008.15.0.3.20", name: "dicomTLSCyphersuite", type: "Other", retired: false },
10682
+ "1.2.840.10008.15.0.3.21": { uid: "1.2.840.10008.15.0.3.21", name: "dicomAuthorizedNodeCertificateReference", type: "Other", retired: false },
10683
+ "1.2.840.10008.15.0.3.22": { uid: "1.2.840.10008.15.0.3.22", name: "dicomThisNodeCertificateReference", type: "Other", retired: false },
10684
+ "1.2.840.10008.15.0.3.23": { uid: "1.2.840.10008.15.0.3.23", name: "dicomInstalled", type: "Other", retired: false },
10685
+ "1.2.840.10008.15.0.3.24": { uid: "1.2.840.10008.15.0.3.24", name: "dicomStationName", type: "Other", retired: false },
10686
+ "1.2.840.10008.15.0.3.25": { uid: "1.2.840.10008.15.0.3.25", name: "dicomDeviceSerialNumber", type: "Other", retired: false },
10687
+ "1.2.840.10008.15.0.3.26": { uid: "1.2.840.10008.15.0.3.26", name: "dicomInstitutionName", type: "Other", retired: false },
10688
+ "1.2.840.10008.15.0.3.27": { uid: "1.2.840.10008.15.0.3.27", name: "dicomInstitutionAddress", type: "Other", retired: false },
10689
+ "1.2.840.10008.15.0.3.28": { uid: "1.2.840.10008.15.0.3.28", name: "dicomInstitutionDepartmentName", type: "Other", retired: false },
10690
+ "1.2.840.10008.15.0.3.29": { uid: "1.2.840.10008.15.0.3.29", name: "dicomIssuerOfPatientID", type: "Other", retired: false },
10691
+ "1.2.840.10008.15.0.3.3": { uid: "1.2.840.10008.15.0.3.3", name: "dicomManufacturer", type: "Other", retired: false },
10692
+ "1.2.840.10008.15.0.3.30": { uid: "1.2.840.10008.15.0.3.30", name: "dicomPreferredCallingAETitle", type: "Other", retired: false },
10693
+ "1.2.840.10008.15.0.3.31": { uid: "1.2.840.10008.15.0.3.31", name: "dicomSupportedCharacterSet", type: "Other", retired: false },
10694
+ "1.2.840.10008.15.0.3.4": { uid: "1.2.840.10008.15.0.3.4", name: "dicomManufacturerModelName", type: "Other", retired: false },
10695
+ "1.2.840.10008.15.0.3.5": { uid: "1.2.840.10008.15.0.3.5", name: "dicomSoftwareVersion", type: "Other", retired: false },
10696
+ "1.2.840.10008.15.0.3.6": { uid: "1.2.840.10008.15.0.3.6", name: "dicomVendorData", type: "Other", retired: false },
10697
+ "1.2.840.10008.15.0.3.7": { uid: "1.2.840.10008.15.0.3.7", name: "dicomAETitle", type: "Other", retired: false },
10698
+ "1.2.840.10008.15.0.3.8": { uid: "1.2.840.10008.15.0.3.8", name: "dicomNetworkConnectionReference", type: "Other", retired: false },
10699
+ "1.2.840.10008.15.0.3.9": { uid: "1.2.840.10008.15.0.3.9", name: "dicomApplicationCluster", type: "Other", retired: false },
10700
+ "1.2.840.10008.15.0.4.1": { uid: "1.2.840.10008.15.0.4.1", name: "dicomConfigurationRoot", type: "Other", retired: false },
10701
+ "1.2.840.10008.15.0.4.2": { uid: "1.2.840.10008.15.0.4.2", name: "dicomDevicesRoot", type: "Other", retired: false },
10702
+ "1.2.840.10008.15.0.4.3": { uid: "1.2.840.10008.15.0.4.3", name: "dicomUniqueAETitlesRegistryRoot", type: "Other", retired: false },
10703
+ "1.2.840.10008.15.0.4.4": { uid: "1.2.840.10008.15.0.4.4", name: "dicomDevice", type: "Other", retired: false },
10704
+ "1.2.840.10008.15.0.4.5": { uid: "1.2.840.10008.15.0.4.5", name: "dicomNetworkAE", type: "Other", retired: false },
10705
+ "1.2.840.10008.15.0.4.6": { uid: "1.2.840.10008.15.0.4.6", name: "dicomNetworkConnection", type: "Other", retired: false },
10706
+ "1.2.840.10008.15.0.4.7": { uid: "1.2.840.10008.15.0.4.7", name: "dicomUniqueAETitle", type: "Other", retired: false },
10707
+ "1.2.840.10008.15.0.4.8": { uid: "1.2.840.10008.15.0.4.8", name: "dicomTransferCapability", type: "Other", retired: false },
10708
+ "1.2.840.10008.15.1.1": { uid: "1.2.840.10008.15.1.1", name: "Universal Coordinated Time", type: "Other", retired: false },
10626
10709
  "1.2.840.10008.2.16.10": { uid: "1.2.840.10008.2.16.10", name: "Dublin Core", type: "CodingScheme", retired: false },
10627
10710
  "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 },
10628
10711
  "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 },
@@ -10638,7 +10721,50 @@ var UIDS = {
10638
10721
  "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 },
10639
10722
  "1.2.840.10008.2.16.8": { uid: "1.2.840.10008.2.16.8", name: "Mouse Genome Initiative (MGI)", type: "CodingScheme", retired: false },
10640
10723
  "1.2.840.10008.2.16.9": { uid: "1.2.840.10008.2.16.9", name: "PubChem Compound CID", type: "CodingScheme", retired: false },
10724
+ "1.2.840.10008.2.6.1": { uid: "1.2.840.10008.2.6.1", name: "DICOM UID Registry", type: "CodingScheme", retired: false },
10641
10725
  "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 },
10726
+ "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 },
10727
+ "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 },
10728
+ "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 },
10729
+ "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 },
10730
+ "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 },
10731
+ "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 },
10732
+ "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 },
10733
+ "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 },
10734
+ "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 },
10735
+ "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 },
10736
+ "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 },
10737
+ "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 },
10738
+ "1.2.840.10008.4.2": { uid: "1.2.840.10008.4.2", name: "Storage Service Class", type: "ServiceClass", retired: false },
10739
+ "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 },
10740
+ "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 },
10741
+ "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 },
10742
+ "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 },
10743
+ "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 },
10744
+ "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 },
10745
+ "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 },
10746
+ "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 },
10747
+ "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 },
10748
+ "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 },
10749
+ "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 },
10750
+ "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 },
10751
+ "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 },
10752
+ "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 },
10753
+ "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 },
10754
+ "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 },
10755
+ "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 },
10756
+ "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 },
10757
+ "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 },
10758
+ "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 },
10759
+ "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 },
10760
+ "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 },
10761
+ "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 },
10762
+ "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 },
10763
+ "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 },
10764
+ "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 },
10765
+ "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 },
10766
+ "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 },
10767
+ "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 },
10642
10768
  "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 },
10643
10769
  "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 },
10644
10770
  "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 },
@@ -10646,11 +10772,13 @@ var UIDS = {
10646
10772
  "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 },
10647
10773
  "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 },
10648
10774
  "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 },
10775
+ "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 },
10649
10776
  "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 },
10650
10777
  "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 },
10651
10778
  "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 },
10652
10779
  "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 },
10653
10780
  "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 },
10781
+ "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 },
10654
10782
  "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 },
10655
10783
  "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 },
10656
10784
  "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 },
@@ -10667,8 +10795,10 @@ var UIDS = {
10667
10795
  "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 },
10668
10796
  "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 },
10669
10797
  "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 },
10798
+ "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 },
10670
10799
  "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 },
10671
10800
  "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 },
10801
+ "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 },
10672
10802
  "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 },
10673
10803
  "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 },
10674
10804
  "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 },
@@ -10681,13 +10811,26 @@ var UIDS = {
10681
10811
  "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 },
10682
10812
  "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 },
10683
10813
  "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 },
10814
+ "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 },
10815
+ "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 },
10816
+ "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 },
10684
10817
  "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 },
10685
10818
  "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 },
10686
10819
  "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 },
10687
10820
  "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 },
10821
+ "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 },
10822
+ "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 },
10823
+ "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 },
10688
10824
  "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 },
10689
10825
  "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 },
10690
10826
  "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 },
10827
+ "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 },
10828
+ "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 },
10829
+ "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 },
10830
+ "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 },
10831
+ "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 },
10832
+ "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 },
10833
+ "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 },
10691
10834
  "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 },
10692
10835
  "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 },
10693
10836
  "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 },
@@ -10720,9 +10863,23 @@ var UIDS = {
10720
10863
  "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 },
10721
10864
  "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 },
10722
10865
  "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 },
10866
+ "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 },
10867
+ "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 },
10868
+ "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 },
10869
+ "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 },
10870
+ "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 },
10871
+ "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 },
10872
+ "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 },
10873
+ "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 },
10874
+ "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 },
10723
10875
  "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 },
10724
10876
  "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 },
10725
10877
  "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 },
10878
+ "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 },
10879
+ "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 },
10880
+ "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 },
10881
+ "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 },
10882
+ "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 },
10726
10883
  "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 },
10727
10884
  "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 },
10728
10885
  "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 },
@@ -10730,6 +10887,8 @@ var UIDS = {
10730
10887
  "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 },
10731
10888
  "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 },
10732
10889
  "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 },
10890
+ "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 },
10891
+ "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 },
10733
10892
  "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 },
10734
10893
  "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 },
10735
10894
  "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 },
@@ -10738,6 +10897,7 @@ var UIDS = {
10738
10897
  "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 },
10739
10898
  "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 },
10740
10899
  "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 },
10900
+ "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 },
10741
10901
  "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 },
10742
10902
  "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 },
10743
10903
  "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 },
@@ -10757,6 +10917,7 @@ var UIDS = {
10757
10917
  "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 },
10758
10918
  "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 },
10759
10919
  "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 },
10920
+ "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 },
10760
10921
  "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 },
10761
10922
  "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 },
10762
10923
  "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 },
@@ -10766,14 +10927,19 @@ var UIDS = {
10766
10927
  "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 },
10767
10928
  "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 },
10768
10929
  "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 },
10930
+ "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 },
10769
10931
  "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 },
10770
10932
  "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 },
10771
10933
  "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 },
10934
+ "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 },
10772
10935
  "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 },
10936
+ "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 },
10773
10937
  "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 },
10938
+ "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 },
10774
10939
  "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 },
10775
10940
  "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 },
10776
10941
  "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 },
10942
+ "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 },
10777
10943
  "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 },
10778
10944
  "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 },
10779
10945
  "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 },
@@ -10788,10 +10954,15 @@ var UIDS = {
10788
10954
  "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 },
10789
10955
  "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 },
10790
10956
  "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 },
10957
+ "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 },
10958
+ "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 },
10959
+ "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 },
10791
10960
  "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 },
10792
10961
  "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 },
10793
10962
  "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 },
10794
10963
  "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 },
10964
+ "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 },
10965
+ "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 },
10795
10966
  "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 },
10796
10967
  "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 },
10797
10968
  "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 },
@@ -10812,14 +10983,69 @@ var UIDS = {
10812
10983
  "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 },
10813
10984
  "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 },
10814
10985
  "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 },
10986
+ "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 },
10987
+ "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 },
10988
+ "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 },
10989
+ "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 },
10990
+ "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 },
10991
+ "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 },
10992
+ "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 },
10993
+ "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 },
10994
+ "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 },
10815
10995
  "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 },
10996
+ "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 },
10997
+ "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 },
10998
+ "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 },
10999
+ "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 },
11000
+ "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 },
11001
+ "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 },
10816
11002
  "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 },
11003
+ "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 },
11004
+ "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 },
11005
+ "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 },
11006
+ "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 },
11007
+ "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 },
11008
+ "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 },
11009
+ "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 },
11010
+ "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 },
11011
+ "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 },
11012
+ "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 },
11013
+ "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 },
11014
+ "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 },
11015
+ "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 },
11016
+ "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 },
11017
+ "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 },
10817
11018
  "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 },
11019
+ "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 },
11020
+ "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 },
11021
+ "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 },
11022
+ "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 },
11023
+ "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 },
10818
11024
  "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 },
11025
+ "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 },
11026
+ "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 },
11027
+ "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 },
10819
11028
  "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 },
11029
+ "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 },
11030
+ "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 },
11031
+ "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 },
11032
+ "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 },
11033
+ "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 },
10820
11034
  "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 },
11035
+ "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 },
11036
+ "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 },
11037
+ "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 },
10821
11038
  "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 },
10822
- "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 }
11039
+ "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 },
11040
+ "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 },
11041
+ "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 },
11042
+ "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 },
11043
+ "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 },
11044
+ "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 },
11045
+ "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 },
11046
+ "1.2.840.10008.7.1.1": { uid: "1.2.840.10008.7.1.1", name: "Native DICOM Model", type: "Other", retired: false },
11047
+ "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 },
11048
+ "1.2.840.10008.8.1.1": { uid: "1.2.840.10008.8.1.1", name: "DICOM Content Mapping Resource", type: "Other", retired: false }
10823
11049
  };
10824
11050
 
10825
11051
  // src/dictionary/index.ts
@@ -11501,6 +11727,277 @@ function makeEmitter(ctx) {
11501
11727
  }
11502
11728
  };
11503
11729
  }
11730
+
11731
+ // src/parser/endian.ts
11732
+ var BE_VR_STRIDE = Object.freeze({
11733
+ // 2-byte swaps
11734
+ AT: 2,
11735
+ US: 2,
11736
+ SS: 2,
11737
+ OW: 2,
11738
+ // 4-byte swaps
11739
+ UL: 4,
11740
+ SL: 4,
11741
+ FL: 4,
11742
+ OF: 4,
11743
+ OL: 4,
11744
+ // 8-byte swaps (64-bit floats + 2018 64-bit integer additions)
11745
+ FD: 8,
11746
+ OD: 8,
11747
+ OV: 8,
11748
+ SV: 8,
11749
+ UV: 8,
11750
+ // No swap - byte streams (D-24) and ASCII / spec-defined VRs.
11751
+ OB: 0,
11752
+ UN: 0,
11753
+ AE: 0,
11754
+ AS: 0,
11755
+ CS: 0,
11756
+ DA: 0,
11757
+ DS: 0,
11758
+ DT: 0,
11759
+ IS: 0,
11760
+ LO: 0,
11761
+ LT: 0,
11762
+ PN: 0,
11763
+ SH: 0,
11764
+ ST: 0,
11765
+ TM: 0,
11766
+ UC: 0,
11767
+ UI: 0,
11768
+ UR: 0,
11769
+ UT: 0,
11770
+ SQ: 0
11771
+ });
11772
+ var KNOWN_VRS = Object.freeze(
11773
+ new Set(Object.keys(BE_VR_STRIDE))
11774
+ );
11775
+ function isRecognizedVr(vr) {
11776
+ return KNOWN_VRS.has(vr);
11777
+ }
11778
+
11779
+ // src/parser/tokens.ts
11780
+ var WITHHELD = "<withheld>";
11781
+ function safePrivateCreator(creator, profile) {
11782
+ if (profile === void 0) return WITHHELD;
11783
+ return profile.privateDictionary.has(creator) ? creator : WITHHELD;
11784
+ }
11785
+ function renderVr(vr) {
11786
+ return vr !== void 0 && KNOWN_VRS.has(vr) ? vr : WITHHELD;
11787
+ }
11788
+
11789
+ // src/parser/fatals.ts
11790
+ 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";
11791
+ var ZLIB_CODES = Object.freeze(
11792
+ /* @__PURE__ */ new Set([
11793
+ "Z_OK",
11794
+ "Z_STREAM_END",
11795
+ "Z_NEED_DICT",
11796
+ "Z_ERRNO",
11797
+ "Z_STREAM_ERROR",
11798
+ "Z_DATA_ERROR",
11799
+ "Z_MEM_ERROR",
11800
+ "Z_BUF_ERROR",
11801
+ "Z_VERSION_ERROR"
11802
+ ])
11803
+ );
11804
+ var FATAL_MESSAGES = Object.freeze({
11805
+ EMPTY_INPUT: {
11806
+ code: FATAL_CODES.EMPTY_INPUT,
11807
+ message: "Input is empty."
11808
+ },
11809
+ EMPTY_INPUT_AFTER_NORMALIZATION: {
11810
+ code: FATAL_CODES.EMPTY_INPUT,
11811
+ message: "Input is empty after normalization."
11812
+ },
11813
+ NOT_DICOM_PART_10_REQUIRED: {
11814
+ code: FATAL_CODES.NOT_DICOM_PART_10,
11815
+ message: "Missing DICM magic at offset 128 (stripPreamble='require')."
11816
+ },
11817
+ NOT_DICOM_PART_10: {
11818
+ code: FATAL_CODES.NOT_DICOM_PART_10,
11819
+ message: "Input is not a DICOM Part 10 file (no DICM magic at offset 128 and no recognizable File Meta group at offset 0)."
11820
+ },
11821
+ // `{ts}` is NOT the UID. It is the PS3.6 registry's own name for the UID, or a
11822
+ // fixed phrase when PS3.6 does not publish one - see `renderTransferSyntax`.
11823
+ UNSUPPORTED_TRANSFER_SYNTAX: {
11824
+ code: FATAL_CODES.UNSUPPORTED_TRANSFER_SYNTAX,
11825
+ message: `{ts} in (0002,0010) is not supported by @cosyte/dicom v1 (supported: ${SUPPORTED_TRANSFER_SYNTAXES}).`
11826
+ },
11827
+ FILE_META_TRUNCATED: {
11828
+ code: FATAL_CODES.INVALID_FILE_META,
11829
+ message: "File Meta is truncated."
11830
+ },
11831
+ // The declared group length is deliberately absent. It is four bytes of the
11832
+ // document read as a 32-bit integer, and this code fires precisely when those
11833
+ // four bytes are not what they claim to be.
11834
+ FILE_META_GROUP_LENGTH_OVERRUNS: {
11835
+ code: FATAL_CODES.INVALID_FILE_META,
11836
+ 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."
11837
+ },
11838
+ FILE_META_TRANSFER_SYNTAX_MISSING: {
11839
+ code: FATAL_CODES.INVALID_FILE_META,
11840
+ message: "Required File Meta element (0002,0010) Transfer Syntax UID is missing or not UI."
11841
+ },
11842
+ TRUNCATED_DATASET_HEADER: {
11843
+ code: FATAL_CODES.INVALID_FILE_META,
11844
+ message: "Truncated dataset (header read past buffer end)."
11845
+ },
11846
+ TRUNCATED_FFFE_HEADER: {
11847
+ code: FATAL_CODES.INVALID_FILE_META,
11848
+ message: "Truncated dataset (FFFE header read past buffer end)."
11849
+ },
11850
+ TRUNCATED_EXPLICIT_VR_HEADER: {
11851
+ code: FATAL_CODES.INVALID_FILE_META,
11852
+ message: "Truncated dataset (Explicit VR header read past buffer end)."
11853
+ },
11854
+ SQ_ITEM_HEADER_TRUNCATED: {
11855
+ code: FATAL_CODES.INVALID_FILE_META,
11856
+ message: "Truncated dataset (SQ item header read past buffer end)."
11857
+ },
11858
+ // Neither the marker's element number nor its length field is here. Both are
11859
+ // read at a position the reader may have desynchronized to, so both are
11860
+ // document content: the length field measured as 1109414477, `"MR B"`.
11861
+ UNEXPECTED_FFFE_AT_DATASET_LEVEL: {
11862
+ code: FATAL_CODES.INVALID_FILE_META,
11863
+ 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."
11864
+ },
11865
+ UNEXPECTED_FFFE_AT_DATASET_ROOT: {
11866
+ code: FATAL_CODES.INVALID_FILE_META,
11867
+ 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."
11868
+ },
11869
+ UNDEFINED_LENGTH_ON_NON_SQ_EXPLICIT: {
11870
+ code: FATAL_CODES.INVALID_FILE_META,
11871
+ 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."
11872
+ },
11873
+ UNDEFINED_LENGTH_ON_NON_SQ_IMPLICIT: {
11874
+ code: FATAL_CODES.INVALID_FILE_META,
11875
+ 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."
11876
+ },
11877
+ ELEMENT_LENGTH_EXCEEDS_BUFFER: {
11878
+ code: FATAL_CODES.INVALID_FILE_META,
11879
+ 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."
11880
+ },
11881
+ UNEXPECTED_TAG_INSIDE_SEQUENCE: {
11882
+ code: FATAL_CODES.INVALID_FILE_META,
11883
+ 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."
11884
+ },
11885
+ ENCAPSULATED_FRAGMENT_EXCEEDS_BUFFER: {
11886
+ code: FATAL_CODES.INVALID_FILE_META,
11887
+ 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."
11888
+ },
11889
+ ITEM_LENGTH_EXCEEDS_BUFFER: {
11890
+ code: FATAL_CODES.INVALID_FILE_META,
11891
+ 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."
11892
+ },
11893
+ SQ_NESTING_DEPTH_EXCEEDED: {
11894
+ code: FATAL_CODES.INVALID_FILE_META,
11895
+ message: "SQ nesting depth exceeds {n}."
11896
+ },
11897
+ INFLATED_PAYLOAD_EXCEEDS_CAP: {
11898
+ code: FATAL_CODES.INVALID_FILE_META,
11899
+ message: "Inflated Deflated TS payload exceeds {n}-byte cap."
11900
+ },
11901
+ // `{zlib}` is a member of the nine-name `zlib.codes` table or nothing. zlib's
11902
+ // own `err.message` is never forwarded: it is a string from a library handed
11903
+ // the sender's bytes, which is the one shape of third-party text this parser
11904
+ // cannot vouch for.
11905
+ INFLATE_FAILED: {
11906
+ code: FATAL_CODES.INVALID_FILE_META,
11907
+ message: "Failed to inflate Deflated TS payload (zlib error code: {zlib})."
11908
+ }
11909
+ });
11910
+ function renderTransferSyntax(ts) {
11911
+ if (ts === void 0) return "The Transfer Syntax UID";
11912
+ const name = uid(ts)?.name ?? "";
11913
+ return name.length > 0 ? `Transfer Syntax ${name}` : "The Transfer Syntax UID";
11914
+ }
11915
+ function renderZlibCode(code) {
11916
+ return code !== void 0 && ZLIB_CODES.has(code) ? code : WITHHELD;
11917
+ }
11918
+ function build(key, byteOffset, snippet, tokens = {}) {
11919
+ const entry = FATAL_MESSAGES[key];
11920
+ 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));
11921
+ return new DicomParseError(entry.code, message, byteOffset, snippet);
11922
+ }
11923
+ function at(key, buffer, offset, tokens = {}) {
11924
+ return build(key, offset, buildSnippet(buffer, offset), tokens);
11925
+ }
11926
+ function emptyInput() {
11927
+ return build("EMPTY_INPUT", 0, "");
11928
+ }
11929
+ function emptyInputAfterNormalization() {
11930
+ return build("EMPTY_INPUT_AFTER_NORMALIZATION", 0, "");
11931
+ }
11932
+ function notDicomPart10Required(buffer, offset) {
11933
+ return at("NOT_DICOM_PART_10_REQUIRED", buffer, offset);
11934
+ }
11935
+ function notDicomPart10(buffer, offset) {
11936
+ return at("NOT_DICOM_PART_10", buffer, offset);
11937
+ }
11938
+ function unsupportedTransferSyntax(buffer, offset, ts) {
11939
+ const name = uid(ts)?.name ?? "";
11940
+ return build(
11941
+ "UNSUPPORTED_TRANSFER_SYNTAX",
11942
+ offset,
11943
+ name.length > 0 ? name : buildSnippet(buffer, offset),
11944
+ { ts }
11945
+ );
11946
+ }
11947
+ function fileMetaTruncated(buffer, offset) {
11948
+ return at("FILE_META_TRUNCATED", buffer, offset);
11949
+ }
11950
+ function fileMetaGroupLengthOverruns(buffer, offset, remaining) {
11951
+ return at("FILE_META_GROUP_LENGTH_OVERRUNS", buffer, offset, { n: remaining });
11952
+ }
11953
+ function fileMetaTransferSyntaxMissing(buffer, offset) {
11954
+ return at("FILE_META_TRANSFER_SYNTAX_MISSING", buffer, offset);
11955
+ }
11956
+ function truncatedDatasetHeader(buffer, offset) {
11957
+ return at("TRUNCATED_DATASET_HEADER", buffer, offset);
11958
+ }
11959
+ function truncatedFffeHeader(buffer, offset) {
11960
+ return at("TRUNCATED_FFFE_HEADER", buffer, offset);
11961
+ }
11962
+ function truncatedExplicitVrHeader(buffer, offset) {
11963
+ return at("TRUNCATED_EXPLICIT_VR_HEADER", buffer, offset);
11964
+ }
11965
+ function sqItemHeaderTruncated(buffer, offset) {
11966
+ return at("SQ_ITEM_HEADER_TRUNCATED", buffer, offset);
11967
+ }
11968
+ function unexpectedFffeAtDatasetLevel(buffer, offset) {
11969
+ return at("UNEXPECTED_FFFE_AT_DATASET_LEVEL", buffer, offset);
11970
+ }
11971
+ function unexpectedFffeAtDatasetRoot(buffer, offset) {
11972
+ return at("UNEXPECTED_FFFE_AT_DATASET_ROOT", buffer, offset);
11973
+ }
11974
+ function undefinedLengthOnNonSqExplicit(buffer, offset, vr) {
11975
+ return at("UNDEFINED_LENGTH_ON_NON_SQ_EXPLICIT", buffer, offset, { vr });
11976
+ }
11977
+ function undefinedLengthOnNonSqImplicit(buffer, offset, vr) {
11978
+ return at("UNDEFINED_LENGTH_ON_NON_SQ_IMPLICIT", buffer, offset, { vr });
11979
+ }
11980
+ function elementLengthExceedsBuffer(buffer, offset, remaining) {
11981
+ return at("ELEMENT_LENGTH_EXCEEDS_BUFFER", buffer, offset, { n: remaining });
11982
+ }
11983
+ function unexpectedTagInsideSequence(buffer, offset) {
11984
+ return at("UNEXPECTED_TAG_INSIDE_SEQUENCE", buffer, offset);
11985
+ }
11986
+ function encapsulatedFragmentExceedsBuffer(buffer, offset) {
11987
+ return at("ENCAPSULATED_FRAGMENT_EXCEEDS_BUFFER", buffer, offset);
11988
+ }
11989
+ function itemLengthExceedsBuffer(buffer, offset) {
11990
+ return at("ITEM_LENGTH_EXCEEDS_BUFFER", buffer, offset);
11991
+ }
11992
+ function sqNestingDepthExceeded(buffer, offset, limit) {
11993
+ return at("SQ_NESTING_DEPTH_EXCEEDED", buffer, offset, { n: limit });
11994
+ }
11995
+ function inflatedPayloadExceedsCap(buffer, offset, cap) {
11996
+ return at("INFLATED_PAYLOAD_EXCEEDS_CAP", buffer, offset, { n: cap });
11997
+ }
11998
+ function inflateFailed(buffer, offset, code) {
11999
+ return at("INFLATE_FAILED", buffer, offset, ...code !== void 0 ? [{ zlib: code }] : []);
12000
+ }
11504
12001
  function copyValueBytes(src) {
11505
12002
  const out = Buffer.allocUnsafeSlow(src.length);
11506
12003
  src.copy(out);
@@ -11572,13 +12069,6 @@ var ByteCursor = class {
11572
12069
  }
11573
12070
  };
11574
12071
 
11575
- // src/parser/tokens.ts
11576
- var WITHHELD = "<withheld>";
11577
- function safePrivateCreator(creator, profile) {
11578
- if (profile === void 0) return WITHHELD;
11579
- return profile.privateDictionary.has(creator) ? creator : WITHHELD;
11580
- }
11581
-
11582
12072
  // src/dataset/vr/charset.ts
11583
12073
  var TERM_TO_LABEL = /* @__PURE__ */ new Map([
11584
12074
  // Default repertoire (ISO 646 IRV / ASCII). Latin-1 is a lenient,
@@ -11660,54 +12150,6 @@ function decodeText(bytes, terms) {
11660
12150
  }
11661
12151
  }
11662
12152
 
11663
- // src/parser/endian.ts
11664
- var BE_VR_STRIDE = Object.freeze({
11665
- // 2-byte swaps
11666
- AT: 2,
11667
- US: 2,
11668
- SS: 2,
11669
- OW: 2,
11670
- // 4-byte swaps
11671
- UL: 4,
11672
- SL: 4,
11673
- FL: 4,
11674
- OF: 4,
11675
- OL: 4,
11676
- // 8-byte swaps (64-bit floats + 2018 64-bit integer additions)
11677
- FD: 8,
11678
- OD: 8,
11679
- OV: 8,
11680
- SV: 8,
11681
- UV: 8,
11682
- // No swap - byte streams (D-24) and ASCII / spec-defined VRs.
11683
- OB: 0,
11684
- UN: 0,
11685
- AE: 0,
11686
- AS: 0,
11687
- CS: 0,
11688
- DA: 0,
11689
- DS: 0,
11690
- DT: 0,
11691
- IS: 0,
11692
- LO: 0,
11693
- LT: 0,
11694
- PN: 0,
11695
- SH: 0,
11696
- ST: 0,
11697
- TM: 0,
11698
- UC: 0,
11699
- UI: 0,
11700
- UR: 0,
11701
- UT: 0,
11702
- SQ: 0
11703
- });
11704
- var KNOWN_VRS = Object.freeze(
11705
- new Set(Object.keys(BE_VR_STRIDE))
11706
- );
11707
- function isRecognizedVr(vr) {
11708
- return KNOWN_VRS.has(vr);
11709
- }
11710
-
11711
12153
  // src/parser/warnings.ts
11712
12154
  var WARNING_CODES = {
11713
12155
  // === Phase 2 actively emits (D-08 active list - alphabetical-within-prefix per CONTEXT specifics §) ===
@@ -11764,7 +12206,11 @@ var WARNING_MESSAGES = Object.freeze({
11764
12206
  DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR: "Element ({tag}) uses undefined length (0xFFFFFFFF) under an Explicit VR transfer syntax.",
11765
12207
  DICOM_ODD_LENGTH_VALUE_PADDED: "Element ({tag}) has odd declared length {n}; cursor advanced by one padding byte to maintain alignment.",
11766
12208
  DICOM_VR_MISMATCH: "Element ({tag}) on-wire VR is {vr2}; dictionary lists {vr}. Trusting on-wire VR.",
11767
- DICOM_PRIVATE_TAG_NO_CREATOR: "Private element ({tag}) has no Private Creator registered for its block; treating as VR=UN.",
12209
+ // No tag, and the reason is the one `nonzeroReservedBytes` states: this code's
12210
+ // three siblings below fire only on an ODD group, and an odd group is the one
12211
+ // class of tag no closed table this library holds can ever vouch for. See
12212
+ // `privateTagNoCreator`.
12213
+ 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.",
11768
12214
  DICOM_GROUP_LENGTH_IN_DATASET: "Retired Group Length element ({tag}) encountered in dataset; preserved as-is.",
11769
12215
  // The tag is deliberately absent, and this is the only *parser* message where
11770
12216
  // that is true. See `nonzeroReservedBytes`. Kept terse for the same reason the
@@ -11810,14 +12256,18 @@ var WARNING_MESSAGES = Object.freeze({
11810
12256
  // `endLimit < buffer.length` conjunct bounds it by the buffer.
11811
12257
  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.",
11812
12258
  DICOM_PIXEL_DATA_LENGTH_MISMATCH: "(7FE0,0010) PixelData declared length {n} does not match computed {n2} bytes.",
11813
- DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR: "Private element ({tag}) under Implicit VR LE has no VR override; falling back to UN.",
11814
- 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.",
12259
+ 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.",
12260
+ 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.",
11815
12261
  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.",
11816
- 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.",
12262
+ 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.",
11817
12263
  // Deliberately short. One of these is raised per un-auditable element, so a
11818
12264
  // long message is multiplied by an element count the input controls; the
11819
12265
  // reasoning belongs in the docs, not in a string repeated thousands of times.
11820
- 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.",
12266
+ // 🛑 IT DOES NOT SAY "is VR=SQ", AND THAT IS NOT A WORDING PREFERENCE. One of
12267
+ // its two producers is an element the profile declares a Sequence while the
12268
+ // wire says UN or OB, so naming a VR here would state a fact about the file
12269
+ // that the file contradicts - on the one channel this class designates.
12270
+ 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.",
11821
12271
  // Deliberately short for the same reason as the code above: one per element,
11822
12272
  // and the element count is chosen by the input.
11823
12273
  //
@@ -11844,130 +12294,127 @@ var TAG_SHAPE = /^[0-9A-F]{8}$/u;
11844
12294
  function renderTag(tag) {
11845
12295
  return tag !== void 0 && TAG_SHAPE.test(tag) ? tag : WITHHELD;
11846
12296
  }
11847
- function renderVr(vr) {
11848
- return vr !== void 0 && KNOWN_VRS.has(vr) ? vr : WITHHELD;
11849
- }
11850
- function build(code, position, tokens = {}) {
12297
+ function build2(code, position, tokens = {}) {
11851
12298
  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));
11852
12299
  return { code, message, position };
11853
12300
  }
11854
12301
  function missingPreamble(position) {
11855
- return build(WARNING_CODES.DICOM_MISSING_PREAMBLE, position);
12302
+ return build2(WARNING_CODES.DICOM_MISSING_PREAMBLE, position);
11856
12303
  }
11857
12304
  function fileMetaGroupLengthMissing(position) {
11858
- return build(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISSING, position);
12305
+ return build2(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISSING, position);
11859
12306
  }
11860
12307
  function fileMetaGroupLengthMismatch(position, declared, actual) {
11861
- return build(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISMATCH, position, {
12308
+ return build2(WARNING_CODES.DICOM_FILE_META_GROUP_LENGTH_MISMATCH, position, {
11862
12309
  n: declared,
11863
12310
  n2: actual
11864
12311
  });
11865
12312
  }
11866
12313
  function undefinedLengthInExplicitVR(position, tag) {
11867
- return build(WARNING_CODES.DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR, position, { tag });
12314
+ return build2(WARNING_CODES.DICOM_UNDEFINED_LENGTH_IN_EXPLICIT_VR, position, { tag });
11868
12315
  }
11869
12316
  function oddLengthValuePadded(position, tag, declaredLength) {
11870
- return build(WARNING_CODES.DICOM_ODD_LENGTH_VALUE_PADDED, position, {
12317
+ return build2(WARNING_CODES.DICOM_ODD_LENGTH_VALUE_PADDED, position, {
11871
12318
  tag,
11872
12319
  n: declaredLength
11873
12320
  });
11874
12321
  }
11875
12322
  function vrMismatch(position, tag, dictVR, fileVR) {
11876
- return build(WARNING_CODES.DICOM_VR_MISMATCH, position, { tag, vr: dictVR, vr2: fileVR });
12323
+ return build2(WARNING_CODES.DICOM_VR_MISMATCH, position, { tag, vr: dictVR, vr2: fileVR });
11877
12324
  }
11878
- function privateTagNoCreator(position, tag) {
11879
- return build(WARNING_CODES.DICOM_PRIVATE_TAG_NO_CREATOR, position, { tag });
12325
+ function privateTagNoCreator(position) {
12326
+ return build2(WARNING_CODES.DICOM_PRIVATE_TAG_NO_CREATOR, position);
11880
12327
  }
11881
12328
  function groupLengthInDataset(position, tag) {
11882
- return build(WARNING_CODES.DICOM_GROUP_LENGTH_IN_DATASET, position, { tag });
12329
+ return build2(WARNING_CODES.DICOM_GROUP_LENGTH_IN_DATASET, position, { tag });
11883
12330
  }
11884
12331
  function nonzeroReservedBytes(position, first, second) {
11885
- return build(WARNING_CODES.DICOM_NONZERO_RESERVED_BYTES, position, {
12332
+ return build2(WARNING_CODES.DICOM_NONZERO_RESERVED_BYTES, position, {
11886
12333
  n: first,
11887
12334
  n2: second
11888
12335
  });
11889
12336
  }
11890
12337
  function unParsedAsSQ(position, tag) {
11891
- return build(WARNING_CODES.DICOM_UN_PARSED_AS_SQ, position, { tag });
12338
+ return build2(WARNING_CODES.DICOM_UN_PARSED_AS_SQ, position, { tag });
11892
12339
  }
11893
12340
  function sqNotDescended(position, tag) {
11894
- return build(WARNING_CODES.DICOM_SQ_NOT_DESCENDED, position, { tag });
12341
+ return build2(WARNING_CODES.DICOM_SQ_NOT_DESCENDED, position, { tag });
11895
12342
  }
11896
12343
  function itemCrossesSequenceEnd(position, tag, availableLength) {
11897
- return build(WARNING_CODES.DICOM_ITEM_CROSSES_SEQUENCE_END, position, {
12344
+ return build2(WARNING_CODES.DICOM_ITEM_CROSSES_SEQUENCE_END, position, {
11898
12345
  tag,
11899
12346
  n2: availableLength
11900
12347
  });
11901
12348
  }
11902
12349
  function emptyItemInSequence(position, tag) {
11903
- return build(WARNING_CODES.DICOM_EMPTY_ITEM_IN_SEQUENCE, position, { tag });
12350
+ return build2(WARNING_CODES.DICOM_EMPTY_ITEM_IN_SEQUENCE, position, { tag });
11904
12351
  }
11905
12352
  function duplicateTagInDataSet(position) {
11906
- return build(WARNING_CODES.DICOM_DUPLICATE_TAG_IN_DATA_SET, position);
12353
+ return build2(WARNING_CODES.DICOM_DUPLICATE_TAG_IN_DATA_SET, position);
11907
12354
  }
11908
12355
  function duplicateFileMetaElement(position) {
11909
- return build(WARNING_CODES.DICOM_DUPLICATE_FILE_META_ELEMENT, position);
12356
+ return build2(WARNING_CODES.DICOM_DUPLICATE_FILE_META_ELEMENT, position);
11910
12357
  }
11911
- function implicitVRForPrivateTagWithoutVR(position, tag) {
11912
- return build(WARNING_CODES.DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR, position, { tag });
12358
+ function implicitVRForPrivateTagWithoutVR(position) {
12359
+ return build2(WARNING_CODES.DICOM_IMPLICIT_VR_FOR_PRIVATE_TAG_WITHOUT_VR, position);
11913
12360
  }
11914
- function privateCreatorUnknown(position, tag) {
11915
- return build(WARNING_CODES.DICOM_PRIVATE_CREATOR_UNKNOWN, position, { tag });
12361
+ function privateCreatorUnknown(position) {
12362
+ return build2(WARNING_CODES.DICOM_PRIVATE_CREATOR_UNKNOWN, position);
11916
12363
  }
11917
12364
  function burnedInAnnotationNotRemoved(position) {
11918
- return build(WARNING_CODES.DICOM_BURNED_IN_ANNOTATION_NOT_REMOVED, position);
12365
+ return build2(WARNING_CODES.DICOM_BURNED_IN_ANNOTATION_NOT_REMOVED, position);
11919
12366
  }
11920
12367
  function deidentMethodNotAdded(position) {
11921
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_ADDED, position);
12368
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_ADDED, position);
11922
12369
  }
11923
12370
  function deidentMethodNotLo(position) {
11924
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_LO, position);
12371
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_NOT_LO, position);
11925
12372
  }
11926
12373
  function deidentMethodPriorRetained(position) {
11927
- return build(WARNING_CODES.DICOM_DEIDENT_METHOD_PRIOR_RETAINED, position);
12374
+ return build2(WARNING_CODES.DICOM_DEIDENT_METHOD_PRIOR_RETAINED, position);
11928
12375
  }
11929
12376
  function embeddedAttributeRemoved(position, tag, vr, count) {
11930
- return build(WARNING_CODES.DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED, position, {
12377
+ return build2(WARNING_CODES.DICOM_DEIDENT_EMBEDDED_ATTRIBUTE_REMOVED, position, {
11931
12378
  tag,
11932
12379
  vr,
11933
12380
  n: count
11934
12381
  });
11935
12382
  }
11936
12383
  function sequenceNotAuditable(position, tag, byteLength) {
11937
- return build(WARNING_CODES.DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE, position, {
12384
+ return build2(WARNING_CODES.DICOM_DEIDENT_SEQUENCE_NOT_AUDITABLE, position, {
11938
12385
  tag,
11939
12386
  n: byteLength
11940
12387
  });
11941
12388
  }
11942
12389
  function undefinedVrNotAuditable(position, byteLength) {
11943
- return build(WARNING_CODES.DICOM_DEIDENT_UNDEFINED_VR_NOT_AUDITABLE, position, {
12390
+ return build2(WARNING_CODES.DICOM_DEIDENT_UNDEFINED_VR_NOT_AUDITABLE, position, {
11944
12391
  n: byteLength,
11945
12392
  n2: position.byteOffset
11946
12393
  });
11947
12394
  }
11948
12395
  function bomInTextVR(position, tag, vr) {
11949
- return build(WARNING_CODES.DICOM_BOM_IN_TEXT_VR, position, { tag, vr });
12396
+ return build2(WARNING_CODES.DICOM_BOM_IN_TEXT_VR, position, { tag, vr });
11950
12397
  }
11951
12398
  function trailingNullInTextVR(position, tag, vr) {
11952
- return build(WARNING_CODES.DICOM_TRAILING_NULL_IN_TEXT_VR, position, { tag, vr });
12399
+ return build2(WARNING_CODES.DICOM_TRAILING_NULL_IN_TEXT_VR, position, { tag, vr });
11953
12400
  }
11954
12401
  function uiTrailingSpace(position, tag) {
11955
- return build(WARNING_CODES.DICOM_UI_TRAILING_SPACE, position, { tag });
12402
+ return build2(WARNING_CODES.DICOM_UI_TRAILING_SPACE, position, { tag });
11956
12403
  }
11957
12404
  function nonAsciiInAsciiVR(position, tag, vr) {
11958
- return build(WARNING_CODES.DICOM_NON_ASCII_IN_ASCII_VR, position, { tag, vr });
12405
+ return build2(WARNING_CODES.DICOM_NON_ASCII_IN_ASCII_VR, position, { tag, vr });
11959
12406
  }
11960
12407
  function isNonintegerValue(position, tag) {
11961
- return build(WARNING_CODES.DICOM_IS_NONINTEGER_VALUE, position, { tag });
12408
+ return build2(WARNING_CODES.DICOM_IS_NONINTEGER_VALUE, position, { tag });
11962
12409
  }
11963
12410
  function daLegacyFormat(position, tag) {
11964
- return build(WARNING_CODES.DICOM_DA_LEGACY_FORMAT, position, { tag });
12411
+ return build2(WARNING_CODES.DICOM_DA_LEGACY_FORMAT, position, { tag });
11965
12412
  }
11966
12413
  function dtNonstandardOffset(position, tag) {
11967
- return build(WARNING_CODES.DICOM_DT_NONSTANDARD_OFFSET, position, { tag });
12414
+ return build2(WARNING_CODES.DICOM_DT_NONSTANDARD_OFFSET, position, { tag });
11968
12415
  }
11969
12416
  function unsupportedCharset(position, valueIndex) {
11970
- return build(WARNING_CODES.DICOM_UNSUPPORTED_CHARSET, position, { n: valueIndex });
12417
+ return build2(WARNING_CODES.DICOM_UNSUPPORTED_CHARSET, position, { n: valueIndex });
11971
12418
  }
11972
12419
 
11973
12420
  // src/profiles/lookup.ts
@@ -12017,18 +12464,18 @@ function resolveImplicitVR(tag, ctx, emit, position) {
12017
12464
  }
12018
12465
  const creator = resolvePrivateCreator(tag, ctx);
12019
12466
  if (creator === void 0) {
12020
- emit(privateTagNoCreator(position, tag));
12021
- emit(implicitVRForPrivateTagWithoutVR(position, tag));
12467
+ emit(privateTagNoCreator(position));
12468
+ emit(implicitVRForPrivateTagWithoutVR(position));
12022
12469
  return "UN";
12023
12470
  }
12024
12471
  if (ctx.profile !== void 0) {
12025
12472
  const def = resolvePrivateTag(ctx.profile, tag, creator);
12026
12473
  if (def !== void 0) return def.vr;
12027
12474
  if (!ctx.profile.privateDictionary.has(creator)) {
12028
- emit(privateCreatorUnknown(position, tag));
12475
+ emit(privateCreatorUnknown(position));
12029
12476
  }
12030
12477
  }
12031
- emit(implicitVRForPrivateTagWithoutVR(position, tag));
12478
+ emit(implicitVRForPrivateTagWithoutVR(position));
12032
12479
  return "UN";
12033
12480
  }
12034
12481
  const direct = TAGS[tag];
@@ -12142,12 +12589,7 @@ function parseFileMeta(buffer, datasetStart, ctx, emit) {
12142
12589
  firstElement = readExplicitLeElement(cursor);
12143
12590
  } catch (err) {
12144
12591
  if (err instanceof RangeError) {
12145
- throw new DicomParseError(
12146
- FATAL_CODES.INVALID_FILE_META,
12147
- "File Meta is truncated.",
12148
- fmStart,
12149
- buildSnippet(buffer, fmStart)
12150
- );
12592
+ throw fileMetaTruncated(buffer, fmStart);
12151
12593
  }
12152
12594
  throw err;
12153
12595
  }
@@ -12157,12 +12599,7 @@ function parseFileMeta(buffer, datasetStart, ctx, emit) {
12157
12599
  if (firstElement.tag === "00020000" && firstElement.vr === "UL" && firstElement.value.length === 4) {
12158
12600
  declaredFmLength = firstElement.value.readUInt32LE(0);
12159
12601
  if (cursor.position + declaredFmLength > buffer.length) {
12160
- throw new DicomParseError(
12161
- FATAL_CODES.INVALID_FILE_META,
12162
- `File Meta group length declares ${String(declaredFmLength)} bytes but only ${String(buffer.length - cursor.position)} bytes remain.`,
12163
- fmStart,
12164
- buildSnippet(buffer, fmStart)
12165
- );
12602
+ throw fileMetaGroupLengthOverruns(buffer, fmStart, buffer.length - cursor.position);
12166
12603
  }
12167
12604
  } else {
12168
12605
  emit(fileMetaGroupLengthMissing({ byteOffset: fmStart, fileMeta: true }));
@@ -12179,12 +12616,7 @@ function parseFileMeta(buffer, datasetStart, ctx, emit) {
12179
12616
  next = readExplicitLeElement(cursor);
12180
12617
  } catch (err) {
12181
12618
  if (err instanceof RangeError) {
12182
- throw new DicomParseError(
12183
- FATAL_CODES.INVALID_FILE_META,
12184
- "File Meta is truncated.",
12185
- fmStart,
12186
- buildSnippet(buffer, fmStart)
12187
- );
12619
+ throw fileMetaTruncated(buffer, fmStart);
12188
12620
  }
12189
12621
  throw err;
12190
12622
  }
@@ -12208,12 +12640,7 @@ function parseFileMeta(buffer, datasetStart, ctx, emit) {
12208
12640
  next = readExplicitLeElement(cursor);
12209
12641
  } catch (err) {
12210
12642
  if (err instanceof RangeError) {
12211
- throw new DicomParseError(
12212
- FATAL_CODES.INVALID_FILE_META,
12213
- "File Meta is truncated.",
12214
- fmStart,
12215
- buildSnippet(buffer, fmStart)
12216
- );
12643
+ throw fileMetaTruncated(buffer, fmStart);
12217
12644
  }
12218
12645
  throw err;
12219
12646
  }
@@ -12232,12 +12659,7 @@ function parseFileMeta(buffer, datasetStart, ctx, emit) {
12232
12659
  }
12233
12660
  const tsElement = fmElements.find((e) => e.tag === "00020010");
12234
12661
  if (tsElement === void 0 || tsElement.vr !== "UI") {
12235
- throw new DicomParseError(
12236
- FATAL_CODES.INVALID_FILE_META,
12237
- "Required File Meta element (0002,0010) Transfer Syntax UID is missing or not UI.",
12238
- fmStart,
12239
- buildSnippet(buffer, fmStart)
12240
- );
12662
+ throw fileMetaTransferSyntaxMissing(buffer, fmStart);
12241
12663
  }
12242
12664
  const extraElements = fmElements.filter((e) => !MODELED_FM_TAGS.has(e.tag)).map((e) => Object.freeze({ tag: e.tag, vr: e.vr, value: Buffer.from(e.value) }));
12243
12665
  const fileMeta = {
@@ -12321,23 +12743,13 @@ function parsePart10Header(buffer, ctx, emit) {
12321
12743
  return { datasetStart: 132, hadPreamble: true };
12322
12744
  }
12323
12745
  if (ctx.stripPreamble === "require") {
12324
- throw new DicomParseError(
12325
- FATAL_CODES.NOT_DICOM_PART_10,
12326
- "Missing DICM magic at offset 128 (stripPreamble='require').",
12327
- 0,
12328
- buildSnippet(buffer, 0)
12329
- );
12746
+ throw notDicomPart10Required(buffer, 0);
12330
12747
  }
12331
12748
  if (looksLikeFileMetaGroupLengthAtOffsetZero(buffer)) {
12332
12749
  emit(missingPreamble({ byteOffset: 0 }));
12333
12750
  return { datasetStart: 0, hadPreamble: false };
12334
12751
  }
12335
- throw new DicomParseError(
12336
- FATAL_CODES.NOT_DICOM_PART_10,
12337
- "Input is not a DICOM Part 10 file (no DICM magic at offset 128 and no recognizable File Meta group at offset 0).",
12338
- 0,
12339
- buildSnippet(buffer, 0)
12340
- );
12752
+ throw notDicomPart10(buffer, 0);
12341
12753
  }
12342
12754
  function looksLikeFileMetaGroupLengthAtOffsetZero(buffer) {
12343
12755
  if (buffer.length < 12) return false;
@@ -12748,12 +13160,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12748
13160
  ctx.nestingDepth += 1;
12749
13161
  if (ctx.nestingDepth > NESTING_DEPTH_LIMIT) {
12750
13162
  ctx.nestingDepth -= 1;
12751
- throw new DicomParseError(
12752
- FATAL_CODES.INVALID_FILE_META,
12753
- `SQ nesting depth exceeds ${String(NESTING_DEPTH_LIMIT)}.`,
12754
- valueStart,
12755
- buildSnippet(buffer, valueStart)
12756
- );
13163
+ throw sqNestingDepthExceeded(buffer, valueStart, NESTING_DEPTH_LIMIT);
12757
13164
  }
12758
13165
  ctx.encodingContextStack.push(
12759
13166
  opts.encapsulatedPixelData === true ? "EncapsulatedPixelData" : "SqItem"
@@ -12789,12 +13196,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12789
13196
  itemLength = cursor.readUInt32();
12790
13197
  } catch (err) {
12791
13198
  if (err instanceof RangeError) {
12792
- throw new DicomParseError(
12793
- FATAL_CODES.INVALID_FILE_META,
12794
- "Truncated dataset (SQ item header read past buffer end).",
12795
- itemHeaderStart,
12796
- buildSnippet(buffer, itemHeaderStart)
12797
- );
13199
+ throw sqItemHeaderTruncated(buffer, itemHeaderStart);
12798
13200
  }
12799
13201
  throw err;
12800
13202
  }
@@ -12803,12 +13205,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12803
13205
  return { items, endOffset: cursor.position };
12804
13206
  }
12805
13207
  if (itemTag !== ITEM_TAG) {
12806
- throw new DicomParseError(
12807
- FATAL_CODES.INVALID_FILE_META,
12808
- `Unexpected tag ${itemTag} inside sequence (expected FFFE,E000 or FFFE,E0DD).`,
12809
- itemHeaderStart,
12810
- buildSnippet(buffer, itemHeaderStart)
12811
- );
13208
+ throw unexpectedTagInsideSequence(buffer, itemHeaderStart);
12812
13209
  }
12813
13210
  if (itemLength === 0) {
12814
13211
  emit(emptyItemInSequence({ byteOffset: itemHeaderStart }, itemTag));
@@ -12824,12 +13221,7 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12824
13221
  }
12825
13222
  if (opts.encapsulatedPixelData === true) {
12826
13223
  if (cursor.position + itemLength > buffer.length) {
12827
- throw new DicomParseError(
12828
- FATAL_CODES.INVALID_FILE_META,
12829
- `Encapsulated pixel data fragment length=${String(itemLength)} exceeds remaining buffer.`,
12830
- itemHeaderStart,
12831
- buildSnippet(buffer, itemHeaderStart)
12832
- );
13224
+ throw encapsulatedFragmentExceedsBuffer(buffer, itemHeaderStart);
12833
13225
  }
12834
13226
  cursor.position += itemLength;
12835
13227
  items.push(new Item({ warnings: [], elements: /* @__PURE__ */ new Map(), index: itemIndex }));
@@ -12855,15 +13247,17 @@ function parseSequence(buffer, valueStart, ctx, emit, opts) {
12855
13247
  );
12856
13248
  }
12857
13249
  if (cursor.position + itemLength > buffer.length) {
12858
- throw new DicomParseError(
12859
- FATAL_CODES.INVALID_FILE_META,
12860
- `Item length=${String(itemLength)} exceeds remaining buffer.`,
12861
- itemHeaderStart,
12862
- buildSnippet(buffer, itemHeaderStart)
12863
- );
13250
+ throw itemLengthExceedsBuffer(buffer, itemHeaderStart);
12864
13251
  }
12865
13252
  const itemSlice = buffer.subarray(cursor.position, cursor.position + itemLength);
12866
- const inner = opts.innerStrategy(itemSlice, 0, ctx, emit);
13253
+ const enclosingFrame = ctx.buffer;
13254
+ let inner;
13255
+ try {
13256
+ ctx.buffer = itemSlice;
13257
+ inner = opts.innerStrategy(itemSlice, 0, ctx, emit);
13258
+ } finally {
13259
+ ctx.buffer = enclosingFrame;
13260
+ }
12867
13261
  items.push(new Item({ warnings: [], elements: inner.elements, index: itemIndex }));
12868
13262
  cursor.position += itemLength;
12869
13263
  }
@@ -12887,11 +13281,18 @@ function tryParseDefinedLengthSQ(buffer, valueStart, valueLength, ctx, emit, imp
12887
13281
  const savedWarningsLen = ctx.warnings.length;
12888
13282
  try {
12889
13283
  const slice = buffer.subarray(valueStart, valueStart + valueLength);
12890
- const result = parseSequence(slice, 0, ctx, emit, {
12891
- explicitLength: valueLength,
12892
- littleEndian: true,
12893
- innerStrategy: implicitLeInner
12894
- });
13284
+ const enclosingFrame = ctx.buffer;
13285
+ let result;
13286
+ try {
13287
+ ctx.buffer = slice;
13288
+ result = parseSequence(slice, 0, ctx, emit, {
13289
+ explicitLength: valueLength,
13290
+ littleEndian: true,
13291
+ innerStrategy: implicitLeInner
13292
+ });
13293
+ } finally {
13294
+ ctx.buffer = enclosingFrame;
13295
+ }
12895
13296
  return { success: true, items: result.items };
12896
13297
  } catch (err) {
12897
13298
  if (isStrictEscalation(err)) throw err;
@@ -12918,7 +13319,14 @@ function tryParseUnAsSQ(buffer, valueStart, valueLength, ctx, emit, implicitLeIn
12918
13319
  // CP-246: Implicit VR LE inner per D-30.
12919
13320
  innerStrategy: implicitLeInner
12920
13321
  };
12921
- const result = parseSequence(slice, 0, ctx, emit, opts);
13322
+ const enclosingFrame = ctx.buffer;
13323
+ let result;
13324
+ try {
13325
+ ctx.buffer = slice;
13326
+ result = parseSequence(slice, 0, ctx, emit, opts);
13327
+ } finally {
13328
+ ctx.buffer = enclosingFrame;
13329
+ }
12922
13330
  emit(unParsedAsSQ({ byteOffset: valueStart }, tag));
12923
13331
  return {
12924
13332
  success: true,
@@ -12955,12 +13363,7 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
12955
13363
  length = cursor.readUInt32();
12956
13364
  } catch (err) {
12957
13365
  if (err instanceof RangeError) {
12958
- throw new DicomParseError(
12959
- FATAL_CODES.INVALID_FILE_META,
12960
- "Truncated dataset (header read past buffer end).",
12961
- headerStart,
12962
- buildSnippet(buffer, headerStart)
12963
- );
13366
+ throw truncatedDatasetHeader(buffer, headerStart);
12964
13367
  }
12965
13368
  throw err;
12966
13369
  }
@@ -12969,12 +13372,7 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
12969
13372
  if (opts.stopOnItemDelim === true && tag === "FFFEE00D") {
12970
13373
  return { elements, endOffset: cursor.position };
12971
13374
  }
12972
- throw new DicomParseError(
12973
- FATAL_CODES.INVALID_FILE_META,
12974
- `Unexpected FFFE marker (${tag}) at dataset root.`,
12975
- headerStart,
12976
- buildSnippet(buffer, headerStart)
12977
- );
13375
+ throw unexpectedFffeAtDatasetRoot(buffer, headerStart);
12978
13376
  }
12979
13377
  const position = { byteOffset: headerStart };
12980
13378
  const vr = resolveImplicitVR(tag, ctx, emit, position);
@@ -13041,20 +13439,10 @@ function parseImplicitLE(buffer, datasetStart, ctx, emit, opts = {}) {
13041
13439
  continue;
13042
13440
  }
13043
13441
  }
13044
- throw new DicomParseError(
13045
- FATAL_CODES.INVALID_FILE_META,
13046
- `Undefined length on non-SQ element ${tag} (vr=${vr}) under Implicit VR LE.`,
13047
- headerStart,
13048
- buildSnippet(buffer, headerStart)
13049
- );
13442
+ throw undefinedLengthOnNonSqImplicit(buffer, headerStart, vr);
13050
13443
  }
13051
13444
  if (cursor.position + length > buffer.length) {
13052
- throw new DicomParseError(
13053
- FATAL_CODES.INVALID_FILE_META,
13054
- `Element ${tag} declared length=${String(length)} exceeds remaining buffer (${String(buffer.length - cursor.position)} bytes).`,
13055
- headerStart,
13056
- buildSnippet(buffer, headerStart)
13057
- );
13445
+ throw elementLengthExceedsBuffer(buffer, headerStart, buffer.length - cursor.position);
13058
13446
  }
13059
13447
  const valueStart = cursor.position;
13060
13448
  const valueEnd = valueStart + length;
@@ -13130,31 +13518,20 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13130
13518
  peekGroup = cursor.readUInt16At(cursor.position);
13131
13519
  } catch (err) {
13132
13520
  if (err instanceof RangeError) {
13133
- throw new DicomParseError(
13134
- FATAL_CODES.INVALID_FILE_META,
13135
- "Truncated dataset (header read past buffer end).",
13136
- headerStart,
13137
- buildSnippet(buffer, headerStart)
13138
- );
13521
+ throw truncatedDatasetHeader(buffer, headerStart);
13139
13522
  }
13140
13523
  throw err;
13141
13524
  }
13142
13525
  if (peekGroup === 65534) {
13143
13526
  let grp;
13144
13527
  let ele;
13145
- let len;
13146
13528
  try {
13147
13529
  grp = cursor.readUInt16();
13148
13530
  ele = cursor.readUInt16();
13149
- len = cursor.readUInt32();
13531
+ cursor.readUInt32();
13150
13532
  } catch (err) {
13151
13533
  if (err instanceof RangeError) {
13152
- throw new DicomParseError(
13153
- FATAL_CODES.INVALID_FILE_META,
13154
- "Truncated dataset (FFFE header read past buffer end).",
13155
- headerStart,
13156
- buildSnippet(buffer, headerStart)
13157
- );
13534
+ throw truncatedFffeHeader(buffer, headerStart);
13158
13535
  }
13159
13536
  throw err;
13160
13537
  }
@@ -13162,24 +13539,14 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13162
13539
  if (opts.stopOnItemDelim === true && fffeTag === "FFFEE00D") {
13163
13540
  return { elements, endOffset: cursor.position };
13164
13541
  }
13165
- throw new DicomParseError(
13166
- FATAL_CODES.INVALID_FILE_META,
13167
- `Unexpected FFFE marker ${fffeTag} (length=${String(len)}) at dataset level.`,
13168
- headerStart,
13169
- buildSnippet(buffer, headerStart)
13170
- );
13542
+ throw unexpectedFffeAtDatasetLevel(buffer, headerStart);
13171
13543
  }
13172
13544
  let header;
13173
13545
  try {
13174
13546
  header = readExplicitElementHeader(cursor, ctx, emit);
13175
13547
  } catch (err) {
13176
13548
  if (err instanceof RangeError) {
13177
- throw new DicomParseError(
13178
- FATAL_CODES.INVALID_FILE_META,
13179
- "Truncated dataset (Explicit VR header read past buffer end).",
13180
- headerStart,
13181
- buildSnippet(buffer, headerStart)
13182
- );
13549
+ throw truncatedExplicitVrHeader(buffer, headerStart);
13183
13550
  }
13184
13551
  throw err;
13185
13552
  }
@@ -13319,20 +13686,10 @@ function _parseExplicit(buffer, datasetStart, ctx, emit, mode, opts = {}) {
13319
13686
  continue;
13320
13687
  }
13321
13688
  if (length === UNDEFINED_LENGTH2) {
13322
- throw new DicomParseError(
13323
- FATAL_CODES.INVALID_FILE_META,
13324
- `Undefined length on non-SQ element ${tag} (vr=${vr}) under Explicit VR.`,
13325
- headerStart,
13326
- buildSnippet(buffer, headerStart)
13327
- );
13689
+ throw undefinedLengthOnNonSqExplicit(buffer, headerStart, vr);
13328
13690
  }
13329
13691
  if (cursor.position + length > buffer.length) {
13330
- throw new DicomParseError(
13331
- FATAL_CODES.INVALID_FILE_META,
13332
- `Element ${tag} declared length=${String(length)} exceeds remaining buffer (${String(buffer.length - cursor.position)} bytes).`,
13333
- headerStart,
13334
- buildSnippet(buffer, headerStart)
13335
- );
13692
+ throw elementLengthExceedsBuffer(buffer, headerStart, buffer.length - cursor.position);
13336
13693
  }
13337
13694
  const valueStart = cursor.position;
13338
13695
  const valueEnd = valueStart + length;
@@ -13393,20 +13750,9 @@ function parseDeflatedLEWithCap(buffer, datasetStart, ctx, emit, maxInflatedByte
13393
13750
  const code = errAny.code;
13394
13751
  const message = errAny.message ?? String(err);
13395
13752
  if (code === "ERR_BUFFER_TOO_LARGE" || err instanceof RangeError && /maxOutputLength|too large/i.test(message)) {
13396
- throw new DicomParseError(
13397
- FATAL_CODES.INVALID_FILE_META,
13398
- `Inflated Deflated TS payload exceeds ${String(maxInflatedBytes)}-byte cap.`,
13399
- datasetStart,
13400
- buildSnippet(buffer, datasetStart)
13401
- );
13753
+ throw inflatedPayloadExceedsCap(buffer, datasetStart, maxInflatedBytes);
13402
13754
  }
13403
- const zlibCode = typeof code === "string" && code.length > 0 ? code : "unknown";
13404
- throw new DicomParseError(
13405
- FATAL_CODES.INVALID_FILE_META,
13406
- `Failed to inflate Deflated TS payload (zlib error code: ${zlibCode}).`,
13407
- datasetStart,
13408
- buildSnippet(buffer, datasetStart)
13409
- );
13755
+ throw inflateFailed(buffer, datasetStart, code);
13410
13756
  }
13411
13757
  const innerCtx = { ...ctx, buffer: inflated };
13412
13758
  const innerChokepoint = makeEmitter(innerCtx);
@@ -13442,19 +13788,13 @@ var TRANSFER_SYNTAX_PARSERS = Object.freeze({
13442
13788
  });
13443
13789
 
13444
13790
  // src/parser/index.ts
13445
- var SUPPORTED_TRANSFER_SYNTAXES = Object.keys(TRANSFER_SYNTAX_PARSERS).join(", ");
13446
13791
  function parseDicom(input, options = {}) {
13447
13792
  if (rawInputIsEmpty(input)) {
13448
- throw new DicomParseError(FATAL_CODES.EMPTY_INPUT, "Input is empty.", 0, "");
13793
+ throw emptyInput();
13449
13794
  }
13450
13795
  const buffer = normalizeInput(input);
13451
13796
  if (buffer.length === 0) {
13452
- throw new DicomParseError(
13453
- FATAL_CODES.EMPTY_INPUT,
13454
- "Input is empty after normalization.",
13455
- 0,
13456
- ""
13457
- );
13797
+ throw emptyInputAfterNormalization();
13458
13798
  }
13459
13799
  const warnings = [];
13460
13800
  const ctx = buildContext(buffer, options, warnings);
@@ -13464,14 +13804,7 @@ function parseDicom(input, options = {}) {
13464
13804
  const tsUid = fileMeta.transferSyntaxUID;
13465
13805
  const strategy = TRANSFER_SYNTAX_PARSERS[tsUid];
13466
13806
  if (strategy === void 0) {
13467
- const tsName = uid(tsUid)?.name ?? "";
13468
- const named = tsName.length > 0 ? `Transfer Syntax ${tsName}` : "The Transfer Syntax UID";
13469
- throw new DicomParseError(
13470
- FATAL_CODES.UNSUPPORTED_TRANSFER_SYNTAX,
13471
- `${named} in (0002,0010) is not supported by @cosyte/dicom v1 (supported: ${SUPPORTED_TRANSFER_SYNTAXES}).`,
13472
- fileMetaEnd,
13473
- tsName.length > 0 ? tsName : buildSnippet(buffer, fileMetaEnd)
13474
- );
13807
+ throw unsupportedTransferSyntax(buffer, fileMetaEnd, tsUid);
13475
13808
  }
13476
13809
  const { elements } = strategy(buffer, fileMetaEnd, ctx, emit);
13477
13810
  return new Dataset({ fileMeta, warnings: ctx.warnings, elements });
@@ -14894,6 +15227,10 @@ function hasByteOutsideRepertoire(region, carrierVr) {
14894
15227
  }
14895
15228
  return false;
14896
15229
  }
15230
+ function isTableBound(tag) {
15231
+ const action = annexE(tag);
15232
+ return action !== void 0 && action.repeatingGroup === void 0;
15233
+ }
14897
15234
  function findEmbeddedAttributes(value, carrierVr, encoding, isActionable) {
14898
15235
  if (!isScannableCarrier(carrierVr)) return void 0;
14899
15236
  if (value.length < MIN_HEADER) return void 0;
@@ -14917,15 +15254,19 @@ function findEmbeddedAttributes(value, carrierVr, encoding, isActionable) {
14917
15254
  for (let off = 0; off + MIN_HEADER <= n; off += 2) {
14918
15255
  if (hit[off >> 1] !== 1) continue;
14919
15256
  if (!hasByteOutsideRepertoire(window.subarray(off), carrierVr)) return void 0;
14920
- const tags = [];
15257
+ const hidden = [];
15258
+ let elementCount = 0;
14921
15259
  let pos = off;
14922
15260
  while (pos < n) {
14923
15261
  const decoded = decodeAt(window, pos, encoding);
14924
15262
  if (decoded === void 0) break;
14925
- if (decoded.tag !== void 0) tags.push(decoded.tag);
15263
+ if (decoded.tag !== void 0) {
15264
+ elementCount += 1;
15265
+ if (isActionable(decoded.tag) && isTableBound(decoded.tag)) hidden.push(decoded.tag);
15266
+ }
14926
15267
  pos = decoded.next;
14927
15268
  }
14928
- return tags;
15269
+ return { hidden, elementCount };
14929
15270
  }
14930
15271
  return void 0;
14931
15272
  }
@@ -15130,8 +15471,8 @@ function keepOrEmpty(el, ctx, contextPath, out) {
15130
15471
  emptyUndefinedVrElement(el, ctx, contextPath, out);
15131
15472
  return false;
15132
15473
  }
15133
- const hidden = findEmbeddedAttributes(el.rawBytes, el.vr, ctx.encoding, (t) => actsOnTag(t, ctx));
15134
- if (hidden === void 0) {
15474
+ const run = findEmbeddedAttributes(el.rawBytes, el.vr, ctx.encoding, (t) => actsOnTag(t, ctx));
15475
+ if (run === void 0) {
15135
15476
  out.elements.set(el.tag, el);
15136
15477
  return true;
15137
15478
  }
@@ -15139,11 +15480,11 @@ function keepOrEmpty(el, ctx, contextPath, out) {
15139
15480
  out.embeddedAttributes.push({
15140
15481
  tag: el.tag,
15141
15482
  vr: el.vr,
15142
- hidden,
15483
+ hidden: run.hidden,
15143
15484
  ...contextPath.length > 0 ? { contextPath: [...contextPath] } : {}
15144
15485
  });
15145
15486
  out.warnings.push(
15146
- embeddedAttributeRemoved({ byteOffset: el.byteOffset }, el.tag, el.vr, hidden.length)
15487
+ embeddedAttributeRemoved({ byteOffset: el.byteOffset }, el.tag, el.vr, run.elementCount)
15147
15488
  );
15148
15489
  return false;
15149
15490
  }
@@ -15162,7 +15503,10 @@ function isUnauditableSequence(el) {
15162
15503
  return el.vr === "SQ" && el.items === void 0;
15163
15504
  }
15164
15505
  function emptyUnauditableSequence(el, ctx, contextPath, out) {
15165
- out.elements.set(el.tag, rebuildSequence(el, [], ctx.encoding));
15506
+ emptyUnauditableCarrier(el, ctx, contextPath, out, rebuildSequence(el, [], ctx.encoding));
15507
+ }
15508
+ function emptyUnauditableCarrier(el, ctx, contextPath, out, replacement) {
15509
+ out.elements.set(el.tag, replacement);
15166
15510
  if (ctx.budget.unauditableSequences >= MAX_UNAUDITABLE_SEQUENCE_FINDINGS) return;
15167
15511
  ctx.budget.unauditableSequences += 1;
15168
15512
  out.unauditableSequences.push({
@@ -15197,15 +15541,15 @@ function itemStreamOverrunsSequence(el, encoding) {
15197
15541
  function settledBound(source, encoding) {
15198
15542
  let index = source.length;
15199
15543
  let byteOffset;
15200
- for (const [at, el] of source.entries()) {
15544
+ for (const [at2, el] of source.entries()) {
15201
15545
  if (!itemStreamOverrunsSequence(el, encoding) && !isUnauditableSequence(el)) continue;
15202
- if (index === source.length) index = at + 1;
15546
+ if (index === source.length) index = at2 + 1;
15203
15547
  if (byteOffset === void 0 || el.byteOffset < byteOffset) byteOffset = el.byteOffset;
15204
15548
  }
15205
15549
  return { index, byteOffset };
15206
15550
  }
15207
- function isSettled(el, at, bound) {
15208
- return at < bound.index && (bound.byteOffset === void 0 || el.byteOffset <= bound.byteOffset);
15551
+ function isSettled(el, at2, bound) {
15552
+ return at2 < bound.index && (bound.byteOffset === void 0 || el.byteOffset <= bound.byteOffset);
15209
15553
  }
15210
15554
  function keepsPrivate(el, ctx, creators) {
15211
15555
  if (!ctx.active.has("RetainSafePrivate") || ctx.profile === void 0) return false;
@@ -15216,6 +15560,27 @@ function keepsPrivate(el, ctx, creators) {
15216
15560
  if (creator === void 0) return false;
15217
15561
  return resolvePrivateTag(ctx.profile, el.tag, creator) !== void 0;
15218
15562
  }
15563
+ function declaredPrivateVr(el, ctx, creators) {
15564
+ if (ctx.profile === void 0 || isPrivateCreatorElement(el.tag)) return void 0;
15565
+ const creator = creatorFor(el.tag, creators);
15566
+ if (creator === void 0) return void 0;
15567
+ return resolvePrivateTag(ctx.profile, el.tag, creator)?.vr;
15568
+ }
15569
+ function keepRetainedPrivate(el, ctx, contextPath, out, reservationsUsable, creators) {
15570
+ if (el.vr === "SQ") {
15571
+ if (isUnauditableSequence(el)) {
15572
+ emptyUnauditableSequence(el, ctx, contextPath, out);
15573
+ return;
15574
+ }
15575
+ out.elements.set(el.tag, descendSequence(el, ctx, contextPath, out, reservationsUsable));
15576
+ return;
15577
+ }
15578
+ if (!hasUndefinedVr(el) && el.length > 0 && declaredPrivateVr(el, ctx, creators) === "SQ") {
15579
+ emptyUnauditableCarrier(el, ctx, contextPath, out, freshScalar(el, Buffer.alloc(0), 0));
15580
+ return;
15581
+ }
15582
+ keepOrEmpty(el, ctx, contextPath, out);
15583
+ }
15219
15584
  function processElements(source, ctx, contextPath, reservationsUsable) {
15220
15585
  const out = {
15221
15586
  elements: /* @__PURE__ */ new Map(),
@@ -15227,11 +15592,11 @@ function processElements(source, ctx, contextPath, reservationsUsable) {
15227
15592
  warnings: []
15228
15593
  };
15229
15594
  const bound = settledBound(source, ctx.encoding);
15230
- const creators = creatorsInScope(source.filter((el, at) => isSettled(el, at, bound)));
15231
- for (const [at, el] of source.entries()) {
15595
+ const creators = creatorsInScope(source.filter((el, at2) => isSettled(el, at2, bound)));
15596
+ for (const [at2, el] of source.entries()) {
15232
15597
  if (isPrivateTag(el.tag)) {
15233
- if (reservationsUsable && isSettled(el, at, bound) && keepsPrivate(el, ctx, creators))
15234
- keepOrEmpty(el, ctx, contextPath, out);
15598
+ if (reservationsUsable && isSettled(el, at2, bound) && keepsPrivate(el, ctx, creators))
15599
+ keepRetainedPrivate(el, ctx, contextPath, out, reservationsUsable, creators);
15235
15600
  else out.removedPrivateTags.push(el.tag);
15236
15601
  continue;
15237
15602
  }