Ejemplo n.º 1
0
        public void TestVaccineMissing()
        {
            var testP = new Participant
            {
                TrialArm             = RandomisationArm.RussianBCG,
                VaccinesAdministered = new VaccineAdministered[] { new VaccineAdministered {
                                                                       VaccineId = 1
                                                                   } }
            };
            DateTime twentyEightPrior = DateTime.Now.AddDays(-28);

            var a = new Func <IParticipant, DataRequiredOption> (p =>
                                                                 ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue) ||
                                                                  (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing))))
                        ? DataRequiredOption.DetailsMissing
                        : (p.TrialArm != RandomisationArm.Control && !p.ProtocolViolations.Any(pv => pv.ViolationType == ViolationTypeOption.MajorWrongTreatment) && !p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg))
                            ? DataRequiredOption.BcgDataRequired
                            : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing)
                                ? DbFunctions.DiffDays(p.DateTimeBirth, DateTime.Now) < 28
                                    ? DataRequiredOption.AwaitingOutcomeOr28
                                    : DataRequiredOption.OutcomeRequired
                                : KnownDeadOutcomes.Contains(p.OutcomeAt28Days)
                                    ? p.MaternalBCGScar == MaternalBCGScarStatus.Missing
                                        ? DataRequiredOption.MaternalBCGScarDetails
                                        : DataRequiredOption.Complete
                                    : DbFunctions.DiffDays(p.VaccinesAdministered.Any(
                                                               v => v.VaccineGiven.IsBcg)
                                                    ? p.VaccinesAdministered.First(v => v.VaccineGiven.IsBcg).AdministeredAt : p.DischargeDateTime ?? p.DeathOrLastContactDateTime ?? p.RegisteredAt, DateTime.Now) < 42
                                        ? DataRequiredOption.Awaiting6WeeksToElapse
                                        : p.FollowUpBabyBCGReaction == FollowUpBabyBCGReactionStatus.Missing
                                            ? p.PermanentlyUncontactable
                                                ? DataRequiredOption.Complete
                                                : p.UnsuccessfulFollowUps.Any()
                                                    ? p.UnsuccessfulFollowUps.Count > BlowTrial.Models.ParticipantBaseModel.MaxFollowUpAttempts
                                                        ? DataRequiredOption.Complete
                                                        : DataRequiredOption.FailedInitialContact
                                                    : DataRequiredOption.AwaitingInfantScarDetails
                                            : DataRequiredOption.Complete);

            /*
             * var a = new Func<IParticipant, DataRequiredOption>(p => ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue)
             || (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing))))
             ||         ? DataRequiredOption.DetailsMissing
             ||         : (p.TrialArm != RandomisationArm.Control && !p.VaccinesAdministered.Any(v => DataContextInitialiser.BcgVaccineIds.Contains(v.VaccineId)))
             ||             ? DataRequiredOption.BcgDataRequired
             ||             : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing)
             ||                 ? (p.DateTimeBirth > twentyEightPrior) //DbFunctions.DiffDays(p.DateTimeBirth, now) < 28
             ||                     ? DataRequiredOption.AwaitingOutcomeOr28
             ||                     : DataRequiredOption.OutcomeRequired
             ||                 : DataRequiredOption.Complete);
             */

            Assert.AreNotEqual(DataRequiredOption.BcgDataRequired, a(testP));
        }
Ejemplo n.º 2
0
        static ParticipantBaseModel()
        {
            DataRequiredExpression = p =>
                                     ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue) ||
                                      (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing))))
                        ? DataRequiredOption.DetailsMissing
                        : (p.TrialArm != RandomisationArm.Control && !p.ProtocolViolations.Any(pv => pv.ViolationType == ViolationTypeOption.MajorWrongTreatment) && !p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg))
                            ? DataRequiredOption.BcgDataRequired
                            : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing)
                                ? (DbFunctions.DiffDays(p.DateTimeBirth, DateTime.Now) < 28)
                                    ? DataRequiredOption.AwaitingOutcomeOr28
                                    : DataRequiredOption.OutcomeRequired
                                : KnownDeadOutcomes.Contains(p.OutcomeAt28Days)
                                    ?(p.MaternalBCGScar == MaternalBCGScarStatus.Missing)
                                        ?DataRequiredOption.MaternalBCGScarDetails
                                        :DataRequiredOption.Complete
                                    : (DbFunctions.DiffDays(p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg)
                                                    ?p.VaccinesAdministered.FirstOrDefault(v => v.VaccineGiven.IsBcg).AdministeredAt
                                                    : (p.DischargeDateTime ?? p.DeathOrLastContactDateTime ?? p.RegisteredAt), DateTime.Now)
                                       < ParticipantBaseModel.FollowToAge)
                                        ?DataRequiredOption.Awaiting6WeeksToElapse
                                        :(p.FollowUpBabyBCGReaction == FollowUpBabyBCGReactionStatus.Missing)
                                            ?p.PermanentlyUncontactable
                                                ?DataRequiredOption.Complete
                                                :p.UnsuccessfulFollowUps.Any()
                                                    ? (p.UnsuccessfulFollowUps.Count > MaxFollowUpAttempts)
                                                        ?DataRequiredOption.Complete
                                                        :DataRequiredOption.FailedInitialContact
                                                    : DataRequiredOption.AwaitingInfantScarDetails
                                            : DataRequiredOption.Complete;
            var visitor = new ReplaceMethodCallVisitor(
                typeof(DbFunctions).GetMethod("DiffDays", BindingFlags.Static | BindingFlags.Public, null, new Type[] { typeof(DateTime?), typeof(DateTime?) }, null),
                args =>
                Expression.Property(Expression.Subtract(args[1], args[0]), "Days"));

            DataRequiredFunc = ((Expression <Func <IParticipant, DataRequiredOption> >)visitor.Visit(DataRequiredExpression)).Compile();
        }