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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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);
        }