public void WhenMedicationRequestTransformedToHealthVault_ThenDosageInstructionIsCopiedToInstructions()
        {
            MedicationRequest medicationRequest = GetSampleRequest();
            var dosage = new Dosage();

            medicationRequest.DosageInstruction = new System.Collections.Generic.List <Dosage>
            {
                dosage
            };

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsNull(hvMedication.Prescription?.Instructions);

            var dosageInstructions = new CodeableConcept
            {
                Text = "3 tablets/day, have it after dinner."
            };

            dosage.AdditionalInstruction = new System.Collections.Generic.List <CodeableConcept>
            {
                dosageInstructions
            };

            hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsNotNull(hvMedication.Prescription?.Instructions);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenPractitionerIsCopiedToPrescription()
        {
            MedicationRequest medicationRequest = GetSampleRequest();

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsNotNull(hvMedication.Prescription.PrescribedBy);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenAuthoredOnIsCopiedToDatePrescribed()
        {
            var prescribedOn = new LocalDate(2017, 08, 10);
            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.AuthoredOnElement = new FhirDateTime(prescribedOn.ToDateTimeUnspecified());

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsTrue(hvMedication.Prescription?.DatePrescribed.ApproximateDate.CompareTo(prescribedOn) == 0);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenNumberOfRepeatsAllowedIsCopiedToRefills()
        {
            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.DispenseRequest = new MedicationRequest.DispenseRequestComponent();

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsNull(hvMedication.Prescription?.Refills);

            const int refillsAllowed = 3;

            medicationRequest.DispenseRequest = new MedicationRequest.DispenseRequestComponent
            {
                NumberOfRepeatsAllowed = refillsAllowed
            };

            hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.AreEqual(refillsAllowed, hvMedication.Prescription.Refills);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenPractitionerIsRequired()
        {
            var medicationRequest = new MedicationRequest
            {
                Medication = new CodeableConcept
                {
                    Text = "Amoxicillin 250mg/5ml Suspension"
                },
            };

            Assert.ThrowsException <NotSupportedException>(() => medicationRequest.ToHealthVault());
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenSubstitutionIsCopiedToSubstitution()
        {
            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.Substitution = new MedicationRequest.SubstitutionComponent
            {
                Allowed = true
            };

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.AreEqual(HealthVaultMedicationSubstitutionCodes.SubstitutionPermittedCode
                            , hvMedication.Prescription?.Substitution.First().Value);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenDispenseRequestQuantityIsCopiedToAmountPrescribed()
        {
            const int         amountPrescribed  = 15;
            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.DispenseRequest = new MedicationRequest.DispenseRequestComponent
            {
                Quantity = new Quantity(amountPrescribed, "tablets").CopyTo(new SimpleQuantity()) as SimpleQuantity
            };

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.AreEqual(amountPrescribed, hvMedication.Prescription?.AmountPrescribed?.Structured.First()?.Value);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenExpectedSupplyDurationIsCopiedToDaysSupply()
        {
            var daysSupply = 12;

            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.DispenseRequest = new MedicationRequest.DispenseRequestComponent
            {
                ExpectedSupplyDuration = new Quantity(daysSupply, "day")
                                         .CopyTo(new Hl7.Fhir.Model.Duration()) as Hl7.Fhir.Model.Duration
            };

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.AreEqual(daysSupply, hvMedication.Prescription?.DaysSupply);

            medicationRequest.DispenseRequest.ExpectedSupplyDuration = new Quantity(1, "month")
                                                                       .CopyTo(new Hl7.Fhir.Model.Duration()) as Hl7.Fhir.Model.Duration;

            hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.AreEqual(30, hvMedication.Prescription?.DaysSupply);
        }
        public void WhenMedicationRequestTransformedToHealthVault_ThenValidityPeriodEndIsCopiedToPrescriptionExpiration()
        {
            var expiration = new LocalDate(2017, 12, 12);
            MedicationRequest medicationRequest = GetSampleRequest();

            medicationRequest.DispenseRequest = new MedicationRequest.DispenseRequestComponent
            {
                ValidityPeriod = new Hl7.Fhir.Model.Period
                {
                    EndElement = new FhirDateTime(expiration.ToDateTimeUnspecified())
                }
            };

            var hvMedication = medicationRequest.ToHealthVault() as HVMedication;

            Assert.IsTrue(hvMedication.Prescription?.PrescriptionExpiration.CompareTo(expiration) == 0);
        }