public async Task <RuleOutcome> EvaluateAsync(Vacancy subject)
        {
            RuleOutcome outcomeResult;

            var outcomeBuilder  = RuleOutcomeDetailsBuilder.Create(RuleId.TitlePopularity);
            var popularityScore = await _popularityService.GetTitlePopularityAsync(subject.ProgrammeId, subject.Title);

            var trainingProgramme = await _apprenticeshipProgrammeProvider.GetApprenticeshipProgrammeAsync(subject.ProgrammeId);

            var data = JsonConvert.SerializeObject(new TitlePopularityData
            {
                TrainingCode  = trainingProgramme.Id,
                TrainingTitle = trainingProgramme.Title,
                TrainingType  = trainingProgramme.ApprenticeshipType.ToString().ToLower()
            });

            if (popularityScore < _qaRulesConfig.TitlePopularityPercentageThreshold)
            {
                outcomeResult = new RuleOutcome(RuleId.TitlePopularity, 100, $"Title is not common for the training specified.", nameof(Vacancy.Title), null, data);
            }
            else
            {
                outcomeResult = new RuleOutcome(RuleId.TitlePopularity, 0, $"Title is common for the training specified.", nameof(Vacancy.Title), null, data);
            }

            var outcome = outcomeBuilder.Add(new RuleOutcome[] { outcomeResult })
                          .ComputeSum();

            return(outcome);
        }
        public async Task <RuleOutcome> EvaluateAsync(Vacancy subject)
        {
            var outcomeBuilder = RuleOutcomeDetailsBuilder.Create(RuleId);

            BannedPhrases = await _bannedPhrasesProvider.GetBannedPhrasesAsync();

            var outcomes = new List <RuleOutcome>();

            outcomes.AddRange(BannedPhraseCheck(() => subject.Title));
            outcomes.AddRange(BannedPhraseCheck(() => subject.ShortDescription));
            outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerLocation.AddressLine1));
            outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerLocation.AddressLine2));
            outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerLocation.AddressLine3));
            outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerLocation.AddressLine4));
            outcomes.AddRange(BannedPhraseCheck(() => subject.Wage.WorkingWeekDescription));
            outcomes.AddRange(BannedPhraseCheck(() => subject.Wage.WageAdditionalInformation));
            outcomes.AddRange(BannedPhraseCheck(() => subject.Description));
            outcomes.AddRange(BannedPhraseCheck(() => subject.TrainingDescription));
            outcomes.AddRange(BannedPhraseCheck(() => subject.OutcomeDescription));
            outcomes.AddRange(BannedPhraseCheck(() => subject.ThingsToConsider));
            outcomes.AddRange(BannedPhraseCheck(() => subject.Skills.ToDelimitedString(","), "Skills"));
            outcomes.AddRange(BannedPhraseCheck(() =>
                                                subject.Qualifications.SelectMany(q => new [] { q.Grade, q.Subject }).ToDelimitedString(",")
                                                , "Qualifications"));
            outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerDescription));

            if (subject.EmployerContact != null)
            {
                outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerContact.Name));
            }

            if (subject.ProviderContact != null)
            {
                outcomes.AddRange(BannedPhraseCheck(() => subject.ProviderContact.Name));
            }

            if (subject.EmployerNameOption == EmployerNameOption.TradingName)
            {
                outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerName));
            }

            if (subject.EmployerNameOption == EmployerNameOption.Anonymous)
            {
                outcomes.AddRange(BannedPhraseCheck(() => subject.EmployerName));
            }

            outcomes.AddRange(BannedPhraseCheck(() => subject.ApplicationInstructions));

            var outcome = outcomeBuilder.Add(outcomes)
                          .ComputeSum();

            return(outcome);
        }
Пример #3
0
        public Task <RuleOutcome> EvaluateAsync(Vacancy subject)
        {
            var outcomeBuilder = RuleOutcomeDetailsBuilder.Create(RuleId);

            var score = subject.IsAnonymous ? 100 : 0;

            var outcomeResult = new RuleOutcome(
                RuleId,
                score,
                "Anonymous employer",
                nameof(Vacancy.EmployerName));

            var outcome = outcomeBuilder.Add(new [] { outcomeResult })
                          .ComputeSum();

            return(Task.FromResult(outcome));
        }