Back to Blog
Published:
Last Updated:
Fresh Content
Engineering Quote AutomationChapter 1

How does RFQ line-item matching actually work?

7 min read
1,451 words
high priority
Ali Ahmed

Ali Ahmed

AI Solutions Engineer, Cognilium AI

Wooden dowels arranged in even rows

TL;DR

Three layers in order: exact identifier, then attributes, then global fuzzy search. Microsoft documents all three, and the third runs on the hardest lines.

In three layers, tried in order: an exact identifier match, then a semantic match on attributes, then a broad fuzzy search across everything. Each layer runs only when the one above it found nothing.

That ordering is the whole design, and understanding it tells you exactly which of your quote lines will be right and which will need a person.

For the engineer scoping an RFQ system, and the sales lead who has to trust its output. 7 minute read.

What are the three layers?

Microsoft documents them for Business Central's Sales Order Agent [GA], and the wording is worth reading closely:

1. "Exact identifier match by item number, vendor item number, GTIN, or cross-references. Exact identifier matches have the highest confidence." 2. "Semantic attribute matching uses item attributes from the customer's message (such as color, material, or size) and AI to rank candidates by relevance." 3. "Broader fuzzy search falls back to a global search across all items when the direct and attribute-based searches don't produce results."

Layer one is not AI. It is a lookup. If the customer wrote your item number, or a code you already hold against them, the answer is deterministic and Microsoft says so — "the highest confidence."

Layer two is where judgement enters. Colour, material, size, ranked by relevance. A model is deciding which candidate best fits words the customer chose.

Layer three is a search of last resort, and §3 is about why that matters more than it sounds.

Which tables does it search?

Eight, and the list tells you what to fix in your own data:

TableWhat it contributes
ItemsNumber, description, search description, GTIN, vendor item number
Item ReferenceThe codes your customers use for your products
Item VariantCode and descriptions
Item AttributesName and value
Item CategoryCode, description, parent
Item TranslationLanguage-specific descriptions
Item IdentifierCode
Extended text LineFree text held against the item

Item Reference is the one that compounds. It is a standard Business Central table holding this customer calls that item this. Every entry turns a layer-two judgement into a layer-one lookup — permanently, for that customer. Most distributors have it nearly empty, not because Business Central lacks the capability but because somebody would have to type entries forever.

Why does the third layer worry engineers?

Look at what it is asked to do. It runs only when the first two found nothing — the hardest lines, the weakest signal — and its job description is to produce a candidate anyway.

A global search across every item will almost always return something.

Microsoft publishes two failure modes that live exactly here. A partial-word problem: "When a search term appears as part of a longer word, the system fails to match it." And a substitution: "Searches for related consumables often return the main product instead of the requested accessory or consumable" — its own example asks for washing powder, and returns a washing machine.

So the design question is not whether to have a fallback. Without one, most of a real inbox comes back unmatched. The question is what the fallback is allowed to do with a weak result: put it on the quote, or put it in front of a person. Chapter 3 is entirely about that decision.

What happens when the match is ambiguous?

Layer two produces a ranking, not an answer. Sometimes the top two candidates are genuinely close — two shirts that differ only in material, two fittings that differ only in bore.

Microsoft's agent handles that by asking: "If important details are missing or more choices are available, the agent engages in multiturn email conversations to clarify the request."

That is the right instinct, and Microsoft also publishes where it strains. From its reliability notes:

"Reliability decreases if you significantly change the email the agent drafts about item availability before sending it to the customer. This issue is more apparent when the external customer follows up with an email using pronouns like "them" or "it" and other words instead of repeating specific quantities and names. For example, the customer replies, "I want them all.""

"I want them all" contains no product and no quantity. It is resolvable only against what was said in the previous message — which is why the unit of work has to be the whole thread, not the newest message in it.

A second constraint shapes how you design that loop. Microsoft documents an attribute gap: "The agent searches for items using item attributes, but the attributes aren't shown to the agent on the item availability page."

Its worked example has the catalogue holding a linen shirt and a cotton shirt, and the agent replying "We have X quantity of ITEM-1 Shirt and ITEM-2 Shirt"both described identically, because the attribute that distinguishes them has dropped out. The customer then has to write back asking for the linen one.

The attribute that resolved the match has to travel with the match. If it was good enough to decide, it is good enough to display — to the reviewer and to the customer.

What does a reviewer need to see on a matched line?

This is our own position rather than a documented feature, and it follows from the layering above.

Which layer matched it. A line resolved by item number and a line resolved by fuzzy search are both "matched", and they deserve different amounts of attention. Showing the route costs nothing — the system already knows — and it is the single most useful fact on the row.

How far ahead of second place it finished. Two candidates can both look settled while one of them was a near-tie between catalogue entries differing only in supplier. In distribution that is common, because the same physical part legitimately exists several times under different codes.

The customer's own words, underneath. Not our interpretation — the raw fragment, and where in the request it appeared. A reviewer who cannot see where a line came from cannot check it in seconds, and review that takes minutes is review nobody does.

What limits matching before any model runs?

Your catalogue. Microsoft says so plainly about its own agent:

"Although the agent can find products based on vague and incomplete descriptions, the quality of product information in Business Central affects its effectiveness. You can improve the agent's ability to find products by enhancing descriptions, attributes, categories, and extended text of your inventory items."

And more bluntly: "How you name your products can affect agent output. For example, using cryptic abbreviations versus friendly names can reduce output quality."

One operational note worth knowing before you test anything: "It might take up to 15 minutes for newly entered data to become searchable as the system reindexes the tables in the background."

Before buying software to interpret your customers' language, it is worth asking how much of the difficulty is your own item descriptions. That fix needs no licence.

Want to know how many of your lines would resolve at layer one today? Book a 15-minute call — bring a real request and your item list, and we will sort them live. No deck.

Sources

This article is part of our work on the RFQ quoting engine.

Share this article

The work behind this series

How an agent reads an RFQ, matches each line to your catalogue and prices it, and what has to happen to the lines it cannot resolve.

Ali Ahmed

Ali Ahmed

AI Solutions Engineer, Cognilium AI

Ali Ahmed is an AI Solutions Engineer at Cognilium AI.

Applied AI AgentsAgentic SystemsRetrieval-Augmented Generation (RAG)LLM Product Engineering
Next in this series
Why does quote automation get quantities wrong?
Chapter 2 · 5 min
In short

Key takeaways

  • Matching runs in three ordered layers — exact identifier, then attributes, then a global fuzzy search — and each runs only when the one above it found nothing.
  • Layer one is a lookup, not AI. If the customer wrote a code you hold, the answer is deterministic.
  • Item Reference is the table that compounds: every confirmed customer-specific name turns a judgement call into a lookup, permanently, for that customer.
  • The fallback layer runs on the hardest lines with the weakest signal and is still expected to return a candidate — which is why what it may do with a weak result is a design decision, not a detail.
  • Catalogue quality caps everything. Microsoft states that cryptic abbreviations reduce output quality, and no matching strategy recovers from a description that says nothing.
What goes wrong

Common mistakes to avoid

  • Treating every "matched" line as equivalent. A line found by item number and one found by fuzzy search need different scrutiny, and the system already knows which is which.
  • Leaving the customer-reference table empty. It is the difference between a judgement every time and a lookup every time after the first.
  • Showing the winner without the runner-up. In distribution the same part exists under several codes, so the winner is often a near-tie presented as a finding.
  • Testing immediately after loading data. Newly entered records take time to become searchable.

Frequently Asked Questions

Find answers to common questions about the topics covered in this article.

Still have questions?

Get in touch with our team for personalized assistance.

Contact Us

Still have a question this did not answer?

The person who wrote this article answers these. Describe your setup and what you are stuck on — you will get a straight answer, including where we think the approach is wrong.