private static Observation VitalSignsResultToFhir(VitalSignsResultType vitalSignsResult) { var observation = new Observation(); observation.Category = new List <CodeableConcept> { FhirCategories.VitalSigns }; observation.Code = vitalSignsResult.Title.ToFhir(); observation.Status = ObservationStatus.Final; var referenceRangeValue = new Observation.ReferenceRangeComponent(); referenceRangeValue.Low = new Quantity((decimal)vitalSignsResult.ReferenceMinimum, vitalSignsResult.Unit.Text) as SimpleQuantity; referenceRangeValue.High = new Quantity((decimal)vitalSignsResult.ReferenceMaximum, vitalSignsResult.Unit.Text) as SimpleQuantity; observation.ReferenceRange.Add(referenceRangeValue); var quantity = new Quantity((decimal)vitalSignsResult.Value, vitalSignsResult.Unit.Text); var codableUnitExtension = new Extension { Url = HealthVaultExtensions.CodableUnit }; codableUnitExtension.Value = vitalSignsResult.Unit.ToFhir(); quantity.Extension.Add(codableUnitExtension); observation.Value = quantity; return(observation); }
public void WhenHealthVaultVitalSignsTransformedToFhir_ThenCodeAndContainedResourceEqual() { var vitalSignsResult = new VitalSignsResultType(new CodableValue("pls")); vitalSignsResult.Value = 70; vitalSignsResult.Unit = new CodableValue("bpm"); vitalSignsResult.ReferenceMinimum = 0; vitalSignsResult.ReferenceMaximum = 150; var vitalSigns = new VitalSigns(new HealthServiceDateTime()); vitalSigns.VitalSignsResults.Add(vitalSignsResult); var observation = vitalSigns.ToFhir() as Observation; Assert.IsNotNull(observation); Assert.AreEqual(HealthVaultVocabularies.VitalSigns, observation.Code); Assert.IsTrue(observation.Category.Contains(FhirCategories.VitalSigns)); //Assert.AreEqual(vitalSigns.When.ToLocalDateTime().ToDateTimeUnspecified(), observation.Effective); Assert.IsNotNull(observation.Contained); Assert.AreEqual(observation.Contained.Count, vitalSigns.VitalSignsResults.Count); var observationResult = observation.Contained[0] as Observation; var resultValue = observationResult.Value as Quantity; Assert.AreEqual(vitalSignsResult.Value.Value, (double)resultValue.Value.Value); //Assert.AreEqual(vitalSignsResult.ReferenceMinimum, observationResult.ReferenceRange[0].Low); //Assert.AreEqual(vitalSignsResult.ReferenceMaximum, observationResult.ReferenceRange[0].High); }
public void SetTemperatureOnHealthVault(double tempValue) { try { if (!_isProvisioned) { MessageBox.Show("Please provision application first"); return; } HealthClientAuthorizedConnection connection = HealthClientApplication.CreateAuthorizedConnection(PersonId); HealthRecordAccessor accessor = new HealthRecordAccessor(connection, RecordId); TemperatureMeasurement temperature = new TemperatureMeasurement(tempValue); VitalSigns vitalSign = new VitalSigns(); //generate random date DateTime startDate = new DateTime(2018, 1, 1); DateTime endDate = new DateTime(2018, 12, 30); TimeSpan timeSpan = endDate - startDate; var randomTest = new Random(); TimeSpan newSpan = new TimeSpan(0, randomTest.Next(0, (int)timeSpan.TotalMinutes), 0); DateTime newDate = startDate + newSpan; //set time now //vitalSign.When = new HealthServiceDateTime(DateTime.UtcNow); vitalSign.When = new HealthServiceDateTime(newDate); CodableValue codableValue = new CodableValue(); codableValue.Text = "celsius"; VitalSignsResultType vitalSignsResultType = new VitalSignsResultType(); vitalSignsResultType.Unit = codableValue; vitalSignsResultType.TextValue = "Temperature"; vitalSignsResultType.Title.Text = "Temperature"; vitalSignsResultType.Value = tempValue; vitalSign.VitalSignsResults.Add(vitalSignsResultType); accessor.NewItem(vitalSign); } catch (Exception ex) { throw; } }
internal static VitalSigns ToVitalSigns(this Observation observation) { var vitalSigns = observation.ToThingBase <VitalSigns>(); vitalSigns.When = ObservationToHealthVault.GetWhenFromEffective(observation.Effective); foreach (Observation vitalSignObservation in observation.Contained) { var vitalSignsResult = new VitalSignsResultType(); vitalSignsResult.Title = vitalSignObservation.Code.ToCodableValue(); if (vitalSignObservation.ReferenceRange?.Count != 0) { var referenceRangeValue = vitalSignObservation.ReferenceRange[0]; if (referenceRangeValue == null) { throw new ReferenceRangeNullException("Reference Range object must have a range"); } if (referenceRangeValue.Low != null) { vitalSignsResult.ReferenceMinimum = (double)referenceRangeValue.Low.Value; } if (referenceRangeValue.High != null) { vitalSignsResult.ReferenceMaximum = (double)referenceRangeValue.High.Value; } } var vitalSignValue = vitalSignObservation.Value as Quantity; if (vitalSignValue?.Value == null) { throw new ArgumentException("Value quantity must have a value."); } vitalSignsResult.Value = (int)vitalSignValue.Value.Value; var vitalSignsUnitExtension = vitalSignValue.GetExtension(HealthVaultExtensions.CodableUnit); vitalSignsResult.Unit = vitalSignsUnitExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.CodableUnit).ToCodableValue(); } return(vitalSigns); }