Mercurial > hg > orthanc
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; |