From 904b9ad487339149284030b06015f06e576d81e3 Mon Sep 17 00:00:00 2001 From: Yanan Wang Date: Sun, 2 Nov 2025 22:36:34 -0600 Subject: [PATCH 1/3] wip --- Directory.Packages.props | 3 + .../Arguments/TextAnalysisRequest.cs | 52 ++++ .../FuzzSharp/INgramProcessor.cs | 27 ++ .../FuzzSharp/IResultProcessor.cs | 18 ++ .../FuzzSharp/ITextAnalysisService.cs | 13 + .../FuzzSharp/ITokenMatcher.cs | 40 +++ .../FuzzSharp/IVocabularyService.cs | 9 + .../FuzzSharp/Models/FlaggedItem.cs | 50 ++++ .../FuzzSharp/Models/TextAnalysisResponse.cs | 31 +++ .../BotSharp.Plugin.FuzzySharp.csproj | 17 ++ .../Constants/FuzzyMatcher.cs | 257 ++++++++++++++++++ .../Constants/MatchReason.cs | 21 ++ .../Constants/TextConstants.cs | 27 ++ .../Repository/IVocabularyRepository.cs | 8 + .../Repository/VocabularyRepository.cs | 16 ++ .../Services/Matching/DomainTermMatcher.cs | 24 ++ .../Services/Matching/ExactMatcher.cs | 24 ++ .../Services/NgramProcessor.cs | 204 ++++++++++++++ .../Services/ResultProcessor.cs | 83 ++++++ .../Services/TextAnalysisService.cs | 142 ++++++++++ .../Services/VocabularyService.cs | 184 +++++++++++++ .../Utils/TextTokenizer.cs | 64 +++++ 22 files changed, 1314 insertions(+) create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/INgramProcessor.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IResultProcessor.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITextAnalysisService.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITokenMatcher.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IVocabularyService.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/FlaggedItem.cs create mode 100644 src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/TextAnalysisResponse.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/MatchReason.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/DomainTermMatcher.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/ExactMatcher.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index b2105b870..d0cbc1bcb 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,7 +5,9 @@ true + + @@ -18,6 +20,7 @@ + diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs new file mode 100644 index 000000000..5382e970a --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs @@ -0,0 +1,52 @@ + +namespace BotSharp.Abstraction.FuzzSharp.Arguments +{ + public class TextAnalysisRequest + { + /// + /// Text to analyze + /// + [Required] + [JsonPropertyName("text")] + public string Text { get; set; } = string.Empty; + + /// + /// Folder path containing CSV files (will read all .csv files from the folder or its 'output' subfolder) + /// + [JsonPropertyName("vocabulary_folder_path")] + public string? VocabularyFolderPath { get; set; } + + /// + /// Domain term mapping CSV file + /// + [JsonPropertyName("domain_term_mapping_file")] + public string? DomainTermMappingFile { get; set; } + + /// + /// Min score for suggestions (0.0-1.0) + /// + [JsonPropertyName("cutoff")] + [Range(0.0, 1.0)] + public double Cutoff { get; set; } = 0.80; + + /// + /// Max candidates per domain (1-20) + /// + [JsonPropertyName("topk")] + [Range(1, 20)] + public int TopK { get; set; } = 5; + + /// + /// Max n-gram size (1-10) + /// + [JsonPropertyName("max_ngram")] + [Range(1, 10)] + public int MaxNgram { get; set; } = 5; + + /// + /// Include tokens field in response (default: False) + /// + [JsonPropertyName("include_tokens")] + public bool IncludeTokens { get; set; } = false; + } +} \ No newline at end of file diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/INgramProcessor.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/INgramProcessor.cs new file mode 100644 index 000000000..c2d91b0e4 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/INgramProcessor.cs @@ -0,0 +1,27 @@ +using BotSharp.Abstraction.FuzzSharp.Models; + +namespace BotSharp.Abstraction.FuzzSharp +{ + public interface INgramProcessor + { + /// + /// Process tokens and generate all possible n-gram match results + /// + /// List of tokens to process + /// Vocabulary (domain type -> vocabulary set) + /// Domain term mapping + /// Lookup table (lowercase vocabulary -> (canonical form, domain type list)) + /// Maximum n-gram length + /// Minimum confidence threshold for fuzzy matching + /// Maximum number of matches to return + /// List of flagged items + List ProcessNgrams( + List tokens, + Dictionary> vocabulary, + Dictionary domainTermMapping, + Dictionary DomainTypes)> lookup, + int maxNgram, + double cutoff, + int topK); + } +} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IResultProcessor.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IResultProcessor.cs new file mode 100644 index 000000000..b406f9348 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IResultProcessor.cs @@ -0,0 +1,18 @@ +using BotSharp.Abstraction.FuzzSharp.Models; + +namespace BotSharp.Abstraction.FuzzSharp +{ + /// + /// Result processor interface + /// Responsible for processing match results, including deduplication and sorting + /// + public interface IResultProcessor + { + /// + /// Process a list of flagged items, removing overlapping duplicates and sorting + /// + /// List of flagged items to process + /// Processed list of flagged items (deduplicated and sorted) + List ProcessResults(List flagged); + } +} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITextAnalysisService.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITextAnalysisService.cs new file mode 100644 index 000000000..4add4f62b --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITextAnalysisService.cs @@ -0,0 +1,13 @@ +using BotSharp.Abstraction.FuzzSharp.Arguments; +using BotSharp.Abstraction.FuzzSharp.Models; + +namespace BotSharp.Abstraction.FuzzSharp +{ + public interface ITextAnalysisService + { + /// + /// Analyze text for typos and entities using domain-specific vocabulary + /// + Task AnalyzeTextAsync(TextAnalysisRequest request); + } +} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITokenMatcher.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITokenMatcher.cs new file mode 100644 index 000000000..5e0b04ac5 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/ITokenMatcher.cs @@ -0,0 +1,40 @@ +namespace BotSharp.Abstraction.FuzzSharp +{ + public interface ITokenMatcher + { + /// + /// Try to match a content span and return a match result + /// + /// The matching context containing all necessary information + /// Match result if found, null otherwise + MatchResult? TryMatch(MatchContext context); + + /// + /// Priority of this matcher (higher priority matchers are tried first) + /// + int Priority { get; } + } + + /// + /// Context information for token matching + /// + public record MatchContext( + string ContentSpan, + string ContentLow, + int StartIndex, + int NgramLength, + Dictionary> Vocabulary, + Dictionary DomainTermMapping, + Dictionary DomainTypes)> Lookup, + double Cutoff, + int TopK); + + /// + /// Result of a token match + /// + public record MatchResult( + string CanonicalForm, + List DomainTypes, + string MatchType, + double Confidence); +} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IVocabularyService.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IVocabularyService.cs new file mode 100644 index 000000000..63210bed2 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/IVocabularyService.cs @@ -0,0 +1,9 @@ + +namespace BotSharp.Abstraction.FuzzSharp +{ + public interface IVocabularyService + { + Task>> LoadVocabularyAsync(string? folderPath); + Task> LoadDomainTermMappingAsync(string? filePath); + } +} \ No newline at end of file diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/FlaggedItem.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/FlaggedItem.cs new file mode 100644 index 000000000..1d9f0fc9b --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/FlaggedItem.cs @@ -0,0 +1,50 @@ + +namespace BotSharp.Abstraction.FuzzSharp.Models +{ + public class FlaggedItem + { + /// + /// Token index in the original text + /// + [JsonPropertyName("index")] + public int Index { get; set; } + + /// + /// Original token text + /// + [JsonPropertyName("token")] + public string Token { get; set; } = string.Empty; + + /// + /// Domain types where this token was found (e.g., ['client_Profile.Name', 'data_ServiceType.Name']) + /// + [JsonPropertyName("domain_types")] + public List DomainTypes { get; set; } = new(); + + /// + /// Type of match: 'domain_term_mapping' (business abbreviations, confidence=1.0) | + /// 'exact_match' (vocabulary matches, confidence=1.0) | + /// 'typo_correction' (spelling corrections, confidence less than 1.0) + /// + [JsonPropertyName("match_type")] + public string MatchType { get; set; } = string.Empty; + + /// + /// Canonical form or suggested correction + /// + [JsonPropertyName("canonical_form")] + public string CanonicalForm { get; set; } = string.Empty; + + /// + /// Confidence score (0.0-1.0, where 1.0 is exact match) + /// + [JsonPropertyName("confidence")] + public double Confidence { get; set; } + + /// + /// N-gram length (number of tokens in this match). Internal field, not included in JSON output. + /// + [JsonIgnore] + public int NgramLength { get; set; } + } +} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/TextAnalysisResponse.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/TextAnalysisResponse.cs new file mode 100644 index 000000000..af6bcab83 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Models/TextAnalysisResponse.cs @@ -0,0 +1,31 @@ + +namespace BotSharp.Abstraction.FuzzSharp.Models +{ + public class TextAnalysisResponse + { + /// + /// Original text + /// + [JsonPropertyName("original")] + public string Original { get; set; } = string.Empty; + + /// + /// Tokenized text (only included if include_tokens=true) + /// + [JsonPropertyName("tokens")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public List? Tokens { get; set; } + + /// + /// Flagged items (filter by 'match_type' field: 'domain_term_mapping', 'exact_match', or 'typo_correction') + /// + [JsonPropertyName("flagged")] + public List Flagged { get; set; } = new(); + + /// + /// Processing time in milliseconds + /// + [JsonPropertyName("processing_time_ms")] + public double ProcessingTimeMs { get; set; } + } +} \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj b/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj new file mode 100644 index 000000000..6948563d2 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs new file mode 100644 index 000000000..015535c46 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs @@ -0,0 +1,257 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Plugin.FuzzySharp.Services; +using BotSharp.Plugin.FuzzySharp.Utils; +using System.Text.RegularExpressions; +using FuzzySharp; + +namespace BotSharp.Plugin.FuzzySharp.Constants +{ + public class FuzzyMatcher : ITokenMatcher + { + public int Priority => 1; // Lowest priority + + public MatchResult? TryMatch(MatchContext context) + { + var match = CheckTypoCorrection(context.ContentSpan, context.Vocabulary, context.Cutoff); + if (match == null) + { + return null; + } + + return new MatchResult( + CanonicalForm: match.CanonicalForm, + DomainTypes: new List { match.DomainType }, + MatchType: MatchReason.TypoCorrection, + Confidence: match.Confidence); + } + + /// + /// Check typo correction using fuzzy matching with hybrid approach + /// + private TypoCorrectionMatch? CheckTypoCorrection( + string contentSpan, + Dictionary> vocabulary, + double cutoff) + { + // Hybrid filtering parameters + const double minLengthRatio = 0.4; + const double maxLengthRatio = 2.5; + const int allowTokenDiff = 1; + const int baseCutoff = 60; + const int strictScoreCutoff = 85; + const bool useAdaptiveThreshold = true; + + // Normalize and prepare query + var normalizedToken = Normalize(contentSpan); + var queryTokenCount = TextTokenizer.SimpleTokenize(normalizedToken).Count; + var queryLenChars = normalizedToken.Replace(" ", "").Length; + + // Compute adaptive thresholds based on query length + var (adaptiveCutoff, adaptiveStrictCutoff) = ComputeAdaptiveThresholds( + queryLenChars, baseCutoff, strictScoreCutoff, useAdaptiveThreshold); + + // Find best match across all domains + var (bestName, bestType, bestScore) = FindBestMatchAcrossDomains( + normalizedToken, + queryTokenCount, + vocabulary, + minLengthRatio, + maxLengthRatio, + allowTokenDiff, + adaptiveCutoff, + adaptiveStrictCutoff); + + + if (bestName == null) + { + return null; + } + + // Apply user's cutoff threshold + if (bestScore < cutoff * 100) + { + return null; + } + + return new TypoCorrectionMatch( + bestName, + bestType!, + Math.Round(bestScore / 100.0, 3)); + } + + /// + /// Normalize text for fuzzy matching comparison + /// - Replaces all non-word characters (except apostrophes) with spaces + /// - Converts to lowercase + /// - Collapses multiple spaces into single space + /// - Trims leading/trailing whitespace + /// Example: "Test-Value (123)" → "test value 123" + /// + /// Text to normalize + /// Normalized text suitable for fuzzy matching + private string Normalize(string text) + { + // Replace non-word characters (except apostrophes) with spaces + var normalized = Regex.Replace(text, @"[^\w']+", " ", RegexOptions.IgnoreCase); + // Convert to lowercase, collapse multiple spaces, and trim + return Regex.Replace(normalized.ToLowerInvariant(), @"\s+", " ").Trim(); + } + + private (int AdaptiveCutoff, int AdaptiveStrictCutoff) ComputeAdaptiveThresholds( + int queryLenChars, int scoreCutoff, int strictScoreCutoff, bool useAdaptiveThreshold) + { + if (!useAdaptiveThreshold) + { + return (scoreCutoff, strictScoreCutoff); + } + + if (queryLenChars <= 3) + { + return (Math.Max(scoreCutoff, 90), 95); + } + else if (queryLenChars <= 10) + { + return (scoreCutoff, strictScoreCutoff); + } + else + { + return (Math.Max(scoreCutoff - 5, 55), Math.Max(strictScoreCutoff - 5, 80)); + } + } + + private (string? BestName, string? BestType, int BestScore) FindBestMatchAcrossDomains( + string normalizedToken, + int queryTokenCount, + Dictionary> vocabulary, + double minLengthRatio, + double maxLengthRatio, + int allowTokenDiff, + int adaptiveCutoff, + int adaptiveStrictCutoff) + { + string? bestName = null; + string? bestType = null; + int bestScore = 0; + + foreach (var (domainType, terms) in vocabulary) + { + var (domainBestName, domainBestScore) = FindBestCandidateInDomain( + normalizedToken, + queryTokenCount, + terms.ToList(), + minLengthRatio, + maxLengthRatio, + allowTokenDiff, + adaptiveCutoff, + adaptiveStrictCutoff); + + if (domainBestName != null && domainBestScore > bestScore) + { + bestName = domainBestName; + bestType = domainType; + bestScore = domainBestScore; + } + } + + return (bestName, bestType, bestScore); + } + + private (string? BestName, int BestScore) FindBestCandidateInDomain( + string normalizedToken, + int queryTokenCount, + List candidates, + double minLengthRatio, + double maxLengthRatio, + int allowTokenDiff, + int adaptiveCutoff, + int adaptiveStrictCutoff) + { + // Step 1: Filter by character length ratio (coarse filter) + var lengthFiltered = FilterByLengthRatio(candidates, normalizedToken, minLengthRatio, maxLengthRatio); + if (lengthFiltered.Count == 0) + { + return (null, 0); + } + + // Step 2: Find the best fuzzy match from length-filtered candidates + int domainBestScore = 0; + string? domainBestName = null; + + foreach (var candidate in lengthFiltered) + { + var normalizedCandidate = Normalize(candidate); + var score = Fuzz.Ratio(normalizedToken, normalizedCandidate); + + if (score < adaptiveCutoff) + { + continue; + } + + // Step 3: Apply token count filtering + if (IsValidMatch(score, queryTokenCount, normalizedCandidate, allowTokenDiff, adaptiveCutoff, adaptiveStrictCutoff)) + { + if (score > domainBestScore) + { + domainBestScore = score; + domainBestName = candidate; + } + } + } + + return (domainBestName, domainBestScore); + } + + private List FilterByLengthRatio( + List choices, string queryNormalized, double minLengthRatio, double maxLengthRatio) + { + var qLen = queryNormalized.Replace(" ", "").Length; + if (qLen == 0) + { + return new List(); + } + + var kept = new List(); + foreach (var choice in choices) + { + var cNormalized = Normalize(choice); + var cLen = cNormalized.Replace(" ", "").Length; + if (cLen == 0) + { + continue; + } + + var lengthRatio = (double)cLen / qLen; + if (lengthRatio >= minLengthRatio && lengthRatio <= maxLengthRatio) + { + kept.Add(choice); + } + } + + return kept; + } + + private bool IsValidMatch( + int score, + int queryTokenCount, + string normalizedCandidate, + int allowTokenDiff, + int adaptiveCutoff, + int adaptiveStrictCutoff) + { + var termTokenCount = TextTokenizer.SimpleTokenize(normalizedCandidate).Count; + var tokenDiff = Math.Abs(termTokenCount - queryTokenCount); + + if (tokenDiff == 0 && score >= adaptiveCutoff) + { + return true; + } + + if (tokenDiff <= allowTokenDiff && score >= adaptiveStrictCutoff) + { + return true; + } + + return false; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/MatchReason.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/MatchReason.cs new file mode 100644 index 000000000..369d3fb9c --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/MatchReason.cs @@ -0,0 +1,21 @@ + +namespace BotSharp.Plugin.FuzzySharp.Constants +{ + public static class MatchReason + { + /// + /// Token matched a domain term mapping (e.g., HVAC -> Air Conditioning/Heating) + /// + public const string DomainTermMapping = "domain_term_mapping"; + + /// + /// Token exactly matched a vocabulary entry + /// + public const string ExactMatch = "exact_match"; + + /// + /// Token was flagged as a potential typo and a correction was suggested + /// + public const string TypoCorrection = "typo_correction"; + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs new file mode 100644 index 000000000..9032589d0 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs @@ -0,0 +1,27 @@ + +namespace BotSharp.Plugin.FuzzySharp.Constants +{ + public static class TextConstants + { + /// + /// Characters that need to be separated during tokenization (by adding spaces before and after) + /// Includes: parentheses, brackets, braces, punctuation marks, special symbols, etc. + /// This ensures "(IH)" is split into "(", "IH", ")" + /// + public static readonly char[] TokenSeparationChars = + { + // Parentheses and brackets + '(', ')', '[', ']', '{', '}', + // Punctuation marks + ',', '.', ';', ':', '!', '?', + // Special symbols + '=', '@', '#', '$', '%', '^', '&', '*', '+', '-', '/', '\\', '|', '<', '>', '~', '`' + }; + + /// + /// Text separators used for tokenization and n-gram processing + /// Includes: equals, colon, semicolon, question mark, exclamation mark, comma, period + /// + public static readonly char[] SeparatorChars = { '=', ':', ';', '?', '!', ',', '.' }; + } +} \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs new file mode 100644 index 000000000..7cab839ca --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs @@ -0,0 +1,8 @@ + +namespace BotSharp.Plugin.FuzzySharp.Repository +{ + public interface IVocabularyRepository + { + Task>> FetchTableColumnValuesAsync(); + } +} \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs new file mode 100644 index 000000000..93142b2c9 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Plugin.FuzzySharp.Repository +{ + public class VocabularyRepository : IVocabularyRepository + { + public Task>> FetchTableColumnValuesAsync() + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/DomainTermMatcher.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/DomainTermMatcher.cs new file mode 100644 index 000000000..e8813013d --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/DomainTermMatcher.cs @@ -0,0 +1,24 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Plugin.FuzzySharp.Constants; + +namespace BotSharp.Plugin.FuzzySharp.Services.Matching +{ + public class DomainTermMatcher : ITokenMatcher + { + public int Priority => 3; // Highest priority + + public MatchResult? TryMatch(MatchContext context) + { + if (context.DomainTermMapping.TryGetValue(context.ContentLow, out var match)) + { + return new MatchResult( + CanonicalForm: match.CanonicalForm, + DomainTypes: new List { match.DbPath }, + MatchType: MatchReason.DomainTermMapping, + Confidence: 1.0); + } + + return null; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/ExactMatcher.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/ExactMatcher.cs new file mode 100644 index 000000000..f404f47b8 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/ExactMatcher.cs @@ -0,0 +1,24 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Plugin.FuzzySharp.Constants; + +namespace BotSharp.Plugin.FuzzySharp.Services.Matching +{ + public class ExactMatcher : ITokenMatcher + { + public int Priority => 2; // Second highest priority + + public MatchResult? TryMatch(MatchContext context) + { + if (context.Lookup.TryGetValue(context.ContentLow, out var match)) + { + return new MatchResult( + CanonicalForm: match.CanonicalForm, + DomainTypes: match.DomainTypes, + MatchType: MatchReason.ExactMatch, + Confidence: 1.0); + } + + return null; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs new file mode 100644 index 000000000..abfeac7cf --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs @@ -0,0 +1,204 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Abstraction.FuzzSharp.Models; +using BotSharp.Plugin.FuzzySharp.Constants; +using BotSharp.Plugin.FuzzySharp.Utils; + +namespace BotSharp.Plugin.FuzzySharp.Services +{ + public class NgramProcessor : INgramProcessor + { + private readonly List _matchers; + + public NgramProcessor(IEnumerable matchers) + { + // Sort matchers by priority (highest first) + _matchers = matchers.OrderByDescending(m => m.Priority).ToList(); + } + + public List ProcessNgrams( + List tokens, + Dictionary> vocabulary, + Dictionary domainTermMapping, + Dictionary DomainTypes)> lookup, + int maxNgram, + double cutoff, + int topK) + { + var flagged = new List(); + + // Process n-grams from largest to smallest + for (int n = maxNgram; n >= 1; n--) + { + for (int i = 0; i <= tokens.Count - n; i++) + { + var item = ProcessSingleNgram( + tokens, + i, + n, + vocabulary, + domainTermMapping, + lookup, + cutoff, + topK); + + if (item != null) + { + flagged.Add(item); + } + } + } + + return flagged; + } + + /// + /// Process a single n-gram at the specified position + /// + private FlaggedItem? ProcessSingleNgram( + List tokens, + int startIdx, + int n, + Dictionary> vocabulary, + Dictionary domainTermMapping, + Dictionary DomainTypes)> lookup, + double cutoff, + int topK) + { + // Skip if starting with separator + if (IsSeparatorToken(tokens[startIdx])) + { + return null; + } + + // Extract content span (remove leading/trailing separators) + var (contentSpan, contentIndices) = ExtractContentSpan(tokens, startIdx, n); + + if (string.IsNullOrWhiteSpace(contentSpan) || contentIndices.Count == 0) + { + return null; + } + + var startIndex = contentIndices[0]; + var contentLow = contentSpan.ToLowerInvariant(); + + // Before fuzzy matching, skip if any contiguous sub-span has an exact or mapped match + // This prevents "with pending dispatch" from being fuzzy-matched when "pending dispatch" is exact + if (n > 1 && HasExactSubspanMatch(contentSpan, lookup, domainTermMapping)) + { + return null; + } + + // Try matching in priority order using matchers + var context = new MatchContext( + contentSpan, contentLow, startIndex, n, + vocabulary, domainTermMapping, lookup, + cutoff, topK); + + foreach (var matcher in _matchers) + { + var matchResult = matcher.TryMatch(context); + if (matchResult != null) + { + return CreateFlaggedItem(matchResult, startIndex, contentSpan, n); + } + } + + return null; + } + + /// + /// Create a FlaggedItem from a MatchResult + /// + private FlaggedItem CreateFlaggedItem( + MatchResult matchResult, + int startIndex, + string contentSpan, + int ngramLength) + { + return new FlaggedItem + { + Index = startIndex, + Token = contentSpan, + DomainTypes = matchResult.DomainTypes, + MatchType = matchResult.MatchType, + CanonicalForm = matchResult.CanonicalForm, + Confidence = matchResult.Confidence, + NgramLength = ngramLength + }; + } + + /// + /// Check if token is a separator + /// + private bool IsSeparatorToken(string token) + { + return token.Length == 1 && TextConstants.SeparatorChars.Contains(token[0]); + } + + /// + /// Extract content span by removing leading and trailing separators + /// + private (string ContentSpan, List ContentIndices) ExtractContentSpan( + List tokens, int startIdx, int n) + { + var span = tokens.Skip(startIdx).Take(n).ToList(); + var indices = Enumerable.Range(startIdx, n).ToList(); + + // Remove leading separators + while (span.Count > 0 && IsSeparatorToken(span[0])) + { + span.RemoveAt(0); + indices.RemoveAt(0); + } + + // Remove trailing separators + while (span.Count > 0 && IsSeparatorToken(span[^1])) + { + span.RemoveAt(span.Count - 1); + indices.RemoveAt(indices.Count - 1); + } + + return (string.Join(" ", span), indices); + } + + /// + /// Check whether any contiguous sub-span of content_span is an exact hit + /// + private bool HasExactSubspanMatch( + string contentSpan, + Dictionary DomainTypes)> lookup, + Dictionary domainTermMapping) + { + if (string.IsNullOrWhiteSpace(contentSpan)) + { + return false; + } + + var contentTokens = TextTokenizer.SimpleTokenize(contentSpan); + + // Try all contiguous sub-spans + for (int subN = contentTokens.Count; subN > 0; subN--) + { + for (int subI = 0; subI <= contentTokens.Count - subN; subI++) + { + var subSpan = string.Join(" ", contentTokens.Skip(subI).Take(subN)); + var subSpanLow = subSpan.ToLowerInvariant(); + + // Check if it's in domain term mapping + if (domainTermMapping.ContainsKey(subSpanLow)) + { + return true; + } + + // Check if it's an exact match in lookup table + if (lookup.ContainsKey(subSpanLow)) + { + return true; + } + } + } + + return false; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs new file mode 100644 index 000000000..8e87ff806 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs @@ -0,0 +1,83 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Abstraction.FuzzSharp.Models; + +namespace BotSharp.Plugin.FuzzySharp.Services +{ + public class ResultProcessor : IResultProcessor + { + public List ProcessResults(List flagged) + { + // Remove overlapping duplicates + var deduped = RemoveOverlappingDuplicates(flagged); + + // Sort by confidence (descending), then match_type (alphabetically) + // This matches Python's _sort_and_format_results function + return deduped + .OrderByDescending(f => f.Confidence) + .ThenBy(f => f.MatchType) + .ToList(); + } + + /// + /// Remove overlapping detections with the same canonical form and match type. + /// When multiple detections overlap and have the same canonical_form and match_type, + /// keep only the best one based on: 1. Highest confidence, 2. Shortest n-gram length + /// This matches Python's _remove_overlapping_duplicates function. + /// + private List RemoveOverlappingDuplicates(List flagged) + { + var deduped = new List(); + var skipIndices = new HashSet(); + + for (int i = 0; i < flagged.Count; i++) + { + if (skipIndices.Contains(i)) + { + continue; + } + + var item = flagged[i]; + var itemRange = (item.Index, item.Index + item.NgramLength); + + // Find all overlapping items with same canonical_form and match_type + var overlappingGroup = new List { item }; + for (int j = i + 1; j < flagged.Count; j++) + { + if (skipIndices.Contains(j)) + { + continue; + } + + var other = flagged[j]; + if (item.CanonicalForm == other.CanonicalForm && item.MatchType == other.MatchType) + { + var otherRange = (other.Index, other.Index + other.NgramLength); + if (RangesOverlap(itemRange, otherRange)) + { + overlappingGroup.Add(other); + skipIndices.Add(j); + } + } + } + + // Keep the best item from the overlapping group + // Priority: highest confidence, then shortest ngram + var bestItem = overlappingGroup + .OrderByDescending(x => x.Confidence) + .ThenBy(x => x.NgramLength) + .First(); + deduped.Add(bestItem); + } + + return deduped; + } + + /// + /// Check if two token ranges overlap. + /// + private bool RangesOverlap((int start, int end) range1, (int start, int end) range2) + { + return range1.start < range2.end && range2.start < range1.end; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs new file mode 100644 index 000000000..417a7ce89 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs @@ -0,0 +1,142 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Abstraction.FuzzSharp.Arguments; +using BotSharp.Abstraction.FuzzSharp.Models; +using BotSharp.Plugin.FuzzySharp.Utils; +using Microsoft.Extensions.Logging; +using System.Diagnostics; + +namespace BotSharp.Plugin.FuzzySharp.Services +{ + internal record TypoCorrectionMatch(string CanonicalForm, string DomainType, double Confidence); + + public class TextAnalysisService : ITextAnalysisService + { + private readonly ILogger _logger; + private readonly IVocabularyService _vocabularyService; + private readonly INgramProcessor _ngramProcessor; + private readonly IResultProcessor _resultProcessor; + + public TextAnalysisService( + ILogger logger, + IVocabularyService vocabularyService, + INgramProcessor ngramProcessor, + IResultProcessor resultProcessor) + { + _logger = logger; + _vocabularyService = vocabularyService; + _ngramProcessor = ngramProcessor; + _resultProcessor = resultProcessor; + } + + /// + /// Analyze text for typos and entities using domain-specific vocabulary + /// + public async Task AnalyzeTextAsync(TextAnalysisRequest request) + { + var stopwatch = Stopwatch.StartNew(); + try + { + // Tokenize the text + var tokens = TextTokenizer.Tokenize(request.Text); + + // Load vocabulary + var vocabulary = await _vocabularyService.LoadVocabularyAsync(request.VocabularyFolderPath); + + // Load domain term mapping + var domainTermMapping = await _vocabularyService.LoadDomainTermMappingAsync(request.DomainTermMappingFile); + + // Analyze text + var flagged = AnalyzeTokens(tokens, vocabulary, domainTermMapping, request); + + stopwatch.Stop(); + + var response = new TextAnalysisResponse + { + Original = request.Text, + Flagged = flagged, + ProcessingTimeMs = Math.Round(stopwatch.Elapsed.TotalMilliseconds, 2) + }; + + if (request.IncludeTokens) + { + response.Tokens = tokens; + } + + _logger.LogInformation( + $"Text analysis completed in {response.ProcessingTimeMs}ms | " + + $"Text length: {request.Text.Length} chars | " + + $"Flagged items: {flagged.Count}"); + + return response; + } + catch (Exception ex) + { + stopwatch.Stop(); + _logger.LogError(ex, $"Error analyzing text after {stopwatch.Elapsed.TotalMilliseconds}ms"); + throw; + } + } + + /// + /// Analyze tokens for typos and entities + /// + private List AnalyzeTokens( + List tokens, + Dictionary> vocabulary, + Dictionary domainTermMapping, + TextAnalysisRequest request) + { + // Build lookup table for O(1) exact match lookups (matching Python's build_lookup) + var lookup = BuildLookup(vocabulary); + + // Process n-grams and find matches + var flagged = _ngramProcessor.ProcessNgrams( + tokens, + vocabulary, + domainTermMapping, + lookup, + request.MaxNgram, + request.Cutoff, + request.TopK); + + // Process results: deduplicate and sort + return _resultProcessor.ProcessResults(flagged); + } + + /// + /// Build a lookup dictionary mapping lowercase terms to their canonical form and domain types. + /// This is a performance optimization - instead of iterating through all domains for each lookup, + /// we build a flat dictionary once at the start. + /// + /// Matches Python's build_lookup() function. + /// + private Dictionary DomainTypes)> BuildLookup( + Dictionary> vocabulary) + { + var lookup = new Dictionary DomainTypes)>(); + + foreach (var (domainType, terms) in vocabulary) + { + foreach (var term in terms) + { + var key = term.ToLowerInvariant(); + if (lookup.TryGetValue(key, out var existing)) + { + // Term already exists - add this domain type to the list if not already there + if (!existing.DomainTypes.Contains(domainType)) + { + existing.DomainTypes.Add(domainType); + } + } + else + { + // New term - create entry with single type in list + lookup[key] = (term, new List { domainType }); + } + } + } + + return lookup; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs new file mode 100644 index 000000000..5aa216b33 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs @@ -0,0 +1,184 @@ +using BotSharp.Abstraction.FuzzSharp; +using CsvHelper; +using CsvHelper.Configuration; +using Microsoft.Extensions.Logging; +using System.Globalization; + +namespace BotSharp.Plugin.FuzzySharp.Services +{ + public class VocabularyService : IVocabularyService + { + private readonly ILogger _logger; + + public VocabularyService(ILogger logger) + { + _logger = logger; + } + + public async Task>> LoadVocabularyAsync(string? folderPath) + { + var vocabulary = new Dictionary>(); + + if (string.IsNullOrEmpty(folderPath)) + { + return vocabulary; + } + + // Load CSV files from the folder + var csvFileDict = await LoadCsvFilesFromFolderAsync(folderPath); + if (csvFileDict.Count == 0) + { + return vocabulary; + } + + // Load each CSV file + foreach (var (domainType, filePath) in csvFileDict) + { + try + { + var terms = await LoadCsvFileAsync(filePath); + vocabulary[domainType] = terms; + _logger.LogInformation($"Loaded {terms.Count} terms for domain type '{domainType}' from {filePath}"); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Error loading CSV file for domain type '{domainType}': {filePath}"); + } + } + + return vocabulary; + } + + public async Task> LoadDomainTermMappingAsync(string? filePath) + { + var result = new Dictionary(); + + if (string.IsNullOrWhiteSpace(filePath)) + { + return result; + } + + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + return result; + } + + try + { + using var reader = new StreamReader(filePath); + using var csv = new CsvReader(reader, CreateCsvConfig()); + + await csv.ReadAsync(); + csv.ReadHeader(); + + if (!HasRequiredColumns(csv)) + { + _logger.LogWarning("Domain term mapping file missing required columns: {FilePath}", filePath); + return result; + } + + while (await csv.ReadAsync()) + { + var term = csv.GetField("term") ?? string.Empty; + var dbPath = csv.GetField("dbPath") ?? string.Empty; + var canonicalForm = csv.GetField("canonical_form") ?? string.Empty; + + if (term.Length == 0 || dbPath.Length == 0 || canonicalForm.Length == 0) + { + _logger.LogWarning( + "Missing column(s) in CSV at row {Row}: term={Term}, dbPath={DbPath}, canonical_form={CanonicalForm}", + csv.Parser.RawRow, + term ?? "", + dbPath ?? "", + canonicalForm ?? ""); + continue; + } + + var key = term.ToLowerInvariant(); + result[key] = (dbPath, canonicalForm); + } + + _logger.LogInformation("Loaded domain term mapping from {FilePath}: {Count} terms", filePath, result.Count); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error loading domain term mapping file: {FilePath}", filePath); + } + + return result; + } + + private async Task> LoadCsvFileAsync(string filePath) + { + var terms = new HashSet(StringComparer.OrdinalIgnoreCase); + + if (!File.Exists(filePath)) + { + _logger.LogWarning($"CSV file does not exist: {filePath}"); + return terms; + } + + using var reader = new StreamReader(filePath); + using var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = false // No header in the CSV files + }); + + while (await csv.ReadAsync()) + { + // Read the first column (assuming it contains the terms) + var term = csv.GetField(0); + if (!string.IsNullOrWhiteSpace(term)) + { + terms.Add(term.Trim()); + } + } + + _logger.LogInformation($"Loaded {terms.Count} terms from {Path.GetFileName(filePath)}"); + return terms; + } + + private async Task> LoadCsvFilesFromFolderAsync(string folderPath) + { + var csvFileDict = new Dictionary(); + + // Check if the folder has an 'output' subdirectory + var outputFolder = Path.Combine(folderPath, "output"); + var searchFolder = Directory.Exists(outputFolder) ? outputFolder : folderPath; + + if (!Directory.Exists(searchFolder)) + { + _logger.LogWarning($"Folder does not exist: {searchFolder}"); + return csvFileDict; + } + + var csvFiles = Directory.GetFiles(searchFolder, "*.csv"); + foreach (var file in csvFiles) + { + var fileName = Path.GetFileNameWithoutExtension(file); + csvFileDict[fileName] = file; + } + + _logger.LogInformation($"Loaded {csvFileDict.Count} CSV files from {searchFolder}"); + return await Task.FromResult(csvFileDict); + } + + private static CsvConfiguration CreateCsvConfig() + { + return new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = true, + DetectColumnCountChanges = true, + MissingFieldFound = null + }; + } + + private static bool HasRequiredColumns(CsvReader csv) + { + return csv.HeaderRecord is { Length: > 0 } headers + && headers.Contains("term") + && headers.Contains("dbPath") + && headers.Contains("canonical_form"); + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs new file mode 100644 index 000000000..225094782 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs @@ -0,0 +1,64 @@ +using BotSharp.Plugin.FuzzySharp.Constants; + +namespace BotSharp.Plugin.FuzzySharp.Utils +{ + public static class TextTokenizer + { + /// + /// Preprocess text: add spaces before and after characters that need to be separated + /// This allows subsequent simple whitespace tokenization to correctly separate these characters + /// Example: "(IH)" -> " ( IH ) " -> ["(", "IH", ")"] + /// + /// Text to preprocess + /// Preprocessed text + public static string PreprocessText(string text) + { + if (string.IsNullOrWhiteSpace(text)) + { + return text; + } + + var result = new System.Text.StringBuilder(text.Length * 2); + + foreach (var ch in text) + { + // If it's a character that needs to be separated, add spaces before and after + if (TextConstants.TokenSeparationChars.Contains(ch)) + { + result.Append(' '); + result.Append(ch); + result.Append(' '); + } + else + { + result.Append(ch); + } + } + + return result.ToString(); + } + + /// + /// Simple whitespace tokenization + /// Should be called after preprocessing text with PreprocessText + /// + /// Text to tokenize + /// List of tokens + public static List SimpleTokenize(string text) + { + return text.Split(new[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + } + + /// + /// Complete tokenization flow: preprocessing + tokenization + /// This is the recommended usage + /// + /// Text to tokenize + /// List of tokens + public static List Tokenize(string text) + { + var preprocessed = PreprocessText(text); + return SimpleTokenize(preprocessed); + } + } +} From 616480a6462da2cc0d036f8cacb5f032ef5c1a07 Mon Sep 17 00:00:00 2001 From: Yanan Wang Date: Thu, 6 Nov 2025 14:01:08 -0600 Subject: [PATCH 2/3] Add FuzzySharp for NER --- BotSharp.sln | 11 + .../Arguments/TextAnalysisRequest.cs | 4 +- .../BotSharp.Plugin.FuzzySharp.csproj | 8 +- .../Constants/FuzzyMatcher.cs | 257 - .../Constants/TextConstants.cs | 13 +- .../Controllers/FuzzySharpController.cs | 61 + .../FuzzySharpPlugin.cs | 29 + .../Repository/IVocabularyRepository.cs | 8 - .../Repository/VocabularyRepository.cs | 16 - .../Services/Matching/FuzzyMatcher.cs | 82 + .../{ => Processors}/NgramProcessor.cs | 110 +- .../{ => Processors}/ResultProcessor.cs | 38 +- .../Services/TextAnalysisService.cs | 4 +- .../Services/VocabularyService.cs | 25 +- .../BotSharp.Plugin.FuzzySharp/Using.cs | 10 + .../Utils/TextTokenizer.cs | 6 +- .../data/fuzzySharp/domainTermMapping.csv | 5 + .../vocabulary/client_Profile.ClientCode.csv | 514 + .../vocabulary/client_Profile.Name.csv | 514 + .../vocabulary/data_ServiceCategory.Name.csv | 157 + .../vocabulary/data_ServiceCode.Name.csv | 10189 ++++++++++++++++ .../vocabulary/data_ServiceType.Name.csv | 1788 +++ .../vocabulary/data_WOStatus.Name.csv | 39 + src/WebStarter/WebStarter.csproj | 1 + src/WebStarter/appsettings.json | 3 +- 25 files changed, 13483 insertions(+), 409 deletions(-) delete mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Controllers/FuzzySharpController.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/FuzzySharpPlugin.cs delete mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs delete mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/FuzzyMatcher.cs rename src/Plugins/BotSharp.Plugin.FuzzySharp/Services/{ => Processors}/NgramProcessor.cs (52%) rename src/Plugins/BotSharp.Plugin.FuzzySharp/Services/{ => Processors}/ResultProcessor.cs (67%) create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/Using.cs create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/domainTermMapping.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.ClientCode.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.Name.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCategory.Name.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCode.Name.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceType.Name.csv create mode 100644 src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_WOStatus.Name.csv diff --git a/BotSharp.sln b/BotSharp.sln index e992d26ad..102137084 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -149,6 +149,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Plugin.ExcelHandle EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Plugin.ImageHandler", "src\Plugins\BotSharp.Plugin.ImageHandler\BotSharp.Plugin.ImageHandler.csproj", "{242F2D93-FCCE-4982-8075-F3052ECCA92C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Plugin.FuzzySharp", "src\Plugins\BotSharp.Plugin.FuzzySharp\BotSharp.Plugin.FuzzySharp.csproj", "{E7C243B9-E751-B3B4-8F16-95C76CA90D31}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -629,6 +631,14 @@ Global {242F2D93-FCCE-4982-8075-F3052ECCA92C}.Release|Any CPU.Build.0 = Release|Any CPU {242F2D93-FCCE-4982-8075-F3052ECCA92C}.Release|x64.ActiveCfg = Release|Any CPU {242F2D93-FCCE-4982-8075-F3052ECCA92C}.Release|x64.Build.0 = Release|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Debug|x64.ActiveCfg = Debug|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Debug|x64.Build.0 = Debug|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Release|Any CPU.Build.0 = Release|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Release|x64.ActiveCfg = Release|Any CPU + {E7C243B9-E751-B3B4-8F16-95C76CA90D31}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -701,6 +711,7 @@ Global {0428DEAA-E4FE-4259-A6D8-6EDD1A9D0702} = {51AFE054-AE99-497D-A593-69BAEFB5106F} {FC63C875-E880-D8BB-B8B5-978AB7B62983} = {51AFE054-AE99-497D-A593-69BAEFB5106F} {242F2D93-FCCE-4982-8075-F3052ECCA92C} = {51AFE054-AE99-497D-A593-69BAEFB5106F} + {E7C243B9-E751-B3B4-8F16-95C76CA90D31} = {51AFE054-AE99-497D-A593-69BAEFB5106F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A9969D89-C98B-40A5-A12B-FC87E55B3A19} diff --git a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs index 5382e970a..32354406e 100644 --- a/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs +++ b/src/Infrastructure/BotSharp.Abstraction/FuzzSharp/Arguments/TextAnalysisRequest.cs @@ -13,8 +13,8 @@ public class TextAnalysisRequest /// /// Folder path containing CSV files (will read all .csv files from the folder or its 'output' subfolder) /// - [JsonPropertyName("vocabulary_folder_path")] - public string? VocabularyFolderPath { get; set; } + [JsonPropertyName("vocabulary_folder_name")] + public string? VocabularyFolderName { get; set; } /// /// Domain term mapping CSV file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj b/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj index 6948563d2..8561dc204 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/BotSharp.Plugin.FuzzySharp.csproj @@ -1,9 +1,13 @@  - net8.0 - enable + $(TargetFramework) enable + $(LangVersion) + $(BotSharpVersion) + $(GeneratePackageOnBuild) + $(GenerateDocumentationFile) + $(SolutionDir)packages diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs deleted file mode 100644 index 015535c46..000000000 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/FuzzyMatcher.cs +++ /dev/null @@ -1,257 +0,0 @@ -using BotSharp.Abstraction.FuzzSharp; -using BotSharp.Plugin.FuzzySharp.Services; -using BotSharp.Plugin.FuzzySharp.Utils; -using System.Text.RegularExpressions; -using FuzzySharp; - -namespace BotSharp.Plugin.FuzzySharp.Constants -{ - public class FuzzyMatcher : ITokenMatcher - { - public int Priority => 1; // Lowest priority - - public MatchResult? TryMatch(MatchContext context) - { - var match = CheckTypoCorrection(context.ContentSpan, context.Vocabulary, context.Cutoff); - if (match == null) - { - return null; - } - - return new MatchResult( - CanonicalForm: match.CanonicalForm, - DomainTypes: new List { match.DomainType }, - MatchType: MatchReason.TypoCorrection, - Confidence: match.Confidence); - } - - /// - /// Check typo correction using fuzzy matching with hybrid approach - /// - private TypoCorrectionMatch? CheckTypoCorrection( - string contentSpan, - Dictionary> vocabulary, - double cutoff) - { - // Hybrid filtering parameters - const double minLengthRatio = 0.4; - const double maxLengthRatio = 2.5; - const int allowTokenDiff = 1; - const int baseCutoff = 60; - const int strictScoreCutoff = 85; - const bool useAdaptiveThreshold = true; - - // Normalize and prepare query - var normalizedToken = Normalize(contentSpan); - var queryTokenCount = TextTokenizer.SimpleTokenize(normalizedToken).Count; - var queryLenChars = normalizedToken.Replace(" ", "").Length; - - // Compute adaptive thresholds based on query length - var (adaptiveCutoff, adaptiveStrictCutoff) = ComputeAdaptiveThresholds( - queryLenChars, baseCutoff, strictScoreCutoff, useAdaptiveThreshold); - - // Find best match across all domains - var (bestName, bestType, bestScore) = FindBestMatchAcrossDomains( - normalizedToken, - queryTokenCount, - vocabulary, - minLengthRatio, - maxLengthRatio, - allowTokenDiff, - adaptiveCutoff, - adaptiveStrictCutoff); - - - if (bestName == null) - { - return null; - } - - // Apply user's cutoff threshold - if (bestScore < cutoff * 100) - { - return null; - } - - return new TypoCorrectionMatch( - bestName, - bestType!, - Math.Round(bestScore / 100.0, 3)); - } - - /// - /// Normalize text for fuzzy matching comparison - /// - Replaces all non-word characters (except apostrophes) with spaces - /// - Converts to lowercase - /// - Collapses multiple spaces into single space - /// - Trims leading/trailing whitespace - /// Example: "Test-Value (123)" → "test value 123" - /// - /// Text to normalize - /// Normalized text suitable for fuzzy matching - private string Normalize(string text) - { - // Replace non-word characters (except apostrophes) with spaces - var normalized = Regex.Replace(text, @"[^\w']+", " ", RegexOptions.IgnoreCase); - // Convert to lowercase, collapse multiple spaces, and trim - return Regex.Replace(normalized.ToLowerInvariant(), @"\s+", " ").Trim(); - } - - private (int AdaptiveCutoff, int AdaptiveStrictCutoff) ComputeAdaptiveThresholds( - int queryLenChars, int scoreCutoff, int strictScoreCutoff, bool useAdaptiveThreshold) - { - if (!useAdaptiveThreshold) - { - return (scoreCutoff, strictScoreCutoff); - } - - if (queryLenChars <= 3) - { - return (Math.Max(scoreCutoff, 90), 95); - } - else if (queryLenChars <= 10) - { - return (scoreCutoff, strictScoreCutoff); - } - else - { - return (Math.Max(scoreCutoff - 5, 55), Math.Max(strictScoreCutoff - 5, 80)); - } - } - - private (string? BestName, string? BestType, int BestScore) FindBestMatchAcrossDomains( - string normalizedToken, - int queryTokenCount, - Dictionary> vocabulary, - double minLengthRatio, - double maxLengthRatio, - int allowTokenDiff, - int adaptiveCutoff, - int adaptiveStrictCutoff) - { - string? bestName = null; - string? bestType = null; - int bestScore = 0; - - foreach (var (domainType, terms) in vocabulary) - { - var (domainBestName, domainBestScore) = FindBestCandidateInDomain( - normalizedToken, - queryTokenCount, - terms.ToList(), - minLengthRatio, - maxLengthRatio, - allowTokenDiff, - adaptiveCutoff, - adaptiveStrictCutoff); - - if (domainBestName != null && domainBestScore > bestScore) - { - bestName = domainBestName; - bestType = domainType; - bestScore = domainBestScore; - } - } - - return (bestName, bestType, bestScore); - } - - private (string? BestName, int BestScore) FindBestCandidateInDomain( - string normalizedToken, - int queryTokenCount, - List candidates, - double minLengthRatio, - double maxLengthRatio, - int allowTokenDiff, - int adaptiveCutoff, - int adaptiveStrictCutoff) - { - // Step 1: Filter by character length ratio (coarse filter) - var lengthFiltered = FilterByLengthRatio(candidates, normalizedToken, minLengthRatio, maxLengthRatio); - if (lengthFiltered.Count == 0) - { - return (null, 0); - } - - // Step 2: Find the best fuzzy match from length-filtered candidates - int domainBestScore = 0; - string? domainBestName = null; - - foreach (var candidate in lengthFiltered) - { - var normalizedCandidate = Normalize(candidate); - var score = Fuzz.Ratio(normalizedToken, normalizedCandidate); - - if (score < adaptiveCutoff) - { - continue; - } - - // Step 3: Apply token count filtering - if (IsValidMatch(score, queryTokenCount, normalizedCandidate, allowTokenDiff, adaptiveCutoff, adaptiveStrictCutoff)) - { - if (score > domainBestScore) - { - domainBestScore = score; - domainBestName = candidate; - } - } - } - - return (domainBestName, domainBestScore); - } - - private List FilterByLengthRatio( - List choices, string queryNormalized, double minLengthRatio, double maxLengthRatio) - { - var qLen = queryNormalized.Replace(" ", "").Length; - if (qLen == 0) - { - return new List(); - } - - var kept = new List(); - foreach (var choice in choices) - { - var cNormalized = Normalize(choice); - var cLen = cNormalized.Replace(" ", "").Length; - if (cLen == 0) - { - continue; - } - - var lengthRatio = (double)cLen / qLen; - if (lengthRatio >= minLengthRatio && lengthRatio <= maxLengthRatio) - { - kept.Add(choice); - } - } - - return kept; - } - - private bool IsValidMatch( - int score, - int queryTokenCount, - string normalizedCandidate, - int allowTokenDiff, - int adaptiveCutoff, - int adaptiveStrictCutoff) - { - var termTokenCount = TextTokenizer.SimpleTokenize(normalizedCandidate).Count; - var tokenDiff = Math.Abs(termTokenCount - queryTokenCount); - - if (tokenDiff == 0 && score >= adaptiveCutoff) - { - return true; - } - - if (tokenDiff <= allowTokenDiff && score >= adaptiveStrictCutoff) - { - return true; - } - - return false; - } - } -} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs index 9032589d0..8f160ae5f 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Constants/TextConstants.cs @@ -8,20 +8,23 @@ public static class TextConstants /// Includes: parentheses, brackets, braces, punctuation marks, special symbols, etc. /// This ensures "(IH)" is split into "(", "IH", ")" /// - public static readonly char[] TokenSeparationChars = + public static readonly char[] SeparatorChars = { // Parentheses and brackets '(', ')', '[', ']', '{', '}', // Punctuation marks ',', '.', ';', ':', '!', '?', // Special symbols - '=', '@', '#', '$', '%', '^', '&', '*', '+', '-', '/', '\\', '|', '<', '>', '~', '`' + '=', '@', '#', '$', '%', '^', '&', '*', '+', '-', '\\', '|', '<', '>', '~', '`' }; /// - /// Text separators used for tokenization and n-gram processing - /// Includes: equals, colon, semicolon, question mark, exclamation mark, comma, period + /// Whitespace characters used as token separators during tokenization. + /// Includes: space, tab, newline, and carriage return. /// - public static readonly char[] SeparatorChars = { '=', ':', ';', '?', '!', ',', '.' }; + public static readonly char[] TokenSeparators = + { + ' ', '\t', '\n', '\r' + }; } } \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Controllers/FuzzySharpController.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Controllers/FuzzySharpController.cs new file mode 100644 index 000000000..dc18c73d7 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Controllers/FuzzySharpController.cs @@ -0,0 +1,61 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Abstraction.FuzzSharp.Arguments; +using BotSharp.Abstraction.FuzzSharp.Models; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace BotSharp.Plugin.FuzzySharp.Controllers +{ + [ApiController] + public class FuzzySharpController : ControllerBase + { + private readonly ITextAnalysisService _textAnalysisService; + private readonly ILogger _logger; + + public FuzzySharpController( + ITextAnalysisService textAnalysisService, + ILogger logger) + { + _textAnalysisService = textAnalysisService; + _logger = logger; + } + + /// + /// Analyze text for typos and entities using domain-specific vocabulary. + /// + /// Returns: + /// - `original`: Original input text + /// - `tokens`: Tokenized text (only included if `include_tokens=true`) + /// - `flagged`: List of flagged items (each with `match_type`): + /// - `domain_term_mapping` - Business abbreviations (confidence=1.0) + /// - `exact_match` - Exact vocabulary matches (confidence=1.0) + /// - `typo_correction` - Spelling corrections (confidence less than 1.0) + /// - `processing_time_ms`: Processing time in milliseconds + /// + /// Text analysis request + /// Text analysis response + [HttpPost("fuzzy-sharp/analyze-text")] + [ProducesResponseType(typeof(TextAnalysisResponse), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task AnalyzeText([FromBody] TextAnalysisRequest request) + { + try + { + if (string.IsNullOrWhiteSpace(request.Text)) + { + return BadRequest(new { error = "Text is required" }); + } + + var result = await _textAnalysisService.AnalyzeTextAsync(request); + return Ok(result); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error analyzing text"); + return StatusCode(500, new { error = $"Error analyzing text: {ex.Message}" }); + } + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/FuzzySharpPlugin.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/FuzzySharpPlugin.cs new file mode 100644 index 000000000..c50cd5108 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/FuzzySharpPlugin.cs @@ -0,0 +1,29 @@ +using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Abstraction.Plugins; +using BotSharp.Plugin.FuzzySharp.Services; +using BotSharp.Plugin.FuzzySharp.Services.Matching; +using BotSharp.Plugin.FuzzySharp.Services.Processors; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace BotSharp.Plugin.FuzzySharp +{ + public class FuzzySharpPlugin : IBotSharpPlugin + { + public string Id => "379e6f7b-c58c-458b-b8cd-0374e5830711"; + public string Name => "Fuzzy Sharp"; + public string Description => "Analyze text for typos and entities using domain-specific vocabulary."; + public string IconUrl => "https://cdn-icons-png.flaticon.com/512/9592/9592995.png"; + + public void RegisterDI(IServiceCollection services, IConfiguration config) + { + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs deleted file mode 100644 index 7cab839ca..000000000 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/IVocabularyRepository.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace BotSharp.Plugin.FuzzySharp.Repository -{ - public interface IVocabularyRepository - { - Task>> FetchTableColumnValuesAsync(); - } -} \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs deleted file mode 100644 index 93142b2c9..000000000 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Repository/VocabularyRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BotSharp.Plugin.FuzzySharp.Repository -{ - public class VocabularyRepository : IVocabularyRepository - { - public Task>> FetchTableColumnValuesAsync() - { - throw new NotImplementedException(); - } - } -} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/FuzzyMatcher.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/FuzzyMatcher.cs new file mode 100644 index 000000000..c6b3ba477 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Matching/FuzzyMatcher.cs @@ -0,0 +1,82 @@ +using BotSharp.Abstraction.FuzzSharp; +using System.Text.RegularExpressions; +using FuzzySharp; +using FuzzySharp.SimilarityRatio; +using FuzzySharp.SimilarityRatio.Scorer.StrategySensitive; +using BotSharp.Plugin.FuzzySharp.Constants; + +namespace BotSharp.Plugin.FuzzySharp.Services.Matching +{ + public class FuzzyMatcher : ITokenMatcher + { + public int Priority => 1; // Lowest priority + + public MatchResult? TryMatch(MatchContext context) + { + var match = CheckTypoCorrection(context.ContentSpan, context.Lookup, context.Cutoff); + if (match == null) + { + return null; + } + + var (canonicalForm, domainTypes, confidence) = match.Value; + return new MatchResult( + CanonicalForm: canonicalForm, + DomainTypes: domainTypes, + MatchType: MatchReason.TypoCorrection, + Confidence: confidence); + } + + /// + /// Check typo correction using fuzzy matching + /// + private (string CanonicalForm, List DomainTypes, double Confidence)? CheckTypoCorrection( + string contentSpan, + Dictionary DomainTypes)> lookup, + double cutoff) + { + // Convert cutoff to 0-100 scale for FuzzySharp + var scoreCutoff = (int)(cutoff * 100); + + // Get all candidates from lookup + var candidates = lookup.Keys.ToList(); + + // Find best match using ExtractOne + var scorer = ScorerCache.Get(); + var result = Process.ExtractOne( + contentSpan, + candidates, + candidate => Normalize(candidate), // Preprocessor function + scorer, + scoreCutoff // Score cutoff + ); + + if (result == null) + { + return null; + } + + // Get the canonical form and domain types from lookup + var match = lookup[result.Value]; + return (match.CanonicalForm, match.DomainTypes, Math.Round(result.Score / 100.0, 3)); + } + + /// + /// Normalize text for fuzzy matching comparison + /// - Replaces all non-word characters (except apostrophes) with spaces + /// - Converts to lowercase + /// - Collapses multiple spaces into single space + /// - Trims leading/trailing whitespace + /// Example: "Test-Value (123)" → "test value 123" + /// + /// Text to normalize + /// Normalized text suitable for fuzzy matching + private string Normalize(string text) + { + // Replace non-word characters (except apostrophes) with spaces + var normalized = Regex.Replace(text, @"[^\w']+", " ", RegexOptions.IgnoreCase); + // Convert to lowercase, collapse multiple spaces, and trim + return Regex.Replace(normalized.ToLowerInvariant(), @"\s+", " ").Trim(); + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/NgramProcessor.cs similarity index 52% rename from src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs rename to src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/NgramProcessor.cs index abfeac7cf..d28829a16 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/NgramProcessor.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/NgramProcessor.cs @@ -3,7 +3,7 @@ using BotSharp.Plugin.FuzzySharp.Constants; using BotSharp.Plugin.FuzzySharp.Utils; -namespace BotSharp.Plugin.FuzzySharp.Services +namespace BotSharp.Plugin.FuzzySharp.Services.Processors { public class NgramProcessor : INgramProcessor { @@ -64,42 +64,33 @@ public List ProcessNgrams( double cutoff, int topK) { - // Skip if starting with separator - if (IsSeparatorToken(tokens[startIdx])) - { - return null; - } - - // Extract content span (remove leading/trailing separators) - var (contentSpan, contentIndices) = ExtractContentSpan(tokens, startIdx, n); - - if (string.IsNullOrWhiteSpace(contentSpan) || contentIndices.Count == 0) + // Extract content span + var (contentSpan, spanTokens, contentIndices) = ExtractContentSpan(tokens, startIdx, n); + if (string.IsNullOrWhiteSpace(contentSpan)) { return null; } - var startIndex = contentIndices[0]; var contentLow = contentSpan.ToLowerInvariant(); - // Before fuzzy matching, skip if any contiguous sub-span has an exact or mapped match - // This prevents "with pending dispatch" from being fuzzy-matched when "pending dispatch" is exact - if (n > 1 && HasExactSubspanMatch(contentSpan, lookup, domainTermMapping)) - { - return null; - } - // Try matching in priority order using matchers var context = new MatchContext( - contentSpan, contentLow, startIndex, n, - vocabulary, domainTermMapping, lookup, - cutoff, topK); + contentSpan, + contentLow, + startIdx, + n, + vocabulary, + domainTermMapping, + lookup, + cutoff, + topK); foreach (var matcher in _matchers) { var matchResult = matcher.TryMatch(context); if (matchResult != null) { - return CreateFlaggedItem(matchResult, startIndex, contentSpan, n); + return CreateFlaggedItem(matchResult, startIdx, contentSpan, n); } } @@ -128,77 +119,16 @@ private FlaggedItem CreateFlaggedItem( } /// - /// Check if token is a separator + /// Extract content span /// - private bool IsSeparatorToken(string token) - { - return token.Length == 1 && TextConstants.SeparatorChars.Contains(token[0]); - } - - /// - /// Extract content span by removing leading and trailing separators - /// - private (string ContentSpan, List ContentIndices) ExtractContentSpan( - List tokens, int startIdx, int n) + private (string ContentSpan, List Tokens, List ContentIndices) ExtractContentSpan( + List tokens, + int startIdx, + int n) { var span = tokens.Skip(startIdx).Take(n).ToList(); var indices = Enumerable.Range(startIdx, n).ToList(); - - // Remove leading separators - while (span.Count > 0 && IsSeparatorToken(span[0])) - { - span.RemoveAt(0); - indices.RemoveAt(0); - } - - // Remove trailing separators - while (span.Count > 0 && IsSeparatorToken(span[^1])) - { - span.RemoveAt(span.Count - 1); - indices.RemoveAt(indices.Count - 1); - } - - return (string.Join(" ", span), indices); - } - - /// - /// Check whether any contiguous sub-span of content_span is an exact hit - /// - private bool HasExactSubspanMatch( - string contentSpan, - Dictionary DomainTypes)> lookup, - Dictionary domainTermMapping) - { - if (string.IsNullOrWhiteSpace(contentSpan)) - { - return false; - } - - var contentTokens = TextTokenizer.SimpleTokenize(contentSpan); - - // Try all contiguous sub-spans - for (int subN = contentTokens.Count; subN > 0; subN--) - { - for (int subI = 0; subI <= contentTokens.Count - subN; subI++) - { - var subSpan = string.Join(" ", contentTokens.Skip(subI).Take(subN)); - var subSpanLow = subSpan.ToLowerInvariant(); - - // Check if it's in domain term mapping - if (domainTermMapping.ContainsKey(subSpanLow)) - { - return true; - } - - // Check if it's an exact match in lookup table - if (lookup.ContainsKey(subSpanLow)) - { - return true; - } - } - } - - return false; + return (string.Join(" ", span), span, indices); } } } diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/ResultProcessor.cs similarity index 67% rename from src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs rename to src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/ResultProcessor.cs index 8e87ff806..2238b6153 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/ResultProcessor.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/Processors/ResultProcessor.cs @@ -1,7 +1,8 @@ using BotSharp.Abstraction.FuzzSharp; using BotSharp.Abstraction.FuzzSharp.Models; +using BotSharp.Plugin.FuzzySharp.Constants; -namespace BotSharp.Plugin.FuzzySharp.Services +namespace BotSharp.Plugin.FuzzySharp.Services.Processors { public class ResultProcessor : IResultProcessor { @@ -19,10 +20,12 @@ public List ProcessResults(List flagged) } /// - /// Remove overlapping detections with the same canonical form and match type. - /// When multiple detections overlap and have the same canonical_form and match_type, - /// keep only the best one based on: 1. Highest confidence, 2. Shortest n-gram length - /// This matches Python's _remove_overlapping_duplicates function. + /// Remove overlapping detections with the same canonical form. + /// When multiple detections overlap and have the same canonical_form, + /// keep only the best one based on: + /// 1. Prefer domain_term_mapping over exact_match over typo_correction (matches matcher priority) + /// 2. Highest confidence + /// 3. Shortest n-gram length /// private List RemoveOverlappingDuplicates(List flagged) { @@ -39,7 +42,7 @@ private List RemoveOverlappingDuplicates(List flagged) var item = flagged[i]; var itemRange = (item.Index, item.Index + item.NgramLength); - // Find all overlapping items with same canonical_form and match_type + // Find all overlapping items with same canonical_form (regardless of match_type) var overlappingGroup = new List { item }; for (int j = i + 1; j < flagged.Count; j++) { @@ -49,7 +52,7 @@ private List RemoveOverlappingDuplicates(List flagged) } var other = flagged[j]; - if (item.CanonicalForm == other.CanonicalForm && item.MatchType == other.MatchType) + if (item.CanonicalForm == other.CanonicalForm) { var otherRange = (other.Index, other.Index + other.NgramLength); if (RangesOverlap(itemRange, otherRange)) @@ -61,9 +64,11 @@ private List RemoveOverlappingDuplicates(List flagged) } // Keep the best item from the overlapping group - // Priority: highest confidence, then shortest ngram + // Priority: domain_term_mapping (3) > exact_match (2) > typo_correction (1) + // Then highest confidence, then shortest ngram var bestItem = overlappingGroup - .OrderByDescending(x => x.Confidence) + .OrderByDescending(x => GetMatchTypePriority(x.MatchType)) + .ThenByDescending(x => x.Confidence) .ThenBy(x => x.NgramLength) .First(); deduped.Add(bestItem); @@ -72,6 +77,21 @@ private List RemoveOverlappingDuplicates(List flagged) return deduped; } + /// + /// Get priority value for match type (higher is better) + /// Matches the priority order in matchers: domain > exact > fuzzy + /// + private int GetMatchTypePriority(string matchType) + { + return matchType switch + { + MatchReason.DomainTermMapping => 3, // Highest priority + MatchReason.ExactMatch => 2, // Second priority + MatchReason.TypoCorrection => 1, // Lowest priority + _ => 0 // Unknown types get lowest priority + }; + } + /// /// Check if two token ranges overlap. /// diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs index 417a7ce89..87bb8d9d1 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs @@ -7,8 +7,6 @@ namespace BotSharp.Plugin.FuzzySharp.Services { - internal record TypoCorrectionMatch(string CanonicalForm, string DomainType, double Confidence); - public class TextAnalysisService : ITextAnalysisService { private readonly ILogger _logger; @@ -40,7 +38,7 @@ public async Task AnalyzeTextAsync(TextAnalysisRequest req var tokens = TextTokenizer.Tokenize(request.Text); // Load vocabulary - var vocabulary = await _vocabularyService.LoadVocabularyAsync(request.VocabularyFolderPath); + var vocabulary = await _vocabularyService.LoadVocabularyAsync(request.VocabularyFolderName); // Load domain term mapping var domainTermMapping = await _vocabularyService.LoadDomainTermMappingAsync(request.DomainTermMappingFile); diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs index 5aa216b33..0be6daaa1 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs @@ -3,6 +3,7 @@ using CsvHelper.Configuration; using Microsoft.Extensions.Logging; using System.Globalization; +using System.IO; namespace BotSharp.Plugin.FuzzySharp.Services { @@ -15,17 +16,17 @@ public VocabularyService(ILogger logger) _logger = logger; } - public async Task>> LoadVocabularyAsync(string? folderPath) + public async Task>> LoadVocabularyAsync(string? foldername) { var vocabulary = new Dictionary>(); - if (string.IsNullOrEmpty(folderPath)) + if (string.IsNullOrEmpty(foldername)) { return vocabulary; } // Load CSV files from the folder - var csvFileDict = await LoadCsvFilesFromFolderAsync(folderPath); + var csvFileDict = await LoadCsvFilesFromFolderAsync(foldername); if (csvFileDict.Count == 0) { return vocabulary; @@ -49,15 +50,17 @@ public async Task>> LoadVocabularyAsync(strin return vocabulary; } - public async Task> LoadDomainTermMappingAsync(string? filePath) + public async Task> LoadDomainTermMappingAsync(string? filename) { var result = new Dictionary(); - - if (string.IsNullOrWhiteSpace(filePath)) + if (string.IsNullOrWhiteSpace(filename)) { return result; } + var searchFolder = Path.Combine(AppContext.BaseDirectory, "data", "plugins", "fuzzySharp"); + var filePath = Path.Combine(searchFolder, filename); + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) { return result; @@ -65,7 +68,7 @@ public async Task>> LoadVocabularyAsync(strin try { - using var reader = new StreamReader(filePath); + using var reader = new StreamReader(filePath); using var csv = new CsvReader(reader, CreateCsvConfig()); await csv.ReadAsync(); @@ -138,14 +141,10 @@ private async Task> LoadCsvFileAsync(string filePath) return terms; } - private async Task> LoadCsvFilesFromFolderAsync(string folderPath) + private async Task> LoadCsvFilesFromFolderAsync(string folderName) { var csvFileDict = new Dictionary(); - - // Check if the folder has an 'output' subdirectory - var outputFolder = Path.Combine(folderPath, "output"); - var searchFolder = Directory.Exists(outputFolder) ? outputFolder : folderPath; - + var searchFolder = Path.Combine(AppContext.BaseDirectory, "data", "plugins", "fuzzySharp", folderName); if (!Directory.Exists(searchFolder)) { _logger.LogWarning($"Folder does not exist: {searchFolder}"); diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Using.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Using.cs new file mode 100644 index 000000000..568fe81d5 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Using.cs @@ -0,0 +1,10 @@ +global using System; +global using System.Collections.Generic; +global using System.Linq; +global using System.Net.Http; +global using System.Net.Mime; +global using System.Text; +global using System.Text.Json; +global using System.Threading; +global using System.Threading.Tasks; + diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs index 225094782..2ccb6ba2f 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Utils/TextTokenizer.cs @@ -18,12 +18,12 @@ public static string PreprocessText(string text) return text; } - var result = new System.Text.StringBuilder(text.Length * 2); + var result = new StringBuilder(text.Length * 2); foreach (var ch in text) { // If it's a character that needs to be separated, add spaces before and after - if (TextConstants.TokenSeparationChars.Contains(ch)) + if (TextConstants.SeparatorChars.Contains(ch)) { result.Append(' '); result.Append(ch); @@ -46,7 +46,7 @@ public static string PreprocessText(string text) /// List of tokens public static List SimpleTokenize(string text) { - return text.Split(new[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + return text.Split(TextConstants.TokenSeparators, StringSplitOptions.RemoveEmptyEntries).ToList(); } /// diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/domainTermMapping.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/domainTermMapping.csv new file mode 100644 index 000000000..ff877b167 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/domainTermMapping.csv @@ -0,0 +1,5 @@ +term,dbPath,canonical_form +HVAC,data_ServiceCategory.Name,Air Conditioning/Heating +PVA,data_WOStatus.Name,Pending Vendor Approval +PVQ,data_WOStatus.Name,Pending Vendor Quote +WCPVI,data_WOStatus.Name,Work Complete Pending Vendor Invoice \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.ClientCode.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.ClientCode.csv new file mode 100644 index 000000000..1805e6ac2 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.ClientCode.csv @@ -0,0 +1,514 @@ +WA +KO +BBY +LFD +WT +TM +ORAP +REG +CEC +OM +DGL +PS +TB +AAP +KU +DRI +GE +MIC +FDR +WNS +CPT +JAB +PB +JP +OD +WPH +SV +BEAU +PL +OP +AR +HB +DTV +RB +BELK +BLK +BMO +BGR +COMP +LAC +MI +RBSM +RBS +SAP +CO +CB +BJ +DHG +FFBGR +KEN +FM +LEN +LFS +MU +PNC +PT +RD +RY +TMOR +TMUS +TMO +UTC +SB +FR +HP +CM +TCI +MT +RYCN +CAR +OSH +TYCO +AZ +SM +TFS +RDS +GPM +FA +ELS +DEX +NV +FRY +ARB +ONP +BD +HA +VSAAS +TONE +RT +LLF +PA +BWW +GPMS +NT +ST +WPHR +HAD +AMF +WMC +OWRG +TCF +USPS +NEFB +NEFP +CF +FRS +RHT +TDB +SIT +ARG +CASM +FHN +SLM +FOL +RL +RW +TRIL +MCYS +AV +OPEN +DTC +LLQC +PET +ACE +RLY +SFCJ +BNKR +ARAC +ARSEA +ADVAM +DEL +DRT +COSI +GPS +TMI +RMH +SEI +TRANE +JR +IH +ARDNVGL +ARFLO +GGP +ARWM +SUN +TBG +CC +JPMC +SMC +ARRES +RAM +VIS +CLK +SPP +PEC +WCS +DG +AHS +PUB +SIG +RET +SA +NHR +LO +SC +CRX +RIO +RHA +GO +GM +PAY +BOJA +NDCP +GP +ZG +ND +SMRT +GALL +APX +CW +GRG +ALD +GSS +BLNK +SUB +CHKR +FSR +DIV +GL +RU +WV +ELK +QUA +ID +ACX +FFD +DTR +MC +LSH +UP +PND +LMFS +KBC +ASA +SFRA +AMR +MYPM +HNGR +x +HR +SPO +PAD +MPH +AO +IDT +CE +DVI +CVP +ML +PF +JPJLL +DMKP +RLB +FTA +PG +CCH +AEG +DBI +GRN +HRC +BWH +CCC +PWA +IR +FULL +TPG +LL +GAR +LUX +GPMO +EVNST +FRON +USPSJ +MAN +FPMP +TOM +STR +ARN +TCG +SYL +MCPM +RPM +KD +HS +RDP +WIN +ORP +PNT +AUD +BRG +CTG +VINE +TCB +VEI +ACM +DDD +JFC +SO +RPW +AHC +SPW +DT +FD +MSTC +PFH +SLS +ETL +BHI +MCH +REZ +SPR +DAR +COS +KPL +ILE +MCLT +AS +BC +FK +AMH +HHM +PR +GNSD +HY +KHC +MCK +SSD +EC +STRP +HRG +FILE +ATHS +VAZ +ER +PC +MER +TMP +SRE +SUND +CFP +AUTH +CLC +SREG +LP +GJ +MR +OV +HPM +CAL +URB +IF +MRE +RPMP +FIN +RP +VV +WW +AL +AB +FRFM +ASI +GNS +EK +TFE +MCR +WORX +FH +RAZ +GUP +CAMP +ENT +CHS +KNO +BL +PFI +UDR +SLR +HTSF +MLC +WMH +EDGE +JC +BH +AHR +TIP +COE +WR +FFHB +WREF +RRH +SHB +APCH +CAM +BV +ASH +MARB +FP +BS +TMY +NB +BFG +IRP +TW +CMK +RLI +PJRG +ROL +MSTCC +BGO +POR +SMR +PIRM +MCTC +STOA +HO +ATRIA +LT +HIP +ARK +PV +TH +MCF +FNHW +LC +LSN +CBB +AH +ALT +AJC +PRT +TWC +RRI +HW +GR +LPS +HV +FRM +BRPC +SFR +PBMD +TLG +WSC +CFI +HSU +BN +ANY +JTCR +BCL +BSC +AHV +KRS +4DP +RES +SCH +IGO +STYL +CMW +PP +MCRH +BPA +BHA +CED +SUNC +CRST +STANDRESI +STANDCOM +STANDCP +CAP +LE +INC +CT +MTR +MAW +ABM +LDF +HH +SRNRP +TTC +CLS +STANDTURN +HMR +IAM +OR +JTR +IAMB +EJP +ART +HSUC +CDV +QH +REOP +ORM +MSR +BRPRES +ASG +SSE +BRPCOM +LL2 +TG +FEG +JAD +CPY +LCHL +MOD +PRM +GOP +BUDD +GSM +TRNKY +C7W +AIM +LRSC +RMG +TRI +SS +SMB +CCM +IGOW +SCM +FAMD +SSM +SRIP +MH +RWR +SIP +MED +RBVP +STANDTRRM +ASML +HAL +CRF +KWI +KW +ALL +MCU +WPL +CGP +TRIO +ITW +VGM +STO +LEG +NKG +CH diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.Name.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.Name.csv new file mode 100644 index 000000000..d19e2ed4d --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/client_Profile.Name.csv @@ -0,0 +1,514 @@ +Walgreens +Kohl's +Best Buy +Legacy Family Dollar +Walmart +Tmobile +O'Reilly Auto Parts +Regis Corporation +Career Education Corporation +Office Max +Dollar General Legacy +Public Storage +Taco Bell +Advance Auto Parts +Knowledge Universe +Diamond Resorts +GE +Michaels +Famous Daves +Windstream +Crypton +"JoS. A. Bank Clothiers, Inc." +Protein Bar +JP Morgan Chase +Office Depot +Waypoint Homes +CBRE C/O Supervalu +BEAU +Pathlight +OneProp +Aarons +Harris Bank +DirecTV +Rainbow +Belk (Direct) +Belk (MES) +BMO +Brown Shoe Group +Compass Bank +Lacoste +Mitre +RBS (MES) +RBS Direct +Sapient +CapitalOne +Coldwell Banker OLD +BJ's +DelHaize Food Lion +Famous Footwear BGR +Kenneth Cole +FirstMerit Bank +Lendmark Financial (MES) +Lendmark Financial Direct - Legacy +Murphy USA +PNC +Precision Time +Red Door Day Spa +Ryder +Tmobile (MES) +Tmobile Direct +Tmobile JLL +United Technologies +Silver Bay +Fred +Home Partners of America +ContextMedia +Tire Centers Inc +Mario Tricoci +Ryder Canada +Carters +OshKosh +Tyco +AutoZone +Siemens +Twenty Four 7 Global +Realogy Discovery Survey +GPM Investments +Fallas +ELS +Dollar Express +National Vision +Friendlys Restaurants +Arbys SMS +One Plus +Brookdale +Hendrick Auto +Metaverse (DON'T DISPATCH) +SMS Billing +Release Testing +LL Flooring +Panda +Buffalo Wild Wings +GPM Southeast Holdings +Northern Trust +Stifel +Waypoint Homes Residential +Home Advisor +American Freight +Walmart CBRE +Out West Restaurant Group +Tri City Foods +USPS +Northeast Foods - Burger King +Northeast Foods - Popeyes +Carrols Foods +Freds +PenTest +TD Bank +Stand Interior Test +Arbys +Casual Male +First Horizon National +SLM Realty +Follett +RL Foods +Renters Warehouse +Tricon Legacy +Macys +Art Van +Opendoor +Discount Tire +Lumber Liquidators Canada +PetSmart +Ace Hardware +Coldwell Banker +Stedfast Foods +Brinker +Aramark Amcor +Aramark Samsung Electronics America +Advance America +Del Taco +DriveTime +Cosi +Bridge Homes +Tuesday Morning +RMH Applebees +7-Eleven +Trane +Johnny Rockets +Invitation Homes +Aramark DNV GL +Aramark Flowers Foods Inc +General Growth Properties +Aramark Waste Management +Sunoco +The Beautiful Group +Charming Charlie +JPMC +Shari's +Aramark ResCare +Resolute Asset Management +Visionworks +Clarks +SP+ +Phillips Edison & Company +White Castle System Inc +Dollar General +Ashley HomeStore +Publix Super Markets +Signet +Retail +Second Avenue +National Home Rentals +LendingOne +Sams Club +Conrex +Cafe Rio Inc +RHA Health Services +Grocery Outlet +Grand Mere +Payless ShoeSource Inc +Bojangles +NDCP-Dunkin +GridPoint +Zillow Group +Nestidd +Stein Mart +Galls LLC +Apex National Real Estate +Camping World +Grainger +ALDI +Guess Inc +Blink Fitness +Subway +Checkers and Rallys +Foresite Realty +Divvy Homes +Green Line Capital +RENU Management +Wireless Vision +Elkay +Quanta Finance +Imperial Dade +Ace Cash Express +Forefront Dermatology +Demo-turnsandrehab +"Magnify Capital, LLC" +Lake St Homes +up&up +Pinnacle Dermatology LLC +Lendmark Financial Services +Kennicott Brothers Company +ASSA ABLOY Entrance Systems US Inc +SFR3 Archived +Aramis Realty +Mynd Property Management +Hanger Inc +RedTeam +Home Rentals LLC +Squarepoint Ops LLC +PadSplit +Marketplace Homes +Avenue One +InterDent Service Corporation +CITY ELECTRIC SUPPLY COMPANY +Doorvest Inc +Capview Partners +Milan Laser Hair Removal +Lessen Home Services +JPMC JLL +Denmark Properties LLC +Red Lobster Hospitality LLC +Fortune Acquisitions LLC +Pagaya +Center Creek Homes +AEG Vision +Davids Bridal +Green Residential +Heritage Restoration Company +Brandywine Homes +Caliber Collision Centers +PWA Operations +Inarayan Inc +FullBloom +Turnkey Property Group LLC +Link Logistics LLC +Garcia Properties +Luxottica of America Inc +GP Mobile LLC +Evernest +Frontier Property Management +USPS JLL +Man Global +First Place Management Properties +TOMS King +Streetlane Homes +Alvarado Restaurant Nation +Tiber Capital +Sylvan Road +McCaw Property Management LLC +Resolute Property Management LLC +Kedo LLC +HomeSource Operations +Restaurant Depot +The Wing +Omni +Pintar +Audibel +Briggs Equipment +Cabinets To Go +Vinebrook Homes +Third Coast Bank SSB +Venture REI +Americas Car Mart +Diamonds Direct USA Inc +JFC North America +Sun Oak PROPCO GP LLC +Resi Prestige Worldwide LLC +Apria Healthcare LLC +Sparrow +Dollar Tree +Family Dollar Stores Inc +MS Test Client (Test Client) +Patriot Family Homes LLC +SiteOne Landscape Supply LLC +Empire Today LLC +Belong Home Inc +My Community Homes +Reszi LLC +Spirit Realty +Darwin Homes Inc +99 Cents Only Stores LLC +Kinloch Partners LLC +ILE Homes +MCLT +AvantStay +Burns & CO +FirstKey Homes +American Homes 4 Rent +Hudson Homes Management LLC +"Progress Residential, LLC" +Good Night Stay (Deprecated) +Home Yield +Knox Holding Corporation +McKnight LLC +Stay San Diego +805 Capital LLC +STR Properties +Home River Group +Files +Atlas Home Services +VacayAZ +Equity Residential +"Pathway Construction, LLC" +Market Edge Realty +Tahoe Mountain Properties INC +Sovereign Real Estate Group +Sundae Inc +"CFP Management Group, LLC (Ault Firm)" +"Authentic Residential, LLC" +Cottonwood Lodging Company (Mount Majestic Properties) +Scottsdale Real Estate Group +Landa Properties LLC +"Great Jones, LLC" +Mainstreet Renewal +Opulent Vacations +Heart Property Management +CALCAP Properties +Urbanity Properties +Infinity Financial LLC +Maxfield Real Estate +Real Property Management Preferred +Fintor +Rent Prosper +Vantage Ventures Inc +Wedgewood Inc +Acre Labs Inc +Abodea +Bridge Single - Family Rental Fund Manager LLC +Alden Short INC +GoodNight Stay +NESE Property Management +True Family Enterprises +Menlo Commercial Real Estate +BnB Worx LLC +Flock Homes +"Reddy AZ, LLC dba Zendoor" +Guerin Property Services +"Campagna and Associates, Realtors" +Entera +"Caliber Home Solutions, LLC" +Kim and Nate O'Neil +Bungalow Living Inc (Need to Delete Client Never Onboarded) +Paladin Funding Inc +UDR Inc +St Louis Redevelopment Company LLC +Home365 LLC +Molly Loves Coconuts +Well Made Homes LLC +Edge Capital Inc +Jansen Capital Inc +Bonus Homes +Arkansas Homes and Rentals +True Investment Partners +Consumer Estimates +Waterton Residential LLC +Freaky Fast Home Buyers +"Purpose Residential, LLC DBA Whitestone Real Estate Fund" +RentReady Homes LLC +Shoking Home Buyers LLC +ATL Peach City Homes LLC +Camden Development Inc +BRICK & VINE +Ashok Sethu +Marble Living Inc +Forward Properties LLC +Brandon Sutton +Tanya Myint +Nicole Bowman +Braden Fellman Group Ltd +iRemodel Properties +Tiffany Wynohradnyk +Codi McKee +Redwood Living Inc +PMI JCM Realty Group +RW OPCO LLC (Renters Warehouse) +MS Test ClientC +Bentall Green Oak +Pacific Oak Residential Inc +SmartRent +Pierre Marsat +Miramar – Cedar Trace Circle 1 LLC +Stoa +360 Home Offers LLC +Atria +Landis Technologies +Hippo Home Care +ARK Homes For Rent +PetVet Care Centers +True Home +Michael C Fowler +Fidelity National Home Warranty +LivCor LLC +Lessen +Chubb +Amara Homes LLC +Altisource +AJC Group LLC +Postal Realty Trust +Thriveworks +RentRedi Inc +Homeward +Gilchrist +Lincoln Properties +Homevest +Freddie Mac +Blue River PetCare +SFR3 +PBSW MD INC +The Laramar Group +Westmount Square Capital +Capital Fund I LLC +Homespace USA +Blue Nile +Anywhere Real Estate +johns test client residential +Berkshire Communities LLC +BrightSpire Capital Inc +AHV Communities +KRS Holdings +4D Property Solutions LLC +ResProp Management +St Croix Hospice +iGo +STYL Residential +Cushman & Wakefield +Purchasing Platform +MCR Hotels +BPA Restaurant LLC (Blaze Pizza) +Bighorn Asset Management LLC +Cadence Education +Sun Coast +CRS Temporary Housing +Standard Residential RM Portal +Standard Commercial R&M on Demand +Standard Consumer Portal (Widget) +Capreit Inc +LiveEasy +International Capital LLC +Culdesac Tempe LLC +Mark Taylor Residential +Mattress Warehouse LLC +ABM +Lendflow +Honey Homes +Standard Residential - No Resident Portal +Titan Corp +C & LS Legacy Group LLC +Standard Turns & Reno +Highmark Residential +Insight Association Management GP Inc +Orion +Johns Test Restaurant Client +Insight Association Management GP Inc-BTR +Erica Jade P LLC +Assurant +Home Solutions Us Corp +10X Home Services +"Quintasen Holdings, LLC" +RE-Ops +Oak Rentals Management LLC +Main Street Renewal LLC +Black Ruby Properties RES +"Alacrity Solutions Group, LLC" +SkinSpirit Essential LLC +Black Ruby Properties COM +"LumLiq2,LLC. DBA Lumber Liquidators " +TruGreen +"Fractal Education Group, LLC" +Jadian IOS +CorePower Yoga +Latchel +Moda Homes LLC +Property Meld +GoPuff +ABM-Budderfly +GenStone Management +Trnkey +C7 Works LLC +Aimbridge Hospitality +Lusso Risk Solutions Corp +"Roots Management Group, LLC" +Tricon +SuiteSpot Inc. +Smashburger Servicing LLC +Cove Communities +IGO Widget +Standard Commercial R&M +Familia Dental +STORE Management LLC +Standard Residential Integration Partner +Maymont Homes +RangeWater Residential LLC +Standard Insurance Portal +MyEyeDr. +RareBreed Veterinary Partners +Standard Residential R&M w/T&R +ABM-ASML +HALO Strategies LLC +Clifford R Fick +KWI +Kairos Water Inc +Alert Labs Inc +MidFlorida Credit Union +Worldpac LLC +CapGrow Partners LLC +Trio Residential +ITW Shakeproof +Village Green Management Company LLC +Structure Tone LLC +Legacy Communities +The Niki Group +Carter Haston diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCategory.Name.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCategory.Name.csv new file mode 100644 index 000000000..108610ff8 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCategory.Name.csv @@ -0,0 +1,157 @@ +Air Conditioning/Heating +Coolers/Freezers +Doors/Locks/Gates/Grilles/Glass +Plumbing +Electrical/Lighting +Pest Control +Roof +Fire Systems +Signs +Flooring +General Building +Exterior +Structural +Repairs & Maintenance - Air Conditioning Equipment +Repairs & Maintenance - Appliances +Repairs & Maintenance - Common Area +Repairs & Maintenance - Buildings +Repairs & Maintenance - Electrical +Repairs & Maintenance - Street/Paving +Repairs & Maintenance - Gardens and Grounds +Repairs & Maintenance - General +Repairs & Maintenance - Fire Alarms +Repairs & Maintenance - Fire Extinguishers +Repairs & Maintenance - Plumbing +Repairs & Maintenance - Fitness Equipment +Pool Chemicals & Water Treatments +Repairs & Maintenance - Utilities +General Motor Vehicle Expenses +Repairs & Maintenance - Golf Carts +Repairs & Maintenance - Laundry +Repairs & Maintenance - Elevator +Kitchen Equipment +Refrigeration +Janitorial +Appliances +Cabinets/Countertops +Doors/Windows/Siding +Garage/Garage Door +General Maintenance +Landscape/Irrigation +Masonry/Fencing/Gates +Paint +Pool/Spa +Window Coverings +Move-in/out Package +Internal IH +Doors +Electrical +Gates +Glass +Lighting +Locks +Internal Customer +Violations +Landscaping +Striping +Debris Removal +Snow +IVR Fine +Floor Care +Windows +SIM +Inspection +Survey +Animal Habitat +Cash Wrap +Fish System +Hazardous Material Handling +Security +Store Equipment +Waste Management +Bar Equipment +Paint Booths +Office Services +Fuel Systems +Payments & Tech Services +Programs and Compliance +Food & Beverage Equipment +Car Wash +Parts Request +Window Repair +Bank Equipment +Conference Room Services +Escort +Expense Projects +Environmental Health & Safety +General Inquiry +Moves/Relocations +Janitorial Service +Merchandise Display +Fees +Disaster Response +Accounting Adjustment +Third Party Vendor Visit +EMS +ProCare +Lab Equipment +R-Appliances +R-Asphalt/Concrete +R-Cabinets/Countertops +R-Cleaning +R-Deck/Porch/Balcony +R-Doors/Windows/Trim +R-Electrical +R-Facade +R-Flooring +R-Foundation +R-Garage Door +R-General Maintenance +R-HVAC +R-Landscaping +R-Odor +R-Paint +R-Pest Control +R-Plumbing +R-Pool +R-Roofing +R-Utilities +R-Construction +R-Accounting Adjustment +R-Assessment +Smart Home +Mobile +Billing +Environmental Health & Safety Restoration +DSC Equipment +Mister +Lessen Field Operations +R-Appliances +R-Cleaning Services +R-Disposal & Remediation +R-Electric +R-Exterior Finishes +R-Fees +R-Flooring +R-General Conditions +R-HVAC +R-Interior Finishes +R-Landscape & Pools +R-Laundry +R-Painting & Coatings +R-Plumbing +R-Roofing And Gutter +Lessen Technology Fee +Installations +Early Pay +R-Asphalt/Concrete +R-Foundation +R-Garage Door +R-General Maintenance +R-Landscaping +R-Pest Control +R-Pool +CRE Tech Toolbox +Permit +Turns +Renovations diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCode.Name.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCode.Name.csv new file mode 100644 index 000000000..0699704c3 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceCode.Name.csv @@ -0,0 +1,10189 @@ +Variable Refrigerant Flow (VRF) +Provide Quote for Floor Cleaning +Provide Quote for Window Cleaning +Provide Quote for Janitorial Cleaning +Vacant Inspection +Lockout +Access Issue +Routine Service Needed +TR - Trip Charge +TR - Trip Charge +Hand Dryers +Light Switch +Not Working +New Outlet Install +Damaged/Repair +New Add +Replacement +Replacement +Replacement +Winterization Package +Utilities Activation +SR Lock Install +QC Check +HVAC Package +Turn Package +Post Notice +Occupancy Check +Rental Registration Inspection +Customer Requested Survey +Customer Requested Survey +Front Door OD Decal +Exterior Signage Maintenance +Plumbing Materials +Asset Data Capture +Community Inspection +Install/Repair +Home Safety Check +Enhance Strip and Wax Night 5 +Enhance Strip and Wax Night 4 +Install Crown Molding +Stain deck/fence +Remove/Install Wallpaper +Broken/Damaged +Install closet system +Babyproof installation +Fixture Repair/Maintenance +Install New +Install wall fixture +Install TV Wall Mount +Assemble Furniture +Staffing Fee +Not Covered under FPP +Emergency Capital +Emergency Capital +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Found on PM +Full Protection Program +Found on PM/Capital Request +Whole House Drywall Repairs - Medium +Whole House Drywall Repairs - Light +Whole House Drywall Repairs - Heavy +Water Heater Permit +Turn Package (Second Avenue) +Service Roof - Tile +Service Roof - Shingle +Secure Damaged Door/Window +Roof Permit +Repoint Brick Wall/Siding +Repair Ungrounded Outlet +Repair Fiberglass Chip +"Repair Drywall - Up to 6""x6""" +Rent/Procure Scaffolding/Lift +Reno Package (Second Avenue) +Reinstall Door +Reglaze Sliding Glass Door Pane +Recode Keypad Lock +Procure Washer - Top Load (White) +Procure Refrigerator - Top Freezer (Stainless) +Procure Refrigerator - Top Freezer (Black/White) +Procure Refrigerator - Side By Side (Stainless) +Procure Refrigerator - Side By Side (Black/White) +Procure Range Hood - Under Cabinet Convertible (Stainless) +Procure Range Hood - Under Cabinet Convertible (Black/White) +Procure Microwave - Over The Range (Stainless) +Procure Microwave - Over The Range (Black/White) +Procure Freestanding Range - Smooth Top Electric (Stainless) +Procure Freestanding Range - Smooth Top Electric (Black/White) +Procure Freestanding Range - Gas (Stainless) +Procure Freestanding Range - Gas (Black/White) +Procure Freestanding Range - Coil Top Electric (Stainless) +Procure Freestanding Range - Coil Top Electric (Black/White) +Procure Dryer (White) +Procure Dishwasher - Front Control (Stainless) +Procure Dishwasher - Front Control (Black/White) +Procure Cooktop - Gas (Stainless) +Procure Cooktop - Gas (Black/White) +Procure Cooktop - Electric (Stainless) +Procure Cooktop - Electric (Black/White) +Prime Wall (Corner to Corner) +Plumbing - Lite Winterize +Pest Control Treatment - German Roach (3 Trips) +Paint House Interior - Walls Only +Paint Deck +Paint Chimney Cap & Chase Cover +Paint Baseboards +Mobilization Fee +Investigate Water Damaged Wall/Ceiling +Install/Replace Wrought Iron Handrail (prefab) +Install/Replace Wood Subfloor +Install/Replace Tile Flooring +Install/Replace Shower Surround - Tile +Install/Replace Shoe Molding +Install/Replace Self-Closing Hinges (set of 2) +Install/Replace Range/Microwave Filters +Install/Replace Luxury Vinyl Plank (LVP) Flooring - Floating +Install/Replace Lockbox - Shackle +Install/Replace Kitchen Sink Faucet - Pull Out +Install/Replace Kitchen Sink Faucet - Pull Down +Install/Replace Kitchen Sink Faucet - Basic +Install/Replace HVAC Condensate Drain Pan +Install/Replace Gate Hinge +Install/Replace Fill Dirt +Install/Replace Faucet Hand Sprayer +Install/Replace Electrical Conduit +Install/Replace Chase Cover & Chimney Cap +Install/Replace Brick/Block (Individual) +Install/Replace Brick Mold +Install/Replace Bathroom Sink Faucet - Widespread +Install/Replace Bathroom Sink Faucet - Centerset +"Install/Replace Bathroom Sink Faucet - 8""" +Install/Replace - Knob/Deadbolt Combo +Hydro Jet Sewer Line +HVAC Permit +HVAC Drain Pan Debris Removal +HVAC Basic Maintenance Package (Second Avenue) +House Rekey (up to 2 doors) +Home Access Lock Drilling +Gas Leak Detection +Fence Permit +Demo TV Mount +Deep Clean Bathtub/Shower +Completion Package (Homeward) +Clean Whole House - Lite Clean +Clean Tile Flooring +Clean Exterior Windows - 3rd+ Floor +Clean Exterior Windows - 2nd Floor +Clean Exterior Windows - 1st Floor +Appliance Installation & Haul Away - Washer/Dryer +Appliance Installation & Haul Away - Refrigerator +Appliance Installation & Haul Away - Range +Appliance Installation & Haul Away - Hood/Microwave +Appliance Installation & Haul Away - Dishwasher +Appliance Installation & Haul Away - Cooktop +Facility Condition Inspection +Dispatch Vendor Fees +Custom Integrations +User Support +Implementation & Training +Access & License +Purchase +Repair/Replace - Signet +Security Bars +Security Bars +Security Bars +Lighting Materials +Gates/Door Locks +Showcase Locks +Air Purifier +Cabinet Parts +Repair +Install/Remove Lockbox +Buzzers +Leaking +Leaking +Enhance Strip and Wax Night 3 +Enhance Strip and Wax Night 2 +Enhance Strip and Wax Night 1 +Travel Expenses +Floor Mats and Linens +AED - Life Saving Device +Gas Fireplace +Dispatch Vendor Fees +Custom Integrations +User Support +Implementation & Training +Access & License +Ice Melt Services +Infrared Heating Panel +"Sweep, Scrub, & Buff (follow-up)" +Repair +Medical Refrigerator Repair +Treatment Bed Parts +Tennant T300 Scrubber CAPEX +Tennant Scrubbers/Sweepers +Tenant Allowance +"Sweep, Scrub, & Buff w/ Janitorial Cleaning" +Strip & Wax w/ Janitorial Cleaning +Scrub & Recoat w/ Janitorial Cleaning +Refresh Service +LVT Scrub Remodel w/ Janitorial Cleaning +LVT Floor Scrub w/ Janitorial Cleaning +Concrete Floor Scrub w/ Janitorial Cleaning +Padlock Won't Lock/Unlock +Move Unit +Graffiti +General Damage/Vandalism +Door Won't Open/Close +New Installation +Roof +Gutters +Structural/Leak Repairs +Screens +Heaters +Equipment +Septic +Resurface/Refinish +Major Plumbing +Minor Plumbing +Wildlife/Trapping +Termites +Small Insects +Rodents +Bees +Exterior +Interior +Foundation +Fencing/Gates +Brick/Concrete +Irrigation +Landscaping +Inspections +Managed Services +Handyman Services +Garage Door +Foundation +Tile +Carpet +Vinyl and Laminate +Fireplace/Chimney +Fencing/Gates +Major Electrical +Minor Electrical +Trash Out +Cleaning/Maid Service +Washer/Dryer +Vent Hood +Refrigerator +Range/Oven +Microhood +Dishwasher +Cooktop +Air Conditioning/Heating +Roof +Gutters +Structural/Leak Repairs +Screens +Heaters +Equipment +Septic +Resurface/Refinish +Major Plumbing +Minor Plumbing +Wildlife/Trapping +Termites +Small Insects +Rodents +Bees +Exterior +Interior +Foundation +Fencing/Gates +Brick/Concrete +Irrigation +Landscaping +Inspections +Managed Services +Handyman Services +Garage Door +Foundation +Tile +Carpet +Vinyl and Laminate +Fireplace/Chimney +Fencing/Gates +Major Electrical +Minor Electrical +Trash Out +Cleaning/Maid Service +Washer/Dryer +Vent Hood +Refrigerator +Range/Oven +Microhood +Dishwasher +Cooktop +Air Conditioning/Heating +Pest Exclusion +Day Porter +Monitoring Services +Subscription +HVAC Install +Broken/Pets Hotel +Expeditor +Other +HVAC +Other +New Badge +Lanyard +Additional Access or Extended Hours +Deactivate +Not Working +Lost Badge +Treatment Bed Repair +Smash & Grab +Smash & Grab +Smash & Grab +HVAC +Routine Service Needed +Found on PM +Survey +Scrub and Seal +Active Leak Repairs - Troubleshoot + Full Day +Active Leak Repairs - Troubleshoot + 1/2 Day +Non - Leak Repairs - Full Day +Non - Leak Repairs - 1/2 Day +Tune up - Steep Pitch +Tune up - Low Pitch +Rats +Mice +Day Porter +Purchase +Secure Door Knob +Secure Countertop +Repair Sink Hot/Cold Reversed +Repair Bathtub/Shower Hot/Cold Reversed +Pressure Wash Flatwork - Half-Day +Pressure Wash Flatwork - Full-Day +Permit +Paint/Stain Wood Fence +"Paint House Interior - Walls, Doors & Trim (No Ceiling)" +Paint Front/Exterior Door - Both Sides +Install/Replace Widespread Bathroom Sink Faucet +Install/Replace Water Heater Expansion Tank +Install/Replace GFCI Outlet +Install/Replace Fire Extinguisher +Install/Replace Door Hinge (Set of 3) +Install/Replace Circuit Breaker Blank Filler Plates +Install/Replace Carbon Monoxide Detector - Plug-In +Install/Replace Cabinet Hinge +Install/Replace Brick Mould +Install/Replace Bifold Door Knob +Initial Lawn Service +Clean Chimney +Bulk Trash +Human/Bio Clean Up +5yr Sprinkler +Fire Watch +Fire Sprinkler +Fire Extinguisher +Fire Alarm +Emergency Light +Backflow +Consultation Desk +Drawer Front +Locks Loose/Missing +Laminate +Winterize Irrigation System Only +Window Trim - Caulk (per window) +Weed Removal +Waterproof Foundation Walls +Trim Shrub +Tree Removal +Tree - Prune +Treat Odor - Ozone +Treat Odor - Carpet +Trash Out - Minor +Trash Out - 40 Cubic Yards +Trash Out - 30 Cubic Yards +Trash Out - 20 Cubic Yards +Trash Out - 10 Cubic Yards +Touch Up Drywall Individual Room +Tile Flooring Grout - Regrout +Tile Flooring - Clean +Texture Drywall to Match +Test for Mold +Test for Lead +Survey - Fence +Stump - Demo +Stretch Carpet +Stain Stair Handrail +Stain Flooring Transition Strip +Stain Deck Steps +Stain Deck +Snake Main Sewer Line +Snake Fixture Drain - Tub/Shower +Snake Fixture Drain - Toilet +Snake Fixture Drain - Sink +Sliding Glass Door - Reglaze +Shoe Molding - Install/Replace +Service/Lubricate Window +Service/Lubricate Sliding Glass Door +Service Water Heater +Service Roof +Service Pool - Basic +Service Pool - Advanced (Green Pool) +Service Irrigation System +Service Initial Service Landscape - Medium +Service Initial Service Landscape - Light +Service Initial Service Landscape - Heavy +Service HVAC - Standard +Service HVAC - Diagnose & Repair +Service Garage Door +"Seed Grass (per 1,000 sqft)" +Secure Water Heater Flue Piping +Secure Trim +Secure Towel Ring +Secure Towel Bar +Secure Toilet Tank +Secure Toilet Paper Holder +Secure Toilet Base +Secure Switch +Secure Stair Handrail +Secure Shelf +Secure Refrigerator Handle +Secure Range Handle +Secure Perimeter Block Wall Cap +Secure Outlet +Secure Newel Post +Secure Mailbox +Secure Insulation +Secure Hose Bibb +Secure Gutter +Secure Garage Door Trim +Secure Flooring Transition Strip +Secure Fascia Board +Secure Door Weatherstripping +Secure Dishwasher +Secure Deck Handrail +Secure Countertop End Cap +Secure Cabinet Hardware +Seal Deck +Rewire Electrical System +Resurface Pool Deck +Rescreen Window Screen +Rescreen Screen Door +Rescreen Patio Screen +Replace Window - Single Pane +Replace Window - Hurricane-Rated +Replace Window - Dual Pane +Replace Single Tile +Repair Stucco +Repair Stair Baluster +Repair Soffit +Repair Siding Hole +Repair Shed Door +Repair Roof Truss +Repair Roof +Repair Porcelain/Ceramic Chip +Repair Popcorn Ceiling Texture +Repair Perimeter Block Wall Step Cracking +Repair Perimeter Block Column +Repair Outlet Hot/Neutral Reversed +Repair Main Electrical Panel Conduit Separation +Repair Irrigation Pipe Leak +Repair HVAC Ductwork +Repair Foundation +Repair Firebox Cracking +Repair Drywall - Crack(s) LF +"Repair Drywall - 6""x6""" +"Repair Drywall - 6""-2'x2'" +Repair Drywall - 4'x4'-4'x8' (full sheet) +Repair Drywall - 2'x2'-4'x4' +Repair Door Jamb +Repair Door - Holes +Repair Door - Delamination +Repair Countertop Chip +Repair Concrete Crack +Repair Chimney Damper +Repair Attic Ladder Pull String +Rent/Procure Generator +Rent/Procure Dumpster - 40 CuYd +Rent/Procure Dumpster - 20 CuYd +Rent/Procure Dumpster - 10 CuYd +Rent/Procure Dehumidifier +Rent/Procure Crane +Remove/Store Window Screens +Remove/Reinstall Pedestal Sink for Flooring Install +Remove Window Tint +Remove Sliding Screen Door +Remove & Reinstall Water Heater +Remove & Reinstall Toilet +Remediate Mold +Remediate Lead Paint +Regrout Wall Tile/Backsplash +Reglaze Window +Refinish Shower +Refinish Pool Surface +Refinish Hardwood Flooring - Sand & Seal +Refinish Hardwood Flooring - Buff & Seal +Refinish Bathtub with Surround +Refinish Bathtub +Prime House Interior +Prime House Exterior +Pressure Wash Tile Roof +Pressure Wash Shingle Roof +Pressure Wash Flatwork +Pressure Wash Fence +Pressure Wash Exterior +Premium - Windows +Premium - Window Wells +"Premium - Water, Gas, Electrical Service" +Premium - Walls / Ceiling +Premium - Vanity Cabinets +Premium - Storage Sheds +Premium - Stairs & Handrails +Premium - Soffits & Fascia +Premium - Shutters +Premium - Shelving & Rods +Premium - Security Systems +Premium - Security / Storm Doors +Premium - Satellite Dishes +Premium - Roof +Premium - Pool Barriers & Safety +Premium - Pool +Premium - Plumbing - Water Treatment Systems +Premium - Plumbing - Water Lines & Valves +Premium - Plumbing - Water Heater +Premium - Plumbing - Toilets +Premium - Plumbing - Sinks +Premium - Plumbing - Showers / Tubs +Premium - Plumbing - Gas Lines & Valves +Premium - Plumbing - Garbage Disposal +"Premium - Plumbing - Drain, Wastes and Vents" +Premium - Pests +Premium - Odors +Premium - Mirrors +Premium - Medicine Cabinets +Premium - Mailboxes +Premium - Landscaping +Premium - Irrigation Systems +Premium - Interior Lights & Fans +Premium - Interior Doors +Premium - Insulation +Premium - HVAC +Premium - Gutters +Premium - Ground / Vapor Barrier +Premium - Grading & Drainage +Premium - General Interior +Premium - General Exterior +Premium - Garage Door +Premium - Foundation / Basement Walls +Premium - Flooring +Premium - Fireplace / Chimney +Premium - Fire Safety / Detectors +Premium - Fire Rated Door +Premium - Fencing / Walls & Gates +Premium - Exterior Vents +Premium - Exterior Siding / Stucco +Premium - Exterior Lights & Fans +Premium - Exterior Features +Premium - Exterior Doors +Premium - Exhaust Fans +Premium - Electrical - Switches / Outlets / Coverplates +Premium - Electrical - Service / Panel +Premium - Electrical - General +Premium - Doorbells +Premium - Door Hardware +Premium - Decks +Premium - Crawlspace Doors +Premium - Countertops +Premium - Concrete / Paving / Hardscape +Premium - Cabinets +Premium - Blinds / Window Coverings +Premium - Bathroom Hardware +Premium - Baseboards & Interior Trim +Premium - Attic Access +Premium - Appliance - Washer +Premium - Appliance - Vent Hood +Premium - Appliance - Refrigerator +Premium - Appliance - Oven / Range +Premium - Appliance - Other +Premium - Appliance - Microwave +Premium - Appliance - General +Premium - Appliance - Dryer +Premium - Appliance - Dishwasher +Premium - Appliance - Cooktop +Premium - Address Numbers +Plumbing - Winterize +Plumbing - Dewinterize +Pest Control Treatment - Tenting +Pest Control Treatment - Subterranean Termite +Pest Control Treatment - Standard +Pest Control Treatment - Rodent +Pest Control Treatment - German Roach +Pest Control Treatment - Bird +Pest Control - Termite Inspection +Paint Stem Wall/Foundation +Paint Stair Tread +Paint Stair Handrail +Paint Soffit +Paint Shutters +Paint Shoe Molding +Paint Shelf +Paint Room +Paint Prep House Exterior +Paint Porch/Patio Floor +Paint Porch/Patio Cover +Paint Pool Deck +Paint Medicine Cabinet +Paint Interior Door +Paint HVAC Return Grille +Paint HVAC Register +Paint House Interior Wall (Corner to Corner) +Paint House Interior High Ceiling - Premium +Paint House Interior - Full Interior +Paint House Interior - Doors & Trim Only +Paint House Exterior Wall (Corner to Corner) +Paint House Exterior Trim Only +Paint House Exterior - Full Exterior +Paint Garage Interior +Paint Garage Floor +Paint Garage Door - Two Car +Paint Garage Door - One Car +Paint Front/Exterior Door - Interior Only +Paint Front/Exterior Door - Exterior Only +Paint Fireplace Firebox +Paint Fascia Board +Paint Exterior Door - Exterior Side Only +Paint Exterior Door - Both Sides +Paint Deck Steps +Paint Ceiling +Paint Cabinet - Interior & Exterior +Paint Cabinet - Exterior Only +Level Concrete Subfloor +Label Electrical Panel Cover Blanks +Label Electrical Panel Circuits +Install/Replace Wrought Iron Gate +Install/Replace Wrought Iron Fence +Install/Replace Wood/Cement Board Siding +Install/Replace Wood Picket Fence +Install/Replace Wood Panel Siding +Install/Replace Wood Gate +Install/Replace Wood Fence Pickets +Install/Replace Wood 4x4 Fence Post +Install/Replace Window Well Surround +Install/Replace Window Well Cover +Install/Replace Window Trim +Install/Replace Window Screen +Install/Replace Window Sash +Install/Replace Window Lock +Install/Replace Window Crank Handle +Install/Replace Window Balance +Install/Replace Weatherproof Cover +Install/Replace Water/Ice Maker Outlet Box +Install/Replace Water Shut-Off Valve +Install/Replace Water Pressure Reducing Valve +Install/Replace Water Heater Supply Line +Install/Replace Water Heater Stand +Install/Replace Water Heater Shut-Off Valve +Install/Replace Water Heater Safety Straps +Install/Replace Water Heater Pressure Relief Valve +Install/Replace Water Heater Pressure Relief Drain Line +Install/Replace Water Heater Nipple (set) +Install/Replace Water Heater Flue Piping +Install/Replace Water Heater Expansion Tank Straps +Install/Replace Water Heater Drip Pan +Install/Replace Water Heater - 50 Gal Gas +Install/Replace Water Heater - 50 Gal Electric +Install/Replace Water Heater - 40 Gal Gas +Install/Replace Water Heater - 40 Gal Electric +Install/Replace Washing Machine Pan +Install/Replace Wall Tile +Install/Replace Wall Plate +Install/Replace Wall Cabinet(s) +Install/Replace Vinyl/Aluminum Siding +Install/Replace Vinyl Gate +Install/Replace Vinyl Fence Post Sleeve +Install/Replace Vinyl Fence +Install/Replace Vertical Blinds +Install/Replace Vent Hood Screen +Install/Replace Vent Hood (Stainless) +Install/Replace Vent Hood (Black/White) +Install/Replace Vent Cover +Install/Replace Vanity Light Fixture +Install/Replace Vanity Countertop Only - Single +Install/Replace Vanity Cabinet/Counter Combo - Single +Install/Replace Undermount Bathroom Sink +Install/Replace Towel Ring +Install/Replace Towel Hook +Install/Replace Towel Bar +Install/Replace Toilet Wax Ring +Install/Replace Toilet Supply Line +Install/Replace Toilet Seat (Round) +Install/Replace Toilet Seat (Elongated) +Install/Replace Toilet Paper Holder +Install/Replace Toilet Flush Kit +Install/Replace Toilet Flush Handle +Install/Replace Toilet Flapper +Install/Replace Toilet Flange +Install/Replace Toilet Bolt Caps +Install/Replace Toilet (Round) +Install/Replace Toilet (Elongated) +Install/Replace Tile Roof +Install/Replace Thermostat +Install/Replace Switch +Install/Replace Sump Pump Discharge Pipe +Install/Replace Sump Pump +Install/Replace Storm Door +Install/Replace Stair Tread +Install/Replace Stair Stringer +Install/Replace Stair Handrail Mounting Hardware +Install/Replace Stair Handrail +Install/Replace Stair Baluster +Install/Replace Sprinkler Head +Install/Replace Soffit Panel +Install/Replace Sod +Install/Replace Smoke/CO Detector Battery +Install/Replace Smoke/Carbon Monoxide Combo Detector - Standard Battery +Install/Replace Smoke/Carbon Monoxide Combo Detector - Lithium Battery +Install/Replace Smoke/Carbon Monoxide Combo Detector - Hardwired +Install/Replace Smoke Detector - Standard Battery +Install/Replace Smoke Detector - Lithium Battery +Install/Replace Smoke Detector - Hardwired +Install/Replace Sliding Screen Door +Install/Replace Sliding Glass Door Security Pin +Install/Replace Sliding Glass Door Security Bar +Install/Replace Sliding Glass Door Roller(s) +Install/Replace Sliding Glass Door Handle +Install/Replace Sliding Glass Door - Standard +Install/Replace Sliding Glass Door - Oversized +Install/Replace Sink/Counter Hole Cover +Install/Replace Sink Supply Line +Install/Replace Sink Drain P Trap +Install/Replace Sink Drain Assembly +Install/Replace Single Wall Oven (All Finishes) +Install/Replace Shutters (pair) +Install/Replace Shower Valve Cartridge +Install/Replace Shower Valve +Install/Replace Shower Trim Kit +Install/Replace Shower Surround - Prefab +Install/Replace Shower Rod +Install/Replace Shower Head +Install/Replace Shower Enclosure +Install/Replace Shower Door(s) +Install/Replace Shower Arm +Install/Replace Shingle Roof +Install/Replace Shelving - Wood +Install/Replace Shelving - Wire +Install/Replace Shelf Support Bracket +Install/Replace Sheet Vinyl Flooring +Install/Replace Septic Tank Cover +Install/Replace Security Door +Install/Replace Screen/Storm Door Closer +Install/Replace Screen Door +Install/Replace Roof Jack +Install/Replace Roof Decking +Install/Replace Refrigerator Water Filter +Install/Replace Refrigerator Ice Maker +Install/Replace Refrigerator Handle +Install/Replace Refrigerator - Top Freezer (Stainless) +Install/Replace Refrigerator - Top Freezer (Black/White) +Install/Replace Refrigerator - Side-By-Side (Stainless) +Install/Replace Refrigerator - Side-By-Side (Black/White) +Install/Replace Recessed Light Fixture +Install/Replace Range Knob +Install/Replace Range Handle +Install/Replace Range - Gas (Stainless) +Install/Replace Range - Gas (Black/White) +Install/Replace Range - Electric (Stainless) +Install/Replace Range - Electric (Black/White) +Install/Replace Quartz Countertop +Install/Replace Pull Chain Socket Light Fixture +Install/Replace Privacy Door Knob +Install/Replace Pool Vacuum Breaker +Install/Replace Pool Timer +Install/Replace Pool Pump +Install/Replace Pool Heater +Install/Replace Pool Filter Unit +Install/Replace Pool Filter Sand +Install/Replace Pool Filter Cartridge +Install/Replace Pool Fence +Install/Replace Pool 3-Way Valve +Install/Replace Pocket Door - Track and Roller +Install/Replace Pocket Door - Slab Only +Install/Replace Pocket Door - Slab & Hardware +Install/Replace Pocket Door - Pull +Install/Replace Plant +Install/Replace Perimeter Block Wall Cap +Install/Replace Perimeter Block Wall +Install/Replace Pendant Light Fixture +Install/Replace Pedestal Bathroom Sink +Install/Replace Passage Door Knob +Install/Replace Oven Rack +Install/Replace Oven Knobs +Install/Replace Oven Heating Element +Install/Replace Oven Handle +Install/Replace Outlet - New Run From Existing Circuit +Install/Replace Outlet +Install/Replace Newel Post +Install/Replace New Dedicated Electrical Circuit +Install/Replace Mulch +Install/Replace Mirror Trim +Install/Replace Mirror +Install/Replace Microwave Combo Wall Oven (All Finishes) +Install/Replace Microwave - Over the Range (Stainless) +Install/Replace Microwave - Over the Range (Black/White) +Install/Replace Microwave - Low Profile (All Finishes) +Install/Replace Metal Roof +Install/Replace Medicine Cabinet +Install/Replace Main Water Shut-Off Valve +Install/Replace Main Sewer Line +Install/Replace Mailbox Post +Install/Replace Mailbox Flag +Install/Replace Mailbox - Wall Mounted +Install/Replace Mailbox - Mailbox Only +Install/Replace Mailbox - Mailbox & Post +Install/Replace Luxury Vinyl Plank (LVP) Flooring - Glue Down +Install/Replace Luxury Vinyl Plank (LVP) Flooring - Click Lock +Install/Replace Luxury Vinyl Flooring - Stair Labor (per stair) +Install/Replace Luan Board Subfloor +Install/Replace Lockbox - Wall Mount +Install/Replace Light Bulb +Install/Replace Laundry Washer Valves (per valve) +Install/Replace Laundry Washer Valve Caps +Install/Replace Laundry Washer Box +Install/Replace Laundry Sink Faucet +Install/Replace Laminate Countertop Sidesplash +Install/Replace Laminate Countertop End Cap +Install/Replace Laminate Countertop +Install/Replace Kitchen Sink Strainer +Install/Replace Kitchen Sink Faucet +Install/Replace Kitchen Sink - Undermount +Install/Replace Kitchen Sink - Drop-In +Install/Replace Kitchen Faucet Stem/Cartridge +Install/Replace Kitchen Faucet Handle +Install/Replace Keypad Deadbolt +Install/Replace Junction Box Cover +Install/Replace Junction Box +Install/Replace Jelly Jar Light Fixture +Install/Replace Irrigation Valve Box +Install/Replace Irrigation Valve +Install/Replace Irrigation Vacuum Breaker +Install/Replace Irrigation Timer +Install/Replace Irrigation System Watering Zones (per zone) +"Install/Replace Irrigation System Base (Timer, Valves, etc.)" +Install/Replace Interior Slab Door +Install/Replace Interior Prehung Door +Install/Replace Interior Double Doors - Prehung +Install/Replace Insulation - Blown-In +Install/Replace Insulation - Batt +Install/Replace Indoor Sconce Light Fixture +Install/Replace HVAC Rooftop Stand +Install/Replace HVAC Return Grille +Install/Replace HVAC Register - Wall/Ceiling +Install/Replace HVAC Register - Floor +Install/Replace HVAC Lineset Insulation - Full Lineset +Install/Replace HVAC Lineset Insulation - Exterior Portion Only +Install/Replace HVAC Lineset +Install/Replace HVAC Gas Supply Line - Hardpipe +Install/Replace HVAC Gas Supply Line - Flex +Install/Replace HVAC Float Switch +Install/Replace HVAC Electrical Disconnect +Install/Replace HVAC Ductwork +Install/Replace HVAC Condensing Unit +Install/Replace HVAC Cage +Install/Replace HVAC Air Handler +Install/Replace HVAC Air Filter +Install/Replace Hose Bibb Handle +Install/Replace Hose Bibb Anti-Siphon Vacuum Breaker +Install/Replace Hose Bibb - Standard +Install/Replace Hose Bibb - Frost Proof +Install/Replace Hinge Mortising +Install/Replace Heat Pump Split HVAC System (5 Tons) +Install/Replace Heat Pump Split HVAC System (4 Tons) +Install/Replace Heat Pump Split HVAC System (3.5 Tons) +Install/Replace Heat Pump Split HVAC System (3 Tons) +Install/Replace Heat Pump Split HVAC System (2.5 Tons) +Install/Replace Heat Pump Split HVAC System (2 Tons) +Install/Replace Heat Pump Split HVAC System (1.5 Tons) +Install/Replace Heat Pump Package HVAC System (5 Tons) +Install/Replace Heat Pump Package HVAC System (4 Tons) +Install/Replace Heat Pump Package HVAC System (3.5 Tons) +Install/Replace Heat Pump Package HVAC System (3 Tons) +Install/Replace Heat Pump Package HVAC System (2.5 Tons) +Install/Replace Heat Pump Package HVAC System (2 Tons) +Install/Replace Hardwood (Engineered) Flooring +Install/Replace Gutter Splash Block +Install/Replace Gutter Elbow +Install/Replace Gutter Downspout Extension +Install/Replace Gutter Downspout +Install/Replace Gutter +Install/Replace Gravel +Install/Replace Granite Countertop +Install/Replace Gate Self-Closing Device +Install/Replace Gate Latch +Install/Replace Gas Split HVAC System (5 Tons) +Install/Replace Gas Split HVAC System (4 Tons) +Install/Replace Gas Split HVAC System (3.5 Tons) +Install/Replace Gas Split HVAC System (3 Tons) +Install/Replace Gas Split HVAC System (2.5 Tons) +Install/Replace Gas Split HVAC System (2 Tons) +Install/Replace Gas Split HVAC System (1.5 Tons) +Install/Replace Gas Range Burner +Install/Replace Gas Package HVAC System (5 Tons) +Install/Replace Gas Package HVAC System (4 Tons) +Install/Replace Gas Package HVAC System (3.5 Tons) +Install/Replace Gas Package HVAC System (3 Tons) +Install/Replace Gas Package HVAC System (2.5 Tons) +Install/Replace Gas Package HVAC System (2 Tons) +Install/Replace Gas Key +Install/Replace Gas Cooktop Burner +Install/Replace Gas Cooktop (All Finishes) +Install/Replace Garbage Disposal Gasket +Install/Replace Garbage Disposal +Install/Replace Garage Door Wall Control Button +Install/Replace Garage Door Trim (Top & Side) +Install/Replace Garage Door Torsion Spring +Install/Replace Garage Door Safety Sensors +Install/Replace Garage Door Safety Cable +Install/Replace Garage Door Roller Bracket +Install/Replace Garage Door Roller +Install/Replace Garage Door Remote +Install/Replace Garage Door Opener Mounting Bracket +Install/Replace Garage Door Opener +Install/Replace Garage Door Handle Lock +Install/Replace Garage Door Emergency Release Cord +Install/Replace Garage Door Bottom Seal +Install/Replace Garage Door - 2 Car +Install/Replace Garage Door - 1 Car +Install/Replace Gable Vent Fan +Install/Replace Furnace (80k BTUs) +Install/Replace Furnace (60k BTUs) +Install/Replace Furnace (40k BTUs) +Install/Replace Furnace (100k BTUs) +Install/Replace Front Door Slab +Install/Replace Front Door Handle +Install/Replace Front Door - Prehung +Install/Replace French Drain +Install/Replace Foundation Vent Cover +Install/Replace Flush Mount Light Fixture - Interior +Install/Replace Flush Mount Light Fixture - Exterior +Install/Replace Fluorescent Light Fixture +Install/Replace Fluorescent Light Bulb +Install/Replace Flooring Transition Strip +Install/Replace Floor Drain Grate +Install/Replace Flood Light Fixture +Install/Replace Flat Roof - Rolled Asphalt +Install/Replace Flat Fluorescent Lens Cover +Install/Replace Fireplace Screen +Install/Replace Fireplace Log Grate +Install/Replace Fireplace Gas Logs +Install/Replace Fireplace Damper Clamp +Install/Replace Fire Rated Door - Prehung +Install/Replace Faucet Aerator +Install/Replace Fascia Board +Install/Replace Exterior/Service Door - Slab +Install/Replace Exterior/Service Door - Prehung +Install/Replace Exterior Wrought Iron Handrail +Install/Replace Exterior Trim +Install/Replace Exterior French Doors - Prehung +Install/Replace Electrical Panel Cover Screws +Install/Replace Electrical Panel Bushing +Install/Replace Electrical Panel +Install/Replace Electric Cooktop (All Finishes) +Install/Replace Dummy Knob +Install/Replace Drywall (per sheet) +Install/Replace Dryer Vent Exterior Cover +Install/Replace Dryer Vent Entire Assembly +Install/Replace Drop-In Bathroom Sink +Install/Replace Double Wall Oven (All Finishes) +Install/Replace Double Vanity Countertop +Install/Replace Double Vanity Combo +Install/Replace Doorbell Chime +Install/Replace Doorbell Button +Install/Replace Doorbell Battery +Install/Replace Doorbell - Wireless System +Install/Replace Doorbell - Wired System +Install/Replace Door/Window Alarm +Install/Replace Door Weatherstripping +Install/Replace Door Trim/Casing +Install/Replace Door Threshold +Install/Replace Door T-Astragal Molding +Install/Replace Door Sweep +Install/Replace Door Strike Plate +Install/Replace Door Stop - Wall Mount +Install/Replace Door Stop - Hinge Mount +Install/Replace Door Peep Hole +Install/Replace Door Lock Bore and Mortise +Install/Replace Door Kick Plate +Install/Replace Door Hole Plate Cover +Install/Replace Door Hinge (per hinge) +Install/Replace Door High Handle & Self-Closing Device for Standard Door +Install/Replace Door Ball Catch +Install/Replace Dishwasher Supply Line +Install/Replace Dishwasher High Loop +Install/Replace Dishwasher Air Gap +Install/Replace Dishwasher (Stainless) +Install/Replace Dishwasher (Black/White) +Install/Replace Deck Step Tread +Install/Replace Deck Railing Post +Install/Replace Deck Post +Install/Replace Deck Planks +Install/Replace Deck Handrail +Install/Replace Deck Flashing +Install/Replace Deck +Install/Replace Dead Front Cover +Install/Replace Crown Molding +Install/Replace Crawl Space Vapor Barrier +Install/Replace Crawl Space Door +Install/Replace Cooktop Knob +Install/Replace Cooktop Flat top Heating Element +Install/Replace Cooktop Electric Coil Element +Install/Replace Cooktop Drip Pans +Install/Replace Concrete +Install/Replace Coach/Lantern Light Fixture +Install/Replace Closet Rod Pole Sockets +Install/Replace Closet Rod - Rod Only +Install/Replace Cleanout Cover +Install/Replace Circuit Breaker - Standard Single Pole +Install/Replace Circuit Breaker - Standard Double Pole +Install/Replace Circuit Breaker - AFCI +Install/Replace Chimney Cap +Install/Replace Channel Drain +Install/Replace Chandelier Light Fixture +Install/Replace Chain Link Gate +Install/Replace Chain Link Fence Post +Install/Replace Chain Link Fence +Install/Replace Cement Board Subfloor +Install/Replace Ceiling Fan Pull Chain Extension +Install/Replace Ceiling Fan Downrod +Install/Replace Ceiling Fan +Install/Replace Carpet (SqYd) +Install/Replace Carbon Monoxide Detector +Install/Replace Cabinet Trim Molding +Install/Replace Cabinet Toe Kick +Install/Replace Cabinet Pull(s) +Install/Replace Cabinet Knob(s) +Install/Replace Cabinet Floor +Install/Replace Cabinet End Panel +Install/Replace Cabinet Drawer Rollers +Install/Replace Cabinet Drawer +Install/Replace Cabinet Door +Install/Replace Bypass Finger Pull/Cup +Install/Replace Bypass Door Rollers +Install/Replace Bypass Door Guide +Install/Replace Bypass Door +Install/Replace Bulb - Vent Hood +Install/Replace Bulb - Refrigerator +Install/Replace Bulb - Oven/Range +Install/Replace Bulb - Microwave +Install/Replace Bifold Door Hardware +Install/Replace Bifold Door +Install/Replace Bathtub/Shower Trim Kit +Install/Replace Bathtub Surround - Tile +Install/Replace Bathtub Surround - Prefab +Install/Replace Bathtub Stopper +Install/Replace Bathtub Spout +Install/Replace Bathtub Overflow Plate +Install/Replace Bathtub Drain Stop & Overflow +Install/Replace Bathtub +Install/Replace Bathroom Sink Faucet +Install/Replace Bathroom Sink Drain Stop Pop Up Only +Install/Replace Bathroom Sink Drain Stop Assembly +Install/Replace Bathroom Faucet Handle +Install/Replace Bath/Laundry Exhaust Fan Ducting +Install/Replace Bath/Laundry Exhaust Fan Cover +Install/Replace Bath/Laundry Exhaust Fan +Install/Replace Baseboard +Install/Replace Base Cabinet(s) +Install/Replace Backsplash +Install/Replace Attic Scuttle Cover +Install/Replace Attic Ladder +Install/Replace Attic Access Trim +Install/Replace Anti-Tip Bracket +Install/Replace Angle Stop +Install/Replace Air Freshener +Install/Replace Address Numbers - Nail On (per number) +Install/Replace Address Numbers - Adhesive +Install/Replace 3 Piece Bathroom Hardware Set +"Install/Replace 2"" Blinds - 72""" +"Install/Replace 2"" Blinds - 60""" +"Install/Replace 2"" Blinds - 48""" +"Install/Replace 2"" Blinds - 36""" +"Install/Replace 2"" Blinds - 24""" +"Install/Replace 1"" Mini Blinds" +Install/Replace - Deadbolt +Install/Replace - Knob/Deadbolt Combo +Install Water Well/Pump +Install Top Soil +Inspect/Service Fireplace +Inspect Well System +Inspect Septic Tank +Inspect Jetted Bathtub +Inspect Foundation +Initial Lawn Mowing +Hardwood Flooring Refinishing - Stair Labor +Hardwood Flooring - Stair Labor +Grind Trip Hazard +Grind & Paint Wrought Iron Fence +Full Home Plumbing Repipe +Frost Window +Fire Extinguisher +Fill HVAC Lineset Wall Penetration +Fill Dirt - Install/Replace +Fiberglass Chip - Repair +Dryer Vent Exterior Penetration - Standard +Dryer Vent Exterior Penetration - Concrete +Dispose Hazardous Materials +Detect Slab Leak +Demo/Seal Fireplace +Demo Window Blinds +Demo Window Bars +Demo Water Softener +Demo Water Filter/RO +Demo Wallpaper +Demo Vertical Blinds +Demo Utility/Laundry Sink +Demo Tile Flooring +Demo Structure +Demo Storm Door +Demo Sticker/Decal +Demo Shower Door +Demo Shelf +Demo Sheet Vinyl Flooring +Demo Security System +Demo Security Door +Demo Screen Door +Demo Satellite Dish (Remove Bracket & Patch) +Demo Satellite Dish (Leave Bracket) +Demo Popcorn Ceiling Texture +Demo Pool Heater +Demo Pocket Door / Create Pass-Through +Demo Mantle +Demo Luxury Vinyl Plank Flooring +Demo Low Voltage Wiring +Demo Light Fixture +Demo Laminate Flooring +Demo Ivy +Demo Irrigation System +Demo Hardwood Flooring +Demo Garbage Disposal +Demo Fence +Demo Exterior Penetration Pet Door +Demo Evaporative (Swamp) Cooler +Demo Door Chain/Latch +Demo Deck Stairs +Demo Deck Railing +Demo Deck +Demo Curtain Rod +Demo Concrete +Demo Ceiling Fan +Demo Carpet +Demo Cabinet +Demo Backsplash +Demo Appliance - Washing Machine +Demo Appliance - Washer/Dryer +Demo Appliance - Vent Hood +Demo Appliance - Refrigerator +Demo Appliance - Range +Demo Appliance - Oven +Demo Appliance - Microwave +Demo Appliance - Dryer +Demo Appliance - Dishwasher +Demo Appliance - Cooktop +Demo Appliance - All +Deep Clean Vent Hood +Deep Clean Refrigerator +Deep Clean Oven/Range +Deep Clean Microwave +Deep Clean Dishwasher +Deep Clean Cooktop +Cutout Countertop for Sink +Completion Package +Clean Whole House - Wipedown Clean +Clean Whole House - Deep Clean +Clean HVAC Ductwork +Clean Gutters +Clean Fireplace +Clean Dryer Vent +Clean Carpet +Clean Cabinet +Caulk Single Fixture +Caulk Kitchen Fixtures & Counters (per room) +Caulk Countertop +Caulk Bathroom Fixtures & Counters (per room) +Carpet - Stair Labor +Cap Gas Line +Camera Main Sewer Line +Asbestos - Remediate +Asbestos - Inspection +Adjust/Repair Pocket Door +Adjust Water Pressure Reducing Valve +Adjust Shower Door +Adjust Self-Closing Hinges +Adjust Gate +Adjust Garage Door Safety Sensors +Adjust Garage Door Auto Reverse +Adjust Door/Hardware +Adjust Cabinet Drawer +Adjust Cabinet Door +Adjust Bifold Door +Adjust Bathroom Sink Drain Stop +Acid Wash Pool Surface +Acid Wash Bathtub/Shower +Revenue Share +Major Remodel +Mold (Disaster Relief) +Damaged/Replacement +Asset Data Collection +Asset Data Collection +Asset Data Collection +LVT Project +Polished Concrete Project +Discount Rate +Lock Installation +Lock Installation +Repair +Repair +Repair +Repair +Repair +Repair +Adjustment +Tier 6 +Tier 5 +Tier 4 +Tier 3 +Tier 2 +Tier 1 +Revenue Share +Repair +Boiler +Chiller +Wall Panels +Demos +Repair Damaged +Repair +Fan issue +Electrical/lighting +Broken Fixture +Fan issue +Electrical/lighting +Broken Fixture +Fan issue +Electrical/lighting +Broken Fixture +Electrical/Lighting +Crank Maintenance +Minor Construction +Keypad Lock +Scheduled Cleaning +Deep Cleaning  +Adjustment +Tennant T300 Scrubber CAPEX +Tennant Scrubbers/Sweepers +Tenant Allowance +Sanitization Service +Nashville Refresh Project +Floor Care Restroom Service +Bundled Janitorial Service +VCT - Routine +Reschedule Services +Polished Concrete Rejuvenation/Resealing +Performance Issue +No Show/Merchandise Removal Fee +Missed Service +LVT Scrub Remodel W/ Janitorial Cleaning +Floor Cleaning (Non Carpet) +Carpet Cleaning/Extraction +"Sweep, Scrub, & Buff" +Concrete Floor Scrub w/ Janitorial Cleaning +LVT Floor Scrub w/ Janitorial Cleaning +Strip & Wax w/ Janitorial Cleaning +Scrub & Recoat w/ Janitorial Cleaning +"Sweep, Scrub, & Buff w/ Janitorial Cleaning" +Branch Inspection +Service Feedback +Damage/Flooding +Autoclave Repair +Clean-Up +Steamers-Plumber Needed +Vacant +Survey +Survey +Wood +"Winterization, Temp Utilities & Heat" +Windows +Window/Wall Unit +Window Wells +Window Washing +Window Repair +Window Glazing +Water Treatment +Water Treatment +Water Meters +Water Meters +Water Main Repair & Replace +Water Heater +Water Heater +Water Features +Washer/Dryer +Wallpaper +Wall & Attic Insulation +Vinyl +Vinyl +Vents/Grilles/Registers +Vehicle Expenses And Fuel +Utility Sink +Utility Meter & Tap Fees +Tub/Shower +Trim +Tree Removal +Tree Pruning +Trash Haul +Topsoil/Sand/Gravel +Toilet +Toilet +Tile/Grout Cleaning +Tile Roof Replacement +Tile +Tile +Thermostat +Sump Pump +Sump Pump +Stucco +Stucco +Structure Demo +Stairs/Rails - Interior +Stairs/Rails - Interior +Stairs/Rails - Exterior +Stairs/Rails - Exterior +Split System/Heat Pump +Split System/Gas +Specialty Tile +Specialty Tile +Specialty Hardware +Specialty Coatings +"Soffit, Eaves & Fascia" +Small Tools & Supplies +Skylights +Skylights +Site Grading +Siding Replacement +Siding Repair +Shutters +Shower Door +Shower Door +Shingle Roof Replacement +SFR Recuring Subscription Clean +SFR Clean - Post Construction +Sewer Main Repair & Replace +Septic +Seeding & Sodding +Security Systems/Alarms +Security Systems/Alarms +Security Systems/Alarms +Screens +Saas Fees +Rough Lumber & Material +Roofing & Flashing Repairs +Rods & Shelves +Retaining Walls +Rental Equipment +Remote Access And Lockboxes +Remediation +Remediation +Reglaze & Resurface +Refrigerator +Refresh Clean +Range Hood/Microwave Combo +Range Hood +Propane Tanks +Private Inspections +Pressure Washing +Pool/Spa Demo +Pool Surface +Pool Service +Pool Safety +Pool Heating/Cooling +Pool Decking +Pool Construction +Pool Cleaning Systems & Features +Plumbing Fixtures & Equipment +Plumbing +Plant Materials +Paving & Flatwork +Paving & Flatwork +Paint Prep/Drywall Repair +Package System/Heat Pump +Package System/Gas +Oven/Range +Outlets/Switches +Outlets/Switches +Other Roof Replacement +Other +Odor Treatments +Mulch +Mowing & Landscape Service- Initial +Misc. Job Office Expense +Misc. Exterior Hardware +Mirror +Mini-Split System +MFR Recuring Subscription Clean +MFR Clean - Post Construction +Masonry Restoration & Cleaning +Mailboxes & Directories +Luxury Vinyl Tile +Luxury Vinyl Tile +Luxury Vinyl Plank +Luxury Vinyl Plank +Low Voltage & Misc. Electric +Light Bulbs +Lawn Sprinklers/Irrigation- Service/Repair +Lawn Sprinklers/Irrigation- Install +Laminate +Laminate +Kitchen Sink +Kitchen Sink +Job Level Salary +Irrigation Controller/Timer +Interior Paneling/Wainscotting +Interior Paneling/Wainscotting +Interior Paint +Interior Light Fixtures +HVAC Service & Repairs +HVAC Extras +Hazardous Mat. Removal/Disposal +Gutters +General Roofing & Gutters +General Pool +General Plumbing +General Paint & Coatings +General Laundry +General Landscape +General Interior Finishes +General HVAC +General Flooring +General Fees +General Exterior Finishes +General Electric +General Disposal & Remediation +General Contracting Fees +General Cleaning Services +Gates & Gate Operators +Gas Main Repair & Replace +Garage Service & Accessories +Garage Doors +Garage Door Openers +Furnishing Install +Furnace +Framing +Foundation Repairs +Flooring +Floor Prep +Flat Roof Replacement +Fireplace +Fire And Life Safety +Finish Hardware & Bath Accessories +Fencing - Wood +Fencing - Wood +Fencing - Vinyl/PVC +Fencing - Vinyl/PVC +Fencing - Iron +Fencing - Iron +Fencing - Chain Link +Fencing - Chain Link +Fencing - Brick/Block +Fencing - Brick/Block +Fencing +Fans +Extra - Spec. Gutters/Drainage +Extermination +Exterior Wood Repair +Exterior Vents +Exterior Paint +Exterior Light Fixtures +Exh. Fans & Dryer Vent +Evaporative (Swamp) Cooler +Electrical Service +Electrical Panel +Electrical Panel +Electrical +Dumpsters +Ductwork +Ductwork +Drywall +Drain Pans/Condensate Lines +Doors - Screen/Storm +Doors - Interior Hardware +Doors - Interior +Doors - Exterior Hardware +Doors - Exterior +Doorbell +Doorbell +Disposal +Dishwasher +Disconnects/Fuses +Disconnects/Fuses +Detached Structures +Demolition And Removal +Deck Stain +Deck Repair +Deck Install & Replacement +Deck Demo +Countertops +Cost Estimating +Contingency +Consumables +Construction Trash Out +Condenser +Condenser +Commercial Clean +Clearing & Grubbing Hard Cut +Cleaning Supplies +Cleaning Equipment +Chimney +Caulk Fixtures/Trim +Caulk Fixtures/Trim +Carpet Repairs +Carpet Cleaning +Carpet +Cabinets Replace +Cabinets Repairs +Cabinet Paint +Building Inspections & Permits +Brick/Stone +Brick/Stone +Blinds & Window Coverings +BBQ & Firepit +Bathroom Sink +Bathroom Sink +Auger/Snake Individual Fixture +Auger/Scope Main Lines +Attic Access/Ladder +Attached Structures +Appliance Service +Appliance Install Accessories +Appliance Install +Air Handler +Air Handler +Address Numbers +Acoustic/Drop Ceiling +Acoustic/Drop Ceiling +AC Only System +Trip Charge +Vet Chest Freezer +Dryer Vent Cleaning +Air Scrubber +Repair +Install +Install +Replace +Replace +Repair +Install +Off Track +Mailbox +Driveway +Garage Door +Siding +Mailbox +Driveway +Toilet Seat +No Show/Missed Service +Equipment Scrubber Not Working +Checklist Not Complete +Monthly Landscape Review +Parking Signs +"Not Working, Broken or Damaged" +Not Working +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Not Working +Not Heating +No Power +No Humidification +Door/Handle Issue +Control Panel Not Working +Not Working +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Not Working +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Charger Replacement +Battery Replacement +Purchase +Client Owned +Rental +Repair +Replace +Repair +Plumbing +Other +Monitoring +Failed +Cleaning +Customer Credit +Concession Credit +Overall Drywall - Light +Overall Drywall - Heavy +Replace Gas HVAC Package Unit +Replace Electric HVAC Package Unit +General Permit Fee - Plumbing +General Permit Fee - HVAC +General Permit Fee - Electrical +Replace Single Overhead Garage Door +Replace Double Overhead Garage Door +Prep Subfloor +Replace Gcfi Outlet W/ Weatherproof Cover +Replace Medicine Cabinet +Remove Medicine Cabinet - Surface Mount +Remove Medicine Cabinet - Recessed +Replace Washer - Material Only +Replace Vent Hood - Material Only +Replace Range- Material Only +Replace Refrigerator- Material Only +Replace Wall Oven- Material Only +Replace Microwave- Material Only +Replace Dryer- Material Only +Replace Dishwasher- Material Only +Replace Cooktop - Material Only +Replace Washer - Labor Only +Replace Vent Hood - Labor Only +Replace Range- Labor Only +Replace Refrigerator- Labor Only +Replace Wall Oven- Labor Only +Replace Microwave- Labor Only +Replace Dryer- Labor Only +Replace Dishwasher- Labor Only +Replace Cooktop - Labor Only +Replace/Install Sheet Of Plywood/OSB +Remove Solar Panels From Roof +Remove Additional Layer Of Shingles +Replace/Install Water Heater Platform +Sink Re-Installation +Replace Shower Kit (Pan And Surround Panels) +Replace Bath And Shower Kit (Tub And 3-Piece Surround Panels) +Upgrade Water Meter Spread +Snake/Clear Drain Line +Septic Pump Out/Inspect +Replace/Install Laundry Washer Box And Valves +Replace Main Plumbing Stack +Remove/Replace Polybutylene Piping +Remove Water Softener +Replace Entire Tub/Shower Trim Kit +Drylok Paint +Stump Grinding +Replace Landscaping Timbers +Replace Concrete Retaining Wall +Prep And Install Grass Seed +Install Fill Dirt/Soil +Crane Rental +Replace Stair Riser/Tread +Pressure Wash - Home Only (>2500sqft) +Pressure Wash - Home Only (<2500sqft) +Pressure Wash - Full Service +Pressure Wash - Driveway & Walkways +Pressure Wash - Deck/Patio +Replace Sliding Glass Door Handle/Lock +Replace Exterior Door Lockset Combo (Lever And Deadbolt) +Replace Exterior Door Lockset Combo (Knob And Deadbolt) +Install Single Sided Deadbolt w/ Exterior Blank Plate +Initial Access: Drill Out Locks +Replace Interior Door Casing +Replace Concrete Retaining Wall +Replace/Install Self-Closing Hinge (Adjustable Spring) +Replace/Install Door Viewer +Replace Standard Door Hinge +Replace Screen Door +Replace Prehung French Doors +Replace Brickmold +Repair Screen Door +Project Dumpster/Debris Removal (40 Yard) +Project Dumpster/Debris Removal (30 Yard) +Project Dumpster/Debris Removal (20 Yard) +Replace Suspended Ceiling +Replace Individual Ceiling Tiles +Foundation Repair/Placeholder +Foundation Assessment/Inspection +Tile Cleaning +Replace Transition Strip +Replace Soffit - Wood +Replace Soffit - Aluminum +Replace Siding - Wood +Replace Siding - Vinyl +Replace Siding - Fiber Cement +Replace Fascia - Wood +Replace Fascia - Aluminum +Replace Light Fixture - Vanity Bar +Replace Light Fixture - Chandelier +Replace Window Sill +Replace Window Locks +Replace Interior Window Casing +Replace Stair Railing - Wrought Iron +Replace Stair Railing - Wood +Replace Stair Railing - Vinyl +Replace Porch Railing - Wrought Iron +Replace Porch Railing - Wood +Replace Porch Railing - Vinyl +Replace Deck Railing - Wrought Iron +Replace Deck Railing - Wood +Replace Deck Railing - Vinyl +Replace Balcony Railing - Wrought Iron +Replace Balcony Railing - Wood +Replace Balcony Railing - Vinyl +Overall Cleaning - Light Clean +Overall Cleaning - Deep Clean +Appliance Deep Cleaning +Additional Spot Cleaning +"Replace/Install Complete Vanity Cabinet - 72""" +"Replace/Install Complete Vanity Cabinet - 60""" +"Replace/Install Complete Vanity Cabinet - 48""" +"Replace/Install Complete Vanity Cabinet - 36""" +"Replace/Install Complete Vanity Cabinet - 30""" +"Replace/Install Complete Vanity Cabinet - 24""" +"Replace/Install Complete Vanity Cabinet - 18""" +"Replace Vanity Countertop w/ Molded Sink(s) - 72""" +"Replace Vanity Countertop w/ Molded Sink(s) - 60""" +"Replace Vanity Countertop w/ Molded Sink - 48""" +"Replace Vanity Countertop w/ Molded Sink - 36""" +"Replace Vanity Countertop w/ Molded Sink - 30""" +"Replace Vanity Countertop w/ Molded Sink - 24""" +"Replace Vanity Countertop w/ Molded Sink - 18""" +Replace Countertop - Quartz +Repaint Medicine Cabinet +Dryer Vent Cleanout +Survey +LED Message Center +Window Vinyls +External Move +Internal Move +"Not Working, Broken or Damaged" +Leaking +Safety Inspection Survey +Maintenance Survey +Deep Cleaning +Schedule Cleaning +Electrical Lighting +Dock Doors/Man Doors +HVAC +Special Information Request +Non-emergency Location Access +Customer Service Visit +Maintenance Management +Disaster Response +New Build/Decom +Valves/Plumbing +Timer +Motor +Filter Sand Change +Filter Clean Needed +Vacant Property Assessment +Annual Combo Change +Not Working +Dispatch Service +Dispatch Service +Customer Owned +Rental +Electrical/Lighting +Dock Doors/Main Doors +HVAC +Customer Trash Can +Install/Move +Humidity Issue +Stuck +Stuck +Will not open/close +Replace +Repair +Schedule Preventative Maintenance +Dock Bumpers Damaged/Broken +Not Sealing +Replace +Leveler Damaged/Broken +Loose/Damaged +Hardware +Repair parking lot +Repair concrete +Repair damaged +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Install/Remove Lockbox +Check Thermostat +Customer Trash Can +Install/Move +Monthly PM +Annual PM +Signet Furniture +Vacant Building Inspection +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Code Change +Installation +"Not working, Broken or Damaged" +Not Working +Broken/Damaged +Installation +Survey Live Test +Parts Purchase +Parts Purchase +IT Support +Volation/Fine +Stormwater Management +Odor +Hazardous Material +Initial Environmental Assessment +Post Environmental Assessment +Other +Broken/Damaged +Not misting +Leaking +Roof inspection +"Replace landscaping rock (2"" thick)" +Replace/install water heater drain pan +Replace water heater supply line +Replace Seismic Straps +Replace door stop +Shower Curtian Rod - tension fit +Shower Curtian Rod - permanent +Replace washer valve +Install sliding glass door security bar +Replace vanity countertop w/ molded sink +Replace/install complete vanity cabinet w/ sink +Replace complete electric HVAC system +Replace complete gas-split HVAC system +Replace/install bi-fold door +Replace/install bi-pass door +Replace/install bath control levers and trim kit +Repaint garage door +Replace prehung sliding glass doors +Replace/install fence post +Replace/install fence picket +Replace/install fence panel +Project dumpster fee +Replace/install TPR valve +Clean and inspect fireplace for safe operation +Replace light fixture +Replace/install tile surround +"Full interior repaint (walls, ceilings, and floor)" +Replace cabinet floor +Replace angle stop +Replace cabinet hardware (knobs/pulls) +Re-skin cabinet floor +Replace toilet paper holder +Replace towel ring +Service garage door +Security Alarm Fee Adjustment +Security Brackets +Unable To Lock/Unlock +Keypad Issue +Unable To Lock/Unlock +Keypad Issue +Order Lights +Magenta Rope Lighting +"Computers, Internet, Registers, Remotes, Wi-Fi" +Other +Will not open +Will not close +Weather stripping +Other +Latch/Closer/Hinge issue +Handle/Door Knob/Chime +Dragging +Door Frame Issue +Broken Door +Tenant Brand Sign +Gophers +Geese +Remove Decals/Promotional signage +Other +Fence +Door +Building structure +Bollard +Power washing exterior building +Awning cleaning +Deep cleaning +Window Cleaning +Other +Will Not Heat Up +Will Not Turn On +Repair +Condition Assessment +Load Bank +Annual +Airflow Issue +Cleaning +Cleaning +Cleaning +Supply Line/Valve +Supply Line/Valve +Repair/Maintenance +Well System Issues +Install +Hallway +HVAC Asset Survey +Vacant Property +Property Inspection +Vacant Filter Change +Water Diversion +Other +Won't Open/Won't Close +Annual Fire Sprinklers +Semi-annual Fire Sprinklers +Quarterly Fire Sprinklers +Pick-up and Dispose +Vandalism +Not Heating +Not Cooling +Making Noise +Leaking Water +Airflow Issue +Main Aisle Mini Wax +Wash and Buff (VCT - SSB) +Wash and Buff (Polished Concrete) +LVT & BBT Wash (Bacteria free) +Other +Electrical Panel Inspection +Full Home Electrical Swap +Replace quarter round/shoe molding +Helpdesk 3 +Helpdesk 2 +Other +More than 25 lights out +Exit signs +Emergency lighting +6-25 lamps out +1-5 lamps out +Survey +Semi-annual +Quarterly +Monthly +Field Line Issues +Gas Lines +Oxygen Lines +Vent Hood/Ventilation System +Dsc-Specific Electrical +Steamers +Gas Boosters +Fuel Deployment +Generator Maintenance +Generator Deployment/Connection +Demo/Remediation +Water Extraction/Dry Out +Post Environmental Assessment +Initial Environmental Assessment +R & M Services +Computer Monitor Swing Arm +Affiliate Found on Site +No Working Toilet +Monthly Landlord Cleaning +Found on PM +Platform Adoption Fee +Off-Platform Fee +Asbestos Remediation +Asbestos Test +Communication Issue +Rental Inspection +Landscaping or Debris Removal +Backroom Inspection +Vestibule Cleaning Payment +EHS Project +Exterior Maintenance +Parking Lot +Alarming +Annual Fee +Plexiglass Install +Cooktop +Dryer +Stackable Washer/Dryer +Washer +Wall Oven +Vent Hood +Refrigerator +Range/Oven +Microwave +Dishwasher +Other +Other +Full interior touch-up paint +Repair window trim +Recaulk/seal window exterior +Replace/install rain cap +Install lockbox +Replace dryer vent cover +Replace dryer vent +Repair dryer vent +Replace thermostat +Replace/install sump pump +Repair sump pump +Clean and sweep fireplace +Cap and seal fireplace +Repoint/tuckpoint brick +Repoint/tuckpoint brick +Repaint stucco +Repaint siding +Repaint soffit +Repaint facia +Remove wallpaper +Service water heater +Service HVAC system +Replace sewer clean out cover +Replace/install fire blocking +Replace/install fire blocking +Other +Other +Other +Back Charge +Credit Memo +Material Amount Offset +Material Amount +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +IHT Fee +Warranty Replacement +Inspection +Survey +Found on PM +Contracted +Positive Case +Other +Name Plates - Order New +Install Other +Install Drive Up Banners +Order New Materials +Pylon/Monument Sign - Repair or Replace +Non Illuminated Signage - Repair or Replace +Illuminated Signage - Repair or Replace +Generic Directional Signs +Chase Branded Directional Signs +Water Treatment +Storage Cost Reimbursement +Cleaning +Exit Signs - WV +Emergency Lighting - WV +Semi-monthly +Weekly +New Store - Initial Service +Found on PM +Trip Charge +Semi-annual +"ATM Survey,Standalone COVID Cleaning Payment" +Enhanced Scope +Day Portering +Additional Service Day Payment +Supplies +Warranty Repair +New Unit Install +COVID Day Portering +COVID Additional Service Day Payment +COVID-19 Supplies +Regular Consumable Supplies +HVAC Survey +Water Treatment +Annual +Key Replacement +Lock Replacement +Preventative +Positive Case +"Replace/install complete vanity cabinet w/ sink - 36""" +"Replace/install complete vanity cabinet w/ sink - 30""" +"Replace/install complete vanity cabinet w/ sink - 24""" +Replace/install 30oz carpeting w/ new pad +Replace/install 25oz carpeting w/ new pad +Replace storm window +Replace window screen and frame +Repair window screen +Permit fee - Water Heater Replacement +Replace/install water heater thermal expansion tank +Replace water heater - 50g Direct Vent +Replace water heater - 50g Gas +Replace water heater - 50g Elec +Replace water heater - 40g Gas +Replace water heater - 40g Elec. +Replace 3-piece Bath Accessory Kit +Replace Towel Bar +Install Fire Extinguisher +Replace smoke detector (wired) +Replace smoke detector (battery) +Replace undermount kitchen sink (steel) +Replace kitchen faucet - upgrade +Replace kitchen faucet - standard +Reconfigure kitchen sink drains +Replace alcove bathtub +Replace shower/tub valve cartridge +Replace showerhead +Replace Exterior GFCI Weatherproof cover +WDIIR Inspection +Provide quote for Termite Treatment +Provide quote for bird removal +Bed Bug Treatment (Additional Room) +Bed Bug Treatment (Intial Room) +Flea/Tick Treatment +Treat property for Yellow Jackets/Hornets +Treat property for Wasps +Remove Bee Swarm +Inspect/Treat property for Rodents +Treat property for German Roaches +Treat property for American Roaches +Treat property for Spiders +Treat Ant Infestation +One Time General Pest Treatment +General Permitting Fee +"Full exterior repaint (siding/walls, trim, gable ends, etc; foundation to roofline)" +Repaint all interior cabinetry - Interior & Exterior +Repaint all interior cabinetry - Exterior Only +"Repaint all interior walls, doors, trim (no ceilings)" +Repaint all interior wall surfaces (walls only) +Interior primer prior to paint +"Full interior repaint (walls, ceilings, doors, trim)" +Completion Package - Door hardware +"Completion Package - Bulbs, Batteries, Filters" +Completion Package - Switch & Outlet Covers +Pressure Wash - Driveway & Walkways +Pressure Wash - Deck/Patio +Pressure Wash - Home Only (>2500sqft) +Pressure Wash - Home Only (<2500sqft) +Pressure Wash -Full Service +Full clean entire home +Replace wall mounted mail box +Second Avenue: Other Ext. Door Lock Change +Second Avenue: Front Door Lock Change +Replace light fixture - 6 bulb vanity bar +Replace light fixture - 4 bulb vanity bar +Replace chandelier +Replace light fixture - can +Replace light fixture - wall sconce +Replace light fixture - flush mount +Replace/Install Dehumidifier +Clean Gutters (2 story) +Clean Gutters (1 story) +Replace/install gutter +Replace Garage Door Opener Remote +Repair door jamb +Replace window well cover +Carpet Cleaning +Reset Appliance +Carpet Restretch +Stair Labor +Install Tackstrips +Demo Wood Flooring +Demo Laminate +Demo Vinyl Flooring +Demo Tile +Demo Carpet +Replace LVP flooring (glued) +Replace LVP flooring (floating) +Replace laminate flooring +Replace countertop - Granite +Replace countertop - Laminate +Replace ceiling drywall in specified room +Replace quarter round/shoe modling +Building Assessment +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +"Not Working, Broken or Damaged" +Installation +"Not Working, Broken or Damaged" +Installation +"Not working, Broken or Damaged" +Installation +Conversion +Handrail Replace +Handrail Repair +Replace +Repair +Annual Floor Service +Janitorial Vendor Survey +Not working +Overgrown/Service Needed +Snow Request +Pool specialty inspection +Foundation specialty inspection +Roofing specialty inspection +HVAC specialty inspection +Other specialty inspection +Other - WV +Damaged - WV +Camera Issue - WV +Code Change +LED light strips - WV +Magenta Rope Lighting - WV +Unable To Lock/Unlock - WV +Keypad Issue - WV +Unable To Lock/Unlock -WV +Keypad Issue - WV +Broken +Electro Freeze +Taylor +New Unit Install +Face Sheild/Sneeze Guard +Speed bumps +Remove +Repair +Install +Payment +Full Day +Visit - Exterior Only +Visit - Interior Only +Visit - Interior + Exterior +Payment +Exterior Pressure Washing +Secured Area Cleaning +Furniture Maintenance +Carpet Maintenanance +Hard Floor Maintenance +Dust Vents & Blinds +Window Cleaning 3+ Floors +Window Cleaning +Clean Stairwells +Speical Cleaning +Exterior Pressure Washing +Secured Area Cleaning +Furniture Maintenance +Carpet Maintenanance +Hard Floor Maintenance +Dust Vents & Blinds +Window Cleaning 3+ Floors +Window Cleaning +Clean Stairwells +Nightly Cleaning +Payment +SMS assessment +Prepare Inspection report +Prepare Inspection report +Prepare Inspection report +Prepare Inspection report +Construction WO +"Replace Cord, Plug, Connection - C&R" +Not Dispensing Product - C&R +Not Blending - C&R +No Power - C&R +Water leaking - C&R +Other - C&R +Cooling issue - C&R +Not Blending - C&R +No Power - C&R +Making Noise - C&R +Leaking - C&R +Turn on all utilities +Replace entire tile roof +Replace entire dim shingle roof +Replace entire 3-tab shingle roof +Repair damaged/leaking roof +Remove gutter system as specified +Repaint gutters +Replace/install splashblock(s) +Replace/install downspout(s) +Replace/install gutter system +Repair existing gutter system +Replace removable pool fence +Repair existing pool fence +Repaint pool surface +Replace pool deck access covers +"Replace pool accessory (diving board, ladder)" +Replace pool heater +Replace pool filtration equipment +"Repair pool accessory (diving board, ladder)" +Repair pool water lines +Repair pool heater +Repair pool filtration equipment +Repair fiberglass pool surface +Repair tile pool surface +Repair plaster pool surface +Replace water heater +Repair water heater +Replace tank +Replace complete toilet +Replace toilet seat +Replace supply line +Install bolt caps +Replace tank-to-bowl kit +Replace wax ring +Replace handle +Replace flapper +Replace flush valve +Replace fill valve +Repair closet flange +Remove shower doors +Prep and resurface surround +Replace glass surround panel(s) +Replace glass shower doors +Replace/install surround panels +Regrout tub/shower tiles +Repair glass shower doors +Recaulk tub/shower surround +Repair tile tub/shower surround +Remove utility sink +Remove vanity & lav sink +Resurface lav sink +Resurface kitchen sink +Replace vanity & lav sink +Replace kitchen sink (porcelain) +Replace kitchen sink (steel) +Replace utility faucet +Replace kitchen faucet +Replace lav faucet +Replace air gap +Repair/replace P-trap +Replace supply lines +Replace kitchen sink baffle +Replace kitchen sink strainer +Repair utility faucet +Repair kitchen faucet +Repair lav faucet +Repair lav sink popup +Prep and resurface tub +Replace deck-mounted tub faucet +Replace tub spout +Replace tub drainstop +Replace shower/tub valve +Repair deck-mounted tub faucet +Repair showerhead +Repair shower/tub valve +Replace water treatment system +Repair main water supply +Repair water treatment system +Repair pipes +Replace frost-proof hose bib +Replace standard hose bib +Repair existing hose bib +Sewer camera +Repair existing DWV system +Perform exterior flea treatment +Perform interior flea treatment +Bedbug treatment +Pest exclusion +Other WDP treatment +Termite treatment (tenting) +Termite treatment (ground) +Bat removal +Rodent removal +Bird removal +General exterior pest treatment +General interior pest treatment +Repaint entire room complete +Repaint all room ceiling +Repaint all room trim +Repaint all room walls +Repaint all exterior doors/trim +Repaint all exterior walls of home +Repaint all interior cabinetry +Repaint all interior ceilings +Repaint all interior doors/trim +Repaint all interior wall surfaces +Perform odor-sealing of concrete slab +Perform ClO2 treatment +Perform ozone treatment +"Mow, trim, dress entire property" +Mulch beds with cedar mulch +Mulch beds with pine straw +In-wire tree trimming +Trim trees >10' from ground +Remove tree +Remove shrubs/plants +Remove water feature +Install sod +Replace tree +Replace shrub +Repair water feature +Remove irrigation system +Install irrigation system +Replace irrigation timer +Replace drip head +Replace sprinkler head +Repair buried irrigation piping +Remove block wall +Remove fencing +Repaint block wall +Repaint/stain wood fence +Replace cinder block wall +Replace complete hogwire fence +Replace complete chain-link fence +Replace complete vinyl fence +Replace wood fencing with new posts +Replace wood fencing on existing posts +Repair fencing and/or gate +Repair landscape drainage issue +Replace HVAC register +Replace return air filter grille +Replace flex duct +Replace ductless split HVAC +Replace ground-level HVAC package unit +Replace roofmounted HVAC package unit +Replace refrigerant lines +Replace furnace +Replace air handler +Replace heat pump +Replace condenser +Install filter box +Clean HVAC ducts +Repair HVAC ducts +Repair ductless split HVAC +Repair HVAC package unit +Repair refrigerant lines +Repair furnace +Repair air handler +Repair heat pump +Repair condenser +Repaint wall +Retexture walls in entire room +Replace drywall in entire room +"Perform ""floodcut"" and repair" +Repair drywall +Remove storage shed +Repaint storage shed +Replace/install storage shed +Repair storage shed roof +Repair storage shed floor +Repair storage shed exterior +Replace stair railing +Replace stair structure +Repair stair railing +Repair stair structure +Remove detector +Replace combo detector +Replace CO detector +Replace smoke detector +Change batteries in detectors +Remove shelving +Repaint shelving +Replace closet rod +Replace wood shelving +Replace metal shelving +Repair wood shelving +Repair metal shelving +Disable security system +Remove entire security system +Install new security system +Repair existing security system +Remove satellite dish from yard +Remove satellite dish from siding +Remove satellite dish from roof +Remove mirror +Replace mirror +Resecure mirror mounts to wall +Add trim around mirror to cover lost silvering +Remove mailbox and post +Repaint mailbox +Replace mailbox post +Replace mailbox +Repair mailbox post +Repair existing mailbox +Replace dummy lever +Replace privacy lever +Replace passage lever +Replace dummy knob +Replace privacy knob +Replace passage knob +Replace ext. deadbolt with electronic +Replace ext deadbolt with manual +Replace ext door handle set +Rekey all locks to match +Remove contaminated insulation +Install insulation under subfloor in crawlspace +Install blown insulation in walls +Install blown insulation in attic +Remove contaminated ground +Install radon system +Replace vapor barrier +Repair damaged sections of existing vapor barrier +Replace door weatherstripping +Replace door threshold +Repair existing threshold +Repaint door (outside only) +Repaint door (inside only) +Replace door slab only +Repair door jam +Repair existing door/hardware +Remove door +Repaint door +Replace door slab +Replace prehung door +Repair existing door/hardware +Remove debris from interior areas +Remove debris from exterior areas +Paint ceiling +Retexture ceiling in entire room as specified +Replace ceiling drywall in entire room +Repair existing ceiling +Remove address numbers +Paint address numbers as specified +Replace address numbers +Repair existing address numbers +Remove access door +Repaint access door +Replace crawl space access panel +Replace crawl space access door +Replace attic access door/panel (no ladder) +Replace attic access ladder assembly +Repair existing access door +Replace overhead door opener +Replace overhead door panels +Replace complete overhead door +Repair overhead door opener +Repair existing overhead door +Seal exterior basement walls +Seal interior basement walls +Repair block foundation wall +Level foundation slab +Install basement drain tile system +Fill foundation cracks +Refinish all wood flooring +Replace all sheet vinyl +Replace all VCT flooring +Replace all laminate flooring +Replace all VP flooring +Replace all carpeting +Remove carpeting - expose wood +Refinish wood floor +Paint concrete floor +Replace sheet vinyl flooring +Replace laminate flooring (glued) +Replace laminate flooring (floating) +Replace VP flooring +Replace VCT flooring +Replace wood flooring +Replace carpeting +Repair/regrout floor tiles +Repair subfloor +Repair vinyl flooring +Repair carpeting +Repair wood flooring +Repair fascia +Repair soffit +Repair siding +Repair stucco +Remove improper wiring +Install new electrical circuit +Rewire entire home +Repair existing wiring +Replace electrical panel +Repair existing electrical panel +Replace switch +Replace standard outlet +Replace GFCI outlet +Correct wiring on device +Remove light +Replace ceiling fan with light +Replace light fixture >12' +Replace light fixture <12' +Repair light fixture +Replace exterior hanging light fixture +Replace post light fixture +Replace exterior flood light +Replace exterior wall-mounted light fixture +Repair exterior lighting +Remove exhaust fan and repair surfaces +Install exhaust fan +Replace exhaust fan cover +Replace exhaust fan motor +Replace exhaust fan +Repair existing exhaust fan +Replace/install wireless doorbell +Replace doorbell chimes +Repair existing doorbell +Remove ceiling fan +Replace ceiling fan +Repair existing ceiling fan +Repaint wood windows +Replace window assembly +Reglaze window pane(s) +Replace window pane(s) +Repair window balancers +Repair window locks +Replace colonial shutters +"Replace 2"" horizontal blinds" +"Replace 1"" mini-blinds" +Replace vertical blinds +Repair interior shutters +Repair horizontal blinds +Repair vertical blinds +Remove security door +Remove storm door +Repaint security door +Repaint storm door +Replace security door +Replace storm door +Repair security door +Repair storm door +Remove baseboards +Prep and paint baseboard +Replace baseboard +Repair existing baseboards +Remove balcony structure +Repaint/refinish balcony surface +Repaint balcony railings +Replace wood balcony stairs +Replace balcony railing +Replace wood balcony planks +Replace entire balcony structure +Repair existing balcony +Remove porch structure +Repaint/refinish porch surface +Repaint porch railings +Replace wood porch stairs +Replace porch railing +Replace wood porch planks +Replace entire porch structure +Repair existing porch +Remove deck structure +Repaint/refinish wood deck surface +Repaint deck railings +Replace wood deck stairs +Replace deck railing +Replace wood deck planks +Replace entire deck structure +Repair existing deck +Full clean entire home - Large +Full clean entire home - standard +Repaint vanity cabinet +Replace/install vanity cabinet +Repair existing vanity cabinet/hardware +Remove countertop +Refinish/coat existing countertops +Remove/reinstall countertops +Replace backsplash +Replace countertop +Repair existing countertop +Remove cabinet +Prep and paint/refinish complete cabinet +Replace vanity cabinet w/o sink +Replace vanity cabinet w/ sink +Replace base cabinet +Replace wall cabinet +Repair existing cabinets/hardware +Remove poured slab +Prep and paint pool deck +Repaint traffic/parking marks +Recoat asphalt with sealant +Recoat/replace pool deck surface +Replace concrete/asphalt +Repair pool deck surface +Repair existing concrete/asphalt surfaces as specified +Remove washer +Replace washer with specified model +Repair existing washer +Remove vent hood +Replace vent hood with specified model +Install new hood filters +Repair existing vent hood +Remove range +Replace range with specified model +Repair existing range +Remove refrigerator +Replace refrigerator +Replace refrigerator water filter +Repair/replace icemaker water supply line +Replace refrigerator door handle(s) +Replace icemaker unit +Repair refrigerator door icemaker +Repair refrigerator shelves/bins +Replace freezer door seal +Replace freezer door liner +Replace refrigerator door seal +Replace refrigerator door liner +Replace freezer box liner +Replace refrigerator box liner +Repair nonworking freezer +Repair nonworking refrigerator +Remove wall oven +Replace wall oven +Repair existing wall oven +Remove microwave +Replace microwave +Connect vent to exterior of home +Install new microhood filters +Repair existing microwave +Remove disposal - add strainer +Replace disposal +Repair existing disposal +Remove dryer +Replace dryer +Repair existing dryer +Remove dishwasher +Repaint dishwasher panel +Replace dishwasher +Repair existing dishwasher +Remove cooktop +Replace cooktop with specified model +Repair existing cooktop +Quality Assurance +Trouble +Repair +Filter Change/Trip Charge +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Lighting +Fan Not Working +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Lighting +Fan Not Working +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Making Noise +Lighting +Fan Not Working +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Other +Other +Icing Up +Water Leaking +Making Noise +Fan Not Working +New Equipment Install +Gasket Repair/Replacement +Not Maintaining Temp +Hinges/Latch Broken +Lighting +Fan Not Working +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Lighting +Fan Not Working +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Water Leaking +Making Noise +Lighting +Fan Not Working +New Equipment Install +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Screen Broken +Other +Icing Up +Shelving/Rack +Gasket Repair/Replacement +Not Maintaining Temp +Screen Broken +Other +Icing Up +Water Leaking +Making Noise +Lighting +Fan Not Working +New Equipment Install +Repair +Preventative Maintenance +Replace +Damage +Damaged +Broken +Repair +Repair +Repair +Repair +Repair +Baby Changing Station +Repair +Maintenance +Issue +Survey/Trip Charge +PM/Trip Charge +New Refrigerator +Fall Clean Up-2 +Fall Clean Up-1 +Testing +Equipment +Menu board damaged +Speaker box damaged +Other +Not Lighting +Not Blending +No Power +Making Noise +Leaking +1-9 Lamps Out +10 Or More Lamps Out +4 Fixtures Or More +3 Fixtures Or Less +Survey Count Fixtures/Lamps +Retrofit +Repair +Other +High Electric Bill +Spring Cleanup-3 +Spring Cleanup-2 +Spring Cleanup-1 +Recurring Landscape Maintenance-2 +Recurring Landscape Maintenance-1 +Soap Dispenser +Stormwater Management +Break In +Repair/Replace +Replacement +Repair/Replace +Steamer +Replacement +Damaged +Cracked +Replacement +Additional Keys Needed +Glass Shattered +Additional Keys Needed +Won't Lock/Unlock +Locks Loose/Missing +Understock Door Won't Lock/Open +Locks Loose/Missing +Door Won't Lock/Unlock +Rekey +Additional Keys Needed +Lights Not Working +Lights Not Working +Lights Not Working +Pass Through Utilities +Will Not Flush/Backing Up +Low Water Pressure +Broken Drain Cover +Screen +Gas Smell +Low Water Pressure +Low Water Pressure +Will Not Flush/Backing Up +Broken Drain Cover +Low Water Pressure +No Water +Repair +Loose +Leaking +Running Continuously +No Power +Clogged +Backing Up +Alarm Going Off +Transition Strips +Missing/Damaged Trim +Loose +Damaged +Cracked +Lock issue +Door Issue +Damaged Millwork +Damaged Mannequins +Damaged Laminate +Detaching From Wall +Hardware Loose +Door Won't Lock +Loose/Damaged +Hardware +Missing/Damaged Trim +Damaged +Won't Open/Close +Hardware +Damaged Millwork +Damaged +Wiremold Outlet +AAADM Certification and PM +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Finish Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Surface Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Hub Lab Down +Warranty Dispatch Fee +Landlord Dispatch Fee +Melitta Not Operating +Milk Unit Inoperable +Melitta Bean and Cup Completely Down +Spot Treatment +Other +Venstar-EMS +Expanded PM +Completely Down +Not Operating Properly +Completely Down +Major Leak +Not Operating Properly +Minor Leak +Dust Blinds/Vents +Evaluation +Evaluation +Evaluation +Evaluation +Fresh Pet +Nature's Variety +Petsmart Owned +Survey +Debris Removal +Replace +Visit +Visit +Visit +Slurpee Machine +PM Major/Full +PM Major/Lite +HVAC/R PM/Major +Power Washing +Power Washing +Generator Rental +BMS Subscription Service +Spinner Locks +Showcase Locks +Interior Door +Exterior Door +Other +Signage Part +Lighting Part +HVAC Part +Main controller +Supply air +Humidity +CO2 +outside air +photocell +zone sensor +Intermittent polling +Main controller offline +Entire network offline +Two or more zones offline +One zone offline +Entire RTU network offline +Three or more units offline +Two units offline +One Unit Offline +Part Replacement Request +Main Controller +Lighting Controller +Part Replacement Request +Main Controller +RTU Controller +Installation +Unable to Secure +Multiple Equipment Type +Filter Change +Fire Extinguisher Inspection +Venstar +Venstar +FD - Damage +FD - Damage +FD - Damage +FD - Face Damage +FD - New Install +FD - Face Damage +Additional Keys Needed +Additional Keys Needed +Loose/off wall +New Equipment Install +Other +Leaking +Clogged +Water Line +Shut Down +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Hopper Sensor +Hopper Issue +Improper Calibration +Improper Calibration +Improper Calibration +Smoking/Electrical Smell +Not Alerting +No Hot Water/Tea +No Water +Improper Calibration +Improper Calibration +Making Noise +Improper Calibration +No Steam +Improper Calibration +Too Hot +PetSmart - Interior Doors +Ice Build Up +Glass +Other +Glass +Other +Glass +Gasket Repair/Replacement +Other +Not Holding Temp +Other +New Equipment Install +Too Warm +Too Cold +Other +Not Dispensing Product +No Power +Leaking +Other +New Equipment Install +New Equipment Install +Leaking +New Equipment Install +New Equipment Install +Leaking +New Equipment Install +Other +Not Maintaining Temp +Making Noise +Leaking +Gasket Repair/Replacement +Steam Wand Issue +Porta Filter +In-Line Filter +Grinder Issue +New Equipment Install +Leaking +New Equipment Install +"Replace Cord, Plug, Connection" +Other +Not Dispensing Product +Not Blending +No Power +Clean Stairwells +Dust Vents +Exterior Window +Strip and Wax +Vacuum Furniture +Dust Blinds +Interior and Exterior Window +Waste Clean-up +Asbestos +PetSmart - Interior Doors +Sourcing Fee Credit +Sign Completely Out +Gasket Repair/Replacement +Control Panel Not Working +Oven Hood +Filter Change +CONC +Spot +CONCRM +Energy Review Services +New Equipment Install +Not heating +No power +New Equipment Install +Not heating +No power +Other +Water Leaking +New Equipment Install +Lighting issue +Handle +Door +Cooling Issue +Other +Water Leaking +New Equipment Install +Lighting issue +Handle +Door +Cooling Issue +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Shut Down +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Other +Not Heating +No Power +New Equipment Install +Conveyor Not Moving +Controls Not Working +Other +Not Heating +No Power +New Equipment Install +Conveyor Not Moving +Controls Not Working +Replace hose +Not dispensing +Replace hose +Not dispensing +Too Hot +Too Cold +Thermostat +"Repair/Replace Cord, Plug, Connection" +Repair +Not Holding Temp +No Power +Shut Down +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Shut Down +Poor Taste +Other +Not Dispensing Product +No Power +Clog +Clogged +Slow/no water flow +Leaking +Tank not filling +Drain line running +Water +Shut Down +Other +Not keeping product hot +No Power +Water +Shut Down +Other +No Power +Wrong grind +Not grinding +Not working +Minor Water Leak +Major Water Leak +Other +Not Heating/Working Properly +No Power +Leaking +Key Request +Shrub Trimming +Making Noise +Too Warm +Minor Leak +Making Noise +Major Leak +Door Issue +Bulloch Not Processing On All Pinpads Inside +Specialty Reach In Lighting +Meatwell Lighting +French Fry Freezer Lighting +Expeditor Station Lighting +Dip Counter Lighting +Crescor Lighting +Sandwich Heated Holding Station +Product Holding Unit +Oil Filter Replacement +French Fry Dispenser +Dough Press +Water Dispenser Down +Smoothie Not Operating +Shake Machine Not Operating +Payphone +Door Gasket +Too Warm +Not Operating +Minor Leak +Making Noise +Major Leak +Door Issue +Completely Down +Too Warm +Not Operating +Minor Leak +Making Noise +Major Leak +Door Issue +Completely Down +Too Warm +Not Operating +Minor Leak +Making Noise +Major Leak +Door Issue +Completely Down +Not Operating +Minor Leak +Major Leak +Completely Down +Too Warm +Not Operating +Minor Leak +Making Noise +Major Leak +Door Issue +Completely Down +Damaged/Leaking +Repair +Trench Grate Covers/Hair Strainer +Repair +Repair +New Request +Fixtures Out +More Than 100 Lights Out +50-100 Lamps Out +1-50 Lamps Out +Damaged/Missing +Stained/Wet +Stained/Wet +Damaged/Missing +Stained/Wet +Damage/Stained +Sand Bag/Board Up +No Parking/Stop/Handicap Signage +Dispatch Service +Will Not Come Down/Go Up +Will Not Open/Close +Not Closing/Not Opening +Damaged/Missing +Edging +Other +Icing Up +Gasket Repair/Replacement +Fan Not Working +Water Leaking +Other +Lighting Issue +Handle +Door +Cooling Issue +Overhead Heat +Lights +Heat Wells +Other +Not Heating +No power +Exhaust Hood +Overhead Heat +Lights +Heat Wells +Sifter/Breader +Marinator +Filter Machine +Can Opener +Overhead Heat +Lights +Heat Wells +Shattered +Other +Cracked +Other +Frontline +Frontline +Frontline +Frontline +Frontline +Service IVR Fine +Service IVR Fine +Service IVR Fine +Contracted Services +Contracted Elevator Services +Fire Pump +ATM Transaction Fee +Repair +Additional Service Needed +Notification +Shut Down +Other +Not tilting +Not heating +No Power +New Equipment Install +Bedroom +Medicine Closet +Bedroom +Medicine Closet +Bedroom +Bedroom +Bedroom +Professional Services +Insulation +Other +Install New +Hinge +Dragging +Door Frame Issue +Auto Opener +Weather Stripping +Frame Issue +Dragging +Violation/Fine +Violation/Fine +Violation/Fine +Violation/Fine +Violation/Fine +Violation/Fine +New Equipment Install +Other +Not Heating +Install +Cleaning +Backflow Repairs +Backflow Inspection +Branch Inspection +Additional Cleaning Supplies +Deep Cleaning +General Cleaning +Verify Proper Installation and Report Findings +Verify Proper Installation and Report Findings +Store Opening Work +Temp Below 19 C or Above 25 C +Face Damage +Other +Not Working +Intercom +Repair/Maintenance +Drawer +Pneumatics +Deficiency Report +Preventative Maintenance +Cleaning +Vestibule Security Lighting +Vestibule Painting +Vestibule Graffiti Removal +Vestibule Cleaning +Snow Removal +Pest Control +Landscaping +Cleaning +Bollards +Signage Damage Repair +Signage Damage Repair +Customer Credit +Concession Credit +ATM Lighting +Branch Lighting +Name Plates Remove +Name Plates Order New +Name Plates Install +Merchandise - Marketing +Merchandise - Digital Signage +Merchandise - Compliance Signage +Lighted Signage +Non Illuminated Signage +Merchandise - Marketing +Merchandise - Install Drive Up Banners +Merchandise - Compliance Signage +Illuminated Signage +Directional +Install New Operational Signage +Exit Signage +Emergency/Safety +Directional +Flag Pole Repair +Vandalism +Off-Premise MACD +Disaster Recovery +Branch Decommission +ATM Room Door +ATM Exterior Kiosk Door +Lock Box +Lock Box +Door Card Reader +Security Mirrors +Physical Damage Repair +Painting +Graffiti Removal +Faux Cards +Decals +Voice Guidance +Unit HVAC +Outage +Monitor +Locks +Keys +Keypad +Functionality Decals +Electrical Issue +Door issue +ATM Placement +Alarm Cable +Vestibule Security Lighting +Vestibule Repair/Maintenance +Vestibule Painting +Vestibule Lights +Vestibule HVAC +Vestibule Graffiti Removal +Vestibule Cleaning +Pest Control +Inspection +Inspection +Annual +Quarterly +Trimester +Monthly +Annual +Power Outage +Sensitive Item Actions +Insurance Assessment +Post-Event Inspection +Pre-Event Inspection +Board Up +Sandbagging +Winter Rye Seeding +Municipality +Access Change Fee +HOA Fee +CAM Charge +Supplier Field Service Team +Technology Platform +Helpdesk +Oversight and Management +Miscellaneous +Window & Glass +Office +H2 +H1 +Semi-Annual Cleaning +Q4 +Q3 +Q2 +Q1 +Quarterly Cleaning +Fee +Weekly Cleaning +Sunday +Saturday +Friday +Thursday +Wednesday +Tuesday +Monday +Nightly Cleaning +Branch Access Needed +"ATM Survey, Standalone" +"ATM Survey, Branch" +ATM Lighting Survey +ATM Survey +Annual Service +Monthly Fee +Repair +Fan Not Functioning +Service +Preventative Maintenance +Preventative Maintenance +Buzzing Noise +Repair +Emergency +Cleaning Needed +Missing +Damaged +Repairs Needed +Parking Revenue +Parking Attendant +Preventative Maintenance +Monthly Fee +General Fire Safety +Emergency Exits +Fire Hydrants +Fire Extinguishers +Emergency Lights +Exit Signage & Lights +Smoke/Carbon Monoxide Detectors +Fire Sprinklers +Fire Alarm +Monitoring System +Fire Safety Equipment +General Pest Prevention +Preventative Maintenance +Filter Change + Coil Cleaning +Filter Change + Belt Change +Filter Change +Quarterly +Lights Not Working +Drawer +Timer +Locks Loose/Missing +Other +Service +Decals Missing +Mural Frame +Play Area Wall Tile +Preventative Maintenance +Preventative Maintenance +Key Switches +Sparks/Smoke +Transition Strips +Preventative Maintenance +Repair Shop +Repair Shop +Repair Shop +Repair Shop +Damaged +Replace +Repair +Inspection +Push Button Test +Damaged +Lost Key +Locks Loose/Missing +Lights Not Working +Cracked Plastic +Mirror +Understock Door wont Lock/Open +Torn Laminate +Trim Missing +Trim Bent +Swing Gate Missing +Swing Gate Loose +Lift - Stuck in Up or Down Position +Door won't Lock/Unlock +Door Broken +Repair Broken Motors/Batteries +Locks Loose/Missing +Hinge Loose/Missing +Handles Loose/Missing +Cracked Glass +Chipped Glass +Damaged +Buzzing Noise +Repair +Emergency +Schedule Change +Timer Issue +Logo Change Needed +Missing/Damaged +Inspection +Office Mat +Logo Mat +Recessed Grill Floor Mat +Shelves +Gaming System +Lockers +Security Glass +Emergency Release Device & Handle +Dark Survey +Not Operating +Completely Down +Clogged +No Water +Parts Damaged +Won't Power On +Lancer Variety Not Operating +Lancer Variety Minor Leak +Lancer Variety Major Leak +El Nino Dispenser Not Operating +Cold Coffee Nitrogen Tank Not Operating Properly +Cold Coffee Nitrogen Tank Down +Cold Coffee Nitrogen Tank Refill Needed +Cold Coffee Brew Press Not Operating Properly +Cold Coffee Brew Press Down +Grinder Not Operating Properly +Grinder Down +Power Issue +Soft Serve Machine +Lemonade Tower Not Operating +Lemonade Tower Down +Fresh Blend Machine Leaking +Fresh Blend Machine Down +F'Real Machine Not Operating +Noodle Warmer Down +Powerwasher Not Operating Properly +Powerwasher Leaking +Powerwasher Down +Shortening Shuttle Not Operating +Shortening Shuttle Down +Chicken Fryer Dump Table Down +Chicken Fryer Down +Breading Table Not Operating +Breading Table Down +Clogged +Clogged +Not Holding Water +Cracked +Drain Clogged +Clogged +Deck Drain Clogged +Drain Clogged +Rotisserie Not Operating +Biscuit Oven Not Operating Properly +Biscuit Oven Down +Cracked +Parts Damaged or Missing +Other +Exterior Surfaces +Pool Care +Permit/Code Violation +Tree Trimming/Removal +Roof Repairs +Exterior Repairs +Fencing/Gate +Landscape Cleanup +Landscape Enhancement Needed +Exterior Paint +Other +Exterior Surfaces +Pool Care +Exterior Repairs +Tree Trimming/Removal +Roof Repairs +Architectural +Fencing/Gate +HOA Inspection +Landscape Cleanup +Landscape Enhancement Needed +Exterior Paint +Upholstery Cleaning +Adjustment +EMS Dispatch +EMS Dispatch +EMS Dispatch +Other +Loose +Leaking +Running +Overflow +Other +No hot water +Loose +Leaking +Clogged +Vacant Property +Mechanical Inspection +Property Inspection +Special Cleaning +Window Cleaning +Scheduled Cleaning +NCR Radiant UPS Beeping / Not Functioning +Verifone Commander Cash Drawer Not Functioning +NCR Radiant Register Scanner Not Scanning +NCR Radiant Cash Drawer Not Functioning +NCR Radiant Pin Pad Stylus Not Functioning +Verifone Commander UPS Beeping / Not Functioning +NCR Radiant Receipt Printer Not Printing +Verifone Commander Register Scanner Not Scanning +Verifone Commander Receipt Printer Not Printing +NCR Radiant Register Not Functioning +Verifone Commander Pin Pad Stylus Not Functioning +Verifone Commander Register Not Functioning +Verifone Commander Not Processing on Some Pinpads Inside +NCR Radiant Not Processing on Some Pinpads Inside +PDI Keyboard +PDI Mouse +PDI Monitor +PDI Printer +Belt Printer Communication +Label Printer Not Printing +Printer Not Charging +Label Printer Communication +Access Point Not Functioning +Network Rack +Vestibule Security Lighting +Vestibule Repair/Maintenance +Vestibule Painting +Vestibule Lights +Vestibule HVAC +Vestibule Graffiti Removal +Vestibule Cleaning +Pest Control +Cleaning +Vestibule Security Lighting +Vestibule Cleaning +Pest Control +Lock Box +Landscaping +Cleaning +Security Mirrors +Physical Damage +Painting +Graffiti Removal +Decals +Locks & Keys Room Door +Locks & Keys Exterior Kiosk Door +Unit HVAC +Keys +Electrical +Placement +Other +Lights and HVAC +Other +Sign completely out +Letters out +Other +Sign completely out +Letters out +Signs +Letters out +Interior +Exterior +Cleaning +Window Seal +Cleaning +Hazardous Waste +Confidential Bin +Medical Waste +Shredding Bin +Security Alarm Install New +Metal Detectors +X-Ray Machine +CCTV System +Security Alarm +Key Pad +Security Breach +Card Readers +Parking Access Card +Door Release Button +Investigation +Other +Raccoons/Squirrels +"Other: Purges, Bin Access, Acct. Inquiries" +"Service: Implement New, Change to Existing, Missed" +"Location Change: New, Moved to New Address, Closed" +"Security & Risk: No/Broken Lock, Overfull Bin" +Records Storage +Order/Restock +Paper Shredders +Trolley +Computers +Printer +PA Systems +Time & Date Stamps +Photocopier +Fax Machines +TVs & VCRs +Telephone +Mail Delivery +Ergonomic +Courier +Machine Leaking +Coffee Machine Not Working +Replenish Supplies +Leaking +Filtration Not Working +Need 5 Gallon Bottles +Music +Product Out of Date +Lost Funds +Machine Not Working +Will Not Accept Payment +Machine Empty +External Move +Internal Move +External Move +External Move +Internal Move +Internal Move +External Move +Art Work +Repair +Cleaning +Locks/Keys +Reprogramming Locks +Supply Duplicate Keys +Reprogramming Locks +Timers +Lighting Above 14ft (4.3m) +Security Lighting +Install New +Walkway Lighting +Lighting Below 14ft (4.3m) +Lamps Out +Light Covers/Grates +Lamps Out +Lighting Below 14ft (4.3m) +Install New +Lighting Above 14ft (4.3m) +Cleaning +Water +Not working +No power +Filter +Clog +Reorder/Restock +Restroom +Request Special Cleaning +Window Cleaning +Human Resources +Accounting +Investigate +Account Setup +Account Closure +Interior Plant Care +Mirror +Sign +Other Hardware +Clean out/debranding +Intercom +Pneumatics +Drawer +Lane Lights +Repair/Maintenance +Reconfigurations +New +Repair/Maintenance +Cleaning +Cleaning +Elevator Music +Cleaning +Paint +Will Not Go Up +Install New +Will Not Come Down +Cannot Secure +Remove +Cleaning +Injury +Bio Material +Smoke +First Aid +Natural Disaster +Environmental Assessment +Water Damage +Hazardous Material +Asbestos +Public Demonstration +Fire +Mold +Bomb Threat +Terrorism Incident +Gas +Air Quality +Odors +Ergonomic Assessment +Repair +Paint +Replace +Towing +Security Barrier/Arm +Reserved Parking +"Doors, Windows and Glass" +Roofing and Structure +Exterior Facade +Interior Finishes & Carpentry +Emergency +HVAC +Exterior Landscaping +General Bldg R&M - Interior Light +General Bldg R&M +Roofing and Structure +Lighting +Interior Finishes & Carpentry +LOB Disaster Recovery +"Doors, Windows and Glass" +Lighting +Fire and Life Safety +Electrical and Power +Lighting +"Doors, Windows and Glass" +Escort Needed +Stationary Guard +Other +Data/Cable Pulls +UPS +Timers +Broken Door +Lock Issue +Glass +Install New +Buzzers +Automatic Closures +Mantrap +Video Conferencing +Booking/Scheduling +Schedule +Repair +Setup +Drill Out +Teller Cash Dispenser +Repair/Maintenance +Undercounter steel +Repair/Maintenance +Digilock +Repair/Maintenance +Drill Out +Security Issue +Damaged +Will Not Close +Keypad Issue +Batteries Dead +Unable To Lock/Unlock +Key Broken Off +Will Not Open +Armored Car Key Issue +Repair/Maintenance +Remove +Replace +Other +Not Working +Vault Clean +Night Deposit Clean +Bandit Barrier Clean +Painting +Security Mirrors +Graffiti Removal +Physical Damage +Decals +Locks & Keys Room Door +Locks & Keys Exterior Kiosk Door +Vestibule Lights +Vestibule Cleaning +Vestibule Repair/Maintenance +Cleaning +Vestibule HVAC +Repair +Vestibule Painting +Car Impact +Vestibule Graffiti Removal +Vestibule Security Lighting +Pest Control +Unit HVAC +Electrical +Placement +Keys +Lock Box +Car Impact +Repair +Landscaping +Vestibule Security Lighting +Pest Control +Cleaning +Vestibule Cleaning +Physical Damage +Request New Appliance or Kitchen Fixture +"Not Working, Broken or Damaged" +Clean Unit +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +Pharmacy +Pharmacy +Pharmacy +Pharmacy +Not Working +Repair +Timer Issue +Pre Hurricane Board-up +Post Hurricane Board-up +S5 - Partial Service +Sign completely out +Partially out +Face damage +Photocell / Time Clock +Escort +Tarping Needed +Water leaking +Lighting issue +Handle +Gasket +Door +Cooling issue +Water leaking +Door +Cooling issue +Repair +Faucet +Drain +Faucet +Drain +Faucet +Drain +Overheating +Not Heating +Not Filling +Not Heating +No Power +Control Panel +Turn Management Fee +Wall +Equipment +Counters / Tables +Front of House +Back of House +Walls +Overhang +Roof +Parking Lot Lighting +Landscape Lighting +Restroom +Kitchen +Dining Room +Stuck +Weather stripping +Laminate Peeling/Buckling +Laminate Peeling/Buckling +New Install +New Install +New Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +Other +Noisy +Not Working +Not Working +Other +Not Working +Internal Network/Wiring +Verifone Commander Site Controller Down +Fiscal Site Controller Down +Gilbarco Passport Site Controller Down +NCR Radiant Site Controller Down +Fiscal Cash Drawer Not Functioning +Gilbarco Passport Cash Drawer Not Functioning +Fiscal Not Processing On Some Dispensers Outside +Gilbarco Passport Not Processing On Some Dispensers Outside +NCR Radiant Not Processing On Some Dispensers Outside +Verifone Commander Not Processing On Some Dispensers Outside +Fiscal Not Processing On All Dispensers Outside +Gilbarco Passport Not Processing On All Dispensers Outside +NCR Radiant Not Processing On All Dispensers Outside +Verifone Commander Not Processing On All Dispensers Outside +Fiscal Not Processing On All Pin Pads Inside +Gilbarco Passport Not Processing On All Pin Pads Inside +NCR Radiant Not Processing On All Pin Pads Inside +Verifone Commander Not Processing On All Pin Pads Inside +Fiscal UPS Beeping / Not Functioning +Gilbarco Passport UPS Beeping / Not Functioning +Fiscal Register Scanner Not Scanning +Gilbarco Passport Register Scanner Not Scanning +Fiscal Register Not Functioning +Gilbarco Passport Register Not Functioning +Fiscal Receipt Printer Not Printing +Gilbarco Passport Receipt Printer Not Printing +Fiscal Pin Pad Stylus Not Functioning +Gilbarco Passport Pin Pad Stylus Not Functioning +Fiscal Not Processing on Some Pinpads Inside +Gilbarco Passport Not Processing on Some Pinpads Inside +Attic +Attic +Attic +Attic +Sign completely out +Other +Face damage +4+ letters out +1-3 letters out +Cracked/damaged +Loose from building +Cracked/damaged +Loose from building +Too Hot +Not Cooling +Water leaking +Other +Lighting issue +Handle +Door +Cooling issue +Water leaking +Other +Lighting issue +Handle +Door +Cooling issue +Leaking +Other +Too Hot +Won't stay lit +Too Hot +Too Hot +Other +Not Heating +No Power +Coffee Counter +Other +Dishwasher Fan +Fan +Oven +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Laminate +Hinges/Handle +Edgebanding +Door broken off +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Hinges/Handle +Drawer front +Glides +Edgebanding +Structure +Laminate +Edgebanding +Ballast +Framboard +Sewage +ALT LVT Bill to Construction +Repair +Replace +Repair +Replace +Installation +Decals/Promotional signage +Frame Issue +Shattered +Cracked +Leaking Water +Window Film +Frame Issue +Shattered +Cracked +Chair rail +Doctor's Office +Doctor's Office +Doctor's Office +Doctor's Office +Doctor's Office +Replace +Repair +Inspection +Rekey +Other +Key broken off +Handle/Door Knob +Scrub and Recoat Bill to Construction +Other +Air Quality Test +Roof Report +Won't Lock/Unlock +Rekey +Marketing +Facility +ID Price Signs +MPD/Dispenser +Exposed Wiring +Under Counter or Ceiling +RO/Reclaim Equipment +Ro/Reverse Equipment +Spraying +Equipment Room +Major Leak +Minor Leak +Water Conditioner +Filters +Not Operating +Verifone Inoperable +VCR Not Operating +Investigation +Work Needed for USE Visit +Oil-Water Separator WS 1 +Gas Water +Corrosion Removal- STP sumps +Gas Water - Solid/Liquid Waste Removal +Cathodic Protection Repair or Test +Corrosion Removal- Other +Liquid Reported in Dispenser Pans +Liquid Reported on Sump/Spill Bucket +Vapor Recovery Needs Repair +Containment Equipment +Fuel Polishing - Diesel Microbes +Gas Piping +Fuel Polishing +Distribution Box Not Operating Properly +Damaged/Torn Entry Fittings +Sub Pumps Not Pumping +Needs Repair/Replacement +Not Operating +HRM Reconciliation Warning +Missing Delivery Ticket Warning +AccuChart Calibration Warning +Annual Test Warning +Gross leak detected +High Water Warning +Cold Temperature Warning +CSLD Rate Increase Warning +HRM Reconciliation Alarm +Invalid Fuel Level Alarm +Overfill Alarm +Periodic Leak Test Fail Alarm +Periodic Test Alarm +High Product Alarm +High Water Alarm +Leak Alarm +Annual Test Alarm +Maximum Product Alarm +Annual Test Fail Alarm +Probe Out Alarm +Gross Test Fail Alarm +Sudden Loss Alarm +System Security Warning +ROM Revision Warning +PC(H8) Revision Warning +Tank Test Shutdown Warning +Autodial Alarm Clear Warning +Software Module Warning +Autodial Delivery Report Warning +System Clock Incorrect Warning +Input Setup Data Warning +Autodial Service Report Warning +External Input +Transaction Alarm +Battery Off +Protective Cover Alarm +Remote Display Communications Error +Input Normal +System Self Test Error +Too Many Tanks +EEPROM Configuration error +LD configuration error +System Device Poll Timeout +Other +Car Impact +Repair +Sign Completely Out +Partial Outage +Face Damage +Not Operating Properly +Completely Down +Splitter request for POS +Simmons Box Not Operating Properly +Simmons Box Onsite Support Needed +Short Alarm +Low Liquid Alarm +Fuel Alarm +Water Alarm +Sensor Out Alarm +High Liquid Alarm +Water Out Alarm +Setup Data Warning +Liquid Warning +Remove/Relocate within an Open Store +Remove/Relocate within an Open Store +Check Cable Integrity +ATM Project +Money Order Machine +Lift Not Functioning +UPS Beeping +Gift Card Processing +Receipt Printer +Stylus +Not Functioning +Money Order +Pin Pad +Scanner +Check Reader +Not Operating Properly +Completely Down +Upgrade/Install/Remove +Screen Calibration (non Store View) +Speed Pass Inoperable +Hardware (non Store View) +Ruby/Sapphire Not Operating +Passport - Unable to sell Gas +Pump Issue (non Store View) +Nucleus Not Operating +Power Outage (non Store View) +Ruby/Sapphire - Unable to sell Gas +Nucleus - Unable to sell Gas +Won't Print +Cash Report (CRI) not operable +Password Reset (non Store View) +Network Issue (non Store View) +Passport Not Operating +Missing Parts (non Store View) +Software (non Store View) +Service Needed +Stylus Needed +Remove/Relocate +Car Wash POS Adjustment Needed +Programming +Fuel POS Adjustment Needed +Replace +Remove +Face Damage +Partial Outage +Drainage +Verify Power Source +Under Counter Repair +Remote Repair +Replace +Sparking +Missing Cover +Diesel +Premium +Kerosene +Cross Drop +Regular +Midgrade +DSL Low Flash +Gas Octane +Handle/Door Knob/Chime +Lighting +Making Noise +Too Warm +Major Water Leak +Minor Water Leak +Monitor not operating properly +Batman Cables Not Working Properly +Not Operating Properly +Not Operating Properly +Damaged +Visual Issue +Blank +Display +Relocate +Continuous Pump On Warning +Setup Data Warning +Selftest Invalid Warning +High Pressure Warning +Periodic Line Test Fail Alarm +Periodic Test Alarm +Periodic Pump Test Fail Alarm +Periodic Test Fail Alarm +Periodic Pump Selftest Fail Alarm +Periodic Test Warning +Periodic Selftest Fail Alarm +LLD Periodic Warning +LLD Test Fault GRS +LLD Per Test Fault +LLD Periodic Alarm: .2gph +LLD Pressure Alarm - Sub pump (3 Attempts) +Gross Pump Test Fail Alarm +Gross Selftest Fail Alarm +Gross Line Test Fail Alarm +Gross Test Fail Alarm +Gross Pump Selftest Fail Alarm +Annual Pump Selftest Fail Alarm +Annual Selftest Fail Alarm +Annual Test Alarm +LLD Annual Alarm +LLD Annual Test Fault +Annual Line Test Fail Alarm +Annual Pump Test Fail Alarm +Annual Test Fail Alarm +Annual Test Warning +Shutdown Alarm +Self Test Alarm +Communications Alarm +Sensor Open Alarm +Continuous Pump On Alarm +Sensor Short Alarm +Line Leak Shutdown +Repair +Kiosk Display +Bump Bar +Repair +Display +Kiosk Printer +KPS Printer +Remove/Relocate +Major Water Leak +Minor Water Leak +Cannot Brew +Parts +Not Operating +Relocate +Warmer Plate +Less than Half of Brewers Down +Minor Water Leak +Major Water Leak +Install New +Half or More Brewers Down +Parts +Timer +Urns +Battery Replacement +HES Work Needed +Smart Sensor Water Warning +Collection Monitoring Degradation Failure warning +Smart Sensor Low Liquid Warning +Flow Performance Hose Blockage Failure warning +Smart Sensor High Liquid Warning +Containment Monitoring Gross Failure warning +Smart Sensor Setup Data Warning +Smart Sensor Fuel Warning +Vapor Processor Status Test warning +Containment Monitoring Degradation Failure warning +Vapor Processor Over Pressure Failure warning +Containment Monitoring CVLD Failure warning +Setup Fail warning +Sensor Temperature Warning +Stage 1 Transfer Monitoring Failure warning +Collection Monitoring Gross Failure warning +Smart Sensor Fuel Alarm +Containment Monitoring Degradation Failure alarm +Smart Sensor Low Liquid Alarm +Containment Monitoring CVLD Failure alarm +Vapor Flow Meter Setup alarm +Missing Hose Setup alarm +Smart Sensor High Liquid Alarm +Improper Setup alarm +Missing Vapor Pressure Sensor alarm +Smart Sensor Communication Alarm +Containment Monitoring Gross Failure alarm +Vapor Processor Over Pressure Failure alarm +Missing Vapor Flow Meter alarm +Smart Sensor Fault Alarm +Collection Monitoring Gross Failure alarm +Smart Sensor Install Alarm +Communication Loss alarm +Flow Performance Hose Blockage Failure alarm +Missing Vapor Pressure Input alarm +Sensor Out alarm +Vapor Processor Status Test alarm +Missing Tank Setup alarm +Collection Monitoring Degradation Failure alarm +Smart Sensor Water Alarm +Missing Relay Setup alarm +Setup Fail alarm +Verify Proper Installation and Report Findings +Not Printing +ATG IP Comm Failure +Automatic Tank Gauge (Atg) Is In Alarm +Auto Dial Failure +Automatic Tank Gauge is not Testing +Not Printing +Automatic Tank Gauge (Atg) Is In Alarm +Auto Dial Failure +ATG IP Comm Failure +Automatic Tank Gauge is not Testing +Vendor Meet Needed +Team Lead Escalation Needed +Installation +Trip Hazard +Repair +Environmental Remediation +Drum Removal +Fuel Spill +Major Damage/Safety Issue/Needs Repair +Minor Damage/ Non Safety issue/Needs Repair +Repair or Replace Gas Pump Toppers +Repair or Replace Windshield Washer Bucket +Not Dispensing On At Least 50% Of Dispensers +Not Dispensing On Less Than 50% Of Dispensers +Relocate +Vendor Meet +Brixing +Drip Tray +Flavor Change +Making Noise +Half or More Barrels Down +Minor Leak +Less than Half of Barrels Down +CO2 Not Operating +Drain Clogged +Frost Flavor Change +CO2 Out +Major Leak +Lights Out +Bib Pumps +Not Dispensing Ice +Minor Leak +Major Leak +Relocate +Vendor Meet +Lights Out +Drain Clogged +CO2 Out +Less than Half of Flavors +CO2 Not Operating +Minor Leak +Brixing +New Drain +Bib Pumps +More than Half of Flavors +Making Noise +Parts +Drip Tray +Flavor Change +New Soda Drain +Ice Maker +Major Leak +Other +Recharge/Repair/Replace +Unit Down +Major Water Leak +Minor Water Leak +Not Operating +Verify Installation +Precision Tank Fail +Parts Replacement Billing +Dynamic Backpressure Fail +ATG Certification Fail +Stage I Fail +Shear Valve Inoperable +Pressure Decay Fail +Testing +Line Leak Detector Fail +Corrosion Inspection Fail +BIR Investigation +Department of Agriculture Inspection Assistance +Spill Bucket Fail +Air to Liquid Fail +Secondary Containment Fail +Precision Line Fail +Compliance Inspection +Drop-Tube Integrity Fail +Dep. of Environmental Protection Inspection Assistance +Stage 2 Fail +Shear Valve Fail +UST Fail +Not Responding - Within Temps +Defrost Recovery - Within Temps +Power Fail Temp +High Box Temp Alarm - Within Max +Not Responding - Above Max Temps +Low Box Temp Alarm - Below Standards +Pressure Low Temp - Above Max STD +Communication Failure +Pressure Low Temp - Within STD +Start Up Fail +Low Box Alarm - Below Max Temps +Defrost Recovery - Above Max Temps +High Box Temp Alarm - Above Max +Low Bow Temp Alarm - Within Standards +Pressure High Temp - Above Max +Pressure High Temp - Within STD +Repair +Charge Dispute +Dispute Determination Rejection +Copy of Invoice Required +Client Inquiry - General +Charge Explanation Required +Work Needed Per Disc/Market Charge +Need Repair +Not Processing On All Terminals Inside +Not Processing On Some Terminals Inside +Not Processing Inside Or Outside +Not Processing On Some Dispensers Inside +Not Processing On Some Dispensers Outside +Not Operating +Install New +Major Water Leak +Making Noise +Gasket +Door +Minor Water Leak +Too Warm +Install +Repair +Warranty Repairs +Repair +Install Monitor +Repair +Out of Chemicals +Relocate +Install New +Not Operating +Lights Out +Major Water Leak +Parts +Minor Water Leak +Face Damage +Partial Outage +Sign Completely Out +Won't Accept Credit - Debit Card +Not Turning +Burning Smell +Repair +BIR Close Shift Warning +BIR Threshold Alarm +BIR Daily Close Pending +BIR Setup Data Warning +BIR Close Daily Warning +BIR Shift Close Pending +Other +Cleaning +Door +Lighting +Mouse Not Functioning +Timeclock Application +Docking Station +Phone Line +UPS Beeping +iPad Not Functioing +Belt Printer +Scanner Data +Monitor Not Functioning +Data Polling +Printer Charge +Scanner Malfunction +Timclock Entries +Printer Not Printing +App Issues +Printer Not Communicating +PDI Malfunction +Zenput +iPad Missing +Scanner Charge +Keybord +AQIP/CMR Warranty Repairs +PDI Enterprise +Sales Report +Grocery Order +Operations Dashboard +Timeclock +Store Audit +Receipt Finder +Cashier Analysis +PDI Focal Point +Drawer Count +Access Issue +Portal Issue +Not Operating +Graffiti +Secondary Containment +Calibration +Damaged LED Window +Testing +Decals/Signage +Hanging Hardware +Vapor Recovery Dry Break Repair +Records +Spill Buckets +Hazardous Materials +Leaking Dispenser Meter/Union/Filter +Dispenser(s) Down- Regulatory Inspection +Automatic Tank Gauge +Licenses and Permits +Verify Installation +Temp Cooling/Heating +Not Responding - Above Max Temps +Copressor Short Cycling - Within Temps +No Communication - Within Temps +Compressor Stage 1 - Within Temps +Blower Fan - Above Max Temps +Pressure High Temp - Within Standards +Compressor Stage 2 - Within Standards +Blower Fan - Within Tems +Heating Performance Temp - Below Max +Heating - Within Temps +Compressor Locked - Above Max Temps +Heating Performance Temp - Within Standards +Heating Stage 1 - Within Temps +Compressor Not Coming On - Above Max Temps +Not Responding - Within Temps +No Communication - Temps Unknown +Compressor Short Cycling- Above Max Temps +Pressure High Temp - Above Max +Compressor Stage 1 - Above Max Temps +Super Heat - Below Max STD/Above Max STD +Pressure Low Temp - Within Standards +Compressor Stage 2 - Above Temps +Blower Fan - Intermittenly Within Temp +Pressure Low Temp - Above Max +Heating - Below Max Temps +1 or More Stages of Heat Not Coming On +Blower Fan - Intermittenly Above Temp +Long Compressor Runtime - Above Max Temps +No Communication - Above Max Temps +Compressor Not Coming On - Within Temps +Upgrade +Partial Outage +Additional Service WS 3 +Additional Service WS 4 +Additional Service WS 1 +Additional Service WS 2 +Vendor Meet +Repair +Drain Repair/Cleaning +Drain Overflow/Flooding +Drain Pump Out +Vendor Meet +ADA Compliance +Additional Charges- Note Details in Description +Repair +Deli - Minor Water Leak +Deli - Making Noise +Deli - Unit Down +Deli - Door +Deli - Major Water Leak +Minor Water Leak +Making Noise +Remove/Relocate +Duke Oven Down +Duke Oven Not Operating +Sandwich Oven Not Operating +Sandwich Oven Down +Unox Parts +Unox Not Operating +Unox Completely Down +Doyon Not Operating +Doyon Completely Down +Doyon Parts +Less than Half Lighting +Making Noise +Partial Lighting Interior +Half or More Lighting +Minor Water Leak +Gasket +Taqueria Emergency Repair +Taqueria Critical Repair +Minor Leak +Major Leak +Trip Hazard +Major Water Leak +Low Pressure +Minor Water Leak +Major Leaking +Low Pressure +Minor Water Leak +Major Water Leak +Damaged +Face Damage +Sign Completely Out +Partial Outage +Emergency Repair Subway +Emergency Repair Taqueria +Critical Repair Taqueria +Critical Repair Subway +Vendor Meet +Taqueria Partial Outage +Subway Partial Outage +Taqueria Complete Outage +Subway Complete Outage +Escalation +EMS Upgrade +Sales Floor - Burning Smell +Sales Floor - Damaged +Sales Floor - All +Sales Floor - Partial +Office - Burning Smell +Office - Partial +Office - All +Office - Damaged +All - Outage +All - Burning Smell +Exit Sign - Damaged +Exit Sign - Out +Emergency Exit Lights +Bathroom - Damaged +Bathroom - All +Bathroom - Burning Smell +Bathroom - Partial +Backroom - Burning Smell +Backroom - Partial +Backroom - All +Backroom - Damaged +ATM - Face Damage +ATM - Partial +ATM - All +Repair +Pump Out WS 7 +Exterior Pump Out +Interior Pump Out WS 1 +Exterior Pump Out WS 4 +Interior Pump Out WS 5 +Interior Pump Out +Pump Out WS 5 +Pump Out WS 3 +Exterior Pump Out WS 5 +Interior Pump Out WS 3 +Exterior Pump Out WS 2 +Interior Pump Out WS 2 +Pump Out WS 2 +Pump Out WS 13 +Exterior Pump Out WS 3 +Routine Maintenace +Exterior Pump Out WS 1 +Repair +Making Noise +Trip Hazard +Remove/Relocate +Minor Water Leak +Major Water Leak +Door +Gasket +Cleaning +Clean Return and Discharge +Remove/Relocate Cigarette Merch +ZEP Unit +Trash Can +Shelving +Other +More than 5 Dryers +Less than Half Washers +Less than Half Dryers +Less than 5 Washers +More than 5 Washers +Less than 5 Dryers +Lottery Glass +Counters +Adjust +Cigarette Merch Operation +Cigarette Merch Repair +Cabinetry +Deli Warmer +Sanden Install +Sanden Lights +Sanden Not Operating +Sanden Parts +Pizza Warmer +Remove/Relocate Sanden +Minor Water Leak +Major Water Leak +Making Noise +Lighting +Relocate/Remove +Septic Tank WS1 +Septic Tank WS2 +Wastewater Treatment WS1 +Septic Tank WS6 +Cleanout +Septic Tank WS 12 +Septic Tank WS 8 +Septic Tank WS3 +Septic Tank WS5 +Aerobic System WS 1 +Wastewater Treatment Plant Materials WS 1 +Septic Tank WS 10 +Septic Tank WS 11 +Odor +Repair +Preventative Maintenance +Deli - Cleaning +Deli - Inspection +Remove/Relocate +Lighting +Major Water Leak +Minor Water Leak +Making Noise +Lighting +Making Noise +Major Water Leak +Minor Water Leak +Maintenance +Partial Outage +Well Water Materials +Monitoring +Making Noise +Minor Water Leak +Deli - Door +Deli - Major Water Leak +Deli - Minor Water Leak +Deli - Not Holding Temp +Install +Repair +Paint +Treatment Needed +Vendor Meet +Verify Installation +Taqueria - Emergency Repair +Subway - Emergency Repair +Taqueria - Critical Repair +Subway - Critical Repair +Escalation +Won't Vend Change +Connectivity +Vendor Meet +Repair +Remove/Relocate +Network Issue +Not Communicating +Parts +Repair +Remove/Relocate +Repair +Deli - Not Holding Temp +Deli - Door +Deli - Major Water Leak +Deli - Minor Water Leak +Escalation +Taqueria Emergency Repair +Subway Emergency Repair +Taqueria Critical Repair +Subway Critical Repair +Taqueria Heated Equipment Emergency +Subway Heated Equipment Emergency +Taqueria Heated Equipment Critical +Subway Heated Equipment Critical +Vendor Meet +Donut Filler +Remove +Add +Display Cooker Down +Display Cooker Not Operating +Deli Grill Down +Deli Grill/Griddle/Flat Top +Scale +Rice Cooker +Oatmeal Maker +Grill Press +Egg Cooker +Double Boiler +Bread Slicer +Temp Taker +Data Issue +Not Printing +Remove/Relocate +Major Water Leak +Door +Lights +Minor Water Leak +Partial Outage +Damaged +Will Not Turn Off +Timer Issue +Electric Vehicle Charge Issue +Liquid Propane Gas Issue +CNG Dispenser/Plant Issue +FCTI +Wiring +Cardtronics +Repair +Cosmetic Repair +Outlet +Power Source Needed +Instability +Project +Non Electrical Safety Issue +No Power/Safety Issue +Floor/Wall Repair +Trucker Loyalty +Grocery Loyalty +Freestyle Unit +Tea Tower +Not Operating +All Not Working +All Operational +One TV +TV Repair +Nozzle Needs Repair +Entire Grade Down +Repair Emergency Shut Off Switch +More than half of fueling positions down +Need Dispenser Key and/or Change Lock +Dispenser Won't Print Credit/Debit Receipt +Nozzle Needs Handwarmer +Repair Dispenser - No Shutdown +Drive Off - Hose Disconnected +Physical damage only still pumping +Slow Pumping (Filters) +Intercom Not Operating Properly +Won't Accept Credit - Debit Card +Need Decals +Dispenser Damaged by Vehicle +All Dispensers Down +Swivel Needs Repair +Dispenser Broken Into (Possible Theft) +Hose Needs Repair +Less than half of fueling positions down +Calibrate Dispenser +Graffiti +"Not Working, Broken, or Damaged" +Credit Card Acceptor +Change Machine +Bill Jam +WS 1 +Pump Out WS1 +Not Operating +Pump Out WS2 +Reporting Enable/Disabled +Softener WS 1 +Wall Jack +Wisco Install +Wisco Lighting +Wisco Parts +Roller Grill Install +All Roller Grills +Roller Grill Parts +Pastry Case Lights +Chili Cheese Parts +Chili Cheese Install +Verify Beverage Equipment Installation +Verify Food Equipment Installation +Wisco - Relocate/Remove +Remove/Relocate Pastry Case +Remove/Relocate Chili Cheese +Install Siding +Will Not Open +Will Not Close +Batteries Dead +Rekey +Palm Tree Trimming +Running Continuously +Not Running +Service Needed +Schedule +Rug Rack +Emergency Lighting Deficiency +Exit Sign Deficiency +Other +Other +Other +Other +Lines Other +Lines Leaking +Ceramic Tile and Grout Cleaning +Awning Cleaning +Repair +Replace Batteries +Wont Lock/Unlock +Rekey +Will Not Open +Latch/Closer/Hinge issue +Broken Door +Door Frame Issue +Replace +Repair +Replace +Repair +Replace +Repair +New Equipment Install +Security Issue +Unable To Lock/Unlock +Keypad Issue +Armored Car Key Issue +Site Transfer +Upright Refrigerator +Upright Freezer +Back Room Freezer +Coffee Brewer +Cappucino Machine +Fountain Dispenser +Walk In Freezer +Vault Refrigeration +Ice Merchandiser +Ice Maker +Work Table +Tortilla Press +Table Top Fryer +Steamer +Oven/Proofer +Hot Plate +Henny Penny +Grill/Griddle/Flat Top/Oven/Hot Plate Combo +Grill/Griddle/Flat Top/Oven Combo +Grill/Griddle/Flat Top +Gas/Electric Fryer +Egg Cracker +Dough Mixer +Dough Divider +Wisco +Vertical Hatco +Sandwich Case +Roller Grill +Pastry Case +Novelty Case +Microwave +Hatco +Condiment Station +Chili Cheese Unit +FCB 4 Barrel +FCB 2 Barrel +Parking Structure +Facade +Parking Structure +Facade +Parking Structure +Facade +Preventative Maintenance +No Power +Not Working +Inspection +Replace +Repair +Inspection +Preventive Maintenance +Replace +Repair +Sweeping +Stripping +Striping +Snow Request +Severe cracks +Sealing +Potholes +Patching +Other +Missing Grates +Handrail/Railing Repair +Garbage Clean Up +Drainage problem +Curb/Car/Wheel stop +Condensing Unit +Preventative Maintenance +Replace +Repair +Condensing Unit +Preventative Maintenance +Replace +Repair +Replace +Storage/Back of House +Storage/Back of House +Storage/Back of House +Storage/Back of House +Storage/Back of House +Storage/Back of House +Not Working +Leaking +Not Heating/Won't Turn On +Knob Issue +Replace Cord +Not Heating/Maintaining Temperature +Missing Knob +Leaking +Maintenance Needed +Damaged +Repair +New Equipment Install +Wheels/Maintenance +Override Switch +Schedule Change +Parts Ordering +Communication Loss +Schedule Preventative Maintenance +Perform Preventative Maintenance +Schedule Preventative Maintenance +Perform Preventative Maintenance +Schedule Preventative Maintenance +Perform Preventative Maintenance +Schedule Preventative Maintenance +Perform Preventative Maintenance +Pest Repairs - Reinvestment +Pest Repairs - Reinvestment +Schedule Preventative Maintenance +Perform Preventative Maintenance +Other +Deficiency +Will Not Open +Will Not Close +Replace +Repair +Remove +Install New +Will Not Open +Will Not Go Up +Will Not Come Down +Remove +Not Sealing +Install new +Cannot secure +Tipping Building +Scale House +Mechanical Room +Maintenace Building/Shop +Locker Room +Tipping Building +Scale House +Mechanical Room +Maintenace Building/Shop +Locker Room +Tipping Building +Scale House +Mechanical Room +Maintenace Building/Shop +Locker Room +Tipping Building +Scale House +Mechanical Room +Maintenace Building/Shop +Locker Room +Tipping Building +Scale House +Mechanical Room +Maintenace Building/Shop +Locker Room +PM +POS Gilbarco +POS Verifone +Pinpad Ingenico +Pinpad Verifone +POS NCR +Fuel Controller +Not Working +New Install +Laboratory +Laboratory +Striping +Rebuild +Breakdown +Replace +Repair Damaged +Warehouse +Laboratory +Not Working/Broken/Damaged +Parts +Restroom fan +Laboratory +Laboratory +Laboratory +Laboratory +Laboratory +Laboratory +Laboratory +First ProCare Visit +Not Working +Snow Request +WPH Managed +Other +Semi-Annual +Annual +"Not Working, Broken or Damaged" +Missing/Detached +Interior Leaking +Flaking +Cracked/Uneven +Broken or Damaged +Not Heating/Working Properly +Leaking +Finish/Surface +Broken or Damaged +Backing Up +Preventive Maintenance +Tub/Tub Surround/Shower Leaking +Shower Valve/Head +Pipes Broken or Leaking +Flooding/Sewer Backup +Faucet Broken or Leaking +Leaking +Finish/Surface +Broken or Damaged +Repair +"Walls - Cracked, Broken or Damaged" +Floor lifted or cracked +Driveway/Patio/Sidewalk +Weed removal +Water Extraction/Dryout +Sub Floor +Roof Truss +Framing +Foundation +Exterior Deck +Damaged +Detached/Missing +Floor Stains or Spots +Wall Stains or Spots +Ceiling Stains or Spots +Drain Pop Up +Other Shelf +Towel Rack +Mirror +Toilet Paper Holder +Burning Smell +Sounding Alert +Failed Test +Detached/Missing +Smoking or Sparking +Loose or Damaged +Fan Not Working +Fan Balancing +Light Not Working +Fan Not Working +Screens +Frame Issue or Leak +Damaged +Door Adjustment or Weather Stripping +Not Working +Leaking +Physical Damage +Physical Damage +Physical Damage +Physical Damage +Physical Damage +Physical Damage +Making Noise +Physical Damage +Physical Damage +Airflow Issue +Programming Help Needed +Physical Damage +Snow Request +Earthquake +Fire +Snow +Flood +Tornado +Hurricane +PM +Water Diversion +PM +5 Year Inspection +PM +5 Year Inspection +Repair +Inspection +Missing +Cleaning +Damaged +Fuel Inspection +Software Issue +Repair +Chime +Control +General +Emergency +Wireless Device +Camera +UPS/APC +Security Monitor +Speaker and Microphone +Security Phone +System Down +DVR - General +DVR - Critical +Misc. Parts +Gasoline Parts +Countertop Parts +Display Parts +Security and Safe Parts +Restaurant Equipment +Food Equipment +Cold Beverage +Hot Beverage +Schedule Preventative Maintenance +Perform Preventative Maintenance +GLO Service +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Perform Preventative Maintenance +Inspection +Schedule Preventative Maintenance +Inspection +Service +Service +Schedule Preventative Maintenance +Schedule Service +Repair +Schedule Preventative Maintenance +Service +Not Working +Schedule Preventative Maintenance +Inspection +Repair +Inspection +Schedule Preventative Maintenance +Production Area +Schedule Preventative Maintenance +Service +Schedule Service +Service +Not Working +Schedule Preventative Maintenance +Service +Schedule Preventative Maintenance +Repair +Not Working +Open Top Empty and Return +Open Top Pickup +Other +Damaged +Lock +Lock +Open Top Request +Open Top Empty and Return +Open Top Pickup +Damaged +Other +Not Working +Re-Certified +Icing Up +Other +Cooling issue +Door +Other +Gasket +Icing Up +Glass +Water leaking +Handle +Cooling issue +Lighting issue +Cooling issue +Door +Other +Cooling Issue +Door +Other +Other +Door +Water Leaking +Glass +Handle +Lighting Issue +Cooling Issue +Water Leaking +Handle +Lighting Issue +Cooling Issue +Other +Door +Other +Shut Down +No Power +Not Cooling +Gasket Repair/Replacement +Hinges/Latch Broken +Repair +Icing Up +Not Maintaining Temp +Fan Not Working +Refrigerated Truck +Water Leaking +Refrigerated Truck +Water Leaking +Icing Up +Other +Rekey +Wont Lock/Unlock +Handle/Door Knob +Key Broken Off +Rekey +Other +Dimming System +Broken Light Fixture +Track Lighting +Not Heating +Controls Not Working +Cleaning +Other +Gasket +Door/Handle Issue +No Power +Leaking +Leaking +Other +Shut Down +No Power +Not Heating +Install +Not Heating +Other +Shut Down +Other +Shut Down +Heat Strip Not Working +Other +No Power +Not Heating +Controls Not Working +Water in Pan +Door/Handle Issue +No Power +Not Heating/Lighting +Other +Leaking +Other +Replace +Not Heating +Not Working +Bottom Plate +Splatter Guard +Sparking +Oil Shuttle +Booster Heater +Damaged +Replace +Sound/Music/PA Equipment +CCTV Camera System +Phone/Telecommunications +Television +Antimicrobial Treatment +Poor Taste +Other +Damaged +Poor Temperature +Water in Lines +Tower/Tap Repair +Mechanical Room +Vestibule Heater +Critical Response +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Paint +Weather Stripping +Latch Closer Issue +Handle/DoorKnob/Chime +Dragging +Door Frame Issue +Will Not Close +Will Not Open +Door Slams +Broken Door +Railing +WPH Managed +Immediate Response +Non-Urgent Response +Other +Slab Issue - Immediate Response +Slab Issue - Non-Urgent Response +Other +LED Lighting +Lighting +Hi Rise All Out +Hi Rise Partial Out +LED All Out +LED General Issue +LED Partial Out +General Issue +Posting Issue +Cooling Issue +Door +Glass +Handle +Lighting Issue +Water Leaking +Repair +Not Holding Temp +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +WIC Upgrades +Testing Repairs +Containment +Disptestrepair +Ldrepair +Linerepair +Tankrepair +Techmeet +Vrsystem +ATGtestrepair +Sump Inspection +Sales Tour +Retest +Hood Insp +Quality Assurance +Pre-Inspection +Power Washing +Notice Of Violation +New Equipment +Warehouse +Leak Detection +Inventory Variance +End Of Month +Seven Day +Ten Day +Deficiency +Hanging Hardware Replacement +Disp Cal +Disp Filt +Closed +Closed Facility Upkeep +Divestment +Dispenser Calibration +Diamond Sign Relamp +Construction Walk-Thru +Ceiling Inspection +Canopy Sealing +Bathroom Upgrades +FCB +All Data Missing +Partial Data Missing +Clogged +Leaking +Loose +No Hot Water +Overflow +Running +Leaking +"Not Working, Broken, or Damaged" +Other +Other +Other +Other +Spray Nozzle Leaking +Spray Nozzle Not Working +Spray Nozzle Leaking +Spray Nozzle Not Working +Stand Alone +Rapid Eye Cameras +Phone Lines +Payspot +Passbox +Gas TV +Kitchen System Kitchen Side - Kprinter +Programming - Reporting +Programming - User Assistance +Single Register - Sreg Down +Single Register - Sreg Gen +All Registers +Branded Food Programs +End Of Day +Kitchen System +Programming +Single Register +Technician Dispatch +All Registers - Reg Down +All Registers - Reg Gen +All Registers - Stuck Sale +Kitchen System Kiosk Equipment - Kiosk Gen Issue +Kitchen System Kiosk Equipment - Pricing Issue +Kitchen System Kitchen Side - Kbumpbar +Kitchen System Kitchen Side - Kcontroller +Kitchen System Kitchen Side - Kmonitor +Electronic Safes +Digital Media +CP Outside +CP All +CP Inside +Loyalty Processing +Application PDI Ent - RMS Security +Hardware - Grocery Handheld +Hardware - Mgr Tablet +Hardware - PC +Hardware - PC Down +Hardware - Wallclock +Application +Pricebook - Audit Prep +Hardware +Pricebook - Grand Opening +Network Access +Pricebook - Pricebook Gen +Pricebook +Application - Automated Fuel +Application - Cashier Analysis +Application - CBT +Application - Drawer Count +Application - Email +Application - Grocery +Application - Lottery +Application - Maximo +Application - Money Order Down +Application - New Hire +Application - PDI Ent +Application - Portal +Application - Sapphire +Application - Signs +Application - SSCS +Application - Timeclock +Application Automated Fuel - AFP Crit +Application Automated Fuel - AFP Emer +Application Grocery - Inventory +Application Grocery - Order +Application Grocery - Store Assistant Ordering +Application PDI Ent - RMS DSR +Application PDI Ent - RMS Reporting +ATM +Critical Response +Immediate Response +Routine Response +Non-Urgent Response +All Lamps Out +Multiple Lamps Out +1 Lamp Out +Control Panel Not Working +Door/Handle Issue +No Power +Not Heating +Shut Down +No Power +Paddle Won't Spin +Shut Down +Not Working/Broken/Damaged +Not Working/Broken/Damaged +Major Repair +Not Working/Broken/Damaged +Minor Repair +Not Working/Broken/Damaged +Not Working/Broken/Damaged +Emergency Repair +Major Repair +Minor Repair +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +Preventative Maintenance +Installation +Other +Deficiency +Batteries Dead +Other +Dumbwaiter +Non-Urgent Response +Routine Response +Damaged - Non-Urgent Response +Damaged - Immediate Response +Critt&S +Emert&S +Impressed Current +Nonemert&S +Sumps +Tank Cleaning +Tank Monitor +Tank Monitor Alm +Vapor +Impressed Current - AC Light Off +Impressed Current - Current Out +Impressed Current - Transformer Off +Impressed Current - Voltage Out +Slectdispenser - Dispsecurity +Slectdispenser - Hanginghardware +Slectdispenser - Hitdispenser +Slectdispenser - Hitdispfollowup +Slectdispenser - Selectcrind +Slectdispenser - Selectflowissue +Slectdispenser - Selectfuelsales +Slectdispenser - SelectPM +Slectdispenser - Selectproduct +Slectdispenser Dispenserleaks - Leakstopped +Slectdispenser Dispenserleaks - Stillleaking +Slectdispenser Selectcrind - CardacCPtsd +Slectdispenser Selectcrind - Cardreaderprinter +Slectdispenser Selectcrind - Generalcardrdrsd +Alldispenser - Allcrind +Alldispenser - Allflowissues +Alldispenser - Allfuelsales +Alldispenser - AllPM +Alldispenser - Allproductdown +Alldispenser - Intercom +Alldispenser - Media +Alldispenser - Allcrind Cardacceptad +Alldispenser - Allcrind Generalcardreaderad +Slectdispenser - Dispenserleaks +Slectdispenser - Display +ATG Liquid Sensors - Low Liquid Alarm +ATG Liquid Sensors - Open Alarm +ATG Crit +ATG Liquid Sensors - Short Alarm +ATG Liquid Sensors +ATG PLLD - Cont Handle On Alarm +ATG Low +ATG PLLD - Gross Test Fail Alarm +ATG Nor +ATG PLLD - Line Equipment Alarm +ATG PLLD +ATG PLLD - Low Pressure Alarm +ATG Smart Sensors +ATG PLLD - PLLD Annual Test Fail Alarm +ATG System +ATG PLLD - PLLD Annual Test Needed Alarm +ATG Tank Probes +ATG PLLD - PLLD Periodic Test Fail Alarm +Intellifuel +ATG PLLD - PLLD Periodic Test Needed Alarm +ATG Liquid Sensors - Liquid Warning +ATG PLLD - PLLD Shutdown Alarm +ATG Liquid Sensors - Setup Data Warning +ATG PLLD - Sensor Open Alarm +ATG PLLD - PLLD Annual Test Needed Warning +ATG PLLD - WPLLD Comm Alarm +ATG PLLD - PLLD Periodic Test Needed Warning +ATG PLLD - WPLLD Shutdown Alarm +ATG PLLD - PLLD Setup Data Warning +ATG Smart Sensors - SS Comm Alarm +ATG Smart Sensors - SS Fuel Warning +ATG Smart Sensors - SS Fault Alarm +ATG Smart Sensors - SS High Liquid Warning +ATG Smart Sensors - SS Fuel Alarm +ATG Smart Sensors - SS Low Liquid Warning +ATG Smart Sensors - SS Setup Data Warning +ATG Smart Sensors - SS High Liquid Alarm +ATG Smart Sensors - SS Temp Warning +ATG Smart Sensors - SS Install Alarm +ATG Smart Sensors - SS Water Warning +ATG Smart Sensors - SS Low Liquid Alarm +ATG System - Auto Callback Failure +ATG Smart Sensors - SS Short Alarm +ATG System - Battery Off +ATG Smart Sensors - SS Water Alarm +ATG System - Configuration Error +ATG System - Self Test Alarm +ATG System - FLS Poll Failure +ATG Tank Probes - Gross Leak Test Fail Alarm +ATG System - PC Revision Warning +ATG Tank Probes - High Limit Alarm +ATG System - ROM Revision Warning +ATG Tank Probes - High Water Alarm +ATG System - Software Module Warning +ATG Tank Probes - Max Level Alarm +ATG System - Too Many Tanks +ATG Tank Probes - Periodic Leak Test Fail Alarm +ATG Tank Probes - CSLD Increase Rate +ATG Tank Probes - Periodic Test Needed Alarm +ATG Liquid Sensors - Fuel Alarm +ATG Tank Probes - Probe Out Alarm +ATG Liquid Sensors - High Liquid Alarm +ATG Tank Probes - Sudden Loss Alarm +CNG Plant - CNG PM +CNG Plant - CNG Emergency +CNG Plant - CNG General +EVC +LPG +CNG - CNG Dispenser +CNG - CNG Plant +Major Repair +Minor Repair +Parts +Major Repair +Minor Repair +Not Working/Broken/Damaged +Damaged +Routine Response +Discharge +Damaged +Major Repair +Minor Repair +Restroom Fan +Breaker/Panels +Non-Safety +Safety +Compressor +Will Not Open +Major Electrical +Minor Electrical +Lift +Other +Repair +Not Working/Broken/Damaged +Not Working/Broken/Damaged +Broken Or Damaged +New Equipment Install +New Equipment Install +Normal +Minor +Sales floor +All +Missing +Damage +Damage +Other +Damage +Other +Damage +Replace +Other +Pick up and Return +Pick up and No Return +Delivery +Temporary Labor +Other +Height Clearance +Other +Damaged +Leaking +Broken +Overflow +Other +Odor +Chemical/Soap Proportioner +Chemical/Soap Proportioner +Vandalism +Pipe Insulation +Weather Stripping +Weather Stripping +Printer +Phone +Other +Delivery Truck Impact +Car Impact +Other +Section 8 +Occupancy Check +Move-Out +Move-In +Inspection +HOA/City Inspection +BTR Inspection +Graffiti +Graffiti +Other +Corner Guard +Column Wrap +Damage +Shelves +Children's High Chair +Repair Damaged +Missing +Inspection +Damage +Umbrella +Cover +Menu Board Canopy +Speaker Post +Ground Loop +Server Room +Light Switch +Rekey +Other +Electronic Strike/Token Lock +Noisy +PM/Major +Mezzanine +Breakroom +Basement +Mezzanine +Breakroom +Basement +Back of House +Mezzanine +Breakroom +Basement +Back of House +Mezzanine +Breakroom +Basement +Back of House +Mezzanine +Breakroom +Basement +Back of House +Mezzanine +Breakroom +Basement +Back of House +Turn Assignment +Natural Disaster Inspection +Compactor Full +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Needs Repair +Funds +Empty +No Uniforms +New employee +Delivery Shortage +Return +No Delivery +Out of Product +No Rags +Watering +Missing Plants +Dead Plants +Carpet Cleaning +Repair or Damage +Water +Troubleshooting +Automatic Vacuum +Squirrels +Raccoons +Dirty +Damaged Grates +Rust +Re-Caulk +Dust and Debris on Cabin +Dirty Interior Walls +Dirty Exterior Walls +Car Impact +Not Running +Noise +Belt Issue +Seals +Lights Out or Flickering +Broken Lens +Ballast Out +Supply Side - Dirty +Pre-Filters - Dirty +Exhaust - Dirty +Broken Filter Rack +Not Operating +Noisy +Dirty - Overspray Buildup +Balance +Leaking +Dirty +Broken +Won't Open +Won't Close +Replace Seals +Replace Latches/Handles +Not Latching +Glass Broken or Shattered +Drags +Car Impact +Timers Bad +Switches Faulty +Spray Air +Relay Bad +Not Starting +Not Shutting Off +Not Baking +Contactors Bad +Not Reaching Temp +No Heat +Lighting +Noisy +Noisy +Under Pressurized +Over Pressurized +Not evacuating +Balance Issues +Board Up +Will Not Open +Will Not Close +Batteries Dead +Other +Sealing +"Not Working, Broken or Damaged" +Leaking +Other +"Not Working, Broken or Damaged" +Other +"Not Working, Broken or Damaged" +Inspection Center +All +Restroom +Inspection Center +Inspection Center +Inspection Center +Inspection Center +Inspection Center +Other +Other +Will Not Come Down +Not Working +Charging Station +Battery Cell +Not Working +Charging Station +Battery Cell +Preventative Maintenance +Not Working +Not Working +Charging Station +Battery Cell +Charging Station +Battery Cell +Other +Damaged +Other +Damaged +Damaged +Relocate/Install +Adjust View +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Line Leak +Other +Damaged +Other +Damaged +Other +Damaged +Strip and Wax Night 2 Reset +Strip and Wax Night 1 Reset +Scrape and Tile Reset +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Smart Lock +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Other +Damaged +Preventative Maintenance +Not Working +Other +Damaged +Other +Damaged +Other +Damaged +Smart Thermostat +Production Area +Production Area +Production Area +Production Area +Production Area +Not Closing +Not Opening +Other +Partially out +Sign completely out +Other +Water leaking +Cooling issue +Door +Door +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Other +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Door +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Other +Other +Water leaking +Cooling issue +Door +Other +Water leaking +Cooling issue +Door +Door +Other +Water leaking +Cooling issue +Gasket +Gasket +Gasket +Gasket +Gasket +Low / No Ice Production +Broken Pipe +Winterize +Clogged Nozzles +Unsecured +Other +No Hot Water +Leaking +Other +Other +Cracked +Leaking +Loose +Improper Temperature +Other +Interior holes in walls +Roof Line/Fire Wall +Metal Flashing +Tree Trimming/Landscaping +Ceiling Tiles/Insulation +Other +Doorsweep +Piping +Exterior holes in walls +Roof Line +Key Broken Off +Won't Lock/Unlock +Handle/Door Knob +Handle/Door Knob +Key Broken Off +Won't Lock/Unlock +Door/Handle Issue +Shut Down +No Power +Not Heating +Other +Control Panel Not Working +Leaking +Not Heating +Controls not working +Other +No Power +Not Heating +Controls not working +Blower not working +Other +No Power +Conveyor Not Moving +Butter Roller Not Moving +No Power +Other +Not Heating +Controls not working +Controls not working +Other +No Power +Not Heating +No Power +Not Heating +Other +No Power +Not Heating +Other +Touch pad not working +No Power +Not Exhausting Air +No Power +Not Exhausting Air +Not Exhausting Air +No Power +No Power +Not Exhausting Air +Shut Down +Conveyor not turning +No Power +Not Heating +Other +Shut Down +Conveyor not turning +No Power +Not Heating +Other +Bunker Remodel +Other +Cooks Line +Lined Walls +PassThru +Other +Leak +Lighting Issue +Flow Rate +Partitions & Doors +Bar Stools +Benches +Portable Bars +Move +Remove +Secure +Kitchen Doors and Frames +Dining Room +Paint +Repair +Replace +Install +Cleaning +Other +Railing +To-Go Signs +Door Slams +Will Not Close +Dragging +Will Not Open +Handle +Broken Door +Latch/Closer/Hinge issue +Door Frame Issue +Weather Stripping +Water Leak +Window Film +Cracked +Shattered +Remove +Will Not Come Down +Stuck +Cannot Secure +Install New +Glass Film +Glass +Handle +Lighting issue +Cooling issue +Other +Door +Water leaking +Handle +Lighting issue +Cooling issue +Other +Door +Water leaking +Water leaking +Cooling issue +Door +Other +Lighting issue +Cooling issue +Other +Door +Water leaking +Handle +Hinges/Latch Broken +Not Maintaining Temp +Icing Up +Other +Fan Not Working +Water leaking +Other +Poor Taste +Foaming +Shut Down +No Power +No Product +Install Window Unit +Patio Heater +Bar Area +Bar Area +Bar Area +Bar Area +Bar Area +Other +No Power +Not Heating +Overgrown/Service Needed +Missed Service +Tile Replacement +Second Night Scrape +First Night Scrape +Daily Janitorial +Strip and Wax Night 2 +Strip and Wax Night 1 +Install +Sweeping +One Extra Pick-Up Request +One Extra Pick-Up Request +One Extra Pick-Up Request +No Service +Lock Request +One Extra Waste Pick-Up +Dumpster/Container Request +Open Top Request +Missed Pickup +Old Fixtures/Equipment Removal +Missed Pickup +One Extra Recycle Pick-Up +Dumpster/Container Request +Fix Power +Damage +Bale Pick-Up +Jammed +Oil Stains +Architectural Issue +Trash Can +Landscaping Service Needed/Weeds +Permit Issue +Cosmetic Issue +Vehicle/Parking +Notice of Hearing +Structural Issue +Landscaping Enhancement Needed +Other Issues +Code Issue +Trash/Debris +Municipal Inspection +Pool Issue +Health & Safety Issue +Slab Issue +Settlement cracks +Replace +Issue +Issue +Issue +Install +Damage +Damage +Damage +Damage +Damage +Broken/Damaged +New Keys +Electric Pallet Jack +Broken or Damaged +New Keys +New Keys +Forklift Rental +Battery Issue +Seatbelt/Horn/Light Repair +Making Noise +Battery Charger +Forks Not Working +Leaking Fluid +Brakes +Tire Issue +Not Moving/Starting +Damage +Anti-Theft Cary System +One Time Removal +Damage +Sign Falling +Issue +DVR/VCR Not Working +Monitor Not Working +Camera Not Working +Keypad Issue +Armored Car Key Issue +Unable To Lock/Unlock +Alarm Sensor - Other Door +Sounding +Alarm Sensor - Entrance Doors +Permit +Deficiency Report +Keypad/Error message +Alarm Sensor - Receiving Doors +System Down +Inspection +Panel Issue +Broken +Broken +Broken +Broken +Broken +Broken +Leak Repair +Bucket Test +Re-plaster +Backfill +Auto-Fill +Pump +Light +Filter +Basket/Skimmer +"Not Working, Broken or Damaged" +Loose +Leaking +Issue +Trench Grate Covers +Hair Strainer +Leaking +Filter Change +Damage +Running +Loose +Leaking +Clogged +Cracked +Overflowing +Overflow/Backup +Odor +Clogged +Trigger +Broken +Leaking +Clogged +Cracked +Loose +Overflowing +Leaking +Running +Deficiency +Regulatory Agency Inspection +Fleas +Ticks +Overhead Door Seal +Dock Brush Seal +Indian Meal Moths +Other +Disposition +Other +Slide Lock +Key Request +Key Broken Off +Key Request +Won't Lock/Unlock +Key Broken Off +Handle/Door Knob +Rekey +Handle/Door Knob +Key Request +Won't Lock/Unlock +Key Broken Off +Bulb/Lamp Recycling Box Needed +Lights Completely Out +Partial Outage +One Time Service Needed +Missed Service +Overgrown/Service Needed +No Show/Scrub & Recoat +Checklist Not Complete +Additional Service Requested +Scrub & Recoat Incomplete +No Show/Missed Service +Buffer Not Working +No Show/Strip & Wax +Equipment Scrubber Not Working +Backpack Vacuum Not Working +Strip and Wax Incomplete +Add and Quote Service High Bay Cleaning +Add and Quote Service Blitz Cleaning Due to Vendor Failure +Add and Quote Service Window Cleaning +Other +Special Clean-Up Needed +Special Clean-Up Needed +Special Clean-Up Needed +Other +Other +Missed Scheduled Pick-Up +Graffiti +Interior Wash +Exterior Wash +Install +Install +Dock Bumpers Damaged/Broken +Not Sealing +Leveler Damaged/Broken +Damage +Install +Damage +Install +Inspection +Stuck +Damage +Damage +Damage +Stained +Broken +Less than 15 Tiles +15+ Tiles +Grout +Remove +Damage +Install +Hand Dryers +Restroom Stall Door +Restroom Partitions +Water Damage +IAQ +Broken +Parts Needed +Tank Damage +Replace +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +No power +No power +Flooding +No Power +Tank Damage +Light Bulb +Deficiency Report +Damage +Deficiency Report +Keypad/Error message +Pull Station +Inspection +System Down +Deficiency Report +Permit +Sounding +Install +Damage +Cleaning Needed +Uneven +Handrail/Railing Repair +Oops Station +Not Working +Relocate +Power Outage +Fuel +Restart/Reconnect +TV Broken +Wiring +TV Installation +DVD Issue +Override Switch +Dragging +Weather Stripping +Broken Door +Will Not Open +Latch/Closer/Hinge issue +Door Slams +Handle +Will Not Close +Door Frame Issue +Off Track +Sensor Issue +Not Turning On/Off +Panel Issue +Not Sealing +Parts Request +No Power +Making Noise +Issue +Keys +Installation +Damage +Register or POS +Cracked or Peeling +Knob +Broken or Damaged +Hinge +"Not Working, Broken or Damaged" +Not Working +Leaking +Not Draining +Issue +No Hot Water +Parts Broken/Missing +Key Stuck +New Key Request +New Parts +Glass Broken/Missing +Partial Power +Power Outage +Ballast Out +Broken +Need Filters +Water Leak +Parts Ordering +Weather Damage +Squeaking +Rattling +Loud Noise +Septic Test +Backflow Test +Storm Damage +Storm Damage +Storm Damage +Storm Damage +Well Inspection +Alternative Floors (ALT LVT) +Fastbreak Night 1 +Breading Station +Fire +Preventative Maintenance +Replace +Repair +Re-key +Broken/Damaged +Black Specks In The Water +Filter Change +Low Water Pressure +Leaking +Broken/Damaged +Black Specks In The Water +Needs Salt +Beeping/Error Codes +Install +Install +Repair +Install +Other +Other +Repair +Not Maintaining Temp +Icing Up +Hinges/Latch +Gasket +Other +Install New +Other +"Not Working, Broken or Damaged" +Other +Other +Inspection +QC Inspection +Gas Leak +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Not Closing +Not Opening +Showroom +Other +Not Working +Low Pressure +Making Noise +Drop Test +Handle/door Knob/chime +Will Not Close +Weather Stripping +Door Slams +Door Frame Issue +Will Not Open +Latch/closer/hinge Issue +Broken Door +Will Not Go Up +Will Not Come Down +Remove +Install New +Cannot Secure +Storage Room +Storage Room +Storage Room +Storage Room +Storage Room +Storage Room +Other +Lights Out +Sign Completely Out +Partially Out +Sign Completely Out +4 + Letters Out +1-3 Letters Out +High Electric Bill +4 Fixtures Or More +3 Fixtures Or Less +Survey Count Fixtures/Lamps +10 Or More Lamps Out +1-9 Lamps Out +Other +Repair +Retrofit +LP: Dark Site Escort Service +Curb Staking Service +Will Not Open +Will Not Close +Weather Stripping +Latch/Closer/Hinge Issue +Handle/Door Knob/Chime +Dragging +Door Slams +Door Frame Issue +Broken Door +"RS4 - Spot treatment of plowing, shoveling, and/or deicing - as instructed by SMS" +RS3 - Deicing only of the driveway and/or sidewalk +RS2 - Plow and deice the driveway +"RS1 - Plow, shovel, and deice the driveway and sidewalk" +Exterior +Interior +Other +Other +Front Line/Dining Room +Bathroom +Kitchen +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Repair +Other +Other +Rest Rooms +Rest Rooms +Dining Room - Top of Booth +Front Line/Dining Room +Kitchen +Shuttle +Roof +Other +Front Line/Dining Room +Kitchen +Kitchen +Front Line/Dining Room +Dumpster +Sheds +Walk-in +Rest Rooms +Kitchen +BOH +Front/Dining Room +Other +Other +Soffits +Other +Menu Board Repair +Pickup Window Repair +Not Working +Kitchen +Dining Room +Front Line +Front Line +Front Line +Lawn Disease Pest Contol +Lawn Insect Pest Control +Lawn Weed Pest Control +Green To Clean +Porch/Garage/Car Port +"Antennas Damaged, Missed, Or Broken" +"Turbines Damaged, Missed, Or Broken" +"Dishes Damaged, Missed, Or Broken" +"Solar Panels Damaged, Missed, Or Broken" +Chimney Damaged/Broken +Tarping Needed +Pool/Spa Heater +Stained +Possible Leak +Cracked Or Chipping +Well +Septic Backup +Septic Pump Needed +Septic Issues +Cracked/Broken/Damaged +Foundation Issue +De-winterize +Winterize +Water Extraction/Dryout +Leaking +"Not Working, Broken Or Damaged" +De-winterize +Winterize +Lights Out +Damaged +Water leaking +Shelving +Repair +Not Maintaining Temp +Icing Up +Hinges/Latch Broken +Gasket Repair/Replacement +Fan Not Working +Other +Not Maintaining Temp +Icing Up +Hinges/Latch +Gasket +Water leaking +Professional Cleaning +No Power +Running +Removal +Overflow +Other +Not cooling +No water +Loose/off wall +Leaking +Clogged +Routine Maintenance +Replacement +New Installation +Pump Failure +Other +On/Off Switch +Not warming/melting +Not maintaining temparture +Not dispensing properly +No Power +Cord +Out of Calibration +Not Freezing +Not Blending +No Power +Making Noise +Leaking +Cord +Will Not Turn On +Will Not Heat Up +"Replace Cord, Plug, Connection" +Repair Switch +Repair +Will Not Turn On +Will Not Heat Up +"Replace Cord, Plug, Connection" +Repair Switch +Repair +Shut Down +Probe +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Communication +Other +On/Off Button +Not Working +Motor/Sprocket +Heating Element +Cord +Belt Chain +Shut Down +Probe +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Communication +General Maintenance +Shut Down Carriage Arm Frozen +Replacement Blade +Poor Slice +Chain/Belt Issue +Will Not Turn On +Will Not Heat Up +Repair +Cracked +Broken +Window Unable to secure/lock +Window Not opening +Window Not closing +Window Motion sensor not working +Needs Repair +Damaged +Cove +Epoxy Coating +5 and over lamps out +1-5 lamps out +HVAC/Refrigeration +Power Washing +Storm Damage +"Broken, damaged or missing" +Treatment Needed +Trapping Needed +Trapping Needed +Treatment Needed +Trapping Needed +Treatment Needed +Treatment Needed +Treatment Needed +Quality Assurance Fee +Survey +Damaged Property +Salt Bucket +Roof Service +Stacking Service +Other +Stop Signs +Sign Completely Out +Partially Out +Other +No Parking Signs +New Install +Face Damage +Stop Signs +Sign Completely Out +Partially Out +Other +No Parking Signs +New Install +Face Damage +Other +Repair +Replace +Unsecure +Other +Monitoring +Plumbing +Cleaning +Other +Refrigerated Truck +Other +Shelving +Not Maintaining Temp +Icing Up +Hinges/Latch Broken +Gasket Repair/Replacement +Fan Not Working +Other +Not Working +Transformer +Other +Repair +Cut +Weld/Seam +Leaking +Shut Down +Probe +Communication +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Will Not Turn On +Will Not Heat Up +Not Working +Monitoring +Damaged Hardware/Frames +Other +Fixtures +Add Partition +4 Lamps Or More +3 Lamps Or Less +Bathroom +Restroom +Restroom +Restroom +Restroom +Restroom +TBD +S4 - Shovel & Deice only the sidewalk +Service IVR Fine +S2 - Plow parking lot and loading dock and shovel sidewalk +Other +Monthly Installment +Hauling service +S3 - Deicing only of the parking lot sidewalk and loading dock +"4.1 – 8 Salt, Plow Roadways, shovel walks" +Cracked +Shattered +Water Leak +Window Film +Latch/Closer/Hinge Issue +Dragging +Broken Door +Handle/Door Knob/Chime +Door Slams +Will Not Open +Glass +Door Frame Issue +Will Not Close +Handle/Door Knob/Chime +Weather stripping +Door slams +Will not open +Glass +Door Frame Issue +Will not close +Latch/Closer/Hinge issue +Dragging +Broken Door +Weather Stripping +Door Slams +Will Not Open +Post Hurricane Board-Up +Door Frame Issue +Will Not Close +Pre Hurricane Board-Up +Latch/Closer/Hinge Issue +Dragging +Broken Door +Rusting +Handle/Door Knob/Chime +Glass +Repair +Replace +Other +Other +Replace +Repair Damaged +Door Will Not Open/Close +Open Office Area +Interior +Stained +Sign Completely Out +1-3 Letters Out +4+ Letters Out +Face Damage +Replace +Inspection +Replace +Inspection +Bed Bugs +Leak +Office +Operations/Cage +Communications/Server Room +All +Conference Room +Open Office Area +Conference Room +Office/Restroom +Operations/Cage +Communications/Server Room +Showroom +Warehouse +Open Office Area +Open Office Area +Conference Room +Office +Operations/Cage +Showroom +Warehouse +Office/Restroom +Communications/Server Room +Conference Room +Showroom +Warehouse +Operations/Cage +Office/Restroom +Communications/Server Room +Open Office Area +Communications/Server Room +Open Office Area +Conference Room +Office/Restroom +Operations/Cage +Operations/Cage +Office/Restroom +Communications/Server Room +Open Office Area +Conference Room +Office/Restroom +Communications/Server Room +Open Office Area +Conference Room +Operations/Cage +Start Up Service Needed +Alarm Install +Crack +Removal +Cracking or Peeling +Small repairs +Large repairs +Removal +Foundation Repairs +Install mulch +Install +Lock +Installation +Repeater +Thermostat +Dumpster +Trash-out +Trash out +Structures +Misc Replacements +Preferred Vendor Discount +5 Point completion package +Flooring management fee +60 Point Inspection +Service Fireplace +Appliance Deep Cleaning +Secure opening +Install Exterior Trim Replacement (Does not include paint) +Install Fascia Replacement (Does not include paint) +Install Vinyl Siding +Install Pine Siding +Install T1-11 Siding +Install Cement Board Lap Siding +Install Stucco or Siding Repair (Time and Material Basis) +Install Pressboard Lap Siding +Install Cedar Siding +Crawl Space Cover +"Not Working, Broken or Damaged" +Haul Off +Install Complete Package (Ref/DW/Range/Micro hood) +Permit Fee +Burner Pan Replacement +Install +Install +Install +Install +Install +Pressure Washing +Replacement +Repair Damaged +Install New +Replace +Replace Button +Install Circuit +Install new +Install Panel +Install Outlet +Caulking +Broken or Damaged +Pressure test +Install stand +Flooding or water damage +Not Heating/Working Properly +Camera line +"Not Working, Broken or Damaged" +Other +Not Working +Other +Roof +Roof +Stuck +Bollard +Sign Completely Out +Partially Out +Other +Other +1-3 Letters Out +Minor Leak +Major Leak +Window Film +Service +Service +Other +Service +Service +Service +Replace +Repair +Shop +Shop +Shop +Shop +Roof +Fence +Dumpster +Door +Shop +Shop +Replace +Repair Damaged +Stop Signs +No Parking Signs +Sign Completely Out +Face Damage +Telephone +Door Will Not Open/Close +Buttons Not Working +Storm Damage +Other +Leak +Missing +Leaking +Damaged +Damaged +Missing +Leaking +Stuck +Making Noise +Repair +Inspection +Other +Not Cooling +No Water +Loose/Off Wall +Overflowing +Loose +Overflow +No Hot Water +Water Main Issue +Pipes Impacted +Pipe Frozen +Pipe Burst +Running +Overflow +No Hot Water +Loose +Odor +Water Meter +Water Meter +Water Meter +Running +Loose +Well +Septic Tank +Lift Station +Test +Repair +Will Not Go Up +Office +Exterior +Sewage Odor +Gas Leak +Stuck +Lights +Inspection +Communication +Wet +Stained +Damaged +Damaged +Automatic +Wet +Missing +Missing +Other +Carpet Tiles Missing +Other +Less Than 15 Tiles +15+ Tiles +False Alarm +Other +Overgrown +Striping +Replace +Winterize +Replace +Stop Signs +Replace +Receiving Door Lighting +Wiring +Wiring +Other +Will Not Open +Will Not Open +Will Not Close +Weather Stripping +Latch/Closer/Hinge Issue +Handle/Door Knob/Chime +Dragging +Door Slams +Door Frame Issue +Cart Guard +Broken Door +Will Not Go Up +Fairborn +Will Not Go Up +Will Not Come Down +Remove +Install New +Cannot Secure +Will Not Go Up +Other +Will Not Open +Tree Trimming/Landscaping +Roof Line/Fire Wall +Roof Line +Piping +Other +Metal Flashing +Interior Holes In Walls +Exterior Holes In Walls +Doorsweep +Ceiling Tiles/Insulation +Fire Sprinkler +Alarm Sensor - Other Door +Alarm Sensor - Receiving Doors +Alarm Sensor - Entrance Doors +4+ letters out +Need Cover +Shop +Other +Other +Common Area +Administrative +Gasket Repair/Replacement +Showroom/Sales/Finance +Wont Lock/Unlock +Floor +Fixtures +Making Noise +Repair +Refrigeration +Other +Roof Line +Office/Restrooms +Showroom/Sales/Finance +Administrative +Heating +Cooling issue +Replace +Showroom +Water Leaking +Lighting issue +Administrative +Cooling issue +Safeguard +Shelving +Other +Wont Lock/Unlock +Sink +Fan Not Working +Shop +Key Broken Off +Repair +Wont Lock/Unlock +Exterior Holes In Walls +Shop +Wont Lock/Unlock +Repair +Other +Icing Up +Repair +No Power +Shop +Roof Line/Fire Wall +Sign Partially Lit +Cooling Issue +Leaking +Administrative +Not Working +Administrative +No Product +Window Film +Shop +Warehouse +Shop +Warehouse +Cooling issue +Lighting issue +Other +Interior Holes In Walls +Poor Taste +Other +Showroom +Other +Alarm Sensor - Entrance Doors +Other +No Power +Paint +Key Broken Off +Showroom/Sales/Finance +Doorsweep +Administrative +Cleaning +Shelving +Fan Not Working +Showroom +Service +Fixtures +Office/Restrooms +Won't Turn On/Off +Showroom/Sales/Finance +Repair +Equipment +Beer System +Repair +Ceiling Tiles/Insulation +Handle +Showroom/Sales/Finance +Not Maintaining Temp +Parts +Drains +Showroom/Sales/Finance +Lighting issue +Door +Shut Down +Administrative +Belt Replacement +Equipment +Blinking +Broken +Other +Wont Lock/Unlock +Glass +Sink +Hinges/Latch Broken +Schedule Change +Other +Service +Face damage +Common Area +Cooling +Door +Repair +Repair +Service +Door +Unit Stolen +Parts +Too Hot +Thermostat Has Blank Display +Fixtures +Hatch +Warehouse +Glass +Walls +Replace +Service +Fire Sprinkler +Other +Water leaking +Plumbing +Safeguard +Clean +Glass +Office/Restrooms +Handle +Alarm Sensor - Other Door +Common Area +Lighting Issue +Piping +1-3 letters out +Add Fixture +Common Area +Alarm Sensor - Receiving Doors +Handle +Partitions +Door +Replace +Tree Trimming/Landscaping +Won't Turn On +Service +Sign completely out +Need Salt +Repair +Replace +Too Cold +Repair +Door +Metal Flashing +Cleaning +Wont Lock/Unlock +Wont Lock/Unlock +Will Not Open +Handle +Changing Station +Plumbing +Loose +Administrative +Common Area +Control Panel Not Working +Other +Not Working +Service +Water leaking +Glass +Scratched +Noisy +Off Tracks +Water leaking +Preventive Maintenance +Other +Ceiling +Loose +Common Area +Loading Dock/Lift +Replace +Repair +Other +Install +Customer Requested Survey +Customer Requested Survey +Customer Requested Survey +40 and over lamps out +1-40 lamps out +Water +"Replace Cord, Plug, Connection" +Replace Cord +Replace Cord +Pump +Treatment +New Install +Need Salt +Leaking +Broken +Shelving +Repair +Not Maintaining Temp +Icing Up +Hinges/Latch Broken +Gasket Repair/Replacement +Fan Not Working +Replace +Remove +Replace +Repair +Won't Turn On +Need Cover +Loose +Blinking +Add Fixture +Not Working +Not Moving +Chain Is Broken +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Replacement/New Install +Repair Required +Recharge +Preventive Maintenance +Leaking +Inspection +Replace +Not Maintaining Temp +Not Heating +Missing Knob +Leaking +Won't Turn On +Need Cover +Loose +Blinking +Add Fixture +Will Not Turn On +Will Not Heat Up +Replace +Repair +Remove +Overflowing +Backed Up/Clogged +Repair +Pumping +Water Leaking +Other +Lighting Issue +Handle +Glass +Door +Cooling Issue +Key Broken Off +Damaged +Visual Screen +Access Door +Replace +Repair +Power Switch +High Limit Switch +Heating Element +Controller +Contactor/Starter +Clean +Too Hot +Too Cold +Thermostat Or Knob +Repair Drawer +Not Holding Temp +No Power +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Replace +Remove +Prune/Trim/Cutback +Fertilize +Replace +Repair +Won't Turn On +Need Cover +Loose +Blinking +Add Fixture +Trash Receptacle +Tables +Replace +Repair +Picnic Table +Cigarette Receptacle +Chairs +Replace +Repair +Graffiti +Replace +Repair +Too Warm +Too Cold +Shelving +Not Maintaining Temp +Hinges/Latch +Glass Sratched/Cracked +Fan Not Working +Will Not Turn On +Will Not Spin/Move +Replace Cord +Not Working +Replace +Repair +Too Hot +Too Cold +Thermostat Or Knob +"Repair/Replace Cord, Plug, Connection" +Repair +Not Holding Temp +No Power +Replace +Repair +Missing +Won't Turn On +Poor Air Flow +Noisy +Air Balance +Not Working +Replace +Repair +Not Working +Running +Overflow +Other +No Hot Water +Loose +Leaking +Clogged +Other +Won't Lock/Unlock +Key Broken Off +Will Not Open +Will Not Close +Weather Stripping +Paint +Latch/Closer/Hinge Issue +Handle/Door Knob/Chime +Glass Guard +Dragging +Door Slams +Door Frame Issue +Broken Door +Damage From Fire/Water Pipe +Replace +Missing Parts +Leaking +Too Cold +Replace Breaker Strips +Replace +Repair Lids/Handles +Repair +Not Maintaining Temp/Refrigerated Rail +Not Maintaining Temp/Freezer +Icing Up +Gasket Repair/Replacement +Collars Repair Or Replace +Too Cold +Replace Breaker Strips +Replace +Repair Lids/Handles +Repair +Not Maintaining Temp +Leaking +Icing Up +Gasket Repair/Replacement +Collars Repair Or Replace +Scratched +Replace +Repair +Loose +Broken +Inspection +Discharge +Replaced +Leaking +Replaced +Leaking +Replace +Repair +Tables Tops And Bases +Stools +Podium +Dividers +Chairs +Booths +Will Not Turn On +Will Not Heat Up +Replace +Repair Switch +Repair +Replace +Repair +Won't Turn On +Won't Turn Off +Replace +Repair +Burning Odor +Too Cold +Replace Breaker Strips +Replace +Repair Lids/Handles +Repair +Not Maintaining Temp +Leaking +Icing Up +Gasket Repair/Replacement +Collars - Repair Or Replace +Will Not Turn On +Will Not Heat Up +"Replace Cord, Plug, Connection" +Repair Switch +Repair +Too Cold +Replace Breaker Strips +Replace +Repair Lids/Handles +Repair +Not Maintaining Temp +Icing Up +Collars Repair Or Replace +Will Not Turn On +Will Not Heat Up +"Replace Cord, Plug, Connection" +Repair Switch +Repair +Replace +Repair +Replace +Repair +Re-Grout +Replace +Repair +Repair +No Ventilation +Hood Not Functioning +Won't Turn On +Repair +No Ventilation +Fan Not Functioning +Won't Turn On +Repair +No Ventilation +Fan Not Functioning +Won't Turn On +Repair +No Ventilation +Fan Not Functioning +Won't Turn On +Repair +Poor Flow +Only One Side Works +Noisy +Need Filters +Fan Not Functioning +Leaking Condensation +Insulation +Falling From Ceiling +Damaged +Cut/Open +Replace +Repair +Not Working +Too Cold +Thermostat Or Knob +Repair +Not Holding Temp +No Power +Too Cold +Replace Breaker Strips +Replace +Repair Lids/Handles +Repair +Not Maintaining Temp +Icing Up +Collars Repair Or Replace +Drain Clogged +Replace +Paint +Loose/Falling Down +Dripping Water +Replace +Repair +Other +Replace +Repair +Stuck +Storm Damage +Repair (Please Identify Area In Notes) +Leaking +Replace +Repair Cord/Plug +Repair (Please Identify Area In Notes) +Not Maintaining Temp +Making Noise +Replace +Move +Add +Replace +Repair +Replace +Repair +Will Not Turn On +Will Not Heat Up +Replace +Not Working +Damaged Frame +Broken Glass +Repair +Not Maintaining Temp +Icing Up +Hinges/Latch +Gasket +Replace +Repair (Please Identify Area In Notes) +Not Working +Noisy +Clean +Replace +Repair +Will Not Turn On +Will Not Heat Up +Not Working +Won't Turn On +Need Cover +Loose +Blinking +Add Fixture +Won't Turn On +Will Not Heat Up +Missing Or Broken Parts (Describe In Notes) +Leaking Grease +Incorrect Temperature +Caught Fire +Calibration +Vandalized/Graffiti +Needs Repair +Installation Of New Window Shades +Falling Down +Broken/Not Working +Wobbly +Scratched +Loose +Broken +Repair +Loose +Broken +Replace +Repair +Replace +Repair +Won't Shut Off +Won't Come On +No Heat +Won't Turn On +Replace +Repair +Need Cover +Loose +Blinking +Add Fixture +Paint +Won't Lock/Unlock +Paint +Won't Lock/Unlock +Paint +Won't Lock/Unlock +Paint +Glass Guard +Won't Lock/Unlock +Key Broken Off +Paint +Won't Lock/Unlock +Paint +Glass Guard +Paint +Routine Maintenance +Routine Maintenance +Carpet Base +Routine Maintenance +Restricter Plates +Pumps +Discharge +Dining Room Floor +Jammed +Damaged +Menu Board +Hood Lights +Not Working +Restaurant Open Button Broken +Kitchen +Dining Room +Kitchen +Dining Room +Kitchen +Dining Room +Kitchen +Dining Room +Kitchen +Electric Baseboard Heaters +Dining Room +Kitchen +Dining Room +Sump Pump Not Working +Washer - Water Issue +Storm Damage +"Not Working, Broken or Damaged" +Broken or Damaged +Bale Pick-up +Pharmacy +Pharmacy +Sweep and Scrub +Other +Level 3 +Level 2 +Level 1 +Hand Watering +Tree Removal Needed +Treatment Needed +Treatment Needed +Trapping Needed +Other +Ice Maker Not Working +Damaged or Missing +App/IVR Fine +Walk Way +Security Lighting +Other +Other +Lighting Control System +Light/Bulb/Glove Below 20ft/6m +Light Covers/Grates +Fixture Repair/Maintenance +Exit Lights +Emergency Lights +Canopy/Wall Pack Lighting +Vehicle/Parking +Vehicle/Parking +Trash/Debris +Trash/Debris +Trash Can +Trash Can +Structural Issue +Structural Issue +Pool Issue +Pool Issue +Permit Issue +Permit Issue +Other Issues +Other Issues +Oil Stains +Oil Stains +Notice of Hearing +Notice of Hearing +Municipal Inspection +Municipal Inspection +Landscaping Service Needed/Weeds +Landscaping Service Needed/Weeds +Landscaping Enhancement Needed +Landscaping Enhancement Needed +Health & Safety Issue +Health & Safety Issue +Cosmetic Issue +Cosmetic Issue +Code Issue +Code Issue +Architectural Issue +Architectural Issue +Other +Other +Other +Xeriscape Damaged/Blown Away +Sump Pump Not Working +Phone Line +Other +Other +Grading/Swales - Flood Spots +Debris Coming Through Vents +Cracked/Damaged +Cracked/Damaged +"Sprinkler heads missing, leaking or broken" +Tree Removal +KU Infant & Toddler Carpets +Termites +Rattling Noise +No Light +Knob +Hinge +Ants +Installation +Not working +Stuck +Not working +New Install +Will not go up +Will not come down +Remove +Install new +Cannot secure +Other +Other +Other +Other +Other +Other +Handle/Door Knob/Chime +Cart guard +Handle/Door Knob/Chime +Rusting +Handle/Door Knob/Chime +Key broken off +Cannot alarm +Beeping +Handle/Door Knob/Chime +Glass +Cart guard +Handle/Door Knob/Chime +Glass +Handle/Door Knob/Chime +Glass +Cart guard +Override button broken +Pulling Up +"Not Working, Broken or Damaged" +Damaged +Clogged Gutters +Carpet Cleaning Needed +Windows Int And Ext +Windows Int +Windows Ext +Water Too Hot +Water Too Hot +Wall Packs Out +Wall Cleaning +Vent Cleaning +Treatment Room +Treatment Room +Treatment Room +Treatment Room +Treatment Room +Treatment Room +Tile Repair +Tile Repair +Strip And Wax +Storage +Storage +Storage +Storage +Storage +Showerhead/Handle Broken +Showerhead/Handle Broken +Sheet Metal +Sheet Metal +Sheet Metal +Sheet Metal +Running +Running +Replace +Replace +Replace +Repair +Rehang +Pressure Wash Sidewalk Only +Pressure Wash Gas Station Canopy +Pressure Wash Exterior Building +Pressure Wash Dumpster Area +Pm +Pm +Pm +Pm +Pm +Pm +Pm +Pm +Pm +Pm +Overflowing +Overflowing +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Office +Office +Office +Office +Office +Not Working +Not Working +Not Producing Ice +Not Draining +Not Draining +Not Draining +Not Draining +No Hot Water +No Hot Water +Move +Making Noise +Loose +Loose +Loading Dock Pressure Washing Service +Light Bulb Changing +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Kiosk +Kiosk +Kiosk +Kiosk +Kiosk +Installation +Install/Swap +Install Parts +Hot Jet Pm +High Dusting Service +Front Pressure Washing Service +Floor Drain +Emergency Water Extraction +Drain Service +Detail Clean And Disinfect Restroom +Damage +Cracked +Cracked +Clogged +Clogged +Cleaning Pm +Cleaning Pm +Cleaning Pm +Cleaning +Cleaning +Cleaning +Clean And Sanitize +Circulation Pump +Ceiling Tile Cleaning +Carpet Extraction +Board-Up +Winterize +Roof Mounted +Repair Damaged +Repair Damaged +Repair Damaged +Repair Damaged +Repair Damaged +Repair Damaged +Repair +Repair +Repair +Repair +Repair +Repair +Other +Other +Other +Other +Missing +Missing +Missing +Missing +Leaking +Hardware +Ground Mounted +Grid Repair +Damaged/Loose +Damaged +Damaged +Damaged +Damaged +Damaged +Building Mounted +Broken Pipe +Bolt +FS/IPM +Service IVR Fine +Other +Other +Unit Replacement +Odor +Lightstat +Front Salon +Front Salon +Front Salon +Front Salon +Front Salon +Front Salon +Found On Pm +Belt Replacement +Back Salon +Back Salon +Back Salon +Back Salon +Back Salon +Back Salon +Other +Other +"Not Working, Broken or Damaged" +Insulation +Deck Repair +"Damaged, Missing or Wet" +"Damaged, Missing or Wet" +more than 25 lights out +Will not open +Other +Will not go up +Other +Paint +Other +Post Hurricane Board-up +Handle/Door Knob +4 fixtures or more +Other +Paint +Remove +Other +Repair +3 fixtures or less +Handle/Door Knob +No Parking signs +Will not close +Damaged +Mold +Latch/Closer/Hinge issue +Will not close +Dragging +Post Hurricane Board-up +Cracked +Additional lighting requested +Paint +Outlet - new install +Carpet Tiles Missing +Other +Other +Weather stripping +Other +Schedule Change +1-5 lamps out +Install +Rekey +Door Frame Issue +Will not open +Grout +Other +Clogged +Other +Broken Door +Shattered +Wiring +Weather stripping +15+ tiles +Wiring +Pre Hurricane Board-up +Door slams +Will not open +Replace +Handicap signage +Other +Pre Hurricane Board-up +Will not close +Other +Door Frame Issue +Door Frame Issue +Handle/Door Knob +4 fixtures or more +Will not come down +Sensor +6-25 lamps out +Exit signs +Asbestos +Rekey +Store Open button broken +Other +Repair damaged +3 fixtures or less +Latch/Closer/Hinge issue +Key broken off +Other +Water leak +Dragging +Door slams +Rekey +Relocate +Missing +Broken Door +Handle/Door Knob +Other +No power +Will not close +Entire lot is out +Other +Remove +Door Frame Issue +Other +Will not go up +Key broken off +Outlets +Outlet - new install +Broken Door +Other +Door slams +Weather stripping +No power +Other +Dragging +Dragging +Other +Will not open +Hand dryers +Window Film +Clogged +Alarm not secure on door +Stop Signs +Other +Broken Door +Rekey +Clogged +Install +Other +Key broken off +Door slams +Other +Will not close +Other +Other +Other +Curb/Car/Wheel stop +Other +Install new +Broken Door +Survey +Outlet not working +Latch/Closer/Hinge issue +Water Leak +Receiving door lighting +Other +Inspection +Latch/Closer/Hinge issue +Bathroom fans +Beeping +Will not close +Other +Other +Emergency lighting +Dragging +Leaking +Repair +Shattered +Key broken off +Handle/Door Knob +Cannot alarm +Cracked +Door slams +Cannot secure +Polish +Tuck point +Cannot secure +Rekey +Weather stripping +Inspection +Key broken off +Will not open +Other +Water Leak +Less than 15 tiles +Other +Breakers/Panels +Other +Will not come down +Latch/Closer/Hinge issue +Broken Door +Door slams +Install new +Other +Other +Additional lighting requested +Dragging +Latch/Closer/Hinge issue +Handle/Door Knob +Window Film +Will not open +Door Frame Issue +Twist Timer broken +Key broken off +Other +Door Frame Issue +Power washing partial +Power washing full +Other +Other +Weed Removal +fountain maintenance +Other +Won't Turn Off +Will Not Flush/Backing Up +Weeds/Fertilization Needed +Water Damage +Vent Issue +Vandalism +Vandalism +Unable to Secure +Unable to Secure +Unable to Secure +Unable to Secure +Unable to Secure +Trees/Shrubs +Tree Trimming Needed +Timer Not Working +Storm Damage +Storm Damage +Sprinkler Issue +Spring Issue +Smoke Smell +Slow or Clogged Drain +Slow or Clogged Drain +Screen +Routine Service Needed +Routine Service Needed +Routine Service Needed +Rodents/Large Pests +Pulling Up +Programming Issue +Plaster Issue +Peeling Up/Separating +Peeling Paint +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +"Not Working, Broken or Damaged" +Not Heating/Working Properly +Not Heating +Not Cooling +Not Cooling +Not Closing +Not Cleaning Properly +"Missing, Broken or Damaged" +"Missing, Broken or Damaged" +Missing Slats +Missing Screen +Missing Remote +Making Noise +Maid Service Needed +Lost Keys +Lost Keys +Light Not Working +Lifting Concrete +Leaking Water/Broken Line +Leaking Water +Leaking Water +Leaking/Running Constantly +Leaking +Knob or Hinge +Interior Leaking/Water Spots +Hole +Grout Issue +Grout Issue +Grass/Lawn +Gas Smell +Gas Smell +Gas Smell +Gas Smell +Gas Smell +Freezer Not Working +Framing +Floor Paint Cracking or Peeling +Flooding/Water Damage +Flooding/Water Damage +Falling off Wall +Exposed Wiring +Dryer Vent +Discoloration +Damaged/Torn +Damaged +Damaged +Cracking or Peeling +Cracking or Peeling +Cracking or Peeling +"Cracked, Broken or Damaged" +Cracked Tile +Cracked Tile +Cracked or Peeling +Cracked or Peeling +Clogged Gutters +Chimney Sweep Needed +Carpet Cleaning Needed +"Broken, Torn or Damaged" +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken or Damaged +Broken Glass +Broken/Leaky Pipe or Faucet +Broken/Leaky Pipe or Faucet +Breaker +Beeping +Ants/Termites +RLMB +"sweep, mop and buff with all carpets" +Wet/Stained +Wet/Stained +Wet/Stained +Vestibule +Vestibule +Vestibule +Vestibule +Vendor Meet +Stripping +Store Closing +Signage +Sensor Survey +Sensor +Sales Floor +Sales Floor +Sales Floor +Sales Floor +Sales Floor +Sales Floor +Restroom Sanitization +Rebate +Portable restrooms +Filter Change +Patching +Outlet/Power to Registers +Outlet/Power to CPD +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Novar +No Power to Sensormatic +No Power to Doors +Missing/Damaged +Missing/Broken +Missing/Broken +Missing Grates +Line jetting +Lights out +Lights out +Latch/Closer/Hinge issue +Landlord Access +Install new +Install new +Handle/Door Knob +Gas odor +Gas Odor +Garbage Clean Up +Fire Alarm +Condensate Drain Line Repair +Communication Loss +Coils Stolen +Coil Cleaning +Carpet Tiles +Camera line +Backroom +Backroom +Backroom +Backroom +Backroom +Backroom +Approved Repair +Approved Move/Add/Change +Plant Fertilization Service +PH Amendment +Storm Water Drain Service +Rain Garden Plant Maintenance +Rain Garden Mulch Service +Annual Flower Rotation +Tree Fertilization Service +Soil Nutrient Test +Overseeding Service +No Power +Replacement +Cleaning +New Installation +Replacement +Shut Down +Preventative Maintenance +Other +Other +Energy Management System (EMS) +Energy Management System (EMS) +Cleaning +Repair +Repair +Energy Management System (EMS) +Cleaning +Repair +New Installation +Conveyor not turning +Foaming +Preventative Maintenance +Replacement +Not Heating +New Installation +Preventative Maintenance +Water leaking +Other +Water leaking +Lighting issue +Water leaking +Door +Glass +Handle +Lighting issue +Handle +Door +Water leaking +Lighting issue +Handle +Lighting issue +Door +Glass +Glass +Handle +Glass +Door +Other +Other +Other +Outdoor Furniture +Furniture +Flooring +Cooling issue +Shut Down +Other +Not tilting +Not heating +No Power +Shut Down +Poor Taste +Other +No Product +No Power +Too much smoke in restaurant +Shut Down +Other +Not smoking +Not heating +No Power +Intermittent heating +Doors Broken +Shut Down +Other +No Power +Adjustment Knob Problem +Sneeze Guard Broken +Other +Not Cooling +No Power +Shut Down +Other +Not Heating +No Power +Cooling issue +Shut Down +Other +Not cooling +No power +Shut Down +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Shut Down +Paddle won't spin +No Power +Touch pad not working +Shut Down +Other +Not Heating +No Power +Cooling issue +Cooling issue +Shut Down +Other +Not Heating +No Power +Shut Down +Other +Not Heating +Shut Down +Other +Not Heating +No Power +Leaking +Cleaning System/Filter +Shut Down +Other +Not working +Shut Down +Other +Not keeping product hot +Not keeping coffee hot +No Power +Shut Down +Other +Not cleaning +Shut Down +Other +Not cleaning +Shut Down +Other +Not Heating +No Power +No Humidification +Door/Handle Issue +Control Panel Not Working +Shut Down +Other +Not Heating +No Power +Door/Handle Issue +Control Panel Not Working +Shut Down +Other +Not Heating +No Power +Conveyor not turning +Shut Down +Other +Not keeping product hot +No Power +Shut Down +Poor Taste +Other +No Product +No Power +Parking lot Striping Compliance +Window Monthly +Detail Clean and Disinfect Restroom +Burnish Service +Restroom Cleaning (Annual) +Janitorial and Floor Services (Winter) +Janitorial and Floor Services (Winter) +Janitorial and Floor Services (Winter) +Janitorial and Floor Services (Winter) +Janitorial and Floor Services (Winter) +Janitorial and Floor Services (Regular) +Janitorial and Floor Services (Regular) +Janitorial and Floor Services (Regular) +Janitorial and Floor Services (Regular) +Super Clean +Project Daily +Emergency Water Extractions +Graffiti +Kitchen +Water leak +Water leak +Water leak +Water Heater +Water Heater +Water Damage +Water Cloudy +Vandalism +Vandalism +Vandalism +Vandalism +Vandalism +Unlock +Unlock +Unlock +Unlock +Tub +Tub +Trouble Alarm +Treat Area +Treat Area +Treat Area +Treat Area +Treat Area +Treat Area +Treat Area +Treat Area +Trap and Remove Animal +Tile +Tile +Temporary Units +Temporary Units +Temporary Units +Temporary Units +Stairs +Stairs +Stained +Stained +Stained +Stained +Stained +Stained +Stained +Sprinkler +Sprinkler +Spray Perimeter +Spray Perimeter +Spray Perimeter +Spray Perimeter +Spray Perimeter +Spray Perimeter +Spray Perimeter +Skimmer Baskets +Sink +Sink +Shower +Shower +Shepards Hook +Sales Center +Sales Center +Sales Center +Sales Center +Running Poorly +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Routine Maintenance +Resurface +Resurface +Resurface +Resurface +Resurface +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Replace +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repaint +Repaint +Repaint +Repaint +Repaint +Remove +Remove +Remove +Remove +Refrigerator Line +Refrigerator Line +Refinish +Refinish +Refinish +Refinish +Refinish +Refinish +Reattach +Reattach +Reattach +Reattach +Reattach +Pump +Pump +Powerwash +Place Trap +Place Trap +Place Trap +Place Trap +Place Trap +Place Trap +Place Trap +Place Trap +Place Trap +PH Too Low +PH Too High +Patch/Repair +Patch/Repair +Patch/Repair +Patch/Repair +Patch/Repair +Patch/Repair +Patch/Repair +Other water chemistry Issue +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Operating erratically +Not Running +Not moving +Not heating +Not heating +Not heating +Not heating +Not cooling +Not cooling +Not cooling +Not cooling +Not cooling +Noisy +Noisy +Noisy +Noisy +No Airflow +No Airflow +No Airflow +No Airflow +New +New +New +New +New +New +New +Move/Relocate +Missing/Broken Parts +Making noise +Making Noise +Making Noise +Making Noise +Making Noise +Maintenance Building +Maintenance Building +Maintenance Building +Maintenance Building +Lock +Lock +Lock +Lock +Liner +Liner +Life Ring +Ladder +Ladder +In Wall +In Wall +Housekeeping Building +Housekeeping Building +Housekeeping Building +Housekeeping Building +Hinges +Hinges +Hinges +Hinges +Heater +Heater +Guest Building +Guest Building +Guest Building +Guest Building +Garbage Disposal +Garbage Disposal +Floor drain +Floor drain +Filter +Filter +Fencing +Fencing +EMS +EMS +EMS +EMS +Eliminate Breeding Conditions +Eliminate Breeding Conditions +Eliminate Breeding Conditions +Eliminate Breeding Conditions +Drain +Drain +Dispose of +Dishwasher +Dishwasher +Discard +Discard +Discard +Discard +Discard +Discard +Discard +Discard +Discard +Discard +Discard +Device Failed +Deck +Deck +Cupped/Buckled +Coping +Coping +Common Area +Common Area +Common Area +Common Area +Chlorine Too low +Chlorine Too High +Chemical Management System +Capture Pest +Capture Pest +Capture Pest +Capture Pest +Capture Pest +Broken +Broken +Broken +Broken +Activities Building +Activities Building +Activities Building +Activities Building +Refresh Service (Front SR and back SMB) +Floor Care Monthly +Carpet extraction N +Janitorial Service Monthly +Half Strip and Wax +Bathroom fans +Hand dryers +Sewage odor +Gas leak +Tree Trimming/Landscaping +Roof Line/Fire Wall +Handle/Door Knob/Chime +Handle/Door Knob/Chime +Handle/Door Knob/Chime +Handle/Door Knob/Chime +Handle/Door Knob/Chime +Handle/Door Knob/Chime +Fix power +Door Frame Issue +Door Frame Issue +Door Frame Issue +Door Frame Issue +Door Frame Issue +Door Frame Issue +Ceiling Tiles/Insulation +Broken Door +Broken Door +Broken Door +Broken Door +Broken Door +Broken Door +Other +Broken planks +Buckled +Repair Damaged +Other +Carpet Tiles Missing +Repair damaged +Other +15+ tiles +Less than 15 tiles +Other +Fill large cracks +Repair damaged +Lift Station +Well +Septic Tank +Winterize +Wet +Wet +Wet +Water +Stuck +Striping +Stop Signs +Stained +Stained +Stained +Spring Startup +Sign poles +Severe cracks +Sand Bag +Sales floor +Running +Roof Line +Roof +Roof +Roof +Rodent prevention +Reprogram +Replace +Replace +Replace +Replace +Replace +Repair +Repair +Repair +Repair +Repair +Ramp +Potholes +Piping +Parking lot poles +Painted +Paint (graffiti) +Paint (graffiti) +Paint (graffiti) +Paint +Paint +Overgrown +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Office +No Parking signs +Missing +Metal Flashing +Manual +Lights +Leak +Leak +Interior holes in walls +Install Power +Install +Install +Install +Install +Install +Inspection +Hurricane Boards Down +Hurricane Board Up +Handicap signage +Fence +Fence +Fence +Exterior holes in walls +Exterior +Other +Dumpster Pad +Dumpster +Dumpster +Dumpster +Drainage problem +Doorsweep +Doors/Gates +Door +Door +Door +Damaged +Damaged +Damaged +Damaged +Curb/Car/Wheel stop +Cracked +Complaint +Communication +Building structure +Building structure +Building structure +Bollard +Bollard +Bollard +Automatic +ADA Compliance +Wiring +Wiring +Will not open +Will not open +Will not open +Will not open +Will not open +Will not open +Will not go up +Will not go up +Will not come down +Will not come down +Will not close +Will not close +Will not close +Will not close +Will not close +Will not close +Weather stripping +Weather stripping +Weather stripping +Weather stripping +Water meter +Water main issue +Water Leak +Water Leak +Twist Timer broken +Trouble +Test +Termites +Storm Damage +Store Open button broken +Stop Signs +Spiders +Snakes +Sign completely out +Sign completely out +Sign completely out +Shattered +Shattered +Sensor +Scorpions +Schedule Change +Rusting +Running +Running +Running +Running +Running +Roaches +Repair required +Repair +Remove +Remove +Recharge +Receiving door lighting +Rats - severe +Rats - moderate +Rats - mild +Pre Hurricane Board-up +Pre Hurricane Board-up +Post Hurricane Board-up +Post Hurricane Board-up +Other +Pipes impacted +Pipe frozen +Pipe burst +Phone line install +Partially out +Partially out +Panel issue +Overflowing +Overflow +Overflow +Overflow +Overflow +Outlets +Outlet/Power to register +Outlet other +Outlet/Power to office +Outlet - new install +Outlet - new install +Other inspection +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Other +Odor +Not cooling +No water/Off +No water +No power +No power +No Parking signs +No hot water +No hot water +No hot water +New Install +10 and over lamps out +Missing +Missing +Minor Leak +Mice - severe +Mice - moderate +Mice - mild +Major leak +Loose/off wall +Loose +Loose +Loose +Loose +Lizards +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Leaking +Leak +Key broken off +Window Film +Window Film +Install new +Install new +Install +Install +Install +Inspection required +Inspection +Latch/Closer/Hinge issue +Latch/Closer/Hinge issue +Latch/Closer/Hinge issue +Latch/Closer/Hinge issue +Latch/Closer/Hinge issue +Latch/Closer/Hinge issue +Handicap signage +Glass +Glass +Glass +Frozen +Flying Insects +Fire sprinkler +Fire alarm +False alarm +Face damage +Face damage +Face damage +Exit signs +Entire lot is out +Emergency lighting +Dragging +Dragging +Dragging +Dragging +Dragging +Dragging +Door slams +Door slams +Door slams +Door slams +Door slams +Door slams +Damaged poles +Damaged pipes +Damaged +Damaged +Crickets +Cracked +Cracked +Cracked +Clogged +Clogged +Clogged +Clogged +Cart guard +Cart guard +Cart guard +Cannot secure +Cannot secure +Cannot alarm +Breakers/Panels +Birds +Beeping +Bats +Ants +Annual inspection +Alarm not secure on door +Additional lighting requested +Additional lighting requested +4+ letters out +4 fixtures or more +4 fixtures or more +3 fixtures or less +3 fixtures or less +1-9 lamps out +1-3 letters out +Water leaking +Water leaking +Other +Other +Lighting issue +Lighting issue +Other +Other +Handle +Handle +Glass +Glass +Door +Door +Cooling issue +Cooling issue +Other +Other +Damaged +New Install +Other +Schedule Change +Cooling +Heating +Entire area +Survey +PM/Clean units +Office area +Stockroom +Sales +Not certain +Unit damaged +Unit stolen +All +Office area +Stockroom +Sales +All +Office area +Stockroom +Sales +All +Office area +Stockroom +Sales +All +Office area +Stockroom +Sales +All +Office area +Stockroom +Sales +Fastbreak Night 2 ALT +Dethatching +5.2 Strip Service +Janitorial Service 2X +Additional Wax +Additional Strip +Other +Strip Complete Exec20 +Strip Complete Exec +Supplies +STRIP CL +SCRUB AW +STRIP RM +STRIP DS +STRIP EX +Relocation +New Store +Buff Complete +Scrub Complete +Strip Complete +Porter Service +"Construction Sweep, Scrub, and Buff" +RLHDR +Windows Ext +Windows +Wood Cleaning Service +Detail Baseboards Expense Code: 294 +White Board Cleaning +Vent Cleaning by service +Spot strip (SPOT) +Restroom fixture installs +Power Washing (Floor Care) +Pre Scrape +Pre Scrape (PO) +Full Strip and Wax (PO) +Front of store Strip and Wax (PO) +Deep Scrub and Recoat (PO) +Half Strip and Wax (PO) +NO Show Denied +No Show Credit +No Show +Full Strip and Wax +Front of Store Strip and Wax +Deep Scrub and Recoat +Chemicals +BJ's Wholesale Time and Material Rate per hr +BTC - Trip Charge +BJ's Wholesale Strip and Wax - Night 2 +BJ's Wholesale Strip and Wax - Night 1 +Loading Dock Pressure Washing Service - Night 2 +Loading Dock Pressure Washing Service - Night 1 +High Dusting Service - Night 2 +High Dusting Service - Night 1 +Front Pressure Washing Service - Night 2 +Front Pressure Washing Service - Night 1 +Ceiling Tile Service - Night 2 +Ceiling Tile Service - Night 1 +Strip and Wax bill to Construction +Adjustment +Spray Wax and Buff +Janitorial Service +New Store Scrub and Recoat +Spot Strip (SS) +Fastbreak Night 2 +Concrete service for New store billed to Construction +Windows Int and Ext +Strip and Wax has exception +Scrub and Recoat +Strip and Wax +TR - Trip Charge +Store not prepared for service +Restroom Cleaning +Fuel Surcharge +FD Supplied Strip and Wax +"Sweep, scrub, and buff" +Strip and Wax OFF Service +Concrete Floors +Extra Labor due to poor floor condition +Carpet Cleaning/Extraction +Scrub And Recoat has exception +Sweep Mop and Buff has exception +Service Fine +"S1 - Plow, Shovel, deice the parking lot, sidewalk & loading dock" +Light debris removal +Powerwashing +Fall Cleanup +Other +Parking Lot Striping Monthly +Parking Lot Sweeping Monthly +Recurring Landscape Maintenance Monthly +Parking Lot Striping +Spring Cleanup +Parking Lot Sweeping +Parking Lot Repair +Additional Tree Trimming +Additional Mulching Service +Irrigation Repair Service +Large Debris Removal +Integrated Pest Management +Irrigation Head Replacement +Retention/Detention Pond Service +Rough Turf Areas/Field Service +Plant Replacement Service +Core Aeration +Fertilization Service +Irrigation Audit +Irrigation Shut Down +Irrigation Start Up +Mulch Service +Recurring Landscape Maintenance diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceType.Name.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceType.Name.csv new file mode 100644 index 000000000..c2e3ec704 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_ServiceType.Name.csv @@ -0,0 +1,1788 @@ +Emergency Receiving Heater +Parts/Material +Visual Merchandising +Closet +Home Prep +Wall Fixture +Assembly +Clean +Inspect +Clean +Condition Assessment +Lessen360 Fees +Parts/Material +Parts/Material +Parts/Material +Lockbox +SaaS Fees +Medical Equipment +Owned Storage Unit +Asset Replacement +Roof +Pool/Spa +Plumbing +Pest Control +Paint +Masonry/Fencing +Landscaping/Irrigation +Inspections +General Maintenance +Garage Door +Foundation +Flooring +Fireplace/Chimney +Fencing/Gates +Electrical +Janitorial +Appliances +Air Conditioning/Heating +Roof +Pool/Spa +Plumbing +Pest Control +Paint +Masonry/Fencing +Landscaping/Irrigation +Inspections +General Maintenance +Garage Door +Structural +Flooring +Fireplace/Chimney +Fencing/Gates +Electrical +Janitorial +Appliances +Air Conditioning/Heating +Management Fee +Cellular Fee +Sensor +General Construction +ATM Project +Storage +Clinic Mail +Badges +Showcase +Showcase +Transport +Other +Projects +Deficiency/Repair +Drawer  +Repair +Repaint +Remove +Install/Replace +Fees +Clean +Install/Replace +Fees +Repair +Remove +Install/Replace +Fees +Clean +Repair +Repaint +Remove +Install/Replace +Inspect +Fees +Clean +Fees +Repair +Fees +Fees +Fees +Inspect +Fees +Remove +Fees +Fees +Repair +Fees +Front TV Display (DFW) +Unit +Unit +Date of Batch +Standard +Air Compressor +Anti Fatigue Mat +Digital Displays +Bird Habitat +Small Animal Habitat +Reptile Habitat +Betta Endcap +ATM Preventative Maintenance +Vacant Building +Janitorial +Floor Cleaning +Water Extraction +Piercing Equipment +Overflowing +Clean +Clean +Clean +Fees +Fees +Inspect +Inspect +Inspect +Inspect +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Install/Replace +Remove +Remove +Remove +Remove +Remove +Remove +Remove +Repaint +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Repair +Water Meter +Siding +Floor Care +Yehuda Diamond Detection Device +Henny Penny Pressure Fryer +Henny Penny SmartHold Holding Cabinet +Henny Penny Heated Holding Cabinet +Henny Penny Countertop Holding Cabinet +Grease Interceptor +Credit +Vacant Building +Move In/Out Inspection +Facility Management Visit +Plumbing +Kaba Lock +Temp Units +Move Out Inspection +Dock Levelers +Railings +Concrete +Permavault +Inspection +Video Doorbell +Survey Test +Produce Mister +IT Support +New Equipment Install +Dock Doors +Forklift +Industrial Fan +Survey +Dishwasher +Refrigerator +Eyecare Instruments +Well System +Sound Batting +FOM +Drive Thru +Junk Removal +Mini-Split +Parts/Materials +Waste Water Treatment +Broken +Environmental +COVID-19 +Pest Prevention +Unplanned Projects +Evac Station +Appliance Replacement +Replace +Repaint +Billing +Backflow +Preventative Maintenance +COVID-19 +Other +Interior Signage +Banners and Marketing +Exterior Signage +COVID-19 +Termite Prevention +Security Gate +Disinfection +Replace +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Evaluation +Doorbell +Door Lock +Hub +ADA Compliance +Handrail +Assess +Crispy Max +Landscape +Snow +Cash Safe +Phone Safe +Water Filtration +Bike Rack +Monthly Consumables Shipment +Day Porter +Additional Cleaning Services +Contracted Routine Services +Inspect +Inspect +Inspect +Inspect +Inspect +Summary +Repair +Remove +Repaint +Replace +Repair +Repaint +Replace +Repair +Remove +Repaint +Replace +Repair +Repair +Repaint +Repair +Remove +Repaint +Replace +Repair +Replace +Repair +Remove +Repaint +Replace +Repair +Replace +Repair +Repaint +Repair +Remove +Repaint +Replace +Repair +Repair +Remove +Replace +Repair +Remove +Repaint +Replace +Repair +Remove +Repaint +Replace +Repair +Repair +Remove +Repaint +Replace +Repair +Remove +Repaint +Replace +Repair +Repaint +Remove +Replace +Repair +Alarm system +GOI Beverage Coolers +Grab and Go +Beer Case +Three Door Beer Cooler +Egg Cases +Spot Boxes +Meat Walk In +Produce Walk In +Dairy/Deli Walk In +Deli Walk In +Dairy Walk In +Produce Case +Frozen Reach In +Frozen Coffin/Bunker +Deli Case +Meat Case +Salad Case +Produce Wet Rack +Kitty Cottage/Kennel +Kennel/Atrium +Pinnacle Unit +Gas Leak +Pallet Enclosure +Radon Mitigation +Soft Serve Machine +LED Interior Repair +LED Canopy Lighting +LED +Smash and Grab +Ultrasonic Machine +Steamer +Gem Scope +Fixture Installation +Towers +Towers +Showcase +Gates/Roll Doors +Spinners +Showcase +Posts +Payment +Shower Hose Bib +Ejector Pump +Retail Fixture +Railings +Lockers +Hand Edger +Edger Vacuum +Edger +Blocker +Tracer +Printer +Singularity +Line Dryer +Compressor +Oven +Coater +Chiller - Cylinders +Cylinder Machine +SGX +Eclipse Chiller +Eclipse +Warranty Fee +Leer Ice +Parts/Material +Alto Shaam Oven +Micromatic Dispenser +Electrical Survey +Wall Insulation +Recurring Maintenance +Post Move-in +Resident Orientation +Parts/Material +Parts/Material +Parts/Material +Sensor +Main controller +Lighting controller +RTU Controller +Violation/Fine +Project +Calibration +Water Filtration +Baking Oven +Soft Serve Machine +Hardening Cabinet +Blended Ice Machine +Quarterly +Tri-Annual +Annual +Hot Well - Cash Side +Hot Well - Office Side +Reach In Line 2 - Cash Stand +Reach In Line 1 - Office +Ware Washer +Bread Oven +Single Belt Toaster +Dual Belt Toaster +Multi-Hopper Sugar Machine +Sugar Machine +Dairy Machine +High Speed Oven +Hot Chocolate/Dunkaccino +Booster/RO Repair +High Volume Brewer +Iced Coffee Brewer +Coffee Grinder +Booster Heater +Keys +Storage Freezer +Meatwell Freezer +French Fry Freezer +Expeditor Station +Deli Cooler +Crescor Unit +Cooler +Wrap Station +Stove +Front Service Counter +Drive Thru Package Station +Display Glass +Headset System +Contracted Services +Miscellaneous Fee +Organics Container +Organics Pick-Up +Notification +Tilt Kettle +Other +Impact Doors +Exterior Violation +Building Violation +Stock Pot Stove +General +Dough Divider +Drive Thru +Vault +ATM - Signage of Vestibule +ATM - Signage of Unit +Credit +Preventative Maintenance +Signage Interior +Signage Exterior +ATM - Locks & Keys +ATM - Site Condition - Exterior +ATM - Presentation of Unit +ATM - Functionality of Unit +ATM - Site Condition - Interior +Emergency Services +Health & Safety +Kitchen Equipment +Fire Prevention +Recovery +Inspections +Site Hardening +Landlord Fee +Management Fee +Semi-Annual +Quarterly Service +Monthly Billing +Weekly Service +Daily Service +Emergency Access +Preventive Maintenance +Waste Pickup Fee +Exhaust Fan +Preventative Maintenance +Manual Transfer Switch +Automatic Transfer Switch +Alarm Bar +Storefront Tile +Metal Maintenance +Parking Services +ADA Chair Lift +Monitoring +Preventative Maintenance/Inspection +Pest Prevention +Backflow Preventer +Preventative Maintenance +Gas Booster +Emergency Lighting +Spinners +Showcase +Alarm Bar +EMS +Awning +Roof +Stove Top +Beer Bin +Plate Chiller/Freezer +Supply Line +Apron Sink +Survey +Cleaning +Stand Alone ATM Interior +Stand Alone ATM Exterior +Stand Alone ATM Unit Appearance +Stand Alone ATM Locks & Keys +Stand Alone ATM Functionality +Other +EMS Override +Blade +Exterior +Name Plate Install +People +Furniture +Equipment +Boxes / Crates +Art Work +Human Resources +Accounting +Environmental +Project - Unplanned +Project - Retail Projects +Project - Planned +Project - LOB Unplanned +Project - LOB Planned +Escort +Guard +Video Conferencing +Booking/Scheduling +A/V Equipment +Vaults +Teller Drawer +Safe Deposit Box +Safe +Night Drop +Digilock +Cleaning +ATM Unit Appearance +ATM Locks & Keys +ATM Interior +ATM Functionality +ATM Exterior +Secure Shred +Records Storage +Office Supplies +Office Equipment +Mail Delivery +Furniture +Courier +Coffee Services +Bottled Water +Background Music +Security Equipment +Knox Box +Furniture +Pharmacy Roll Door +High Electric Bill +Revolving Door +Sanitary Dispenser +Request New +Garbage Disposal +Cleaning +Supplies +Coffee/Tea Brewer +Shutters +Utility Notification - Miscellaneous +Utility Notification - Account Setup +Utility Notification - Account Closure +Interior Plants +Hang Items +Store closure +Utility +High Gas Bill +Handicap Signs +Security Services +Cook Line Reach In Cooler +Freshness Cooler +Big Dipper +Clamshell +Roll Gates +Ceiling Fan +Ceiling Fan +Roof Sign +Parapet Beams +Wood Beams +Display Pie Case +Cut Pie Case +Open Burners/Egg Burners +Drawer Warmer/Roll Warmer +Cabinet - Pretest Room Cabinet +Cabinet - Dr. Exam Desk w/Sink +Cabinet - Dr. Exam Upper Cabinet +Cabinet - Contact Lens Back Counter +Cabinet - Selling Station +Cabinet - Understock Mirror Cabinet +Cabinet - Understock Cabinet +Cabinet - Credenza +Cabinet - Cashwrap +Drawer - Dr. Exam Desk +Drawer - Contact Lens Table w/sink +Drawer - Contact Lens Back Counter +Drawer - Understock Cabinet +Drawer - Sit Down/Stand Up Dispense +Drawer - Credenza +Drawer - Selling Station +Drawer - Cashwrap +Cashwrap +Eye care display +Eye care wall station +Promotional signs +Windows Interior +Windows Exterior +Smoke Alarm +Storage Room Doors +Exterior Doors +XOM Mystery Shops +Wiring +Water Treatment +Water Leak +Water Filters +Wash +Verifone +VCR +Utility +USE Repairs +Underground Gas +Truck Stop Scale +Truck Stop Air/Water/VAC +Tank - Warning +Tank - Alarm +System - Warning +System - Alarm +Survey +Structure +Store Front Sign +Steamer +Splitter +Simmons Box +Sensor +Security System Relocation +Security System +Retail Automation +Remove/Relocate Equipment +Register +Proofer +Project +POS/Nucleus/Passport/Ruby +POS +POS +Pole Sign +Pit +Partial Power Outage +Panic Device +Outlet +Out of Gasoline +Other +Open Air Case +Monitor +Money Order Machine +Money Counter +Menu Board +Lottery Machine +Line - Warning +Line - Periodic +Line - LLD +Line - Gross +Line - Annual +Line - Alarm +Lighting +Kiosk +Iced Coffee/Tea Machine +Hot Coffee Machine +HES Work +Healy - Warning +Healy - Alarm +Gasoline Equipment +Gas Tank Monitor - VR +Gas Tank Monitor +Gas Pumps/Equip/Other +Gas Pumps/Equip/Dispensing +Gas Island +Gas Hazard/Clean-Up +Gas Canopy Damage +Gas Accessories +Fuel +Frozen Carbonated Beverage Machine +Freestyle Unit +Fountain Dispenser +Food Equipment +Exterior Fire Extinguisher +Espresso +Equipment +Environmental Testing +EMS +Dryer +Disputes +Discretionary/Market Charge +Cup Holders +Credit/Debit/EBT +Creamer +Counter Top +Copier +Construction +Compressor +CO2 Monitor +Chemicals +Cappuccino +Canopy Signage +Bullock Interface +Brushes/Sprayer +Breaker +BIR +Beverage Equipment +Bay +Back Office +AQIP +"Applications, Software and Portal" +Air/Water/VAC +A- Inspection Notices +Paper Shredding Services +New Equipment Install +New Equipment Install +New Equipment Install +New Equipment Install +UChange Locks +Fitting Room Doors +Fitting Room Doors +Soap Dispenser +Vacuum +Garment Steamer +Food Truck +Not Working +Self - Serve +Carousel +Expansion Joints +Smoke Evacuation +Parking Deck +Cooling Tower +Split Systems +Taco Bar +Range +Steam Table +Indoor Playground Equipment +Combi Oven R/O +EMS +Powerwashing +Parking Lot Sweeping +Debris Removal +Other +Entry Gates +Overhead Doors +Other +Procare +Pool Deck +Tub/Tub Surround/Shower Surface +Glass Enclosure/Shower Door +Water Intrusion +Structural +Interior - Trim/Baseboard +Discoloration +Bath Accessories +Washer +Wall Oven +Natural Disaster +CO Detector +Vents +VI Monitor +Bullet Resistent Enclosure +Door +Video Loss Pump +Burglar Alarm +Devices +System Down +DVR +7-Eleven Parts +Access Control System +Pressure Washer +Deionized Water System +Fire Door +Water Treatment +Humidification System +Building Automation +Boilers +Scales +Expo Line Cold Rail +Bar Refrigerator +Ice Bin/Ice Chest +Bar Ice Cream Freezer +Glass Chiller +Bottle Chiller +Cold Well +Back Door +Steamer +Hot Well +Oven/Range +Bag Sealer +Warming Drawer +CharBroiler +Wallpaper +Wine Dispenser +Space Heater +Security Cage Door +Dumpster Gate/Door +Fire Exit Door +To Go Door +Back Door +Mechanical Room +Informational Only +Reach In Freezer +Handwash Sink +Woodstone Oven +Floor Mixer +Point Central +RTU - New Unit +Produce Mister +WIC Upgrades +UST +Testing Repairs +Sump Inspection +Stand Alone +Sales Tour +Retest +Rest PM +Rapid Eye Cameras +Quality Assurance +Pre-Inspection +Power Washing +Phone Lines +Payspot +Passbox +Other +Notice Of Violation +Not Working/Broken/Damaged +New Equipment +Leak Detection +Kiosk +Inventory Variance +Inspection +Hot Dispenser +Heater +Hanging Hardware Replacement +Gas TV +Fore PM +EPOS +Electronic Safes +Divestment +Dispenser Calibration +Dispenser +Digital Media +Diamond Sign Relamp +Construction Walk-Thru +Cold Dispenser +Ceiling Inspection +Card Processing Network +Canopy Sealing +BOS +Bathroom Upgrades +Back PM +Automated Inventory Reconciliation +ATM +ATG +Alternative Fuels CNG +Alternative Fuels +Equipment +Electric Strikes +Exterior Lighting +Repairs +Building Cabinets +Bulk Ice Freezer +Temperature Taker +Tablet +Sales Floor +Prep & Temp +ITD Printer +Equipment +Walls +Ceiling +Exterior Structure +Inspection +Built In Safe +Floor +Price Sign +Preventative Maintenance +General Plumbing +Emergency +Critical +Turn Assignment +IT Equipment +PA/Music System +Fixture +Kiosk +Registers +Time Clock +Open Top Containers +Storage Containers +Other +Mold Testing +Barriers and Asset Protection +Wall Paneling +Walk Off Mats +Fire Riser +Roof Ladder +Roof Hatch +Recessed Floor Sink +Inspection +Parts Washer +Vending +Uniforms +Shipping +Safety Equipment +Rags +Interior Plants +Fire Extinguisher Cabinet +Fire Pump House +Pit +Paint Booth Cabin +Motor +Light Fixture +Filters +Fan +Ductwork +Doors +Controls +Burner Issue +Belts +Bearings +Airflow +Safe +Floor Mat +Water System +Popcorn Machine +Coffee Maker +Handyman +Asset Tagging +Picker Lift +Hi-Low Lift +Crane/Hoist +Chiller +Storm damage +Delivery truck impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Storm damage +Delivery truck impact +Car impact +Automatic Doors +Exterior Doors +Cage Door +To-Go Doors +Accent Border Lighting +Salsa/Chip Cooler +Salsa Cooler +Ice Cream Freezer +Staging Cooler +Dressing Cooler +Lettuce Crisper/Cooler +Reach Ins - Pre-Impinger Protein Cooler +Reach Ins - Flat Top Drawer Cooler +Reach Ins - Zone 3 Dessert Cooler +Reach Ins - Zone 3 Sald Nacho Cooler +Reach Ins - Zone 3 Staging Cooler +Reach Ins - Zone 3 Cooler +Reach Ins - Zone 2 Staging Cooler +Reach Ins - Zone 2 Expo Cooler +Reach Ins - Zone 1 Cooler +Reach Ins - Fry Station Freezer +Reach Ins - Fry Batter Station Right +Reach Ins - Fry Batter Station Left +Patio Mister System +Pest Repair/Prevention +Combi/Convection Oven +Tortilla Grill/Press +Chip Warmer Cabinet +Bun Toaster +Heat Lamps +Instatherm/Cheese Melter +ACT Holding Bin +Kitchen Hoods - Other +Kitchen Hoods - Prep +Kitchen Hoods - Fry +Kitchen Hoods - Main +Conveyor Fed Impinger Oven/WOW +Conveyor Fed Oven - CTX +Glass Chiller +Bottle Chiller +Bar Margarita Cooler +Remote Draw Cooler +Keg Cooler +Beer System +Remodel +Stainless Steel +Decorative Fountains +Awnings +Booster Heater +Panini Press +Waste Illegal Dumping +Waste Holiday/Planner/Reset +Waste Fixtures & Equipment +Billing Issue +Locks +Waste +Recycling +Baler/Compactor +Slab Issue +Settlement Cracks +Kitty Cottage/Kennel/Cage +Salon Grooming Table +Salon Dryer +Amigo Cart +Salon Dryer Hanger +Playroom Wall/Gate +Pallet Racking +Kitty Cottage +Kennel/Cage +Hose Cubby +Single Person Lift +Pallet Jack +Forklift +Shopping Cart +Interior Signs +EAS Anti-Theft System +Camera +Safe +Alarm +Refrigerator +Raw/Natural Frozen Dog Food +Pinnacle Freezer +PetsHotel Mini Fridge +Pet Care Freezer +Ice Cream Machine +Sump Pump +Sink +Salon Shampoo Proportioner +Trench Drains +Blue Canister Filter +Eye Wash Station +Restroom Urinal +Floor/Sink Drains +Hose Reel +Inspection +Fleas/Ticks +Roll Door +Pad Lock +Keypad Lock +Interior Doors +Floor Care +Chemical Spill +Chemical Disposal +Bio Hazard Clean-Up +Regulatory Agency Inspection +Extra Pick-Up Needed +Hazardous Material Pick Up +Oops Station +Anchor/Mount/Tether +Dock/Levelers +Parking Lot Cart Corral +In-Store Cart Corral +Escalator +Cove Base +Acrovyn Wall +Fireplace +Wall Tile +Floor Scrubber +Sump/Sensors +New System +UV Bank/Bulbs Burnt Out +UV Bank Leaking +Tank Lighting Burnt Out +Tank Damaged/Leaking +Rack Rusting +Oxygen Generator +No Power +Heater +Fluidized Bed +Flowmeter +Flooding +Fish Ladder +Drain Clog +Cycron Vessel/Treatment +Control Panel Lights +Control Panel Computer Issue +Comet System +Chiller +Battery Backup +Pump Not Working +Pump Making Noise +Plant Tank Issues +Parking Lot Cart Corral +Doorbell +Generator +Video Equipment +Interior Doors +Bag Holder +Conveyor +Donation Box +Lockbox +Checkstand +Desk +Vending Equipment +Sanitizer +Detergent Dispenser +Broken Fixture +Door/Lock Issue +Damaged/Broken Glass +Electrical/Lighting Issue +Fan Issue +Interior Filters +Move-Out +Move-In +Housing Inspection +Turn Assignment +Mop Sink +Reverse Osmosis +Humidifier +Grading +Inspection +Asset Survey +Inventory Survey +Shampoo Bowl +Automatic Doors +Compressed Air +Door Drop +Storage Room Doors +Bay Door +LED Canopy Lighting +LED Road Signs +LED Building Sign +LED Canopy Lighting +LED Interior Repair +LED +Refueling Doors +Menu Board +Sandwich Station +Upright Bun/Fry Freezer +Cheese Warmer +Frosty Machine +Mop Sink +Hand Sink +Dishwasher +Lemonade Bubbler +Chili Cooker +Chili Wells +MPHC Drawer +Fry Dump Station +Bun/Bread Warmer +Tea Machine +Toaster +Front Counter +Leak Detection +Plaster Issue +Swamp Cooler +Drive Thru +Prep Table +Water Filtration +Cheese Machine +Shake Machine +Air Hot Holding Cabinet +Air Fry Station/Dump +Cook'n Hold Pod +Contact Toaster +Beef Holding Cabinet +Front Line Partition +Drive Thru +Siding +Pool Screens +Gophers +"Birds, Bats, Racoons & Squirrels" +Wasps and Bees +"Snakes, Lizards & Other Pests" +Bed Bugs +Wasps/Bees +Raccoons/Squirrels +Move-In Orientation +Monument +Pylon +Roof Hatch +Gasket +Neon Signs/Lighting +Rubber Flooring +Cook/Hold Cabinets/Altosham +Salamander Toaster +Ups - Battery Inspection +Supplemental AC Units +Server Door +Security Door +Egress Doors +High Humidity +Point Central +Demolition +Inspection +Outlet/Switch +Exterior +Exterior - Trim +Exterior - Siding +Microwave +Demolition +Install only +Lifts +Elevator +Carwash +Lifts +Car Impact +Lifts +Building Sign +Canopy Lighting +Janitorial Supplies +Janitorial - Shop Floor Cleaning +Janitorial - Night Cleaning +Air Compressors +Lifts +Trash Removal & Recycling +Office Furniture +Other Shop Equip +Tire Alignment +Paint Booths +Shop Maint Equip +Air Hoses & Reels +High Speed Doors +Furniture +Carpet +Furniture +Fire Alarm +Elevator +Bollards +Elevator +Window Glass +Roll Gates/Grilles +High Speed Doors +Elevator +Rodent Repair/Prevention +Pipe Leak +Security Alarm +Monument Sign +Walk In Beer Cooler +Walk In Freezer +Walk In Cooler +Restroom +Shelving +Server Station +Bar +On Demand IT +Audio Visual +Bulk Oil Recycling System Maintenance +Reach Ins-upright +Soda Dispensers-beverage machine FOH/DT +Hostess Stands +Locks +Powersoak +Cheese Melter +Under Counter Freezer +Water Softener/Treatment +Receiving Doors-service Door +Soda Dispensers/Ice Machine +Cook And Hold Cabinets-Heated cabinets +Cans/Spot/Track Lights/Pendant +Accent Lighting +Receiving Doors- Service door +Thermostat/Energy Management System +Roof Top Unit +Restroom Ventilation/Exhaust Fan +Controls +Condensing Unit +Parts +Entrance Doors +Cooler +Water Softener +Waffle Iron +Under Counter Refrigerator +Trash Receptacle +Trash +Track Or Grid +Track Lights +Toaster Four Slice +Toaster Conveyor +Three Compartment Sink +Suppression Systems +Supply Diffusers +Steam Table/Soup Warmer +Spot Lights +Soup Warmer +Shed/Outbuilding +Sewer Line +Sewage Pump +Septic System +Salad Unit +Safe +Roof +Return Grills +Refrigerated Drawers +Prep Sink +Plants +Picnic Table +Pendant Lights +Patio Furniture +Partition +Paneling +Novelty Case/Coffin Freezer +Multi Mixer +Mixing Valve +Mirrors +Milk Dispenser +Metal +Manhole +Make Up Air +Lift Pump +Ladder +Kitchen Spray Nozzle +Kitchen Sink +Kitchen Plumbing +Kitchen Doors +Kitchen Doors +Kitchen +Incandescent +Ice Tea Dispenser +Ice Cream Fountain With Syrup Rail +Ice Cream Dipping Cabinet +Host Stands +Hood Fire Suppression System +Grease Containment System +Grease Containment +Gooseneck +Furniture +Fudge Warmer +FRP Paneling +Friendz Mixer +Friendz Dipping Cabinet +French Fry Warmer +Fountain +Food Warmers/Heat Lamp +Flooring +Floor Tile +Fixtures +Exhaust Hood +Exhaust Fan Restroom +Exhaust Fan Mechanical Room +Exhaust Fan Dish Room +Exhaust Fan +Ductwork +Dry Storage Shelving +Doorbell +Display Freezer +Dipping Cabinets +Dipper Well +Diffuser +Desk +Deep Cleaning Service +Décor/Artwork +Damper +Cupola +Condiment/Syrup Rail +Communication Wiring +Commissary +Columns +Coffee Satellites +Coach Lights +Chest Freezer +Chandelier +Ceiling Fans +Cash Drawer +Caramelize Toaster +Cans +Broiler +Booths +Blinds/Shades +Benches +Bag-N-Box Racks +Baby Changing Station +Audio/Visual +Air Curtain +Lockout/Eviction +HOA/City Inspection +Section 8 Inspection +Cleaning +Termites +Stairs/Stair Railing +Rodents/Large Pests +Ants/Small Pests +Hand Dryer +Ceiling Fan +HOA +City +Other +Move Out Inspection +Move In Inspection +Walkway +Driveway +Rx Drive Thru Intercom +Rx Drive Thru Drawer +Rx Drive Thru Bell / Bell Hose +Roll door +Other +Other +Other +Other +Other +Other +Women'S Changing Room Toilet +Women'S Changing Room Shower +Women'S Changing Room Shower +Water Softener +Wall Repair +Stop Sign +Revolving Doors +Refrigeration +Ramp +Pressure Washing +Pedithrone +Other +Mirror +Men'S Changing Room Toilet +Men'S Changing Room Shower +Men'S Changing Room Shower +Lighting +Laundry Room +Kitchen Equipment Quarterly Service +Janitorial +Ice Machine +Hoods +Grease Trap +Entrance Doors +Duct Work +Drain Cleaning +Digilock +Coolers/Freezers +Contract Maintenance +Boiler +Backflow +Air Curtain +Transition +Tle Stairs +Restroom Stall Door +Restroom Partitions +"Restroom Fixtures, Non Plumbing" +Racking +Quarry Tile +Outside Garden Irrigation +Interior Roof Drain +Guard Rails +Grease Trap +Flag Pole +Epoxy +Drain Grates +Cove Base +Column +Changing Station +Changing Room Door +Ceramic Tile +Bollard +Baseboard +Move Out Inspection +Move In Inspection +Rails +Drywall +Ceiling +Bathroom Fan +Window glass +Stockroom Doors +Stockroom Doors +Roll gates/grilles +Roll door +Restroom Doors +Restroom Doors +Receiving Doors +Receiving Doors +Parking lot/Security lighting +Panic Device +Panic Device +Other Door +Other Door +Other +Other +Other +Other +Office Doors +Office Doors +Interior Lighting +Interior electrical +Intercom +Exterior electrical +Entrance Doors +Entrance Doors +EMS +Door glass +Directional Signage +Canopy lighting +Other +Other +Screens +Coverings/Blinds +Roofing Material +Gutters +Service +Fencing/Gate/Locks +Equipment +Tub/Shower/Sink +Toilet +Interior Lines/Fixtures +Hot Water Heater +Glass Enclosure +Gas Lines +Exterior Lines/Fixtures +Bath Accessories +Interior +Garage +Exterior +Drywall +Cabinets +Shutters +Mailbox +Gates +Fencing +Brick/Concrete +Pest Control +Other +Fireplace +Cleaning +Trees/Plants +Irrigation +Door +Accessories/Opener +Wood Laminate +Vinyl +Vertical Tile (Bath/Kitchen) +Tile +Stairs/Stair Railing +Carpet +Wiring +Smoke & Carbon Monoxide Alarms +Outlet +Interior Lighting +Exterior Lighting +Ceiling Fan +Windows +Structural +Interior - Trim/Baseboard +Interior - Hardware/Locks +Interior - Doors +Exterior - Hardware/Locks +Exterior - Doors +Countertops +Cabinets +Washer/Dryer +Vent Hood +Refrigerator +Range/Oven +Microhood +Garbage Disposal +Dishwasher +Cooktop +Unit +Thermostat +Backflow +Supression Systems +Sewer Backup +Roof Hatch +Rolling Inventory +Restrooms +Receiving Dock +Other +Other +Exit Doors +Entrance Door +Dark Store +Pressure Washing +Other +Knife Sharpening +Kitchen Hoods +Grease Traps +Conveyor Fed Oven +SIM +Cleaning +Walk Ins +Tilt Skillet +Soda Dispensers +Smoker +Slicer +Salad Bar +Rethermalizer +Reach Ins +Plate Chiller/Freezer +Oven +Mixer +Microwave Oven +Make Tables +Ice Machines +Hot Well/Soup Well +Grill/Griddle/Flat Top +Fryer +Food Processor/Blender +Espresso Machine +Dishwasher - No conveyor +Dishwasher - Conveyor Belt +CVAP Cook and Hold Cabinets/Proofer/Retarder +Cook and Hold Cabinets +Conveyor Fed Pizza Oven +Coffee Maker +Beer System +Wood +Wildlife +Washer +VCT +Unit Repair +Unit Refrigerator +Unit number Sign +Security Vehicle +Sales HVAC +Safety Warning Sign +Roof Leak +Rodents +Road Sign +Roaches +Repair - Spa +Repair - Pool +Repair - Equipment +Press +Pickup +Passenger van +Other flying Insects +Other crawling insects +Other +Not Operating +Marble +Leak - single unit +Leak - Multiple Units +Ironer +Gutters +Guest Unit HVAC +Granite +Golf Cart +Freight Van +Folder +Fire Suppression System +Fire Alarm System +F&B HVAC +Entry Doors +Dryer +Downspouts +Directional Sign +Concrete +Closet Doors +Chemistry Balancing +Check In Center HVAC +Ceramic Tile +Carpet +Building Sign +Birds/Bats +Bicycle/Tricycle +Bees/Wasps +Bedroom Doors +BedBugs +Bathroom Doors +Ants +Windows +Other +Wood +Carpet (Obsolete) +VCT +Concrete +Exterior - Other +Walls +Storm Preparation +Storm damage +Sidewalks +Pest Repair/Prevention +Retention Ponds +Remediation +Parking lot +Painting +Other +Light Poles +Irrigation +Fencing +Elevator +Dumpster Enclosure +Drywall +Directional Signage +Delivery truck impact +Conveyor +Ceiling Tile +Ceiling +Car impact +Canopy +Bollards +Baler/Compactor +Window glass +Water heater +Water fountain +Under canopy +Stockroom Doors +Roof Leak +Roll gates/grilles +Roll door +Rodents +Road sign +Restroom Toilet +Restroom Sink +Restroom Doors +Receiving Doors +Parking lot/Security lighting +Panic Device +Other Pests +Other Door +Other +Office Doors +No water +Mop sink +Locks +Interior lighting +Interior electrical +Inspection +High Water Bill +High Electric Bill +Gutters +Floor drains +Fire System monitoring +Fire sprinkler +Fire Extinguisher +Fire Alarm +Exterior hose bib/water meter +Exterior electrical +Entrance Doors +EMS +Downspouts +Door glass +Directional +Canopy lighting +Building sign +Birds/bats +Backflow test +Reddy Ice +Pepsi +Good Humor +Freezer +Cooler +Coke +Cages +EMS +Temporary Units +Other +Vandalism +Water leak +Making noise +No airflow +Not heating +Not cooling +Floor Care +IVR Fine +Snow +Striping +Landscaping diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_WOStatus.Name.csv b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_WOStatus.Name.csv new file mode 100644 index 000000000..0e31e1407 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/data/fuzzySharp/vocabulary/data_WOStatus.Name.csv @@ -0,0 +1,39 @@ +Pending Schedule +Pending Dispatch +Pending Vendor Acceptance +Scheduled +On Site +Pending Vendor Quote +Vendor Quote Submitted +Pending Client Approval +Client Quote Rejected +Client Quote Approved +Return Trip Needed +Work Complete Pending Vendor Invoice +Vendor Invoice Received +Pending Invoice Approval +Vendor Invoice Rejected +Completed And Invoiced +Vendor Paid +Closed +Resolved Without Invoice +Resolved Without Dispatch +Cancelled +Work Order Avoidance +Pending Self-Help Approval +Self-Help Approved +Deferred +Landlord Resolved +Vendor Quote Rejected +Self-Help Rejected +Billed - In Progress +Billed +Missed +Rescheduled +Completed +Pay to Affiliate +Expired +Void +Log Refusal +Service Pool +Pending Invoice Tax diff --git a/src/WebStarter/WebStarter.csproj b/src/WebStarter/WebStarter.csproj index 5a7c6eb7b..082ac578e 100644 --- a/src/WebStarter/WebStarter.csproj +++ b/src/WebStarter/WebStarter.csproj @@ -37,6 +37,7 @@ + diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index 071b279a5..5dfcffe69 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -836,7 +836,8 @@ "BotSharp.Plugin.ExcelHandler", "BotSharp.Plugin.SqlDriver", "BotSharp.Plugin.TencentCos", - "BotSharp.Plugin.PythonInterpreter" + "BotSharp.Plugin.PythonInterpreter", + "BotSharp.Plugin.FuzzySharp" ] } } From f3a0101596046524b65909dbe7c6469782e95524 Mon Sep 17 00:00:00 2001 From: Yanan Wang Date: Thu, 6 Nov 2025 14:18:26 -0600 Subject: [PATCH 3/3] Add cache for load data --- .../BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs | 1 + .../BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs index 87bb8d9d1..961f9b1c8 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/TextAnalysisService.cs @@ -38,6 +38,7 @@ public async Task AnalyzeTextAsync(TextAnalysisRequest req var tokens = TextTokenizer.Tokenize(request.Text); // Load vocabulary + // TODO: read the vocabulary from GSMP in Onebrain var vocabulary = await _vocabularyService.LoadVocabularyAsync(request.VocabularyFolderName); // Load domain term mapping diff --git a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs index 0be6daaa1..2a917fcb9 100644 --- a/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs +++ b/src/Plugins/BotSharp.Plugin.FuzzySharp/Services/VocabularyService.cs @@ -1,4 +1,5 @@ using BotSharp.Abstraction.FuzzSharp; +using BotSharp.Core.Infrastructures; using CsvHelper; using CsvHelper.Configuration; using Microsoft.Extensions.Logging; @@ -16,6 +17,7 @@ public VocabularyService(ILogger logger) _logger = logger; } + [SharpCache(60)] public async Task>> LoadVocabularyAsync(string? foldername) { var vocabulary = new Dictionary>(); @@ -50,6 +52,7 @@ public async Task>> LoadVocabularyAsync(strin return vocabulary; } + [SharpCache(60)] public async Task> LoadDomainTermMappingAsync(string? filename) { var result = new Dictionary();