comparison OrthancServer/DicomModification.cpp @ 2313:d19e716b79fa issue-46-anonymization

switch to anonymization according to DICOM 2017c
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 Jul 2017 22:07:07 +0200
parents 78dcb3ddea9f
children c54c9523adf8
comparison
equal deleted inserted replaced
2312:8700dcaa02e5 2313:d19e716b79fa
42 42
43 43
44 static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2008 = 44 static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2008 =
45 "Orthanc " ORTHANC_VERSION " - PS 3.15-2008 Table E.1-1"; 45 "Orthanc " ORTHANC_VERSION " - PS 3.15-2008 Table E.1-1";
46 46
47 static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2011 =
48 "Orthanc " ORTHANC_VERSION " - PS 3.15-2011 Table E.1-1";
49
50 static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2017c = 47 static const std::string ORTHANC_DEIDENTIFICATION_METHOD_2017c =
51 "Orthanc " ORTHANC_VERSION " - PS 3.15-2017c Table E.1-1"; 48 "Orthanc " ORTHANC_VERSION " - PS 3.15-2017c Table E.1-1";
52 49
53 namespace Orthanc 50 namespace Orthanc
54 { 51 {
98 { 95 {
99 Replacements::iterator it = replacements_.find(DICOM_TAG_DEIDENTIFICATION_METHOD); 96 Replacements::iterator it = replacements_.find(DICOM_TAG_DEIDENTIFICATION_METHOD);
100 97
101 if (it != replacements_.end() && 98 if (it != replacements_.end() &&
102 (it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2008 || 99 (it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2008 ||
103 it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2011 ||
104 it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2017c)) 100 it->second->asString() == ORTHANC_DEIDENTIFICATION_METHOD_2017c))
105 { 101 {
106 delete it->second; 102 delete it->second;
107 replacements_.erase(it); 103 replacements_.erase(it);
108 } 104 }
358 // Set the DeidentificationMethod tag 354 // Set the DeidentificationMethod tag
359 ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2008); 355 ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2008);
360 } 356 }
361 357
362 358
359 #if 0
360 /**
361 * This is a manual implementation by Alain Mazy. Only kept for reference.
362 * https://bitbucket.org/sjodogne/orthanc/commits/c6defdc4c611fca2ab528ba2c6937a742e0329a8?at=issue-46-anonymization
363 **/
364
363 void DicomModification::SetupAnonymization2011() 365 void DicomModification::SetupAnonymization2011()
364 { 366 {
365 // This is Table E.1-1 from PS 3.15-2011 - DICOM Part 15: Security and System Management Profiles 367 // This is Table E.1-1 from PS 3.15-2011 - DICOM Part 15: Security and System Management Profiles
366 // https://raw.githubusercontent.com/jodogne/dicom-specification/master/2011/11_15pu.pdf 368 // https://raw.githubusercontent.com/jodogne/dicom-specification/master/2011/11_15pu.pdf
367 369
611 //removals_.insert(DicomTag(0x60xx, 0x3000)); // Overlay Data => TODO 613 //removals_.insert(DicomTag(0x60xx, 0x3000)); // Overlay Data => TODO
612 614
613 // Set the DeidentificationMethod tag 615 // Set the DeidentificationMethod tag
614 ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2011); 616 ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2011);
615 } 617 }
618 #endif
616 619
620
617 621
618 void DicomModification::SetupAnonymization2017c() 622 void DicomModification::SetupAnonymization2017c()
619 { 623 {
620 throw OrthancException(ErrorCode_NotImplemented); 624 /**
625 * This is Table E.1-1 from PS 3.15-2017c (DICOM Part 15: Security
626 * and System Management Profiles), "basic profile" column. It was
627 * generated automatically with the
628 * "../Resources/GenerateAnonymizationProfile.py" script.
629 * https://raw.githubusercontent.com/jodogne/dicom-specification/master/2017c/part15.pdf
630 **/
631
632 // TODO: (50xx,xxxx) with rule X // Curve Data
633 // TODO: (60xx,3000) with rule X // Overlay Data
634 // TODO: (60xx,4000) with rule X // Overlay Comments
635 // Tag (0x0008, 0x0018) is set in Apply() // SOP Instance UID
636 // Tag (0x0010, 0x0010) is set below (*) // Patient's Name
637 // Tag (0x0010, 0x0020) is set below (*) // Patient ID
638 // Tag (0x0020, 0x000d) is set in Apply() // Study Instance UID
639 // Tag (0x0020, 0x000e) is set in Apply() // Series Instance UID
640 clearings_.insert(DicomTag(0x0008, 0x0020)); // Study Date
641 clearings_.insert(DicomTag(0x0008, 0x0023)); /* Z/D */ // Content Date
642 clearings_.insert(DicomTag(0x0008, 0x0030)); // Study Time
643 clearings_.insert(DicomTag(0x0008, 0x0033)); /* Z/D */ // Content Time
644 clearings_.insert(DicomTag(0x0008, 0x0050)); // Accession Number
645 clearings_.insert(DicomTag(0x0008, 0x0090)); // Referring Physician's Name
646 clearings_.insert(DicomTag(0x0008, 0x009c)); // Consulting Physician's Name
647 clearings_.insert(DicomTag(0x0010, 0x0030)); // Patient's Birth Date
648 clearings_.insert(DicomTag(0x0010, 0x0040)); // Patient's Sex
649 clearings_.insert(DicomTag(0x0018, 0x0010)); /* Z/D */ // Contrast Bolus Agent
650 clearings_.insert(DicomTag(0x0020, 0x0010)); // Study ID
651 clearings_.insert(DicomTag(0x0040, 0x1101)); /* D */ // Person Identification Code Sequence
652 clearings_.insert(DicomTag(0x0040, 0x2016)); // Placer Order Number / Imaging Service Request
653 clearings_.insert(DicomTag(0x0040, 0x2017)); // Filler Order Number / Imaging Service Request
654 clearings_.insert(DicomTag(0x0040, 0xa073)); /* D */ // Verifying Observer Sequence
655 clearings_.insert(DicomTag(0x0040, 0xa075)); /* D */ // Verifying Observer Name
656 clearings_.insert(DicomTag(0x0040, 0xa088)); // Verifying Observer Identification Code Sequence
657 clearings_.insert(DicomTag(0x0040, 0xa123)); /* D */ // Person Name
658 clearings_.insert(DicomTag(0x0070, 0x0001)); /* D */ // Graphic Annotation Sequence
659 clearings_.insert(DicomTag(0x0070, 0x0084)); // Content Creator's Name
660 removals_.insert(DicomTag(0x0000, 0x1000)); // Affected SOP Instance UID
661 removals_.insert(DicomTag(0x0000, 0x1001)); /* TODO UID */ // Requested SOP Instance UID
662 removals_.insert(DicomTag(0x0002, 0x0003)); /* TODO UID */ // Media Storage SOP Instance UID
663 removals_.insert(DicomTag(0x0004, 0x1511)); /* TODO UID */ // Referenced SOP Instance UID in File
664 removals_.insert(DicomTag(0x0008, 0x0014)); /* TODO UID */ // Instance Creator UID
665 removals_.insert(DicomTag(0x0008, 0x0015)); // Instance Coercion DateTime
666 removals_.insert(DicomTag(0x0008, 0x0021)); /* X/D */ // Series Date
667 removals_.insert(DicomTag(0x0008, 0x0022)); /* X/Z */ // Acquisition Date
668 removals_.insert(DicomTag(0x0008, 0x0024)); // Overlay Date
669 removals_.insert(DicomTag(0x0008, 0x0025)); // Curve Date
670 removals_.insert(DicomTag(0x0008, 0x002a)); /* X/D */ // Acquisition DateTime
671 removals_.insert(DicomTag(0x0008, 0x0031)); /* X/D */ // Series Time
672 removals_.insert(DicomTag(0x0008, 0x0032)); /* X/Z */ // Acquisition Time
673 removals_.insert(DicomTag(0x0008, 0x0034)); // Overlay Time
674 removals_.insert(DicomTag(0x0008, 0x0035)); // Curve Time
675 removals_.insert(DicomTag(0x0008, 0x0058)); /* TODO UID */ // Failed SOP Instance UID List
676 removals_.insert(DicomTag(0x0008, 0x0080)); /* X/Z/D */ // Institution Name
677 removals_.insert(DicomTag(0x0008, 0x0081)); // Institution Address
678 removals_.insert(DicomTag(0x0008, 0x0082)); /* X/Z/D */ // Institution Code Sequence
679 removals_.insert(DicomTag(0x0008, 0x0092)); // Referring Physician's Address
680 removals_.insert(DicomTag(0x0008, 0x0094)); // Referring Physician's Telephone Numbers
681 removals_.insert(DicomTag(0x0008, 0x0096)); // Referring Physician Identification Sequence
682 removals_.insert(DicomTag(0x0008, 0x009d)); // Consulting Physician Identification Sequence
683 removals_.insert(DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC
684 removals_.insert(DicomTag(0x0008, 0x1010)); /* X/Z/D */ // Station Name
685 removals_.insert(DicomTag(0x0008, 0x1030)); // Study Description
686 removals_.insert(DicomTag(0x0008, 0x103e)); // Series Description
687 removals_.insert(DicomTag(0x0008, 0x1040)); // Institutional Department Name
688 removals_.insert(DicomTag(0x0008, 0x1048)); // Physician(s) of Record
689 removals_.insert(DicomTag(0x0008, 0x1049)); // Physician(s) of Record Identification Sequence
690 removals_.insert(DicomTag(0x0008, 0x1050)); // Performing Physicians' Name
691 removals_.insert(DicomTag(0x0008, 0x1052)); // Performing Physician Identification Sequence
692 removals_.insert(DicomTag(0x0008, 0x1060)); // Name of Physician(s) Reading Study
693 removals_.insert(DicomTag(0x0008, 0x1062)); // Physician(s) Reading Study Identification Sequence
694 removals_.insert(DicomTag(0x0008, 0x1070)); /* X/Z/D */ // Operators' Name
695 removals_.insert(DicomTag(0x0008, 0x1072)); /* X/D */ // Operators' Identification Sequence
696 removals_.insert(DicomTag(0x0008, 0x1080)); // Admitting Diagnoses Description
697 removals_.insert(DicomTag(0x0008, 0x1084)); // Admitting Diagnoses Code Sequence
698 removals_.insert(DicomTag(0x0008, 0x1110)); /* X/Z */ // Referenced Study Sequence
699 removals_.insert(DicomTag(0x0008, 0x1111)); /* X/Z/D */ // Referenced Performed Procedure Step Sequence
700 removals_.insert(DicomTag(0x0008, 0x1120)); // Referenced Patient Sequence
701 removals_.insert(DicomTag(0x0008, 0x1140)); /* X/Z/U* */ // Referenced Image Sequence
702 removals_.insert(DicomTag(0x0008, 0x1155)); /* TODO UID */ // Referenced SOP Instance UID
703 removals_.insert(DicomTag(0x0008, 0x1195)); /* TODO UID */ // Transaction UID
704 removals_.insert(DicomTag(0x0008, 0x2111)); // Derivation Description
705 removals_.insert(DicomTag(0x0008, 0x2112)); /* X/Z/U* */ // Source Image Sequence
706 removals_.insert(DicomTag(0x0008, 0x3010)); /* TODO UID */ // Irradiation Event UID
707 removals_.insert(DicomTag(0x0008, 0x4000)); // Identifying Comments
708 removals_.insert(DicomTag(0x0010, 0x0021)); // Issuer of Patient ID
709 removals_.insert(DicomTag(0x0010, 0x0032)); // Patient's Birth Time
710 removals_.insert(DicomTag(0x0010, 0x0050)); // Patient's Insurance Plan Code Sequence
711 removals_.insert(DicomTag(0x0010, 0x0101)); // Patient's Primary Language Code Sequence
712 removals_.insert(DicomTag(0x0010, 0x0102)); // Patient's Primary Language Modifier Code Sequence
713 removals_.insert(DicomTag(0x0010, 0x1000)); // Other Patient IDs
714 removals_.insert(DicomTag(0x0010, 0x1001)); // Other Patient Names
715 removals_.insert(DicomTag(0x0010, 0x1002)); // Other Patient IDs Sequence
716 removals_.insert(DicomTag(0x0010, 0x1005)); // Patient's Birth Name
717 removals_.insert(DicomTag(0x0010, 0x1010)); // Patient's Age
718 removals_.insert(DicomTag(0x0010, 0x1020)); // Patient's Size
719 removals_.insert(DicomTag(0x0010, 0x1030)); // Patient's Weight
720 removals_.insert(DicomTag(0x0010, 0x1040)); // Patient Address
721 removals_.insert(DicomTag(0x0010, 0x1050)); // Insurance Plan Identification
722 removals_.insert(DicomTag(0x0010, 0x1060)); // Patient's Mother's Birth Name
723 removals_.insert(DicomTag(0x0010, 0x1080)); // Military Rank
724 removals_.insert(DicomTag(0x0010, 0x1081)); // Branch of Service
725 removals_.insert(DicomTag(0x0010, 0x1090)); // Medical Record Locator
726 removals_.insert(DicomTag(0x0010, 0x1100)); // Referenced Patient Photo Sequence
727 removals_.insert(DicomTag(0x0010, 0x2000)); // Medical Alerts
728 removals_.insert(DicomTag(0x0010, 0x2110)); // Allergies
729 removals_.insert(DicomTag(0x0010, 0x2150)); // Country of Residence
730 removals_.insert(DicomTag(0x0010, 0x2152)); // Region of Residence
731 removals_.insert(DicomTag(0x0010, 0x2154)); // Patient's Telephone Numbers
732 removals_.insert(DicomTag(0x0010, 0x2155)); // Patient's Telecom Information
733 removals_.insert(DicomTag(0x0010, 0x2160)); // Ethnic Group
734 removals_.insert(DicomTag(0x0010, 0x2180)); // Occupation
735 removals_.insert(DicomTag(0x0010, 0x21a0)); // Smoking Status
736 removals_.insert(DicomTag(0x0010, 0x21b0)); // Additional Patient's History
737 removals_.insert(DicomTag(0x0010, 0x21c0)); // Pregnancy Status
738 removals_.insert(DicomTag(0x0010, 0x21d0)); // Last Menstrual Date
739 removals_.insert(DicomTag(0x0010, 0x21f0)); // Patient's Religious Preference
740 removals_.insert(DicomTag(0x0010, 0x2203)); /* X/Z */ // Patient Sex Neutered
741 removals_.insert(DicomTag(0x0010, 0x2297)); // Responsible Person
742 removals_.insert(DicomTag(0x0010, 0x2299)); // Responsible Organization
743 removals_.insert(DicomTag(0x0010, 0x4000)); // Patient Comments
744 removals_.insert(DicomTag(0x0018, 0x1000)); /* X/Z/D */ // Device Serial Number
745 removals_.insert(DicomTag(0x0018, 0x1002)); /* TODO UID */ // Device UID
746 removals_.insert(DicomTag(0x0018, 0x1004)); // Plate ID
747 removals_.insert(DicomTag(0x0018, 0x1005)); // Generator ID
748 removals_.insert(DicomTag(0x0018, 0x1007)); // Cassette ID
749 removals_.insert(DicomTag(0x0018, 0x1008)); // Gantry ID
750 removals_.insert(DicomTag(0x0018, 0x1030)); /* X/D */ // Protocol Name
751 removals_.insert(DicomTag(0x0018, 0x1400)); /* X/D */ // Acquisition Device Processing Description
752 removals_.insert(DicomTag(0x0018, 0x2042)); /* TODO UID */ // Target UID
753 removals_.insert(DicomTag(0x0018, 0x4000)); // Acquisition Comments
754 removals_.insert(DicomTag(0x0018, 0x700a)); /* X/D */ // Detector ID
755 removals_.insert(DicomTag(0x0018, 0x9424)); // Acquisition Protocol Description
756 removals_.insert(DicomTag(0x0018, 0x9516)); /* X/D */ // Start Acquisition DateTime
757 removals_.insert(DicomTag(0x0018, 0x9517)); /* X/D */ // End Acquisition DateTime
758 removals_.insert(DicomTag(0x0018, 0xa003)); // Contribution Description
759 removals_.insert(DicomTag(0x0020, 0x0052)); /* TODO UID */ // Frame of Reference UID
760 removals_.insert(DicomTag(0x0020, 0x0200)); /* TODO UID */ // Synchronization Frame of Reference UID
761 removals_.insert(DicomTag(0x0020, 0x3401)); // Modifying Device ID
762 removals_.insert(DicomTag(0x0020, 0x3404)); // Modifying Device Manufacturer
763 removals_.insert(DicomTag(0x0020, 0x3406)); // Modified Image Description
764 removals_.insert(DicomTag(0x0020, 0x4000)); // Image Comments
765 removals_.insert(DicomTag(0x0020, 0x9158)); // Frame Comments
766 removals_.insert(DicomTag(0x0020, 0x9161)); /* TODO UID */ // Concatenation UID
767 removals_.insert(DicomTag(0x0020, 0x9164)); /* TODO UID */ // Dimension Organization UID
768 removals_.insert(DicomTag(0x0028, 0x1199)); /* TODO UID */ // Palette Color Lookup Table UID
769 removals_.insert(DicomTag(0x0028, 0x1214)); /* TODO UID */ // Large Palette Color Lookup Table UID
770 removals_.insert(DicomTag(0x0028, 0x4000)); // Image Presentation Comments
771 removals_.insert(DicomTag(0x0032, 0x0012)); // Study ID Issuer
772 removals_.insert(DicomTag(0x0032, 0x1020)); // Scheduled Study Location
773 removals_.insert(DicomTag(0x0032, 0x1021)); // Scheduled Study Location AE Title
774 removals_.insert(DicomTag(0x0032, 0x1030)); // Reason for Study
775 removals_.insert(DicomTag(0x0032, 0x1032)); // Requesting Physician
776 removals_.insert(DicomTag(0x0032, 0x1033)); // Requesting Service
777 removals_.insert(DicomTag(0x0032, 0x1060)); /* X/Z */ // Requested Procedure Description
778 removals_.insert(DicomTag(0x0032, 0x1070)); // Requested Contrast Agent
779 removals_.insert(DicomTag(0x0032, 0x4000)); // Study Comments
780 removals_.insert(DicomTag(0x0038, 0x0004)); // Referenced Patient Alias Sequence
781 removals_.insert(DicomTag(0x0038, 0x0010)); // Admission ID
782 removals_.insert(DicomTag(0x0038, 0x0011)); // Issuer of Admission ID
783 removals_.insert(DicomTag(0x0038, 0x001e)); // Scheduled Patient Institution Residence
784 removals_.insert(DicomTag(0x0038, 0x0020)); // Admitting Date
785 removals_.insert(DicomTag(0x0038, 0x0021)); // Admitting Time
786 removals_.insert(DicomTag(0x0038, 0x0040)); // Discharge Diagnosis Description
787 removals_.insert(DicomTag(0x0038, 0x0050)); // Special Needs
788 removals_.insert(DicomTag(0x0038, 0x0060)); // Service Episode ID
789 removals_.insert(DicomTag(0x0038, 0x0061)); // Issuer of Service Episode ID
790 removals_.insert(DicomTag(0x0038, 0x0062)); // Service Episode Description
791 removals_.insert(DicomTag(0x0038, 0x0300)); // Current Patient Location
792 removals_.insert(DicomTag(0x0038, 0x0400)); // Patient's Institution Residence
793 removals_.insert(DicomTag(0x0038, 0x0500)); // Patient State
794 removals_.insert(DicomTag(0x0038, 0x4000)); // Visit Comments
795 removals_.insert(DicomTag(0x0040, 0x0001)); // Scheduled Station AE Title
796 removals_.insert(DicomTag(0x0040, 0x0002)); // Scheduled Procedure Step Start Date
797 removals_.insert(DicomTag(0x0040, 0x0003)); // Scheduled Procedure Step Start Time
798 removals_.insert(DicomTag(0x0040, 0x0004)); // Scheduled Procedure Step End Date
799 removals_.insert(DicomTag(0x0040, 0x0005)); // Scheduled Procedure Step End Time
800 removals_.insert(DicomTag(0x0040, 0x0006)); // Scheduled Performing Physician Name
801 removals_.insert(DicomTag(0x0040, 0x0007)); // Scheduled Procedure Step Description
802 removals_.insert(DicomTag(0x0040, 0x000b)); // Scheduled Performing Physician Identification Sequence
803 removals_.insert(DicomTag(0x0040, 0x0010)); // Scheduled Station Name
804 removals_.insert(DicomTag(0x0040, 0x0011)); // Scheduled Procedure Step Location
805 removals_.insert(DicomTag(0x0040, 0x0012)); // Pre-Medication
806 removals_.insert(DicomTag(0x0040, 0x0241)); // Performed Station AE Title
807 removals_.insert(DicomTag(0x0040, 0x0242)); // Performed Station Name
808 removals_.insert(DicomTag(0x0040, 0x0243)); // Performed Location
809 removals_.insert(DicomTag(0x0040, 0x0244)); // Performed Procedure Step Start Date
810 removals_.insert(DicomTag(0x0040, 0x0245)); // Performed Procedure Step Start Time
811 removals_.insert(DicomTag(0x0040, 0x0250)); // Performed Procedure Step End Date
812 removals_.insert(DicomTag(0x0040, 0x0251)); // Performed Procedure Step End Time
813 removals_.insert(DicomTag(0x0040, 0x0253)); // Performed Procedure Step ID
814 removals_.insert(DicomTag(0x0040, 0x0254)); // Performed Procedure Step Description
815 removals_.insert(DicomTag(0x0040, 0x0275)); // Request Attributes Sequence
816 removals_.insert(DicomTag(0x0040, 0x0280)); // Comments on the Performed Procedure Step
817 removals_.insert(DicomTag(0x0040, 0x0555)); // Acquisition Context Sequence
818 removals_.insert(DicomTag(0x0040, 0x1001)); // Requested Procedure ID
819 removals_.insert(DicomTag(0x0040, 0x1004)); // Patient Transport Arrangements
820 removals_.insert(DicomTag(0x0040, 0x1005)); // Requested Procedure Location
821 removals_.insert(DicomTag(0x0040, 0x1010)); // Names of Intended Recipient of Results
822 removals_.insert(DicomTag(0x0040, 0x1011)); // Intended Recipients of Results Identification Sequence
823 removals_.insert(DicomTag(0x0040, 0x1102)); // Person Address
824 removals_.insert(DicomTag(0x0040, 0x1103)); // Person's Telephone Numbers
825 removals_.insert(DicomTag(0x0040, 0x1104)); // Person's Telecom Information
826 removals_.insert(DicomTag(0x0040, 0x1400)); // Requested Procedure Comments
827 removals_.insert(DicomTag(0x0040, 0x2001)); // Reason for the Imaging Service Request
828 removals_.insert(DicomTag(0x0040, 0x2008)); // Order Entered By
829 removals_.insert(DicomTag(0x0040, 0x2009)); // Order Enterer Location
830 removals_.insert(DicomTag(0x0040, 0x2010)); // Order Callback Phone Number
831 removals_.insert(DicomTag(0x0040, 0x2011)); // Order Callback Telecom Information
832 removals_.insert(DicomTag(0x0040, 0x2400)); // Imaging Service Request Comments
833 removals_.insert(DicomTag(0x0040, 0x3001)); // Confidentiality Constraint on Patient Data Description
834 removals_.insert(DicomTag(0x0040, 0x4005)); // Scheduled Procedure Step Start DateTime
835 removals_.insert(DicomTag(0x0040, 0x4010)); // Scheduled Procedure Step Modification DateTime
836 removals_.insert(DicomTag(0x0040, 0x4011)); // Expected Completion DateTime
837 removals_.insert(DicomTag(0x0040, 0x4023)); /* TODO UID */ // Referenced General Purpose Scheduled Procedure Step Transaction UID
838 removals_.insert(DicomTag(0x0040, 0x4025)); // Scheduled Station Name Code Sequence
839 removals_.insert(DicomTag(0x0040, 0x4027)); // Scheduled Station Geographic Location Code Sequence
840 removals_.insert(DicomTag(0x0040, 0x4028)); // Performed Station Name Code Sequence
841 removals_.insert(DicomTag(0x0040, 0x4030)); // Performed Station Geographic Location Code Sequence
842 removals_.insert(DicomTag(0x0040, 0x4034)); // Scheduled Human Performers Sequence
843 removals_.insert(DicomTag(0x0040, 0x4035)); // Actual Human Performers Sequence
844 removals_.insert(DicomTag(0x0040, 0x4036)); // Human Performers Organization
845 removals_.insert(DicomTag(0x0040, 0x4037)); // Human Performers Name
846 removals_.insert(DicomTag(0x0040, 0x4050)); // Performed Procedure Step Start DateTime
847 removals_.insert(DicomTag(0x0040, 0x4051)); // Performed Procedure Step End DateTime
848 removals_.insert(DicomTag(0x0040, 0x4052)); // Procedure Step Cancellation DateTime
849 removals_.insert(DicomTag(0x0040, 0xa027)); // Verifying Organization
850 removals_.insert(DicomTag(0x0040, 0xa078)); // Author Observer Sequence
851 removals_.insert(DicomTag(0x0040, 0xa07a)); // Participant Sequence
852 removals_.insert(DicomTag(0x0040, 0xa07c)); // Custodial Organization Sequence
853 removals_.insert(DicomTag(0x0040, 0xa124)); /* TODO UID */ // UID
854 removals_.insert(DicomTag(0x0040, 0xa171)); /* TODO UID */ // Observation UID
855 removals_.insert(DicomTag(0x0040, 0xa172)); /* TODO UID */ // Referenced Observation UID (Trial)
856 removals_.insert(DicomTag(0x0040, 0xa192)); // Observation Date (Trial)
857 removals_.insert(DicomTag(0x0040, 0xa193)); // Observation Time (Trial)
858 removals_.insert(DicomTag(0x0040, 0xa307)); // Current Observer (Trial)
859 removals_.insert(DicomTag(0x0040, 0xa352)); // Verbal Source (Trial)
860 removals_.insert(DicomTag(0x0040, 0xa353)); // Address (Trial)
861 removals_.insert(DicomTag(0x0040, 0xa354)); // Telephone Number (Trial)
862 removals_.insert(DicomTag(0x0040, 0xa358)); // Verbal Source Identifier Code Sequence (Trial)
863 removals_.insert(DicomTag(0x0040, 0xa402)); /* TODO UID */ // Observation Subject UID (Trial)
864 removals_.insert(DicomTag(0x0040, 0xa730)); // Content Sequence
865 removals_.insert(DicomTag(0x0040, 0xdb0c)); /* TODO UID */ // Template Extension Organization UID
866 removals_.insert(DicomTag(0x0040, 0xdb0d)); /* TODO UID */ // Template Extension Creator UID
867 removals_.insert(DicomTag(0x0062, 0x0021)); /* TODO UID */ // Tracking UID
868 removals_.insert(DicomTag(0x0070, 0x0086)); // Content Creator's Identification Code Sequence
869 removals_.insert(DicomTag(0x0070, 0x031a)); /* TODO UID */ // Fiducial UID
870 removals_.insert(DicomTag(0x0070, 0x1101)); /* TODO UID */ // Presentation Display Collection UID
871 removals_.insert(DicomTag(0x0070, 0x1102)); /* TODO UID */ // Presentation Sequence Collection UID
872 removals_.insert(DicomTag(0x0088, 0x0140)); /* TODO UID */ // Storage Media File-set UID
873 removals_.insert(DicomTag(0x0088, 0x0200)); // Icon Image Sequence(see Note 12)
874 removals_.insert(DicomTag(0x0088, 0x0904)); // Topic Title
875 removals_.insert(DicomTag(0x0088, 0x0906)); // Topic Subject
876 removals_.insert(DicomTag(0x0088, 0x0910)); // Topic Author
877 removals_.insert(DicomTag(0x0088, 0x0912)); // Topic Keywords
878 removals_.insert(DicomTag(0x0400, 0x0100)); // Digital Signature UID
879 removals_.insert(DicomTag(0x0400, 0x0402)); // Referenced Digital Signature Sequence
880 removals_.insert(DicomTag(0x0400, 0x0403)); // Referenced SOP Instance MAC Sequence
881 removals_.insert(DicomTag(0x0400, 0x0404)); // MAC
882 removals_.insert(DicomTag(0x0400, 0x0550)); // Modified Attributes Sequence
883 removals_.insert(DicomTag(0x0400, 0x0561)); // Original Attributes Sequence
884 removals_.insert(DicomTag(0x2030, 0x0020)); // Text String
885 removals_.insert(DicomTag(0x3006, 0x0024)); /* TODO UID */ // Referenced Frame of Reference UID
886 removals_.insert(DicomTag(0x3006, 0x00c2)); /* TODO UID */ // Related Frame of Reference UID
887 removals_.insert(DicomTag(0x3008, 0x0105)); // Source Serial Number
888 removals_.insert(DicomTag(0x300a, 0x0013)); /* TODO UID */ // Dose Reference UID
889 removals_.insert(DicomTag(0x300c, 0x0113)); // Reason for Omission Description
890 removals_.insert(DicomTag(0x300e, 0x0008)); /* X/Z */ // Reviewer Name
891 removals_.insert(DicomTag(0x4000, 0x0010)); // Arbitrary
892 removals_.insert(DicomTag(0x4000, 0x4000)); // Text Comments
893 removals_.insert(DicomTag(0x4008, 0x0042)); // Results ID Issuer
894 removals_.insert(DicomTag(0x4008, 0x0102)); // Interpretation Recorder
895 removals_.insert(DicomTag(0x4008, 0x010a)); // Interpretation Transcriber
896 removals_.insert(DicomTag(0x4008, 0x010b)); // Interpretation Text
897 removals_.insert(DicomTag(0x4008, 0x010c)); // Interpretation Author
898 removals_.insert(DicomTag(0x4008, 0x0111)); // Interpretation Approver Sequence
899 removals_.insert(DicomTag(0x4008, 0x0114)); // Physician Approving Interpretation
900 removals_.insert(DicomTag(0x4008, 0x0115)); // Interpretation Diagnosis Description
901 removals_.insert(DicomTag(0x4008, 0x0118)); // Results Distribution List Sequence
902 removals_.insert(DicomTag(0x4008, 0x0119)); // Distribution Name
903 removals_.insert(DicomTag(0x4008, 0x011a)); // Distribution Address
904 removals_.insert(DicomTag(0x4008, 0x0202)); // Interpretation ID Issuer
905 removals_.insert(DicomTag(0x4008, 0x0300)); // Impressions
906 removals_.insert(DicomTag(0x4008, 0x4000)); // Results Comments
907 removals_.insert(DicomTag(0xfffa, 0xfffa)); // Digital Signatures Sequence
908 removals_.insert(DicomTag(0xfffc, 0xfffc)); // Data Set Trailing Padding
909
910 // Set the DeidentificationMethod tag
911 ReplaceInternal(DICOM_TAG_DEIDENTIFICATION_METHOD, ORTHANC_DEIDENTIFICATION_METHOD_2017c);
621 } 912 }
622 913
623 914
624 void DicomModification::SetupAnonymization(DicomVersion version) 915 void DicomModification::SetupAnonymization(DicomVersion version)
625 { 916 {
633 924
634 switch (version) 925 switch (version)
635 { 926 {
636 case DicomVersion_2008: 927 case DicomVersion_2008:
637 SetupAnonymization2008(); 928 SetupAnonymization2008();
638 break;
639
640 case DicomVersion_2011:
641 SetupAnonymization2011();
642 break; 929 break;
643 930
644 case DicomVersion_2017c: 931 case DicomVersion_2017c:
645 SetupAnonymization2017c(); 932 SetupAnonymization2017c();
646 break; 933 break;