Beispiel #1
0
        public static void TestRedactDateTime()
        {
            var tag1 = DicomTag.Instance​Creation​Date;
            var tag2 = DicomTag.Instance​Coercion​Date​Time;
            var tag3 = DicomTag.Calibration​Date;
            var tag4 = DicomTag.Referenced​Date​Time;

            var dataset = new DicomDataset
            {
                { tag1, "20210320" },
                { tag2, "20210320202020.20+0800" },
                { tag3, "20210320", "19110101", "20200101" },
                { tag4, "20210320202020.20+0800", "20210320202020.00654", "20210320202020+1400" },
            };

            var itemList = dataset.ToArray();

            var redactProcess = new RedactProcessor(new ParameterConfiguration()
            {
                EnablePartialDatesForRedact = true
            });

            foreach (var item in itemList)
            {
                redactProcess.Process(dataset, item);
            }
        }
Beispiel #2
0
        public void GivenAnAgeNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor = new RedactProcessor(true, enablePartialAgesForRedact: true, true, new List <string>());
            var             age       = new Age()
            {
                Value = 91
            };
            var node = ElementNode.FromElement(age.ToTypedElement()).Children("value").Cast <ElementNode>().FirstOrDefault();

            processor.Process(node);
            Assert.Equal("", node.Value.ToString());

            processor = new RedactProcessor(true, enablePartialAgesForRedact: false, true, new List <string>());
            node      = ElementNode.FromElement(age.ToTypedElement()).Children("value").Cast <ElementNode>().FirstOrDefault();
            processor.Process(node);
            Assert.Equal("", node.Value.ToString());

            processor = new RedactProcessor(true, enablePartialAgesForRedact: true, true, new List <string>());
            age       = new Age()
            {
                Value = 89
            };
            node = ElementNode.FromElement(age.ToTypedElement()).Children("value").Cast <ElementNode>().FirstOrDefault();
            processor.Process(node);
            Assert.Equal("89", node.Value.ToString());
        }
Beispiel #3
0
 private void InitializeProcessors(AnonymizerConfigurationManager configurationManager)
 {
     _processors[AnonymizerMethod.DateShift.ToString().ToUpperInvariant()]  = DateShiftProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.Redact.ToString().ToUpperInvariant()]     = RedactProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.CryptoHash.ToString().ToUpperInvariant()] = new CryptoHashProcessor(configurationManager.GetParameterConfiguration().CryptoHashKey);
     _processors[AnonymizerMethod.Keep.ToString().ToUpperInvariant()]       = new KeepProcessor();
 }
Beispiel #4
0
        public void GivenAPostalCodeNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor = new RedactProcessor(true, true, enablePartialZipCodesForRedact: true, restrictedZipCodeTabulationAreas: new List <string>()
            {
                "123"
            });
            var node = ElementNode.FromElement(new FhirString("12345").ToTypedElement());

            node.Name = "postalCode";
            processor.Process(node);
            Assert.Equal("00000", node.Value.ToString());

            node      = ElementNode.FromElement(new FhirString("54321").ToTypedElement());
            node.Name = "postalCode";
            processor.Process(node);
            Assert.Equal("54300", node.Value.ToString());

            processor = new RedactProcessor(true, true, enablePartialZipCodesForRedact: false, restrictedZipCodeTabulationAreas: new List <string>()
            {
            });
            node      = ElementNode.FromElement(new FhirString("54321").ToTypedElement());
            node.Name = "postalCode";
            processor.Process(node);
            Assert.Equal("00000", node.Value.ToString());
        }
Beispiel #5
0
        public void GivenAnOtherNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor = new RedactProcessor(true, true, true, new List <string>());
            var             node      = ElementNode.FromElement(new FhirString("TestString").ToTypedElement());

            node.Name = "dummy";
            processor.Process(node);
            Assert.Equal("", node.Value.ToString());
        }
 private void InitializeProcessors(AnonymizerConfigurationManager configurationManager)
 {
     _processors[AnonymizerMethod.DateShift.ToString().ToUpperInvariant()]  = DateShiftProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.Redact.ToString().ToUpperInvariant()]     = RedactProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.CryptoHash.ToString().ToUpperInvariant()] = new CryptoHashProcessor(configurationManager.GetParameterConfiguration().CryptoHashKey);
     _processors[AnonymizerMethod.Encrypt.ToString().ToUpperInvariant()]    = new EncryptProcessor(configurationManager.GetParameterConfiguration().EncryptKey);
     _processors[AnonymizerMethod.Substitute.ToString().ToUpperInvariant()] = new SubstituteProcessor();
     _processors[AnonymizerMethod.Perturb.ToString().ToUpperInvariant()]    = new PerturbProcessor();
     _processors[AnonymizerMethod.Keep.ToString().ToUpperInvariant()]       = new KeepProcessor();
     _processors[AnonymizerMethod.Generalize.ToString().ToUpperInvariant()] = new GeneralizeProcessor();
     _processors[AnonymizerMethod.Presidio.ToString().ToUpperInvariant()]   = new PresidioProcessor(
         PresidioApiHandler.Instantiate(configurationManager.GetParameterConfiguration()));
 }
        public void GivenADateNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor = new RedactProcessor(enablePartialDatesForRedact: true, true, true, new List <string>());
            Date            testDate  = new Date("2015-02");
            var             node      = ElementNode.FromElement(testDate.ToTypedElement());

            processor.Process(node);
            Assert.Equal("2015", node.Value.ToString());

            processor = new RedactProcessor(enablePartialDatesForRedact: false, true, true, new List <string>());
            node      = ElementNode.FromElement(testDate.ToTypedElement());
            processor.Process(node);
            Assert.Null(node.Value);
        }
Beispiel #8
0
        public void GivenADateTimeNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor    = new RedactProcessor(enablePartialDatesForRedact: true, true, true, new List <string>());
            FhirDateTime    testDateTime = new FhirDateTime("2015-02-07T13:28:17-05:00");
            var             node         = ElementNode.FromElement(testDateTime.ToTypedElement());

            processor.Process(node);
            Assert.Equal("2015", node.Value.ToString());

            processor = new RedactProcessor(enablePartialDatesForRedact: false, true, true, new List <string>());
            node      = ElementNode.FromElement(testDateTime.ToTypedElement());
            processor.Process(node);
            Assert.Equal("", node.Value.ToString());
        }
Beispiel #9
0
        public void GivenAInstantNode_WhenRedact_RedactedNodeShouldBeReturn()
        {
            RedactProcessor processor   = new RedactProcessor(enablePartialDatesForRedact: true, true, true, new List <string>());
            Instant         testInstant = new Instant(new DateTimeOffset(new DateTime(2015, 1, 1)));
            var             node        = ElementNode.FromElement(testInstant.ToTypedElement());

            processor.Process(node);
            Assert.Equal("2015", node.Value.ToString());

            processor = new RedactProcessor(enablePartialDatesForRedact: false, true, true, new List <string>());
            node      = ElementNode.FromElement(testInstant.ToTypedElement());
            processor.Process(node);
            Assert.Equal("", node.Value.ToString());
        }
 private void InitializeProcessors(AnonymizerConfigurationManager configurationManager)
 {
     _processors[AnonymizerMethod.DateShift.ToString().ToUpperInvariant()]  = DateShiftProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.Redact.ToString().ToUpperInvariant()]     = RedactProcessor.Create(configurationManager);
     _processors[AnonymizerMethod.CryptoHash.ToString().ToUpperInvariant()] = new CryptoHashProcessor(configurationManager.GetParameterConfiguration().CryptoHashKey);
     _processors[AnonymizerMethod.Encrypt.ToString().ToUpperInvariant()]    = new EncryptProcessor(configurationManager.GetParameterConfiguration().EncryptKey);
     _processors[AnonymizerMethod.Substitute.ToString().ToUpperInvariant()] = new SubstituteProcessor();
     _processors[AnonymizerMethod.Perturb.ToString().ToUpperInvariant()]    = new PerturbProcessor();
     _processors[AnonymizerMethod.Keep.ToString().ToUpperInvariant()]       = new KeepProcessor();
     _processors[AnonymizerMethod.Generalize.ToString().ToUpperInvariant()] = new GeneralizeProcessor();
     if (_customProcessorFactory != null)
     {
         InitializeCustomProcessors(configurationManager);
     }
 }
        private Dictionary <string, IAnonymizerProcessor> CreateTestProcessors()
        {
            KeepProcessor       keepProcessor       = new KeepProcessor();
            RedactProcessor     redactProcessor     = new RedactProcessor(false, false, false, null);
            DateShiftProcessor  dateShiftProcessor  = new DateShiftProcessor("123", "123", false);
            CryptoHashProcessor cryptoHashProcessor = new CryptoHashProcessor("123");
            Dictionary <string, IAnonymizerProcessor> processors = new Dictionary <string, IAnonymizerProcessor>()
            {
                { "KEEP", keepProcessor },
                { "REDACT", redactProcessor },
                { "DATESHIFT", dateShiftProcessor },
                { "CRYPTOHASH", cryptoHashProcessor }
            };

            return(processors);
        }
        private Dictionary <string, IAnonymizerProcessor> CreateTestProcessors()
        {
            KeepProcessor       keepProcessor       = new KeepProcessor();
            RedactProcessor     redactProcessor     = new RedactProcessor(false, false, false, null);
            DateShiftProcessor  dateShiftProcessor  = new DateShiftProcessor("123", "123", false);
            CryptoHashProcessor cryptoHashProcessor = new CryptoHashProcessor("123");
            EncryptProcessor    encryptProcessor    = new EncryptProcessor("1234567890123456");
            SubstituteProcessor substituteProcessor = new SubstituteProcessor();
            PerturbProcessor    perturbProcessor    = new PerturbProcessor();
            Dictionary <string, IAnonymizerProcessor> processors = new Dictionary <string, IAnonymizerProcessor>()
            {
                { "KEEP", keepProcessor },
                { "REDACT", redactProcessor },
                { "DATESHIFT", dateShiftProcessor },
                { "CRYPTOHASH", cryptoHashProcessor },
                { "ENCRYPT", encryptProcessor },
                { "SUBSTITUTE", substituteProcessor },
                { "PERTURB", perturbProcessor }
            };

            return(processors);
        }
Beispiel #13
0
        /*
         * static async System.Threading.Tasks.Task Main(string[] args)
         * {
         *  // TestRedactAge();
         *  // TestRedactDateTime();
         *  //TestPerturb();
         *
         *  string fileName = "image-00000.dcm";
         *  DicomFile dicomFile = await DicomFile.OpenAsync(fileName).ConfigureAwait(false);
         *
         *  //FilterByVR(dicomFile, "PN");
         *  var engine = new AnonimizerEngine();
         *  engine.Anonymize(dicomFile);
         *  dicomFile.Save("result.dcm");
         * }
         */

        public static void TestRedactAge()
        {
            var tag1 = DicomTag.PatientAge;
            var tag2 = DicomTag.SelectorASValue;

            var dataset = new DicomDataset
            {
                { tag1, "090Y" },
                { tag2, "010D", "010W", "100M", "010Y", "090Y" },
            };

            var itemList = dataset.ToArray();

            var redactProcess = new RedactProcessor(new ParameterConfiguration()
            {
                EnablePartialAgesForRedact = true
            });

            foreach (var item in itemList)
            {
                redactProcess.Process(dataset, item);
            }
        }
        public void GivenADataSetWithDTItem_WhenRedactWithPartialRedact_ValueWillBePartialRedact()
        {
            var tag1 = DicomTag.Instance​Coercion​Date​Time;
            var tag2 = DicomTag.Referenced​Date​Time;

            var dataset = new DicomDataset
            {
                { tag1, "20210320202020.20+0800" },
                { tag2, "20210320202020.20+0800", "20210320202020.00654", "20210320202020+1400", "19000320202020+1400" },
            };

            var itemList = dataset.ToArray();

            var newProcessor = new RedactProcessor(JObject.Parse("{\"EnablePartialDatesForRedact\" : \"true\"}"));

            foreach (var item in itemList)
            {
                newProcessor.Process(dataset, item);
            }

            Assert.Equal("20210101000000.000000+0800", dataset.GetDicomItem <DicomElement>(tag1).Get <string>());
            Assert.Equal(@"20210101000000.000000+0800\20210101120000.000000\20210101000000.000000+1400", dataset.GetDicomItem <DicomElement>(tag2).Get <string>());
        }
        public void GivenADataSetWithDAItem_WhenRedactWithPartialRedact_ValueWillBePartialRedact()
        {
            var tag1 = DicomTag.Instance​Creation​Date;
            var tag2 = DicomTag.Calibration​Date;

            var dataset = new DicomDataset
            {
                { tag1, "20210320" },
                { tag2, "20210320", "19110101", "20200101" },
            };

            var itemList = dataset.ToArray();

            var newProcessor = new RedactProcessor(JObject.Parse("{\"EnablePartialDatesForRedact\" : \"true\"}"));

            foreach (var item in itemList)
            {
                newProcessor.Process(dataset, item);
            }

            Assert.Equal("20210101", dataset.GetDicomItem <DicomElement>(tag1).Get <string>());
            Assert.Equal(@"20210101\20200101", dataset.GetDicomItem <DicomElement>(tag2).Get <string>());
        }
        public void GivenADataSetWithASItem_WhenRedactWithPartialRedact_ValueWillBePartialRedact()
        {
            var tag1 = DicomTag.PatientAge;
            var tag2 = DicomTag.SelectorASValue;

            var dataset = new DicomDataset
            {
                { tag1, "090Y" },
                { tag2, "010D", "010W", "100M", "010Y", "090Y" },
            };

            var itemList = dataset.ToArray();

            var newProcessor = new RedactProcessor(JObject.Parse("{\"EnablePartialAgesForRedact\" : \"true\"}"));

            foreach (var item in itemList)
            {
                newProcessor.Process(dataset, item);
            }

            Assert.Equal(string.Empty, dataset.GetDicomItem <DicomElement>(tag1).Get <string>());
            Assert.Equal(@"010D\010W\100M\010Y", dataset.GetDicomItem <DicomElement>(tag2).Get <string>());
        }
 public RedactProcessorUnitTests()
 {
     Processor = new RedactProcessor(JObject.Parse("{\"EnablePartialDatesForRedact\" : \"false\"}"));
 }
 private void InitializeProcessors(AnonymizerConfigurationManager configurationManager)
 {
     _processors[AnonymizerMethods.DateShift.ToString().ToUpperInvariant()] = DateShiftProcessor.Create(configurationManager);
     _processors[AnonymizerMethods.Redact.ToString().ToUpperInvariant()]    = RedactProcessor.Create(configurationManager);
     _processors[AnonymizerMethods.Keep.ToString().ToUpperInvariant()]      = new KeepProcessor();
 }