Quick Add Interest Examples

Prev Next

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 ruleSourceJSON with topic conditions — every condition carries the condJoin value
  • Calls savePreferenceRule directly 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 fpmRuleForm pre-filled with all the selections
  • User can review, modify, and save through the standard form workflow
  • The form's applyDraft method handles seeding the conditions, and uses the 'key' in draft pattern 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