Example #1
0
        public void TestFhirParser(Parameters parameters)
        {
            var json   = FhirSerializer.SerializeToJson(parameters);
            var parsed = (Parameters)FhirParser.ParseResourceFromJson(json);

            Assert.That(parameters.IsExactly(parsed));
        }
        public void WhenHealthVaultBloodGlucoseTransformedToFhir_ThenCodeAndValuesEqual()
        {
            var when         = new HealthServiceDateTime();
            var bloodGlucose = new BloodGlucose
            {
                When  = when,
                Value = new BloodGlucoseMeasurement(101),
                GlucoseMeasurementType      = new CodableValue("Whole blood", "wb", "glucose-meaurement-type", "wc", "1"),
                OutsideOperatingTemperature = true,
                IsControlTest      = false,
                ReadingNormalcy    = Normalcy.Normal,
                MeasurementContext = new CodableValue("Before meal", "BeforeMeal", "glucose-measurement-context", "wc", "1"),
            };

            var observation = bloodGlucose.ToFhir();

            var json = FhirSerializer.SerializeToJson(observation);

            Assert.IsNotNull(observation);
            Assert.AreEqual(101, ((Quantity)observation.Value).Value);
            Assert.AreEqual("Whole blood", observation.Method.Text);

            var bloodGlucoseExtension = observation.GetExtension(HealthVaultExtensions.BloodGlucose);

            Assert.AreEqual("Before meal", bloodGlucoseExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.BloodGlucoseMeasurementContext).Text);
            Assert.AreEqual(true, bloodGlucoseExtension.GetBoolExtension(HealthVaultExtensions.OutsideOperatingTemperatureExtensionName));
            Assert.AreEqual(false, bloodGlucoseExtension.GetBoolExtension(HealthVaultExtensions.IsControlTestExtensionName));
            Assert.AreEqual("Normal", bloodGlucoseExtension.GetStringExtension(HealthVaultExtensions.ReadingNormalcyExtensionName));
        }
Example #3
0
        public void Test()
        {
            var parameters = new Parameters();

            "source-code".Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "SourceCode",
                Value = new FhirString(x)
            }));

            "target-code".Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "TargetCode",
                Value = new FhirString(x)
            }));

            "barcode".Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "Barcode",
                Value = new FhirString(x)
            }));

            var jsonToSend = FhirSerializer.SerializeToJson(parameters);

            File.WriteAllText("out.json", jsonToSend);
        }
Example #4
0
        private OperationOutcome processResult(string code, string system, string display, Coding coding, CodeableConcept codeableConcept, ValidateCodeResult result)
        {
            if (result?.Result?.Value == null)
            {
                throw Error.InvalidOperation($"Terminology service at {Endpoint.Endpoint.ToString()} did not return a result.");
            }

            var outcome = new OperationOutcome();

            if (result?.Result?.Value == false)
            {
                string message = result?.Message?.Value;

                if (message != null)
                {
                    outcome.AddIssue(message, Issue.TERMINOLOGY_CODE_NOT_IN_VALUESET);
                }
                else
                {
                    if (code != null && coding == null)
                    {
                        coding = new Coding(system, code, display);
                    }

                    var codeDisplay = codeableConcept != null?FhirSerializer.SerializeToJson(codeableConcept)
                                          : FhirSerializer.SerializeToJson(coding);

                    outcome.AddIssue($"Validation of '{codeDisplay}' failed, but" +
                                     $"the terminology service at {Endpoint.Endpoint.ToString()} did not provide further details.",
                                     Issue.TERMINOLOGY_CODE_NOT_IN_VALUESET);
                }
            }

            return(outcome);
        }
Example #5
0
 public override void Write(object tempValue, Stream stream)
 {
     using (var writer = new StreamWriter(stream))
     {
         // Might be more efficient to use SerializeResource, but as the name implies, that only works with resources...
         writer.Write(FhirSerializer.SerializeToJson((Hl7.Fhir.Model.Base)tempValue));
     }
 }
Example #6
0
        public static async Task <List <Resource> > ProcessIncludes(Resource source, NameValueCollection parms, IFHIRStore store)
        {
            var    retVal      = new List <Resource>();
            string includeparm = parms["_include"];

            if (!string.IsNullOrEmpty(includeparm))
            {
                JObject  j    = JObject.Parse(FhirSerializer.SerializeToJson(source));
                string[] incs = includeparm.Split(',');
                foreach (string t in incs)
                {
                    bool     isinstance = false;
                    string[] s          = t.Split(':');
                    if (s.Length > 1)
                    {
                        var    prop = s[1];
                        JToken x    = null;
                        try
                        {
                            if (prop.Equals("substance"))
                            {
                                x          = j["suspectEntity"];
                                isinstance = true;
                            }
                            else
                            {
                                x = j[prop];
                            }
                        }
                        catch (Exception)
                        {
                        }
                        if (x != null)
                        {
                            for (int i = 0; i < x.Count(); i++)
                            {
                                var      x1    = (x.Type == JTokenType.Array ? x[i] : x);
                                string   z     = (isinstance ? x1["instance"]["reference"].ToString() : x1["reference"].ToString());
                                string[] split = z.Split('/');
                                if (split.Length > 1)
                                {
                                    var a1 = await store.LoadFHIRResource(split[1], split[0]);

                                    if (a1 != null)
                                    {
                                        retVal.Add(a1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(retVal);
        }
 private static string toReadable(Base value)
 {
     if (value is Primitive)
     {
         return(value.ToString());
     }
     else
     {
         return(FhirSerializer.SerializeToJson(value, root: value.TypeName));
     }
 }
Example #8
0
        public override object InternalExecute(Program program, object argument1)
        {
                        #if NILPROPOGATION
            if (argument1 == null)
            {
                return(null);
            }
                        #endif

            return(FhirSerializer.SerializeToJson((Base)argument1));
        }
Example #9
0
 public string InsertResourceHistoryItem(Resource r)
 {
     try
     {
         string s = FhirSerializer.SerializeToJson(r);
         ResourceThreadContext rtc = new ResourceThreadContext(blob, r, s);
         ThreadPool.QueueUserWorkItem(rtc.ThreadPoolCallback, 1);
         return(s);
     }
     catch (Exception e)
     {
         Trace.TraceError("Error inserting history for resource: {0}-{1}-{2} Message:{3}", Enum.GetName(typeof(ResourceType), r.ResourceType), r.Id, r.Meta.VersionId, e.Message);
         return(null);
     }
 }
Example #10
0
 private string SerializeResponse(Resource retVal)
 {
     if (CurrentAcceptType.ToLower().Contains("json"))
     {
         return(FhirSerializer.SerializeToJson(retVal));
     }
     else if (CurrentAcceptType.ToLower().Contains("xml"))
     {
         return(FhirSerializer.SerializeResourceToXml(retVal));
     }
     else
     {
         throw new System.Web.HttpException((int)HttpStatusCode.NotAcceptable, "Accept Type not Supported must be */xml or */json");
     }
 }
Example #11
0
        public static void SaveResultBundle(Bundle lisOrder, string resourceId)
        {
            if (!Directory.Exists("results"))
            {
                Directory.CreateDirectory("results");
            }

            var path = Path.ChangeExtension(Path.Combine("results", resourceId), ".json");

            if (File.Exists(path))
            {
                File.Delete(path);
            }

            var json = FhirSerializer.SerializeToJson(lisOrder);

            File.WriteAllText(path, json);
        }
Example #12
0
 public string InsertResourceHistoryItem(Resource r)
 {
     try
     {
         string         s         = FhirSerializer.SerializeToJson(r);
         var            resource  = System.Text.Encoding.UTF8.GetBytes(s);
         CloudBlockBlob blockBlob = blob.GetBlockBlobReference(@Enum.GetName(typeof(ResourceType), r.ResourceType) + "/" + r.Id + "/" + r.Meta.VersionId);
         using (var stream = new MemoryStream(resource, writable: false))
         {
             blockBlob.UploadFromStream(stream);
         }
         return(s);
     }
     catch (Exception e)
     {
         Trace.TraceError("Error inserting history for resource: {0}-{1}-{2} Message:{3}", Enum.GetName(typeof(ResourceType), r.ResourceType), r.Id, r.Meta.VersionId, e.Message);
         return(null);
     }
 }
Example #13
0
        public static Parameters GetResultOperation(string sourceCode = null, string targetCode = null, string orderMisId = null)
        {
            var parameters = new Parameters();

            sourceCode.Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "SourceCode",
                Value = new FhirString(x)
            }));

            targetCode.Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "TargetCode",
                Value = new FhirString(x)
            }));

            orderMisId.Do(x => parameters.Parameter.Add(new Parameters.ParametersParameterComponent
            {
                Name  = "OrderMisID",
                Value = new FhirString(x)
            }));

            var client  = new RestClient(Constants.Endpoint);
            var request = new RestRequest("$getresult", Method.POST)
            {
                RequestFormat = DataFormat.Json
            };

            request.AddHeader("Accept", "application/json");

            var jsonToSend = FhirSerializer.SerializeToJson(parameters);

            request.Parameters.Clear();
            request.AddParameter("Authorization", (new N3Credentials(Constants.TestToken)).ToString(), ParameterType.HttpHeader);
            request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
            request.AddParameter("_format", "json", ParameterType.QueryString);
            request.RequestFormat = DataFormat.Json;

            var response = client.Execute(request);

            return((Parameters)FhirParser.ParseFromJson(response.Content));
        }
Example #14
0
        public static HttpStatusCode GetOrderOperation(Parameters parameters)
        {
            var client  = new RestClient(Constants.Endpoint);
            var request = new RestRequest("$getorder", Method.POST)
            {
                RequestFormat = DataFormat.Json
            };

            request.AddHeader("Accept", "application/json");

            var jsonToSend = FhirSerializer.SerializeToJson(parameters);

            request.Parameters.Clear();
            request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
            //request.AddParameter("_format", "json");
            request.RequestFormat = DataFormat.Json;

            var response = client.Execute(request);

            return(response.StatusCode);
        }
        public void WhenMultipleHeathVaultThingsTransformedToFhirPatient_ThenCodeAndValuesEqual()
        {
            var basic = new BasicV2
            {
                Gender          = Gender.Female,
                BirthYear       = 1975,
                City            = "Redmond",
                StateOrProvince = new CodableValue("Washington", "WA", "states", "wc", "1"),
                PostalCode      = "98052",
                Country         = new CodableValue("United States of America", "US", "iso3166", "iso", "1"),
                FirstDayOfWeek  = DayOfWeek.Sunday,
                Languages       =
                {
                    new Language(new CodableValue("English", "en", "iso639-1", "iso", "1"), true),
                    new Language(new CodableValue("French",  "fr", "iso639-1", "iso", "1"), false),
                }
            };

            var patient = basic.ToFhir();

            var contact = new Contact();

            contact.ContactInformation.Address.Add(new ItemTypes.Address
            {
                Street      = { "123 Main St.", "Apt. 3B" },
                City        = "Redmond",
                PostalCode  = "98052",
                County      = "King",
                State       = "WA",
                Country     = "USA",
                Description = "Home address",
                IsPrimary   = true,
            });

            contact.ContactInformation.Address.Add(new ItemTypes.Address
            {
                Street      = { "1 Back Lane" },
                City        = "Holmfirth",
                PostalCode  = "HD7 1HQ",
                County      = "HUDDERSFIELD",
                Country     = "UK",
                Description = "business address",
            });

            contact.ContactInformation.Email.Add(new Email
            {
                Address     = "*****@*****.**",
                Description = "Address 1",
                IsPrimary   = true,
            });

            contact.ContactInformation.Email.Add(new Email
            {
                Address     = "*****@*****.**",
                Description = "Address 2",
            });

            contact.ContactInformation.Phone.Add(new Phone
            {
                Number      = "1-425-555-0100",
                Description = "Phone 1",
                IsPrimary   = true,
            });

            contact.ContactInformation.Phone.Add(new Phone
            {
                Number      = "0491 570 156",
                Description = "Phone 2",
            });

            contact.ToFhir(patient);

            var    personalImage = new PersonalImage();
            string resourceName  = "Microsoft.HealthVault.Fhir.UnitTests.Samples.HealthVaultIcon.png";

            using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
            {
                if (stream != null)
                {
                    using (var reader = new StreamReader(stream))
                    {
                        personalImage.WriteImage(reader.BaseStream, "image/png");
                    }
                }
            }

            personalImage.ToFhir(patient);

            var personal = new Personal
            {
                Name = new Name
                {
                    Full   = "Dr. John Phillip Doe, Jr.",
                    First  = "John",
                    Middle = "Phillip",
                    Last   = "Doe",
                    Suffix = new CodableValue("Junior", "Jr", "name-suffixes", "wc", "1"),
                    Title  = new CodableValue("Dr.", "Dr", "name-prefixes", "wc", "1"),
                },
                BirthDate = new HealthServiceDateTime
                {
                    Date = new HealthServiceDate(1975, 2, 5),
                    Time = new ApproximateTime(1, 30, 34, 15),
                },
                DateOfDeath = new ApproximateDateTime
                {
                    ApproximateDate = new ApproximateDate(2075, 5, 7),
                },
                SocialSecurityNumber  = "000-12-3456",
                BloodType             = new CodableValue("A+", "A+", "blood-types", "wc", "1"),
                Religion              = new CodableValue("Agnostic", "Agn", "religion", "wc", "1"),
                MaritalStatus         = new CodableValue("Never Married", "NM", "marital-status", "wc", "1"),
                EmploymentStatus      = "Employed",
                IsDeceased            = true,
                IsVeteran             = true,
                Ethnicity             = new CodableValue("Other Race", "8", "ethnicity-types", "wc", "1"),
                HighestEducationLevel = new CodableValue("College Graduate", "ColG", "Education-level", "wc", "1"),
                OrganDonor            = "Organ Donor",
                IsDisabled            = false,
            };

            personal.ToFhir(patient);

            var json = FhirSerializer.SerializeToJson(patient);

            Assert.IsNotNull(patient);
            // Basic Portion
            Assert.AreEqual(AdministrativeGender.Female, patient.Gender.Value);
            var basicV2Extension = patient.GetExtension(HealthVaultExtensions.PatientBasicV2);

            Assert.AreEqual(1975, basicV2Extension.GetIntegerExtension(HealthVaultExtensions.PatientBirthYear));
            Assert.AreEqual("0", basicV2Extension.GetExtensionValue <Coding>(HealthVaultExtensions.PatientFirstDayOfWeek).Code);
            Assert.AreEqual("Sunday", basicV2Extension.GetExtensionValue <Coding>(HealthVaultExtensions.PatientFirstDayOfWeek).Display);

            var basicAddress = basicV2Extension.GetExtension(HealthVaultExtensions.PatientBasicAddress);

            Assert.AreEqual("Redmond", basicAddress.GetStringExtension(HealthVaultExtensions.PatientBasicAddressCity));
            Assert.AreEqual("WA", basicAddress.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientBasicAddressState).Coding[0].Code);
            Assert.AreEqual("98052", basicAddress.GetStringExtension(HealthVaultExtensions.PatientBasicAddressPostalCode));
            Assert.AreEqual("US", basicAddress.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientBasicAddressCountry).Coding[0].Code);

            Assert.AreEqual(2, patient.Communication.Count);
            Assert.AreEqual("English", patient.Communication[0].Language.Text);
            Assert.AreEqual(true, patient.Communication[0].Preferred);

            // Contact portion
            Assert.AreEqual(2, patient.Address.Count);
            var address1 = patient.Address[0];

            Assert.AreEqual(2, address1.Line.Count());
            Assert.AreEqual("123 Main St.", address1.Line.First());
            Assert.AreEqual("Redmond", address1.City);
            Assert.AreEqual("King", address1.District);
            Assert.AreEqual("WA", address1.State);
            Assert.AreEqual("98052", address1.PostalCode);
            Assert.AreEqual("USA", address1.Country);
            Assert.AreEqual("Home address", address1.Text);
            Assert.AreEqual(true, address1.GetBoolExtension(HealthVaultExtensions.IsPrimary));

            Assert.AreEqual(4, patient.Telecom.Count);
            var email1 = patient.Telecom[0];

            Assert.AreEqual("*****@*****.**", email1.Value);
            Assert.AreEqual("Address 1", email1.GetStringExtension(HealthVaultExtensions.Description));
            Assert.AreEqual(1, email1.Rank);

            var phone1 = patient.Telecom[2];

            Assert.AreEqual("1-425-555-0100", phone1.Value);
            Assert.AreEqual("Phone 1", phone1.GetStringExtension(HealthVaultExtensions.Description));
            Assert.AreEqual(1, phone1.Rank);

            // Personal Image portion
            Assert.IsNotNull(patient);
            Assert.AreEqual(1757, patient.Photo[0].Data.Length);

            // Personal portion
            Assert.IsNotNull(patient);
            var personalExtension = patient.GetExtension(HealthVaultExtensions.PatientPersonal);

            Assert.AreEqual("Dr. John Phillip Doe, Jr.", patient.Name[0].Text);
            Assert.AreEqual("John", patient.Name[0].Given.ToList()[0]);
            Assert.AreEqual("Phillip", patient.Name[0].Given.ToList()[1]);
            Assert.AreEqual("Doe", patient.Name[0].Family);
            Assert.AreEqual("Dr.", patient.Name[0].Prefix.ToList()[0]);
            Assert.AreEqual("Junior", patient.Name[0].Suffix.ToList()[0]);
            Assert.AreEqual("1975-02-05", patient.BirthDate);
            Assert.AreEqual("000-12-3456", patient.Identifier[0].Value);
            Assert.AreEqual("2075-05-07", ((FhirDateTime)patient.Deceased).Value);
            Assert.AreEqual("A+", personalExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientBloodType).Coding[0].Code);
            Assert.AreEqual("Agn", personalExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientReligion).Coding[0].Code);
            Assert.AreEqual("NM", personalExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientMaritalStatus).Coding[0].Code);
            Assert.AreEqual("8", personalExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientEthnicity).Coding[0].Code);
            Assert.AreEqual("ColG", personalExtension.GetExtensionValue <CodeableConcept>(HealthVaultExtensions.PatientHighestEducationLevel).Coding[0].Code);
            Assert.AreEqual("Employed", personalExtension.GetStringExtension(HealthVaultExtensions.PatientEmploymentStatus));
            Assert.AreEqual("Organ Donor", personalExtension.GetStringExtension(HealthVaultExtensions.PatientOrganDonor));
            Assert.AreEqual(true, personalExtension.GetBoolExtension(HealthVaultExtensions.PatientIsVeteran));
            Assert.AreEqual(false, personalExtension.GetBoolExtension(HealthVaultExtensions.PatientIsDisabled));
        }
Example #16
0
 public string ResourceToString(Hl7.Fhir.Model.Base resource)
 {
     return(FhirSerializer.SerializeToJson(resource));
 }
Example #17
0
 public static string ToFhirJson(this Base resource)
 {
     return(FhirSerializer.SerializeToJson(resource));
 }
Example #18
0
        static void Main(string[] args)
        {
            const string kDeviceId       = "device-0001";
            const string kObservationId  = "bp-0001";
            const string kPatientId      = "patient-0001";
            const string kPractitionerId = "practitioner-0001";

            Patient patient = new Patient()
            {
                Id = kPatientId
            };

            patient.Name.Add(HumanName.ForFamily("Miranda").WithGiven("Jorge"));

            Practitioner practitioner = new Practitioner()
            {
                Id = kPractitionerId
            };

            practitioner.Name.Add(HumanName.ForFamily("Banerjee").WithGiven("Suprateek"));

            Device device = new Device()
            {
                Id           = kDeviceId,
                Manufacturer = "A&D",
                Model        = "UA-651BLE"
            };

            Observation observation = new Observation()
            {
                Id      = kObservationId,
                Device  = new ResourceReference("Device/" + kDeviceId),
                Subject = new ResourceReference("Patient" + kPatientId)
            };

            observation.Performer.Add(new ResourceReference("Practitioner" + kPractitionerId));

            /* Systolic component */
            Observation.ComponentComponent systolic = new Observation.ComponentComponent();
            systolic.Code = new CodeableConcept();
            systolic.Code.Coding.Add(new Coding("http://loinc.org", "8480 - 6"));
            systolic.Code.Coding.Add(new Coding("http://snomed.info/sct", "271649006"));
            systolic.Value = new Quantity()
            {
                Value = 107,
                Unit  = "mmHg",
                Code  = "mm[Hg]"
            };
            systolic.Interpretation = new CodeableConcept("http://hl7.org/fhir/v2/0078", "N", "normal");

            /* Diastolic component */
            Observation.ComponentComponent diastolic = new Observation.ComponentComponent();
            diastolic.Code  = new CodeableConcept("http://loinc.org", "8462-4");
            diastolic.Code  = new CodeableConcept("http://snomed.info/sct", "271650006");
            diastolic.Value = new Quantity()
            {
                Value = 60,
                Unit  = "mmHg",
                Code  = "mm[Hg]"
            };
            diastolic.Interpretation = new CodeableConcept("http://hl7.org/fhir/v2/0078", "L", "low");

            observation.Component.Add(systolic);
            observation.Component.Add(diastolic);

            string json = FhirSerializer.SerializeToJson(observation);
        }