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