public bool DateOfBirthLearnStartDateConditionMet(DateTime learnStartDate, DateTime dateOfBirth)
        {
            var learnStartDateAcademicYearLastFridayJune = _academicYearCalendarService.LastFridayInJuneForDateInAcademicYear(learnStartDate);
            var learnStartDateFirstSeptember             = new DateTime(learnStartDateAcademicYearLastFridayJune.Year, 9, 1);
            var sixteenthBirthday = dateOfBirth.AddYears(16);
            var learnStartDateAge = _dateTimeQueryService.YearsBetween(dateOfBirth, learnStartDate);

            return(learnStartDateAge < 16
                   &&
                   !(learnStartDateAge == 15 &&
                     sixteenthBirthday > learnStartDateAcademicYearLastFridayJune && sixteenthBirthday < learnStartDateFirstSeptember &&
                     learnStartDate > learnStartDateAcademicYearLastFridayJune && learnStartDate < learnStartDateFirstSeptember));
        }
        public void Validate(ILearner objectToValidate)
        {
            if (!LearnerConditionMet(objectToValidate.DateOfBirthNullable))
            {
                return;
            }

            var sixteenthBirthday = BirthdayAt(objectToValidate.DateOfBirthNullable, 16);
            var lastFridayJuneAcademicYearLearnerSixteen = _academicYearCalendarService.LastFridayInJuneForDateInAcademicYear(sixteenthBirthday.Value);

            foreach (var learningDelivery in objectToValidate.LearningDeliveries.Where(ld => !Exclude(ld.ProgTypeNullable)))
            {
                if (DD07ConditionMet(_dd07.Derive(learningDelivery.ProgTypeNullable)) &&
                    DD04ConditionMet(_dd04.Derive(objectToValidate.LearningDeliveries, learningDelivery), _validationDataService.ApprencticeProgAllowedStartDate, lastFridayJuneAcademicYearLearnerSixteen))
                {
                    HandleValidationError(RuleNameConstants.DateOfBirth_48, objectToValidate.LearnRefNumber, learningDelivery.AimSeqNumberNullable);
                }
            }
        }