Skip to content

Commit

Permalink
clean up after merge
Browse files Browse the repository at this point in the history
  • Loading branch information
saulakravitz committed Jan 27, 2025
1 parent ff50585 commit 7795cd0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 48 deletions.
32 changes: 15 additions & 17 deletions projects/BFDR.Tests/BirthRecord_Should.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down
62 changes: 31 additions & 31 deletions projects/VitalRecord/VitalRecord_util.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down Expand Up @@ -941,29 +941,29 @@ protected static Date ConvertFhirDateTimeToDate(FhirDateTime dateTime)
/// <summary>Sets the given value to the given partial date extension and creates any necessary missing extensions.</summary>
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);
}

/// <summary>Sets the given value to the given partial date extension and creates any necessary missing extensions.</summary>
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);
}

/// <summary>
Expand Down Expand Up @@ -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<string>)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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 7795cd0

Please sign in to comment.