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);
        }