Quick Add Interest — Examples
A plain-language guide to how the Quick Add Interest feature works, from the moment a user types something to the moment a rule is saved.
What it does
Quick Add Interest lets a user type a short phrase like "Boeing, US Equities, no Energy" and have the system automatically find the matching topics, build a rule, and either save it directly or open the rule form pre-filled for review.
Step-by-step flow
1. User types input
The user enters a comma-separated list of interests into the Quick Add text box. Examples:
"Energy, Technology""Boeing, Upgrade, Downgrade, English""US Equities, no Cloud Computing"
2. Tokenizer splits the input
The Phrase Tokenizer breaks the input into pieces:
- Separators: commas, semicolons, "and", "&" split the text into segments
- Negation: words starting with "no", "not", "excluding" etc. are marked as exclusions (NOT IN)
- Slot matching: segments that match known delivery options (e.g. "Email"), languages (e.g. "English"), or report types are extracted as settings — they are not treated as topic phrases
Example: "Energy, Technology, Email, English" becomes:
- Topic phrases:
["energy", "technology"] - Delivery:
["Email"] - Language:
["English"]
3. Topic Resolution (finding the matching records)
The Topic Resolution Service takes each topic phrase and tries to find matching topics in the database. It uses a tiered approach:
Tier 0 — Exact match (high confidence)
Checks if the phrase is an exact match on:
- Topic Name (e.g. "Energy" matches a topic called "Energy") → score 100
- Topic Key or Tag Value → score 100
- Alias field (e.g. "US" matches a topic whose Alias is "US") → score 100
Tier 1 — Partial match (medium confidence)
If Tier 0 finds nothing, checks:
- Name starts with the phrase (e.g. "Cloud" matches "Cloud Computing") → score 80
- Name contains the phrase → score 65
- Alias contains the phrase → score 60
- Description contains the phrase → score 40
Verdict assignment
Based on results, each phrase gets a verdict:
| Verdict | Meaning | Example |
|---|---|---|
| RESOLVED | One clear winner, high confidence | "Energy" → Energy (score 100) |
| AMBIGUOUS | Multiple plausible matches | "Cloud" → Cloud Computing + Cloud Infrastructure |
| CROSS_TYPE | Matches span different topic types | "Boeing" matches Sector and Exchange Ticker types |
| TOO_BROAD | Too many results (> 8 candidates) | A very generic term |
| UNRESOLVED | No match found at all | A misspelled or unknown term |
4. Fallback decomposition (for multi-word phrases)
If a multi-word phrase like "US Equities" comes back as UNRESOLVED or TOO_BROAD, the system tries splitting it into individual words and resolving each separately.
Example: "US Equities" → no single topic matches → split into ["US", "Equities"]:
- "US" → resolves via alias to "United States" (score 100)
- "Equities" → resolves to "Equities" (score 100)
- Both resolved → accept the decomposition, replace original phrase with two matches
Rules:
- Only splits phrases with 2–5 words
- Accepts the split only if at least 2 sub-words resolve successfully
- Each sub-word inherits the parent's operator (IN or NOT IN)
5. Building the draft
The controller assembles a draft — a working copy of the rule that hasn't been saved yet:
- RESOLVED, AMBIGUOUS, and CROSS_TYPE matches: all their candidates are included in the draft conditions
- TOO_BROAD and UNRESOLVED: generate questions for the user (manual intervention needed)
This means: the system starts by including everything that matched, and the user removes what they don't want (rather than requiring the user to select what they do want).
6. User reviews candidates
The UI shows all matched topics as removable chips with an X button. Each chip shows the topic name and type.
- Message for AMBIGUOUS:
'"boeing" matched 3 topics. Remove any that are not relevant:' - User clicks X on any chip to remove that topic
- If all chips for a phrase are removed, the entire match is dropped
7. User sets options
Before confirming, the user can adjust:
- Condition Join (toggle): AND or OR — controls whether the rule matches all topics or any of them
- Research Access (checkbox): when checked, the rule will inherit the contact's default delivery and language preferences
8. Two save paths
Path A: "Save Directly" (General Interest)
Available when Research Access is unchecked and DirectSaveEnabled is true in config.
- Generates an auto-named rule (e.g. "Quick Add - 2026-08-28 14:30")
- Builds
ruleSourceJSONwith topic conditions — every condition carries thecondJoinvalue - Calls
savePreferenceRuledirectly without opening the rule form - Fast path for simple, general-interest rules
Path B: "Edit in Form"
Available always. Required when Research Access is checked.
- Generates the rule name
- Builds a draft payload with: name, join, conditions, delivery options, language options
- Opens
fpmRuleFormpre-filled with all the selections - User can review, modify, and save through the standard form workflow
- The form's
applyDraftmethod handles seeding the conditions, and uses the'key' in draftpattern to properly set delivery/language checkboxes (including clearing defaults when empty arrays are passed)
Configuration
All Quick Add settings are AFR attributes under ACE.FPM.Settings.QuickAdd:
| Setting | What it controls |
|---|---|
| Enabled | Shows/hides the Quick Add entry point |
| AssistMode | DETERMINISTIC (no AI) or LLM_EXTRACT (AI-assisted parsing) |
| AutoAcceptScore | Minimum score to auto-accept a match (default 90) |
| AutoAcceptGap | Winner must beat runner-up by this margin (default 20) |
| MaxCandidates | Above this count, phrase is marked TOO_BROAD (default 8) |
| RuleNameTemplate | Template for auto-generated rule names |
| DirectSaveEnabled | Whether the "Save Directly" button appears |
Example Walkthrough
Input: "Boeing, US Equities, no Energy, Email, English"
Step 2 — Tokenize:
- Topic phrases:
["boeing", "us equities", "energy"(NOT IN)] - Delivery:
["Email"] - Language:
["English"]
Step 3 — Resolve:
- "boeing" → AMBIGUOUS: Boeing Co (Exchange Ticker, score 100), Boeing (Sector, score 65)
- "us equities" → UNRESOLVED (no single topic with this name)
- "energy" → RESOLVED: Energy (Sector, score 100), operator NOT IN
Step 4 — Decompose "us equities":
- "us" → RESOLVED: United States (Region, score 100 via alias)
- "equities" → RESOLVED: Equities (Sector, score 100)
- 2 resolved ≥ 2 threshold → accept decomposition
Step 5 — Build draft:
- Condition 1 (Exchange Ticker): Boeing Co [IN]
- Condition 2 (Sector): Boeing, Equities [IN]
- Condition 3 (Region): United States [IN]
- Condition 4 (Sector): Energy [NOT IN]
Step 6 — User reviews:
- Removes "Boeing" from Sector (duplicate of the ticker)
- Keeps everything else
Step 7 — Options:
- Sets join to OR
- Checks Research Access (because Email + English were detected)
Step 8 — Save via "Edit in Form":
- Form opens pre-filled with all conditions, OR join, Email delivery, English language
- User reviews and saves