Ejemplo n.º 1
0
        public void WhenHealthVaultBasicV2TransformedToFhir_ThenCodeAndValuesEqual()
        {
            var basic = new ItemTypes.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();

            Assert.IsNotNull(patient);
            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);
        }
 // Register the type on the generic ThingToFhir partial class
 public static Patient ToFhir(this ItemTypes.BasicV2 basic, Patient patient)
 {
     return(BasicV2ToFhir.ToFhirInternal(basic, patient));
 }
        internal static Patient ToFhirInternal(ItemTypes.BasicV2 basic, Patient patient)
        {
            var basicV2Extension = new Extension
            {
                Url = HealthVaultExtensions.PatientBasicV2
            };

            if (basic.Gender.HasValue)
            {
                switch (basic.Gender.Value)
                {
                case Gender.Male:
                    patient.Gender = AdministrativeGender.Male;
                    break;

                case Gender.Female:
                    patient.Gender = AdministrativeGender.Female;
                    break;

                case Gender.Unknown:
                    patient.Gender = AdministrativeGender.Unknown;
                    break;
                }
            }

            if (basic.BirthYear.HasValue)
            {
                basicV2Extension.AddExtension(HealthVaultExtensions.PatientBirthYear, new Integer(basic.BirthYear));
            }

            if (basic.FirstDayOfWeek.HasValue)
            {
                basicV2Extension.AddExtension(HealthVaultExtensions.PatientFirstDayOfWeek,
                                              new Coding
                {
                    Code    = ((int)basic.FirstDayOfWeek).ToString(),
                    Display = basic.FirstDayOfWeek.Value.ToString()
                });
            }

            if (basic.Languages != null && basic.Languages.Count > 0)
            {
                foreach (var language in basic.Languages)
                {
                    patient.Communication.Add(
                        new Patient.CommunicationComponent
                    {
                        Language  = language.SpokenLanguage.ToFhir(),
                        Preferred = language.IsPrimary
                    }
                        );
                }
            }

            var basicAddress = new Extension
            {
                Url = HealthVaultExtensions.PatientBasicAddress
            };

            basicAddress.AddExtension(HealthVaultExtensions.PatientBasicAddressCity, new FhirString(basic.City));
            basicAddress.AddExtension(HealthVaultExtensions.PatientBasicAddressState, basic.StateOrProvince.ToFhir());
            basicAddress.AddExtension(HealthVaultExtensions.PatientBasicAddressPostalCode, new FhirString(basic.PostalCode));
            basicAddress.AddExtension(HealthVaultExtensions.PatientBasicAddressCountry, basic.Country.ToFhir());
            basicV2Extension.Extension.Add(basicAddress);

            patient.Extension.Add(basicV2Extension);

            return(patient);
        }
 // Register the type on the generic ThingToFhir partial class
 public static Patient ToFhir(this ItemTypes.BasicV2 basic)
 {
     return(BasicV2ToFhir.ToFhirInternal(basic, ThingBaseToFhir.ToFhirInternal <Patient>(basic)));
 }