# HG changeset patch # User Sebastien Jodogne # Date 1622747194 -7200 # Node ID 521e39b3f2c090c4d071ad95a84da3d3ea500e37 # Parent caf963ee3de91341b9569271a1e81e814d02c92f Fix issue #146 (Update Anonyization to 2019c) - was actually updated to 2021b diff -r caf963ee3de9 -r 521e39b3f2c0 NEWS --- a/NEWS Thu Jun 03 19:44:43 2021 +0200 +++ b/NEWS Thu Jun 03 21:06:34 2021 +0200 @@ -4,6 +4,7 @@ General ------- +* Orthanc now anonymizes according to Basic Profile of PS 3.15-2021b Table E.1-1 * New configuration option "SynchronousZipStream" to disable streaming of ZIP REST API @@ -13,6 +14,11 @@ * "Replace" tags in "/modify" and "/anonymize" now supports value representation AT * "/jobs/..." has new field "ErrorDetails" to help identify the cause of an error +Maintenance +----------- + +* Fix issue #146 (Update Anonyization to 2019c) - was actually updated to 2021b + Version 1.9.3 (2021-05-07) ========================== diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/Sources/DicomParsing/DicomModification.cpp --- a/OrthancFramework/Sources/DicomParsing/DicomModification.cpp Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancFramework/Sources/DicomParsing/DicomModification.cpp Thu Jun 03 21:06:34 2021 +0200 @@ -39,6 +39,9 @@ static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2017c = "Orthanc " ORTHANC_VERSION " - PS 3.15-2017c Table E.1-1 Basic Profile"; +static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2021b = + "Orthanc " ORTHANC_VERSION " - PS 3.15-2021b Table E.1-1 Basic Profile"; + namespace Orthanc { class DicomModification::RelationshipsVisitor : public ITagVisitor @@ -252,7 +255,8 @@ if (it != replacements_.end() && (it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2008 || - it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2017c)) + it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2017c || + it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2021b)) { delete it->second; replacements_.erase(it); @@ -591,6 +595,26 @@ } + void DicomModification::SetupAnonymization2021b() + { + /** + * This is Table E.1-1 from PS 3.15-2021b (DICOM Part 15: Security + * and System Management Profiles), "basic profile" column. It was + * generated automatically by calling: + * "../../../OrthancServer/Resources/GenerateAnonymizationProfile.py + * https://raw.githubusercontent.com/jodogne/dicom-specification/master/2021b/part15.xml" + * + * http://dicom.nema.org/medical/dicom/2021b/output/chtml/part15/chapter_E.html#table_E.1-1a + * http://dicom.nema.org/medical/dicom/2021b/output/chtml/part15/chapter_E.html#table_E.1-1 + **/ + +#include "DicomModification_Anonymization2021b.impl.h" + + // Set the DeidentificationMethod tag + ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2021b); + } + + void DicomModification::SetupAnonymization(DicomVersion version) { isAnonymization_ = true; @@ -613,6 +637,10 @@ SetupAnonymization2017c(); break; + case DicomVersion_2021b: + SetupAnonymization2021b(); + break; + default: throw OrthancException(ErrorCode_ParameterOutOfRange); } @@ -1029,9 +1057,9 @@ bool force = GetBooleanValue("Force", request, false); - // As of Orthanc 1.3.0, the default anonymization is done - // according to PS 3.15-2017c Table E.1-1 (basic profile) - DicomVersion version = DicomVersion_2017c; + // DicomVersion version = DicomVersion_2008; // For Orthanc <= 1.2.0 + // DicomVersion version = DicomVersion_2017c; // For Orthanc between 1.3.0 and 1.9.3 + DicomVersion version = DicomVersion_2021b; // For Orthanc >= 1.9.4 if (request.isMember("DicomVersion")) { if (request["DicomVersion"].type() != Json::stringValue) diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/Sources/DicomParsing/DicomModification.h --- a/OrthancFramework/Sources/DicomParsing/DicomModification.h Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancFramework/Sources/DicomParsing/DicomModification.h Thu Jun 03 21:06:34 2021 +0200 @@ -103,6 +103,8 @@ void SetupAnonymization2017c(); + void SetupAnonymization2021b(); + void UnserializeUidMap(ResourceType level, const Json::Value& serialized, const char* field); diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/Sources/DicomParsing/DicomModification_Anonymization2021b.impl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancFramework/Sources/DicomParsing/DicomModification_Anonymization2021b.impl.h Thu Jun 03 21:06:34 2021 +0200 @@ -0,0 +1,459 @@ +// TODO: (50xx,xxxx) with rule X // Curve Data +// TODO: (60xx,3000) with rule X // Overlay Data +// TODO: (60xx,4000) with rule X // Overlay Comments +// Tag (0x0008, 0x0018) is set in Apply() /* U */ // SOP Instance UID +// Tag (0x0008, 0x1140) => RelationshipsVisitor /* X/Z/U* */ // Referenced Image Sequence +// Tag (0x0008, 0x1155) => RelationshipsVisitor /* U */ // Referenced SOP Instance UID +// Tag (0x0008, 0x2112) => RelationshipsVisitor /* X/Z/U* */ // Source Image Sequence +// Tag (0x0010, 0x0010) is set below (*) /* Z */ // Patient's Name +// Tag (0x0010, 0x0020) is set below (*) /* Z */ // Patient ID +// Tag (0x0020, 0x000d) is set in Apply() /* U */ // Study Instance UID +// Tag (0x0020, 0x000e) is set in Apply() /* U */ // Series Instance UID +// Tag (0x0020, 0x0052) => RelationshipsVisitor /* U */ // Frame of Reference UID +// Tag (0x3006, 0x0024) => RelationshipsVisitor /* U */ // Referenced Frame of Reference UID +// Tag (0x3006, 0x00c2) => RelationshipsVisitor /* U */ // Related Frame of Reference UID +clearings_.insert(DicomTag(0x0008, 0x0020)); // Study Date +clearings_.insert(DicomTag(0x0008, 0x0023)); /* Z/D */ // Content Date +clearings_.insert(DicomTag(0x0008, 0x0030)); // Study Time +clearings_.insert(DicomTag(0x0008, 0x0033)); /* Z/D */ // Content Time +clearings_.insert(DicomTag(0x0008, 0x0050)); // Accession Number +clearings_.insert(DicomTag(0x0008, 0x0090)); // Referring Physician's Name +clearings_.insert(DicomTag(0x0008, 0x009c)); // Consulting Physician's Name +clearings_.insert(DicomTag(0x0010, 0x0030)); // Patient's Birth Date +clearings_.insert(DicomTag(0x0010, 0x0040)); // Patient's Sex +clearings_.insert(DicomTag(0x0012, 0x0010)); /* D */ // Clinical Trial Sponsor Name +clearings_.insert(DicomTag(0x0012, 0x0020)); /* D */ // Clinical Trial Protocol ID +clearings_.insert(DicomTag(0x0012, 0x0021)); // Clinical Trial Protocol Name +clearings_.insert(DicomTag(0x0012, 0x0030)); // Clinical Trial Site ID +clearings_.insert(DicomTag(0x0012, 0x0031)); // Clinical Trial Site Name +clearings_.insert(DicomTag(0x0012, 0x0040)); /* D */ // Clinical Trial Subject ID +clearings_.insert(DicomTag(0x0012, 0x0042)); /* D */ // Clinical Trial Subject Reading ID +clearings_.insert(DicomTag(0x0012, 0x0050)); // Clinical Trial Time Point ID +clearings_.insert(DicomTag(0x0012, 0x0060)); // Clinical Trial Coordinating Center Name +clearings_.insert(DicomTag(0x0012, 0x0081)); /* D */ // Clinical Trial Protocol Ethics Committee Name +clearings_.insert(DicomTag(0x0018, 0x0010)); /* Z/D */ // Contrast/Bolus Agent +clearings_.insert(DicomTag(0x0018, 0x11bb)); /* D */ // Acquisition Field Of View Label +clearings_.insert(DicomTag(0x0018, 0x9367)); /* D */ // X-Ray Source ID +clearings_.insert(DicomTag(0x0018, 0x9369)); /* D */ // Source Start DateTime +clearings_.insert(DicomTag(0x0018, 0x936a)); /* D */ // Source End DateTime +clearings_.insert(DicomTag(0x0018, 0x9371)); /* D */ // X-Ray Detector ID +clearings_.insert(DicomTag(0x0020, 0x0010)); // Study ID +clearings_.insert(DicomTag(0x0034, 0x0001)); /* D */ // Flow Identifier Sequence +clearings_.insert(DicomTag(0x0034, 0x0002)); /* D */ // Flow Identifier +clearings_.insert(DicomTag(0x0034, 0x0005)); /* D */ // Source Identifier +clearings_.insert(DicomTag(0x0034, 0x0007)); /* D */ // Frame Origin Timestamp +clearings_.insert(DicomTag(0x003a, 0x0314)); /* D */ // Impedance Measurement DateTime +clearings_.insert(DicomTag(0x0040, 0x0512)); /* D */ // Container Identifier +clearings_.insert(DicomTag(0x0040, 0x0513)); // Issuer of the Container Identifier Sequence +clearings_.insert(DicomTag(0x0040, 0x0551)); /* D */ // Specimen Identifier +clearings_.insert(DicomTag(0x0040, 0x0562)); // Issuer of the Specimen Identifier Sequence +clearings_.insert(DicomTag(0x0040, 0x0610)); // Specimen Preparation Sequence +clearings_.insert(DicomTag(0x0040, 0x1101)); /* D */ // Person Identification Code Sequence +clearings_.insert(DicomTag(0x0040, 0x2016)); // Placer Order Number / Imaging Service Request +clearings_.insert(DicomTag(0x0040, 0x2017)); // Filler Order Number / Imaging Service Request +clearings_.insert(DicomTag(0x0040, 0xa027)); /* D */ // Verifying Organization +clearings_.insert(DicomTag(0x0040, 0xa073)); /* D */ // Verifying Observer Sequence +clearings_.insert(DicomTag(0x0040, 0xa075)); /* D */ // Verifying Observer Name +clearings_.insert(DicomTag(0x0040, 0xa088)); // Verifying Observer Identification Code Sequence +clearings_.insert(DicomTag(0x0040, 0xa123)); /* D */ // Person Name +clearings_.insert(DicomTag(0x0040, 0xa730)); /* D */ // Content Sequence +clearings_.insert(DicomTag(0x0070, 0x0001)); /* D */ // Graphic Annotation Sequence +clearings_.insert(DicomTag(0x0070, 0x0084)); /* Z/D */ // Content Creator's Name +clearings_.insert(DicomTag(0x3006, 0x0002)); /* D */ // Structure Set Label +clearings_.insert(DicomTag(0x3006, 0x0008)); // Structure Set Date +clearings_.insert(DicomTag(0x3006, 0x0009)); // Structure Set Time +clearings_.insert(DicomTag(0x3006, 0x0026)); // ROI Name +clearings_.insert(DicomTag(0x3006, 0x00a6)); // ROI Interpreter +clearings_.insert(DicomTag(0x300a, 0x0002)); /* D */ // RT Plan Label +clearings_.insert(DicomTag(0x300a, 0x0608)); /* D */ // Treatment Position Group Label +clearings_.insert(DicomTag(0x300a, 0x0611)); // RT Accessory Holder Slot ID +clearings_.insert(DicomTag(0x300a, 0x0615)); // RT Accessory Device Slot ID +clearings_.insert(DicomTag(0x300a, 0x0619)); /* D */ // Radiation Dose Identification Label +clearings_.insert(DicomTag(0x300a, 0x0623)); /* D */ // Radiation Dose In-Vivo Measurement Label +clearings_.insert(DicomTag(0x300a, 0x062a)); /* D */ // RT Tolerance Set Label +clearings_.insert(DicomTag(0x300a, 0x067c)); /* D */ // Radiation Generation Mode Label +clearings_.insert(DicomTag(0x300a, 0x067d)); // Radiation Generation Mode Description +clearings_.insert(DicomTag(0x300a, 0x0734)); /* D */ // Treatment Tolerance Violation Description +clearings_.insert(DicomTag(0x300a, 0x0736)); /* D */ // Treatment Tolerance Violation DateTime +clearings_.insert(DicomTag(0x300a, 0x073a)); /* D */ // Recorded RT Control Point DateTime +clearings_.insert(DicomTag(0x300a, 0x0741)); /* D */ // Interlock DateTime +clearings_.insert(DicomTag(0x300a, 0x0742)); /* D */ // Interlock Description +clearings_.insert(DicomTag(0x300a, 0x0760)); /* D */ // Override DateTime +clearings_.insert(DicomTag(0x300a, 0x0783)); /* D */ // Interlock Origin Description +clearings_.insert(DicomTag(0x3010, 0x000f)); // Conceptual Volume Combination Description +clearings_.insert(DicomTag(0x3010, 0x0017)); // Conceptual Volume Description +clearings_.insert(DicomTag(0x3010, 0x001b)); // Device Alternate Identifier +clearings_.insert(DicomTag(0x3010, 0x002d)); /* D */ // Device Label +clearings_.insert(DicomTag(0x3010, 0x0033)); /* D */ // User Content Label +clearings_.insert(DicomTag(0x3010, 0x0034)); /* D */ // User Content Long Label +clearings_.insert(DicomTag(0x3010, 0x0035)); /* D */ // Entity Label +clearings_.insert(DicomTag(0x3010, 0x0038)); /* D */ // Entity Long Label +clearings_.insert(DicomTag(0x3010, 0x0043)); // Manufacturer's Device Identifier +clearings_.insert(DicomTag(0x3010, 0x0054)); /* D */ // RT Prescription Label +clearings_.insert(DicomTag(0x3010, 0x005a)); // RT Physician Intent Narrative +clearings_.insert(DicomTag(0x3010, 0x005c)); // Reason for Superseding +clearings_.insert(DicomTag(0x3010, 0x0077)); /* D */ // Treatment Site +clearings_.insert(DicomTag(0x3010, 0x007a)); // Treatment Technique Notes +clearings_.insert(DicomTag(0x3010, 0x007b)); // Prescription Notes +clearings_.insert(DicomTag(0x3010, 0x007f)); // Fractionation Notes +clearings_.insert(DicomTag(0x3010, 0x0081)); // Prescription Notes Sequence +removals_.insert(DicomTag(0x0000, 0x1000)); // Affected SOP Instance UID +removals_.insert(DicomTag(0x0000, 0x1001)); /* TODO UID */ // Requested SOP Instance UID +removals_.insert(DicomTag(0x0002, 0x0003)); /* TODO UID */ // Media Storage SOP Instance UID +removals_.insert(DicomTag(0x0004, 0x1511)); /* TODO UID */ // Referenced SOP Instance UID in File +removals_.insert(DicomTag(0x0008, 0x0014)); /* TODO UID */ // Instance Creator UID +removals_.insert(DicomTag(0x0008, 0x0015)); // Instance Coercion DateTime +removals_.insert(DicomTag(0x0008, 0x0021)); /* X/D */ // Series Date +removals_.insert(DicomTag(0x0008, 0x0022)); /* X/Z */ // Acquisition Date +removals_.insert(DicomTag(0x0008, 0x0024)); // Overlay Date +removals_.insert(DicomTag(0x0008, 0x0025)); // Curve Date +removals_.insert(DicomTag(0x0008, 0x002a)); /* X/Z/D */ // Acquisition DateTime +removals_.insert(DicomTag(0x0008, 0x0031)); /* X/D */ // Series Time +removals_.insert(DicomTag(0x0008, 0x0032)); /* X/Z */ // Acquisition Time +removals_.insert(DicomTag(0x0008, 0x0034)); // Overlay Time +removals_.insert(DicomTag(0x0008, 0x0035)); // Curve Time +removals_.insert(DicomTag(0x0008, 0x0058)); /* TODO UID */ // Failed SOP Instance UID List +removals_.insert(DicomTag(0x0008, 0x0080)); /* X/Z/D */ // Institution Name +removals_.insert(DicomTag(0x0008, 0x0081)); // Institution Address +removals_.insert(DicomTag(0x0008, 0x0082)); /* X/Z/D */ // Institution Code Sequence +removals_.insert(DicomTag(0x0008, 0x0092)); // Referring Physician's Address +removals_.insert(DicomTag(0x0008, 0x0094)); // Referring Physician's Telephone Numbers +removals_.insert(DicomTag(0x0008, 0x0096)); // Referring Physician Identification Sequence +removals_.insert(DicomTag(0x0008, 0x009d)); // Consulting Physician Identification Sequence +removals_.insert(DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC +removals_.insert(DicomTag(0x0008, 0x1010)); /* X/Z/D */ // Station Name +removals_.insert(DicomTag(0x0008, 0x1030)); // Study Description +removals_.insert(DicomTag(0x0008, 0x103e)); // Series Description +removals_.insert(DicomTag(0x0008, 0x1040)); // Institutional Department Name +removals_.insert(DicomTag(0x0008, 0x1041)); // Institutional Department Type Code Sequence +removals_.insert(DicomTag(0x0008, 0x1048)); // Physician(s) of Record +removals_.insert(DicomTag(0x0008, 0x1049)); // Physician(s) of Record Identification Sequence +removals_.insert(DicomTag(0x0008, 0x1050)); // Performing Physician's Name +removals_.insert(DicomTag(0x0008, 0x1052)); // Performing Physician Identification Sequence +removals_.insert(DicomTag(0x0008, 0x1060)); // Name of Physician(s) Reading Study +removals_.insert(DicomTag(0x0008, 0x1062)); // Physician(s) Reading Study Identification Sequence +removals_.insert(DicomTag(0x0008, 0x1070)); /* X/Z/D */ // Operators' Name +removals_.insert(DicomTag(0x0008, 0x1072)); /* X/D */ // Operator Identification Sequence +removals_.insert(DicomTag(0x0008, 0x1080)); // Admitting Diagnoses Description +removals_.insert(DicomTag(0x0008, 0x1084)); // Admitting Diagnoses Code Sequence +removals_.insert(DicomTag(0x0008, 0x1110)); /* X/Z */ // Referenced Study Sequence +removals_.insert(DicomTag(0x0008, 0x1111)); /* X/Z/D */ // Referenced Performed Procedure Step Sequence +removals_.insert(DicomTag(0x0008, 0x1120)); // Referenced Patient Sequence +removals_.insert(DicomTag(0x0008, 0x1195)); /* TODO UID */ // Transaction UID +removals_.insert(DicomTag(0x0008, 0x2111)); // Derivation Description +removals_.insert(DicomTag(0x0008, 0x3010)); /* TODO UID */ // Irradiation Event UID +removals_.insert(DicomTag(0x0008, 0x4000)); // Identifying Comments +removals_.insert(DicomTag(0x0010, 0x0021)); // Issuer of Patient ID +removals_.insert(DicomTag(0x0010, 0x0032)); // Patient's Birth Time +removals_.insert(DicomTag(0x0010, 0x0050)); // Patient's Insurance Plan Code Sequence +removals_.insert(DicomTag(0x0010, 0x0101)); // Patient's Primary Language Code Sequence +removals_.insert(DicomTag(0x0010, 0x0102)); // Patient's Primary Language Modifier Code Sequence +removals_.insert(DicomTag(0x0010, 0x1000)); // Other Patient IDs +removals_.insert(DicomTag(0x0010, 0x1001)); // Other Patient Names +removals_.insert(DicomTag(0x0010, 0x1002)); // Other Patient IDs Sequence +removals_.insert(DicomTag(0x0010, 0x1005)); // Patient's Birth Name +removals_.insert(DicomTag(0x0010, 0x1010)); // Patient's Age +removals_.insert(DicomTag(0x0010, 0x1020)); // Patient's Size +removals_.insert(DicomTag(0x0010, 0x1030)); // Patient's Weight +removals_.insert(DicomTag(0x0010, 0x1040)); // Patient's Address +removals_.insert(DicomTag(0x0010, 0x1050)); // Insurance Plan Identification +removals_.insert(DicomTag(0x0010, 0x1060)); // Patient's Mother's Birth Name +removals_.insert(DicomTag(0x0010, 0x1080)); // Military Rank +removals_.insert(DicomTag(0x0010, 0x1081)); // Branch of Service +removals_.insert(DicomTag(0x0010, 0x1090)); // Medical Record Locator +removals_.insert(DicomTag(0x0010, 0x1100)); // Referenced Patient Photo Sequence +removals_.insert(DicomTag(0x0010, 0x2000)); // Medical Alerts +removals_.insert(DicomTag(0x0010, 0x2110)); // Allergies +removals_.insert(DicomTag(0x0010, 0x2150)); // Country of Residence +removals_.insert(DicomTag(0x0010, 0x2152)); // Region of Residence +removals_.insert(DicomTag(0x0010, 0x2154)); // Patient's Telephone Numbers +removals_.insert(DicomTag(0x0010, 0x2155)); // Patient's Telecom Information +removals_.insert(DicomTag(0x0010, 0x2160)); // Ethnic Group +removals_.insert(DicomTag(0x0010, 0x2180)); // Occupation +removals_.insert(DicomTag(0x0010, 0x21a0)); // Smoking Status +removals_.insert(DicomTag(0x0010, 0x21b0)); // Additional Patient History +removals_.insert(DicomTag(0x0010, 0x21c0)); // Pregnancy Status +removals_.insert(DicomTag(0x0010, 0x21d0)); // Last Menstrual Date +removals_.insert(DicomTag(0x0010, 0x21f0)); // Patient's Religious Preference +removals_.insert(DicomTag(0x0010, 0x2203)); /* X/Z */ // Patient's Sex Neutered +removals_.insert(DicomTag(0x0010, 0x2297)); // Responsible Person +removals_.insert(DicomTag(0x0010, 0x2299)); // Responsible Organization +removals_.insert(DicomTag(0x0010, 0x4000)); // Patient Comments +removals_.insert(DicomTag(0x0012, 0x0051)); // Clinical Trial Time Point Description +removals_.insert(DicomTag(0x0012, 0x0071)); // Clinical Trial Series ID +removals_.insert(DicomTag(0x0012, 0x0072)); // Clinical Trial Series Description +removals_.insert(DicomTag(0x0012, 0x0082)); // Clinical Trial Protocol Ethics Committee Approval Number +removals_.insert(DicomTag(0x0016, 0x002b)); // Maker Note +removals_.insert(DicomTag(0x0016, 0x004b)); // Device Setting Description +removals_.insert(DicomTag(0x0016, 0x004d)); // Camera Owner Name +removals_.insert(DicomTag(0x0016, 0x004e)); // Lens Specification +removals_.insert(DicomTag(0x0016, 0x004f)); // Lens Make +removals_.insert(DicomTag(0x0016, 0x0050)); // Lens Model +removals_.insert(DicomTag(0x0016, 0x0051)); // Lens Serial Number +removals_.insert(DicomTag(0x0016, 0x0070)); // GPS Version ID +removals_.insert(DicomTag(0x0016, 0x0071)); // GPS Latitude Ref +removals_.insert(DicomTag(0x0016, 0x0072)); // GPS Latitude +removals_.insert(DicomTag(0x0016, 0x0073)); // GPS Longitude Ref +removals_.insert(DicomTag(0x0016, 0x0074)); // GPS Longitude +removals_.insert(DicomTag(0x0016, 0x0075)); // GPS Altitude Ref +removals_.insert(DicomTag(0x0016, 0x0076)); // GPS Altitude +removals_.insert(DicomTag(0x0016, 0x0077)); // GPS Time Stamp +removals_.insert(DicomTag(0x0016, 0x0078)); // GPS Satellites +removals_.insert(DicomTag(0x0016, 0x0079)); // GPS Status +removals_.insert(DicomTag(0x0016, 0x007a)); // GPS Measure Mode +removals_.insert(DicomTag(0x0016, 0x007b)); // GPS DOP +removals_.insert(DicomTag(0x0016, 0x007c)); // GPS Speed Ref +removals_.insert(DicomTag(0x0016, 0x007d)); // GPS Speed +removals_.insert(DicomTag(0x0016, 0x007e)); // GPS Track Ref +removals_.insert(DicomTag(0x0016, 0x007f)); // GPS Track +removals_.insert(DicomTag(0x0016, 0x0080)); // GPS Img Direction Ref +removals_.insert(DicomTag(0x0016, 0x0081)); // GPS Img Direction +removals_.insert(DicomTag(0x0016, 0x0082)); // GPS Map Datum +removals_.insert(DicomTag(0x0016, 0x0083)); // GPS Dest Latitude Ref +removals_.insert(DicomTag(0x0016, 0x0084)); // GPS Dest Latitude +removals_.insert(DicomTag(0x0016, 0x0085)); // GPS Dest Longitude Ref +removals_.insert(DicomTag(0x0016, 0x0086)); // GPS Dest Longitude +removals_.insert(DicomTag(0x0016, 0x0087)); // GPS Dest Bearing Ref +removals_.insert(DicomTag(0x0016, 0x0088)); // GPS Dest Bearing +removals_.insert(DicomTag(0x0016, 0x0089)); // GPS Dest Distance Ref +removals_.insert(DicomTag(0x0016, 0x008a)); // GPS Dest Distance +removals_.insert(DicomTag(0x0016, 0x008b)); // GPS Processing Method +removals_.insert(DicomTag(0x0016, 0x008c)); // GPS Area Information +removals_.insert(DicomTag(0x0016, 0x008d)); // GPS Date Stamp +removals_.insert(DicomTag(0x0016, 0x008e)); // GPS Differential +removals_.insert(DicomTag(0x0018, 0x1000)); /* X/Z/D */ // Device Serial Number +removals_.insert(DicomTag(0x0018, 0x1002)); /* TODO UID */ // Device UID +removals_.insert(DicomTag(0x0018, 0x1004)); // Plate ID +removals_.insert(DicomTag(0x0018, 0x1005)); // Generator ID +removals_.insert(DicomTag(0x0018, 0x1007)); // Cassette ID +removals_.insert(DicomTag(0x0018, 0x1008)); // Gantry ID +removals_.insert(DicomTag(0x0018, 0x1009)); // Unique Device Identifier +removals_.insert(DicomTag(0x0018, 0x100a)); // UDI Sequence +removals_.insert(DicomTag(0x0018, 0x100b)); /* TODO UID */ // Manufacturer's Device Class UID +removals_.insert(DicomTag(0x0018, 0x1030)); /* X/D */ // Protocol Name +removals_.insert(DicomTag(0x0018, 0x1400)); /* X/D */ // Acquisition Device Processing Description +removals_.insert(DicomTag(0x0018, 0x2042)); /* TODO UID */ // Target UID +removals_.insert(DicomTag(0x0018, 0x4000)); // Acquisition Comments +removals_.insert(DicomTag(0x0018, 0x5011)); // Transducer Identification Sequence +removals_.insert(DicomTag(0x0018, 0x700a)); /* X/D */ // Detector ID +removals_.insert(DicomTag(0x0018, 0x9185)); // Respiratory Motion Compensation Technique Description +removals_.insert(DicomTag(0x0018, 0x9373)); // X-Ray Detector Label +removals_.insert(DicomTag(0x0018, 0x937b)); // Multi-energy Acquisition Description +removals_.insert(DicomTag(0x0018, 0x937f)); // Decomposition Description +removals_.insert(DicomTag(0x0018, 0x9424)); // Acquisition Protocol Description +removals_.insert(DicomTag(0x0018, 0x9516)); /* X/D */ // Start Acquisition DateTime +removals_.insert(DicomTag(0x0018, 0x9517)); /* X/D */ // End Acquisition DateTime +removals_.insert(DicomTag(0x0018, 0x9937)); // Requested Series Description +removals_.insert(DicomTag(0x0018, 0xa003)); // Contribution Description +removals_.insert(DicomTag(0x0020, 0x0200)); /* TODO UID */ // Synchronization Frame of Reference UID +removals_.insert(DicomTag(0x0020, 0x3401)); // Modifying Device ID +removals_.insert(DicomTag(0x0020, 0x3406)); // Modified Image Description +removals_.insert(DicomTag(0x0020, 0x4000)); // Image Comments +removals_.insert(DicomTag(0x0020, 0x9158)); // Frame Comments +removals_.insert(DicomTag(0x0020, 0x9161)); /* TODO UID */ // Concatenation UID +removals_.insert(DicomTag(0x0020, 0x9164)); /* TODO UID */ // Dimension Organization UID +removals_.insert(DicomTag(0x0028, 0x1199)); /* TODO UID */ // Palette Color Lookup Table UID +removals_.insert(DicomTag(0x0028, 0x1214)); /* TODO UID */ // Large Palette Color Lookup Table UID +removals_.insert(DicomTag(0x0028, 0x4000)); // Image Presentation Comments +removals_.insert(DicomTag(0x0032, 0x0012)); // Study ID Issuer +removals_.insert(DicomTag(0x0032, 0x1020)); // Scheduled Study Location +removals_.insert(DicomTag(0x0032, 0x1021)); // Scheduled Study Location AE Title +removals_.insert(DicomTag(0x0032, 0x1030)); // Reason for Study +removals_.insert(DicomTag(0x0032, 0x1032)); // Requesting Physician +removals_.insert(DicomTag(0x0032, 0x1033)); // Requesting Service +removals_.insert(DicomTag(0x0032, 0x1060)); /* X/Z */ // Requested Procedure Description +removals_.insert(DicomTag(0x0032, 0x1066)); // Reason for Visit +removals_.insert(DicomTag(0x0032, 0x1067)); // Reason for Visit Code Sequence +removals_.insert(DicomTag(0x0032, 0x1070)); // Requested Contrast Agent +removals_.insert(DicomTag(0x0032, 0x4000)); // Study Comments +removals_.insert(DicomTag(0x0038, 0x0004)); // Referenced Patient Alias Sequence +removals_.insert(DicomTag(0x0038, 0x0010)); // Admission ID +removals_.insert(DicomTag(0x0038, 0x0011)); // Issuer of Admission ID +removals_.insert(DicomTag(0x0038, 0x0014)); // Issuer of Admission ID Sequence +removals_.insert(DicomTag(0x0038, 0x001e)); // Scheduled Patient Institution Residence +removals_.insert(DicomTag(0x0038, 0x0020)); // Admitting Date +removals_.insert(DicomTag(0x0038, 0x0021)); // Admitting Time +removals_.insert(DicomTag(0x0038, 0x0040)); // Discharge Diagnosis Description +removals_.insert(DicomTag(0x0038, 0x0050)); // Special Needs +removals_.insert(DicomTag(0x0038, 0x0060)); // Service Episode ID +removals_.insert(DicomTag(0x0038, 0x0061)); // Issuer of Service Episode ID +removals_.insert(DicomTag(0x0038, 0x0062)); // Service Episode Description +removals_.insert(DicomTag(0x0038, 0x0064)); // Issuer of Service Episode ID Sequence +removals_.insert(DicomTag(0x0038, 0x0300)); // Current Patient Location +removals_.insert(DicomTag(0x0038, 0x0400)); // Patient's Institution Residence +removals_.insert(DicomTag(0x0038, 0x0500)); // Patient State +removals_.insert(DicomTag(0x0038, 0x4000)); // Visit Comments +removals_.insert(DicomTag(0x003a, 0x0310)); /* TODO UID */ // Multiplex Group UID +removals_.insert(DicomTag(0x0040, 0x0001)); // Scheduled Station AE Title +removals_.insert(DicomTag(0x0040, 0x0002)); // Scheduled Procedure Step Start Date +removals_.insert(DicomTag(0x0040, 0x0003)); // Scheduled Procedure Step Start Time +removals_.insert(DicomTag(0x0040, 0x0004)); // Scheduled Procedure Step End Date +removals_.insert(DicomTag(0x0040, 0x0005)); // Scheduled Procedure Step End Time +removals_.insert(DicomTag(0x0040, 0x0006)); // Scheduled Performing Physician's Name +removals_.insert(DicomTag(0x0040, 0x0007)); // Scheduled Procedure Step Description +removals_.insert(DicomTag(0x0040, 0x0009)); // Scheduled Procedure Step ID +removals_.insert(DicomTag(0x0040, 0x000b)); // Scheduled Performing Physician Identification Sequence +removals_.insert(DicomTag(0x0040, 0x0010)); // Scheduled Station Name +removals_.insert(DicomTag(0x0040, 0x0011)); // Scheduled Procedure Step Location +removals_.insert(DicomTag(0x0040, 0x0012)); // Pre-Medication +removals_.insert(DicomTag(0x0040, 0x0241)); // Performed Station AE Title +removals_.insert(DicomTag(0x0040, 0x0242)); // Performed Station Name +removals_.insert(DicomTag(0x0040, 0x0243)); // Performed Location +removals_.insert(DicomTag(0x0040, 0x0244)); // Performed Procedure Step Start Date +removals_.insert(DicomTag(0x0040, 0x0245)); // Performed Procedure Step Start Time +removals_.insert(DicomTag(0x0040, 0x0250)); // Performed Procedure Step End Date +removals_.insert(DicomTag(0x0040, 0x0251)); // Performed Procedure Step End Time +removals_.insert(DicomTag(0x0040, 0x0253)); // Performed Procedure Step ID +removals_.insert(DicomTag(0x0040, 0x0254)); // Performed Procedure Step Description +removals_.insert(DicomTag(0x0040, 0x0275)); // Request Attributes Sequence +removals_.insert(DicomTag(0x0040, 0x0280)); // Comments on the Performed Procedure Step +removals_.insert(DicomTag(0x0040, 0x0310)); // Comments on Radiation Dose +removals_.insert(DicomTag(0x0040, 0x050a)); // Specimen Accession Number +removals_.insert(DicomTag(0x0040, 0x051a)); // Container Description +removals_.insert(DicomTag(0x0040, 0x0554)); /* TODO UID */ // Specimen UID +removals_.insert(DicomTag(0x0040, 0x0555)); /* X/Z */ // Acquisition Context Sequence +removals_.insert(DicomTag(0x0040, 0x0600)); // Specimen Short Description +removals_.insert(DicomTag(0x0040, 0x0602)); // Specimen Detailed Description +removals_.insert(DicomTag(0x0040, 0x06fa)); // Slide Identifier +removals_.insert(DicomTag(0x0040, 0x1001)); // Requested Procedure ID +removals_.insert(DicomTag(0x0040, 0x1002)); // Reason for the Requested Procedure +removals_.insert(DicomTag(0x0040, 0x1004)); // Patient Transport Arrangements +removals_.insert(DicomTag(0x0040, 0x1005)); // Requested Procedure Location +removals_.insert(DicomTag(0x0040, 0x100a)); // Reason for Requested Procedure Code Sequence +removals_.insert(DicomTag(0x0040, 0x1010)); // Names of Intended Recipients of Results +removals_.insert(DicomTag(0x0040, 0x1011)); // Intended Recipients of Results Identification Sequence +removals_.insert(DicomTag(0x0040, 0x1102)); // Person's Address +removals_.insert(DicomTag(0x0040, 0x1103)); // Person's Telephone Numbers +removals_.insert(DicomTag(0x0040, 0x1104)); // Person's Telecom Information +removals_.insert(DicomTag(0x0040, 0x1400)); // Requested Procedure Comments +removals_.insert(DicomTag(0x0040, 0x2001)); // Reason for the Imaging Service Request +removals_.insert(DicomTag(0x0040, 0x2008)); // Order Entered By +removals_.insert(DicomTag(0x0040, 0x2009)); // Order Enterer's Location +removals_.insert(DicomTag(0x0040, 0x2010)); // Order Callback Phone Number +removals_.insert(DicomTag(0x0040, 0x2011)); // Order Callback Telecom Information +removals_.insert(DicomTag(0x0040, 0x2400)); // Imaging Service Request Comments +removals_.insert(DicomTag(0x0040, 0x3001)); // Confidentiality Constraint on Patient Data Description +removals_.insert(DicomTag(0x0040, 0x4005)); // Scheduled Procedure Step Start DateTime +removals_.insert(DicomTag(0x0040, 0x4008)); // Scheduled Procedure Step Expiration DateTime +removals_.insert(DicomTag(0x0040, 0x4010)); // Scheduled Procedure Step Modification DateTime +removals_.insert(DicomTag(0x0040, 0x4011)); // Expected Completion DateTime +removals_.insert(DicomTag(0x0040, 0x4023)); /* TODO UID */ // Referenced General Purpose Scheduled Procedure Step Transaction UID +removals_.insert(DicomTag(0x0040, 0x4025)); // Scheduled Station Name Code Sequence +removals_.insert(DicomTag(0x0040, 0x4027)); // Scheduled Station Geographic Location Code Sequence +removals_.insert(DicomTag(0x0040, 0x4028)); // Performed Station Name Code Sequence +removals_.insert(DicomTag(0x0040, 0x4030)); // Performed Station Geographic Location Code Sequence +removals_.insert(DicomTag(0x0040, 0x4034)); // Scheduled Human Performers Sequence +removals_.insert(DicomTag(0x0040, 0x4035)); // Actual Human Performers Sequence +removals_.insert(DicomTag(0x0040, 0x4036)); // Human Performer's Organization +removals_.insert(DicomTag(0x0040, 0x4037)); // Human Performer's Name +removals_.insert(DicomTag(0x0040, 0x4050)); // Performed Procedure Step Start DateTime +removals_.insert(DicomTag(0x0040, 0x4051)); // Performed Procedure Step End DateTime +removals_.insert(DicomTag(0x0040, 0x4052)); // Procedure Step Cancellation DateTime +removals_.insert(DicomTag(0x0040, 0xa078)); // Author Observer Sequence +removals_.insert(DicomTag(0x0040, 0xa07a)); // Participant Sequence +removals_.insert(DicomTag(0x0040, 0xa07c)); // Custodial Organization Sequence +removals_.insert(DicomTag(0x0040, 0xa124)); /* TODO UID */ // UID +removals_.insert(DicomTag(0x0040, 0xa171)); /* TODO UID */ // Observation UID +removals_.insert(DicomTag(0x0040, 0xa172)); /* TODO UID */ // Referenced Observation UID (Trial) +removals_.insert(DicomTag(0x0040, 0xa192)); // Observation Date (Trial) +removals_.insert(DicomTag(0x0040, 0xa193)); // Observation Time (Trial) +removals_.insert(DicomTag(0x0040, 0xa307)); // Current Observer (Trial) +removals_.insert(DicomTag(0x0040, 0xa352)); // Verbal Source (Trial) +removals_.insert(DicomTag(0x0040, 0xa353)); // Address (Trial) +removals_.insert(DicomTag(0x0040, 0xa354)); // Telephone Number (Trial) +removals_.insert(DicomTag(0x0040, 0xa358)); // Verbal Source Identifier Code Sequence (Trial) +removals_.insert(DicomTag(0x0040, 0xa402)); /* TODO UID */ // Observation Subject UID (Trial) +removals_.insert(DicomTag(0x0040, 0xdb0c)); /* TODO UID */ // Template Extension Organization UID +removals_.insert(DicomTag(0x0040, 0xdb0d)); /* TODO UID */ // Template Extension Creator UID +removals_.insert(DicomTag(0x0050, 0x001b)); // Container Component ID +removals_.insert(DicomTag(0x0050, 0x0020)); // Device Description +removals_.insert(DicomTag(0x0050, 0x0021)); // Long Device Description +removals_.insert(DicomTag(0x0062, 0x0021)); /* TODO UID */ // Tracking UID +removals_.insert(DicomTag(0x0070, 0x0086)); // Content Creator's Identification Code Sequence +removals_.insert(DicomTag(0x0070, 0x031a)); /* TODO UID */ // Fiducial UID +removals_.insert(DicomTag(0x0070, 0x1101)); /* TODO UID */ // Presentation Display Collection UID +removals_.insert(DicomTag(0x0070, 0x1102)); /* TODO UID */ // Presentation Sequence Collection UID +removals_.insert(DicomTag(0x0088, 0x0140)); /* TODO UID */ // Storage Media File-set UID +removals_.insert(DicomTag(0x0088, 0x0200)); // Icon Image Sequence +removals_.insert(DicomTag(0x0088, 0x0904)); // Topic Title +removals_.insert(DicomTag(0x0088, 0x0906)); // Topic Subject +removals_.insert(DicomTag(0x0088, 0x0910)); // Topic Author +removals_.insert(DicomTag(0x0088, 0x0912)); // Topic Keywords +removals_.insert(DicomTag(0x0400, 0x0100)); /* TODO UID */ // Digital Signature UID +removals_.insert(DicomTag(0x0400, 0x0402)); // Referenced Digital Signature Sequence +removals_.insert(DicomTag(0x0400, 0x0403)); // Referenced SOP Instance MAC Sequence +removals_.insert(DicomTag(0x0400, 0x0404)); // MAC +removals_.insert(DicomTag(0x0400, 0x0550)); // Modified Attributes Sequence +removals_.insert(DicomTag(0x0400, 0x0551)); // Nonconforming Modified Attributes Sequence +removals_.insert(DicomTag(0x0400, 0x0552)); // Nonconforming Data Element Value +removals_.insert(DicomTag(0x0400, 0x0561)); // Original Attributes Sequence +removals_.insert(DicomTag(0x0400, 0x0600)); // Instance Origin Status +removals_.insert(DicomTag(0x2030, 0x0020)); // Text String +removals_.insert(DicomTag(0x2200, 0x0002)); /* X/Z */ // Label Text +removals_.insert(DicomTag(0x2200, 0x0005)); /* X/Z */ // Barcode Value +removals_.insert(DicomTag(0x3006, 0x0004)); // Structure Set Name +removals_.insert(DicomTag(0x3006, 0x0006)); // Structure Set Description +removals_.insert(DicomTag(0x3006, 0x0028)); // ROI Description +removals_.insert(DicomTag(0x3006, 0x0038)); // ROI Generation Description +removals_.insert(DicomTag(0x3006, 0x0085)); // ROI Observation Label +removals_.insert(DicomTag(0x3006, 0x0088)); // ROI Observation Description +removals_.insert(DicomTag(0x3008, 0x0054)); /* X/D */ // First Treatment Date +removals_.insert(DicomTag(0x3008, 0x0056)); /* X/D */ // Most Recent Treatment Date +removals_.insert(DicomTag(0x3008, 0x0105)); /* X/Z */ // Source Serial Number +removals_.insert(DicomTag(0x3008, 0x0250)); /* X/D */ // Treatment Date +removals_.insert(DicomTag(0x3008, 0x0251)); /* X/D */ // Treatment Time +removals_.insert(DicomTag(0x300a, 0x0003)); // RT Plan Name +removals_.insert(DicomTag(0x300a, 0x0004)); // RT Plan Description +removals_.insert(DicomTag(0x300a, 0x0006)); /* X/D */ // RT Plan Date +removals_.insert(DicomTag(0x300a, 0x0007)); /* X/D */ // RT Plan Time +removals_.insert(DicomTag(0x300a, 0x000e)); // Prescription Description +removals_.insert(DicomTag(0x300a, 0x0013)); /* TODO UID */ // Dose Reference UID +removals_.insert(DicomTag(0x300a, 0x0016)); // Dose Reference Description +removals_.insert(DicomTag(0x300a, 0x0072)); // Fraction Group Description +removals_.insert(DicomTag(0x300a, 0x0083)); /* TODO UID */ // Referenced Dose Reference UID +removals_.insert(DicomTag(0x300a, 0x00b2)); /* X/Z */ // Treatment Machine Name +removals_.insert(DicomTag(0x300a, 0x00c3)); // Beam Description +removals_.insert(DicomTag(0x300a, 0x00dd)); // Bolus Description +removals_.insert(DicomTag(0x300a, 0x0196)); // Fixation Device Description +removals_.insert(DicomTag(0x300a, 0x01a6)); // Shielding Device Description +removals_.insert(DicomTag(0x300a, 0x01b2)); // Setup Technique Description +removals_.insert(DicomTag(0x300a, 0x0216)); // Source Manufacturer +removals_.insert(DicomTag(0x300a, 0x02eb)); // Compensator Description +removals_.insert(DicomTag(0x300a, 0x0609)); /* TODO UID */ // Treatment Position Group UID +removals_.insert(DicomTag(0x300a, 0x0650)); /* TODO UID */ // Patient Setup UID +removals_.insert(DicomTag(0x300a, 0x0676)); // Equipment Frame of Reference Description +removals_.insert(DicomTag(0x300a, 0x0700)); /* TODO UID */ // Treatment Session UID +removals_.insert(DicomTag(0x300c, 0x0113)); // Reason for Omission Description +removals_.insert(DicomTag(0x300e, 0x0008)); /* X/Z */ // Reviewer Name +removals_.insert(DicomTag(0x3010, 0x0006)); /* TODO UID */ // Conceptual Volume UID +removals_.insert(DicomTag(0x3010, 0x000b)); /* TODO UID */ // Referenced Conceptual Volume UID +removals_.insert(DicomTag(0x3010, 0x0013)); /* TODO UID */ // Constituent Conceptual Volume UID +removals_.insert(DicomTag(0x3010, 0x0015)); /* TODO UID */ // Source Conceptual Volume UID +removals_.insert(DicomTag(0x3010, 0x0031)); /* TODO UID */ // Referenced Fiducials UID +removals_.insert(DicomTag(0x3010, 0x0036)); // Entity Name +removals_.insert(DicomTag(0x3010, 0x0037)); // Entity Description +removals_.insert(DicomTag(0x3010, 0x003b)); /* TODO UID */ // RT Treatment Phase UID +removals_.insert(DicomTag(0x3010, 0x004c)); /* X/D */ // Intended Phase Start Date +removals_.insert(DicomTag(0x3010, 0x004d)); /* X/D */ // Intended Phase End Date +removals_.insert(DicomTag(0x3010, 0x0056)); /* X/D */ // RT Treatment Approach Label +removals_.insert(DicomTag(0x3010, 0x0061)); // Prior Treatment Dose Description +removals_.insert(DicomTag(0x3010, 0x006e)); /* TODO UID */ // Dosimetric Objective UID +removals_.insert(DicomTag(0x3010, 0x006f)); /* TODO UID */ // Referenced Dosimetric Objective UID +removals_.insert(DicomTag(0x4000, 0x0010)); // Arbitrary +removals_.insert(DicomTag(0x4000, 0x4000)); // Text Comments +removals_.insert(DicomTag(0x4008, 0x0042)); // Results ID Issuer +removals_.insert(DicomTag(0x4008, 0x0102)); // Interpretation Recorder +removals_.insert(DicomTag(0x4008, 0x010a)); // Interpretation Transcriber +removals_.insert(DicomTag(0x4008, 0x010b)); // Interpretation Text +removals_.insert(DicomTag(0x4008, 0x010c)); // Interpretation Author +removals_.insert(DicomTag(0x4008, 0x0111)); // Interpretation Approver Sequence +removals_.insert(DicomTag(0x4008, 0x0114)); // Physician Approving Interpretation +removals_.insert(DicomTag(0x4008, 0x0115)); // Interpretation Diagnosis Description +removals_.insert(DicomTag(0x4008, 0x0118)); // Results Distribution List Sequence +removals_.insert(DicomTag(0x4008, 0x0119)); // Distribution Name +removals_.insert(DicomTag(0x4008, 0x011a)); // Distribution Address +removals_.insert(DicomTag(0x4008, 0x0202)); // Interpretation ID Issuer +removals_.insert(DicomTag(0x4008, 0x0300)); // Impressions +removals_.insert(DicomTag(0x4008, 0x4000)); // Results Comments +removals_.insert(DicomTag(0xfffa, 0xfffa)); // Digital Signatures Sequence +removals_.insert(DicomTag(0xfffc, 0xfffc)); // Data Set Trailing Padding diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/Sources/Enumerations.cpp --- a/OrthancFramework/Sources/Enumerations.cpp Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancFramework/Sources/Enumerations.cpp Thu Jun 03 21:06:34 2021 +0200 @@ -874,6 +874,10 @@ return "2017c"; break; + case DicomVersion_2021b: + return "2021b"; + break; + default: throw OrthancException(ErrorCode_ParameterOutOfRange); } @@ -1581,6 +1585,10 @@ { return DicomVersion_2017c; } + else if (version == "2021b") + { + return DicomVersion_2021b; + } else { throw OrthancException(ErrorCode_ParameterOutOfRange, diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/Sources/Enumerations.h --- a/OrthancFramework/Sources/Enumerations.h Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancFramework/Sources/Enumerations.h Thu Jun 03 21:06:34 2021 +0200 @@ -609,7 +609,8 @@ enum DicomVersion { DicomVersion_2008, - DicomVersion_2017c + DicomVersion_2017c, + DicomVersion_2021b }; enum ModalityManufacturer diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancFramework/UnitTestsSources/FrameworkTests.cpp --- a/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Thu Jun 03 21:06:34 2021 +0200 @@ -746,6 +746,7 @@ ASSERT_EQ(DicomVersion_2008, StringToDicomVersion(EnumerationToString(DicomVersion_2008))); ASSERT_EQ(DicomVersion_2017c, StringToDicomVersion(EnumerationToString(DicomVersion_2017c))); + ASSERT_EQ(DicomVersion_2021b, StringToDicomVersion(EnumerationToString(DicomVersion_2021b))); for (int i = static_cast(ValueRepresentation_ApplicationEntity); i < static_cast(ValueRepresentation_NotSupported); i += 1) diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancServer/Resources/Configuration.json --- a/OrthancServer/Resources/Configuration.json Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancServer/Resources/Configuration.json Thu Jun 03 21:06:34 2021 +0200 @@ -770,9 +770,9 @@ // If "DeidentifyLogs" is true, this sets the DICOM standard to // follow for the deidentification/anonymization of the query - // contents. Possible values are "2008" and "2017c" (new in Orthanc - // 1.8.2) - "DeidentifyLogsDicomVersion" : "2017c", + // contents. Possible values are "2008", "2017c" and "2021b" (new + // in Orthanc 1.8.2) + "DeidentifyLogsDicomVersion" : "2021b", // Maximum length of the PDU (Protocol Data Unit) in the DICOM // network protocol, expressed in bytes. This value affects both diff -r caf963ee3de9 -r 521e39b3f2c0 OrthancServer/Sources/ServerContext.cpp --- a/OrthancServer/Sources/ServerContext.cpp Thu Jun 03 19:44:43 2021 +0200 +++ b/OrthancServer/Sources/ServerContext.cpp Thu Jun 03 21:06:34 2021 +0200 @@ -380,7 +380,7 @@ CLOG(INFO, DICOM) << "Deidentification of log contents (notably for DIMSE queries) is enabled"; DicomVersion version = StringToDicomVersion( - lock.GetConfiguration().GetStringParameter("DeidentifyLogsDicomVersion", "2017c")); + lock.GetConfiguration().GetStringParameter("DeidentifyLogsDicomVersion", "2021b")); CLOG(INFO, DICOM) << "Version of DICOM standard used for deidentification is " << EnumerationToString(version);