예제 #1
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());
        }
예제 #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());
        }
예제 #3
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);
            }
        }
예제 #4
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());
        }
예제 #5
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());
        }
예제 #6
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());
        }
        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);
        }
        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 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 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>());
        }
예제 #11
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);
            }
        }