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