From 7795cd07390075ec601551607a555225ede21168 Mon Sep 17 00:00:00 2001 From: Saul Kravitz Date: Mon, 27 Jan 2025 15:05:55 -0500 Subject: [PATCH] clean up after merge --- projects/BFDR.Tests/BirthRecord_Should.cs | 32 ++++++------ projects/VitalRecord/VitalRecord_util.cs | 62 +++++++++++------------ 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/projects/BFDR.Tests/BirthRecord_Should.cs b/projects/BFDR.Tests/BirthRecord_Should.cs index cffea680..52bc14d8 100644 --- a/projects/BFDR.Tests/BirthRecord_Should.cs +++ b/projects/BFDR.Tests/BirthRecord_Should.cs @@ -1243,12 +1243,11 @@ public void TestFatherBirthDateSetters() public void TestComplexPartialDates() { // Tests source: https://github.com/HL7/vr-common-library/blob/fixPartialDateTime/input/pagecontent/usage.md#partial-dates-and-times - string pdtUrl = VR.ExtensionURL.PartialDateTime ; // "http://hl7.org/fhir/us/vr-common-library/StructureDefinition/Extension-partial-date-time-vr"; - BirthRecord br = new(); + BirthRecord br = new(); // 2023 br.BirthYear = 2023; Date fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - Extension pdt = fhirBirth.GetExtension(pdtUrl); + Extension pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Null(br.BirthMonth); Assert.Null(br.BirthDay); @@ -1266,7 +1265,7 @@ public void TestComplexPartialDates() br.BirthYear = 2023; br.BirthMonth = 12; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Equal(12, br.BirthMonth); Assert.Null(br.BirthDay); @@ -1285,7 +1284,7 @@ public void TestComplexPartialDates() br.BirthMonth = 12; br.BirthDay = 23; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Equal(12, br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1305,7 +1304,7 @@ public void TestComplexPartialDates() br.BirthDay = 23; br.BirthTime = "13:28:17-5:00"; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Equal(12, br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1324,8 +1323,8 @@ public void TestComplexPartialDates() br.BirthMonth = 12; br.BirthDay = 23; br.BirthTime = "-1"; - fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; // THIS NEEDS TO BE FIXED + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Equal(12, br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1351,7 +1350,7 @@ public void TestComplexPartialDates() br.BirthDay = 23; br.BirthTime = "18:28"; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(-1, br.BirthYear); Assert.Equal(12, br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1375,7 +1374,7 @@ public void TestComplexPartialDates() br.BirthDay = 23; br.BirthTime = "-1"; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Equal(-1, br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1401,7 +1400,7 @@ public void TestComplexPartialDates() br.BirthDay = 23; br.BirthTime = "-1"; fhirBirth = ((Patient) br.GetBundle().Entry.Find(entry => entry.Resource.Meta.Profile.Any(profile => profile == VR.ProfileURL.Child)).Resource).BirthDateElement; - pdt = fhirBirth.GetExtension(pdtUrl); + pdt = fhirBirth.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.BirthYear); Assert.Null(br.BirthMonth); Assert.Equal(23, br.BirthDay); @@ -1519,13 +1518,12 @@ public void ParseMotherRaceEthnicityIJEtoJson() [Fact] public void TestComplexPartialDateTimes() { - string pdtUrl = "http://hl7.org/fhir/us/vr-common-library/StructureDefinition/Extension-partial-date-time-vr"; BirthRecord br = new(); // 2023 br.DateOfLastLiveBirthYear = 2023; Observation observation = (Observation) br.GetBundle().Entry.Where(e => e.Resource is Observation dObs && VitalRecord.CodeableConceptToDict(dObs.Code)["code"] == "68499-3").FirstOrDefault().Resource; FhirDateTime dateToUse = ((FhirDateTime) observation.Value); - Extension pdt = dateToUse.GetExtension(pdtUrl); + Extension pdt = dateToUse.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.DateOfLastLiveBirthYear); Assert.Null(br.DateOfLastLiveBirthMonth); Assert.Null(br.DateOfLastLiveBirthDay); @@ -1541,7 +1539,7 @@ public void TestComplexPartialDateTimes() br.DateOfLastLiveBirthMonth = 12; observation = (Observation) br.GetBundle().Entry.Where(e => e.Resource is Observation dObs && VitalRecord.CodeableConceptToDict(dObs.Code)["code"] == "68499-3").FirstOrDefault().Resource; dateToUse = ((FhirDateTime) observation.Value); - pdt = dateToUse.GetExtension(pdtUrl); + pdt = dateToUse.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(2023, br.DateOfLastLiveBirthYear); Assert.Equal(12, br.DateOfLastLiveBirthMonth); Assert.Null(br.DateOfLastLiveBirthDay); @@ -1558,7 +1556,7 @@ public void TestComplexPartialDateTimes() br.DateOfLastLiveBirthMonth = 12; observation = (Observation) br.GetBundle().Entry.Where(e => e.Resource is Observation dObs && VitalRecord.CodeableConceptToDict(dObs.Code)["code"] == "68499-3").FirstOrDefault().Resource; dateToUse = ((FhirDateTime) observation.Value); - pdt = dateToUse.GetExtension(pdtUrl); + pdt = dateToUse.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Null(br.DateOfLastLiveBirthYear); Assert.Equal(12, br.DateOfLastLiveBirthMonth); Assert.Null(br.DateOfLastLiveBirthDay); @@ -1576,7 +1574,7 @@ public void TestComplexPartialDateTimes() br.DateOfLastLiveBirthMonth = 12; observation = (Observation) br.GetBundle().Entry.Where(e => e.Resource is Observation dObs && VitalRecord.CodeableConceptToDict(dObs.Code)["code"] == "68499-3").FirstOrDefault().Resource; dateToUse = ((FhirDateTime) observation.Value); - pdt = dateToUse.GetExtension(pdtUrl); + pdt = dateToUse.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(-1, br.DateOfLastLiveBirthYear); Assert.Equal(12, br.DateOfLastLiveBirthMonth); Assert.Null(br.DateOfLastLiveBirthDay); @@ -1594,7 +1592,7 @@ public void TestComplexPartialDateTimes() br.DateOfLastLiveBirthMonth = -1; observation = (Observation) br.GetBundle().Entry.Where(e => e.Resource is Observation dObs && VitalRecord.CodeableConceptToDict(dObs.Code)["code"] == "68499-3").FirstOrDefault().Resource; dateToUse = ((FhirDateTime) observation.Value); - pdt = dateToUse.GetExtension(pdtUrl); + pdt = dateToUse.GetExtension(VR.ExtensionURL.PartialDateTime); Assert.Equal(-1, br.DateOfLastLiveBirthYear); Assert.Equal(-1, br.DateOfLastLiveBirthMonth); Assert.Null(br.DateOfLastLiveBirthDay); diff --git a/projects/VitalRecord/VitalRecord_util.cs b/projects/VitalRecord/VitalRecord_util.cs index 750a49e1..8d93c9b7 100644 --- a/projects/VitalRecord/VitalRecord_util.cs +++ b/projects/VitalRecord/VitalRecord_util.cs @@ -545,23 +545,23 @@ private void ValidatePartialDates(Bundle bundle) { errors.Append("Missing 'Date-Day' of [" + partialDateExtension.Url + "] for resource [" + resource.Id + "].").AppendLine(); } - if (!partialDateSubExtensions.Contains(ExtensionURL.PartialDateMonthVR)) + if (!partialDateSubExtensions.Contains(VR.ExtensionURL.PartialDateMonthVR)) { errors.Append("Missing 'Date-Month' of [" + partialDateExtension.Url + "] for resource [" + resource.Id + "].").AppendLine(); } - if (!partialDateSubExtensions.Contains(ExtensionURL.PartialDateYearVR)) + if (!partialDateSubExtensions.Contains(VR.ExtensionURL.PartialDateYearVR)) { errors.Append("Missing 'Date-Year' of [" + partialDateExtension.Url + "] for resource [" + resource.Id + "].").AppendLine(); } - if (partialDateExtension.Url.Equals(ExtensionURL.PartialDateTime) && !partialDateSubExtensions.Contains(ExtensionURL.PartialDateTimeVR)) + if (partialDateExtension.Url.Equals(VR.ExtensionURL.PartialDateTime) && !partialDateSubExtensions.Contains(VR.ExtensionURL.PartialDateTimeVR)) { errors.Append("Missing 'Date-Time' of [" + partialDateExtension.Url + "] for resource [" + resource.Id + "].").AppendLine(); } // Validate that there are no extraneous invalid sub-extensions of the PartialDate/Time component. - partialDateSubExtensions.Remove(ExtensionURL.PartialDateDayVR); - partialDateSubExtensions.Remove(ExtensionURL.PartialDateMonthVR); - partialDateSubExtensions.Remove(ExtensionURL.PartialDateYearVR); - partialDateSubExtensions.Remove(ExtensionURL.PartialDateTimeVR); + partialDateSubExtensions.Remove(VR.ExtensionURL.PartialDateDayVR); + partialDateSubExtensions.Remove(VR.ExtensionURL.PartialDateMonthVR); + partialDateSubExtensions.Remove(VR.ExtensionURL.PartialDateYearVR); + partialDateSubExtensions.Remove(VR.ExtensionURL.PartialDateTimeVR); if (partialDateSubExtensions.Count() > 0) { errors.Append("[" + partialDateExtension.Url + "] component contains extra invalid fields [" + string.Join(", ", partialDateSubExtensions) + "] for resource [" + resource.Id + "].").AppendLine(); @@ -642,7 +642,7 @@ protected Extension NewUnkownPartialDateTimeExtension(bool includeTime = true) private Extension NewDataAbsentReasonPartialDateTimeExtension(string dataAbsentReason, bool includeTime = true) { Extension partialDateTime = new Extension(includeTime ? ExtensionURL.PartialDateTime : ExtensionURL.PartialDate, null); - Extension year = new Extension(ExtensionURL.PartialDateYearVR, null); + Extension year = new Extension(VR.ExtensionURL.PartialDateYearVR, null); year.Extension.Add(new Extension(OtherExtensionURL.DataAbsentReason, new Code(dataAbsentReason))); partialDateTime.Extension.Add(year); Extension month = new Extension(ExtensionURL.PartialDateMonthVR, null); @@ -760,17 +760,17 @@ protected void SetPartialTime(Extension partialDateTime, String value) { // DateTimeOffset.Parse will insert fake information where missing, // so TryParseExact on the partial date info first - if (partURL == ExtensionURL.PartialDateYearVR) + if (partURL == VR.ExtensionURL.PartialDateYearVR) { ParseDateElements(((FhirDateTime)value).Value, out int? year, out int? month, out int? day); return year; } - else if (partURL == ExtensionURL.PartialDateMonthVR) + else if (partURL == VR.ExtensionURL.PartialDateMonthVR) { ParseDateElements(((FhirDateTime)value).Value, out int? year, out int? month, out int? day); return month; } - else if (partURL == ExtensionURL.PartialDateDayVR) + else if (partURL == VR.ExtensionURL.PartialDateDayVR) { ParseDateElements(((FhirDateTime)value).Value, out int? year, out int? month, out int? day); return day; @@ -785,15 +785,15 @@ protected void SetPartialTime(Extension partialDateTime, String value) // Note: We can't just call ToDateTimeOffset() on the Date because want the date in whatever local time zone was provided // if (DateTimeOffset.TryParse(((Date)value).Value, out DateTimeOffset parsedDate)) ParseDateElements(((Date)value).Value, out int? year, out int? month, out int? day); - if (partURL == ExtensionURL.PartialDateYearVR) + if (partURL == VR.ExtensionURL.PartialDateYearVR) { return year; } - else if (partURL == ExtensionURL.PartialDateMonthVR) + else if (partURL == VR.ExtensionURL.PartialDateMonthVR) { return month; } - else if (partURL == ExtensionURL.PartialDateDayVR) + else if (partURL == VR.ExtensionURL.PartialDateDayVR) { return day; } @@ -941,29 +941,29 @@ protected static Date ConvertFhirDateTimeToDate(FhirDateTime dateTime) /// Sets the given value to the given partial date extension and creates any necessary missing extensions. protected void CreateAndSetPartialDate(Date dateElement, string partUrl, int? value) { - if (!dateElement.Extension.Any(ext => ext.Url == ExtensionURL.PartialDateTimeVR)) + if (!dateElement.Extension.Any(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR)) { - dateElement.SetExtension(ExtensionURL.PartialDateTimeVR, new Extension()); + dateElement.SetExtension(VR.ExtensionURL.PartialDateTimeVR, new Extension()); } - if (!dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR).Extension.Any(ext => ext.Url == partUrl)) + if (!dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR).Extension.Any(ext => ext.Url == partUrl)) { - dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR).SetExtension(partUrl, new Extension()); + dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR).SetExtension(partUrl, new Extension()); } - SetPartialDate(dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR), partUrl, value); + SetPartialDate(dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR), partUrl, value); } /// Sets the given value to the given partial date extension and creates any necessary missing extensions. protected void CreateAndSetPartialDate(FhirDateTime dateElement, string partUrl, int? value) { - if (!dateElement.Extension.Any(ext => ext.Url == ExtensionURL.PartialDateTimeVR)) + if (!dateElement.Extension.Any(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR)) { - dateElement.SetExtension(ExtensionURL.PartialDateTimeVR, new Extension()); + dateElement.SetExtension(VR.ExtensionURL.PartialDateTimeVR, new Extension()); } - if (!dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR).Extension.Any(ext => ext.Url == partUrl)) + if (!dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR).Extension.Any(ext => ext.Url == partUrl)) { - dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR).SetExtension(partUrl, new Extension()); + dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR).SetExtension(partUrl, new Extension()); } - SetPartialDate(dateElement.Extension.Find(ext => ext.Url == ExtensionURL.PartialDateTimeVR), partUrl, value); + SetPartialDate(dateElement.Extension.Find(ext => ext.Url == VR.ExtensionURL.PartialDateTimeVR), partUrl, value); } /// @@ -1053,7 +1053,7 @@ protected Date UpdateFhirDateTimeElement(Date dateElement, string value, bool us private void ExtractBestDateElements(PrimitiveType date, out int? year, out int? month, out int? day, out string time) { // Get the most valid date elements, giving priority to the parsed date elements. If the partial date is used, it will include any -1 values. If there are no valid date elements in any of the possible places, it will be null. ParseDateElements(((IValue)date).Value, out int? parsedYear, out int? parsedMonth, out int? parsedDay); - Extension pdtExt = date.GetExtension(VR.ExtensionURL.PartialDateTimeVR); + Extension pdtExt = date.GetExtension(VR.ExtensionURL.PartialDateTime); year = parsedYear ?? GetPartialDate(pdtExt, VR.ExtensionURL.PartialDateYearVR); month = parsedMonth ?? GetPartialDate(pdtExt, VR.ExtensionURL.PartialDateMonthVR); day = parsedDay ?? GetPartialDate(pdtExt, VR.ExtensionURL.PartialDateDayVR); @@ -1231,27 +1231,27 @@ private Date SetPartialDateExtensions(Date dateElement, int? yearValue, int? mon switch (val) { case -1: - dateElement.GetExtension(ExtensionURL.PartialDateTime).Extension.Add(BuildUnknownPartialDateTime(url)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).Extension.Add(BuildUnknownPartialDateTime(url)); break; case null: - dateElement.GetExtension(ExtensionURL.PartialDateTime).Extension.Add(BuildTempUnknownPartialDateTime(url)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).Extension.Add(BuildTempUnknownPartialDateTime(url)); break; default: - dateElement.GetExtension(ExtensionURL.PartialDateTime).SetExtension(url, new Integer(val)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).SetExtension(url, new Integer(val)); break; } } if (timeValue == "-1") { - dateElement.GetExtension(VR.ExtensionURL.PartialDateTimeVR).Extension.Add(BuildUnknownPartialDateTime(VR.ExtensionURL.PartialDateTimeVR)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).Extension.Add(BuildUnknownPartialDateTime(VR.ExtensionURL.PartialDateTimeVR)); } else if (timeValue == null) { - dateElement.GetExtension(VR.ExtensionURL.PartialDateTimeVR).Extension.Add(BuildTempUnknownPartialDateTime(VR.ExtensionURL.PartialDateTimeVR)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).Extension.Add(BuildTempUnknownPartialDateTime(VR.ExtensionURL.PartialDateTimeVR)); } else { - dateElement.GetExtension(VR.ExtensionURL.PartialDateTimeVR).SetExtension(VR.ExtensionURL.PartialDateTimeVR, new Time(timeValue)); + dateElement.GetExtension(VR.ExtensionURL.PartialDateTime).SetExtension(VR.ExtensionURL.PartialDateTimeVR, new Time(timeValue)); } return dateElement; }