コード例 #1
0
        private static MedicationRequest.DispenseRequestComponent MakeDispenseRequest(ResourceReference nom, System.Collections.Generic.List <string> rx,
                                                                                      System.Collections.Generic.List <string> item)
        {
            MedicationRequest.DispenseRequestComponent dr = new MedicationRequest.DispenseRequestComponent();
            Extension e = FhirHelper.MakeExtension(null, "https://fhir.nhs.uk/R4/StructureDefinition/Extension-performerType",
                                                   FhirHelper.MakeCoding("https://fhir.nhs.uk/R4/CodeSystem/dispensing-site-preference", rx[EMUData.DISPENSINGSITEPREFERENCE], null));

            try
            {
                dr.Quantity = new SimpleQuantity
                {
                    Code   = item[EMUData.QUANTITYCODE],
                    System = "http://snomed.info/sct",
                    Unit   = item[EMUData.QUANTITYTEXT],
                    Value  = Convert.ToDecimal(item[EMUData.QUANTITYCOUNT])
                };
            }
            catch (Exception ex)
            {
#pragma warning disable CA2241 // Provide correct arguments to formatting methods
                Console.WriteLine("Exception: {ex} making SimpleQuantity: {value}", ex.Message, item[EMUData.QUANTITYCOUNT]);
#pragma warning restore CA2241 // Provide correct arguments to formatting methods
            }
            if (nom != null)
            {
                dr.Performer = nom;
            }
            dr.Extension.Add(e);
            return(dr);
        }
        public static ThingBase ToHealthVault(this MedicationRequest medicationRequest)
        {
            var fhirMedication = MedicationRequestHelper.ExtractEmbeddedMedication(medicationRequest);

            if (fhirMedication == null)
            {
                return(null);
            }

            var hvMedication = fhirMedication.ToHealthVault() as HVMedication;

            var practitioner = ExtractEmbeddedPractitioner(medicationRequest);

            if (practitioner == null)
            {
                throw new NotSupportedException($"{nameof(MedicationRequest)} needs to have an embedded Requester Agent");
            }

            var prescription = new Prescription(practitioner.ToHealthVault());

            if (medicationRequest.AuthoredOnElement != null)
            {
                var dt = medicationRequest.AuthoredOnElement.ToDateTimeOffset();
                prescription.DatePrescribed = new ApproximateDateTime(
                    new ApproximateDate(dt.Year, dt.Month, dt.Day),
                    new ApproximateTime(dt.Hour, dt.Minute, dt.Second, dt.Millisecond));
            }

            MedicationRequest.DispenseRequestComponent dispenseRequest = medicationRequest.DispenseRequest;
            if (dispenseRequest != null)
            {
                var numerator = dispenseRequest.Quantity;

                if (numerator != null)
                {
                    var structuredMeasurement = new StructuredMeasurement
                    {
                        Value = (double)numerator.Value,
                        Units = CodeToHealthVaultHelper.CreateCodableValueFromQuantityValues(numerator.System,
                                                                                             numerator.Code, numerator.Unit)
                    };
                    prescription.AmountPrescribed = new GeneralMeasurement();
                    prescription.AmountPrescribed.Structured.Add(structuredMeasurement);
                }

                prescription.Refills = dispenseRequest.NumberOfRepeatsAllowed;

                prescription.DaysSupply = GetDaysFromDuration(dispenseRequest.ExpectedSupplyDuration);

                FhirDateTime end = dispenseRequest.ValidityPeriod?.EndElement;
                if (end != null)
                {
                    var endDate = end.ToDateTimeOffset();
                    prescription.PrescriptionExpiration = new HealthServiceDate(endDate.Year
                                                                                , endDate.Month, endDate.Day);
                }
            }

            if (medicationRequest.DosageInstruction.Any())
            {
                var dosageInstruction = medicationRequest.DosageInstruction
                                        .FirstOrDefault(dosage => dosage.AdditionalInstruction.Any());
                if (dosageInstruction != null)
                {
                    var instruction = dosageInstruction.AdditionalInstruction.First();
                    prescription.Instructions = instruction.ToCodableValue();
                }
            }

            if (medicationRequest.Substitution != null)
            {
                prescription.Substitution = GetSubstitutionCode(medicationRequest, prescription);
            }
            hvMedication.Prescription = prescription;

            return(hvMedication);
        }