The RFQ Backlog That Decides Which Jobs a Machine Shop Wins
By Ergini, Software & AI Developer
A composite story. The company and the people in it are invented. The problem, the rules and the system are real, and the full blueprint is in the use case library.
TL;DR
A composite story: a 50-person precision machining shop near Eindhoven receives about forty RFQs a week with PDF drawings and STEP files, and its estimator can only quote the ones he reaches, so the backlog decides which jobs the shop wins. The workflow I would build reads each drawing, measures the STEP file, flags revision and unit conflicts, and costs every part from the times actually booked in SAP Business One. The estimator reviews every assumption, sets the margin and approves each quote.
Monday, 07:30: forty-three RFQs
Ruud has estimated for the same shop for 26 years, and he starts every week the same way: coffee, the shared sales inbox in Outlook, and the folder the office manager labeled RFQ. This Monday it holds forty-three unread emails.
He does not open them in order. He sorts by sender. The machine builder that orders every month goes first. The medical device maker with the clean drawings goes second. The rest he scrolls past, reading subject lines only: "RFQ 11 parts", "Anfrage Frästeile", "Quote request urgent", "RE: RE: drawings rev D".
The shop is invented: 50 people near Eindhoven, milling and turning in aluminum and stainless, some sheet metal, small assemblies. There are two estimators, Ruud full time and Joost, who also prepares work for the shop floor and estimates when the floor lets him. SAP Business One runs everything else. What is not invented is the choice Ruud is about to make this week without ever calling it a choice.
How the queue chooses
The medical device RFQ is the one he wants: a zip file with eleven PDF drawings and nine STEP files, quantities of 10, 50 and 250, reply by Friday. He opens every drawing and reads the title block for material, revision, tolerance class and finish. He scans the views for what drives cost: two H7 bores, a sealing face at Ra 0.8, a pocket that forces a second setup. He searches old quotes for anything similar, which means remembering a part number from two years ago. He copies material prices from the supplier spreadsheet, estimates setup and cycle time per operation, builds it all in Excel and retypes it into SAP as a sales quotation. It takes him until Tuesday lunchtime.
On Wednesday a new customer, a company building lab automation, sends four parts. They get a rough price, rounded up, because there is no time to do better. On Thursday a corrected drawing arrives for a part he quoted on Tuesday, in a separate email, and he only catches it because the subject line says rev D. On Friday nineteen RFQs are still unopened. Three get a polite "fully booked at the moment", which is true of Ruud's week and not of the machines. The other sixteen expire in the folder.
Nobody decided to turn away the lab automation company. The queue did. Buyers send the same package to four or five shops, the quotes that come back first get read first, and a quote that arrives next week often arrives after the order has gone elsewhere.
The other cost is quieter. A material price copied from last quarter's spreadsheet. A setup time pasted from a part that was similar, but not similar enough. A finish missed in a note on page two. These mistakes rarely lose a job. They win it at a price that loses money, and nobody finds out, because nobody runs the post-calculation.
Thirty-five minutes planned, forty-one booked
Marloes, who owns the shop, books a video call and puts Ruud in the room. She wants to know whether AI can quote. Ruud wants to know who explains the loss when it quotes wrong.
I ask them for one real RFQ package, the medical device one, together with the quote Ruud sent. Then I ask for something they did not expect: the production orders for the parts they have made before. Marloes shares her screen and opens SAP Business One. The shop has years of production orders, and on the recent ones, the times actually booked on every operation.
One of the eleven parts is close to a bracket they made two years ago. The routing planned 35 minutes of cycle time. The operators booked 41. Ruud knew that without looking. He remembered the part ran long and added time to the new quote. Joost would not have known, and neither would anyone who joins next year.
That is the finding of the call. The knowledge to quote well is already in the building, in the ERP and in Ruud's head, and nothing brings it to the moment of quoting. Ruud's memory is the index.
As for Ruud's question: the system will read, check, measure and compute, and it will never set a price. The margin and the final number stay his, because a price is a decision about the customer, the order book and next month's machine load.
History first, drawings second
The call settles the order of the build. Ruud's memory gets written down before anything learns to read a drawing: a connection to SAP Business One through its Service Layer, and an index over old quotes and production orders, so that for any new part the system can find the closest ones the shop has made, with their quoted times and their booked times side by side. No quoting product can sell them that history.
On top of that sits a cost model, written as plain code with tests. Material comes from the stock size plus allowance, times the current price per kilogram from purchasing's spreadsheet. Setup and cycle time per operation come from the booked history of similar parts. Outside processing comes from supplier rates. Every figure is computed per quantity break, and every quote records which version of each price list it used.
Only then comes the reading. A Microsoft Graph subscription picks up each RFQ, unpacks the zip and fingerprints every file, so a resent package is recognized instead of quoted twice. A vision model sorts the files and reads each title block, note and callout into a strict schema, keeping a pointer to where on the sheet it read each value. Geometry never comes from a model looking at a picture: a CAD kernel, Open CASCADE, measures the STEP file. Code cross-checks the rest and turns every conflict into a flag.
Part 7 of the medical device RFQ, as it lands on Ruud's review screen:
| On the screen | What it says | Where it comes from |
|---|---|---|
| Flag | Drawing is revision D, STEP file is revision C | Code, title block against model file |
| Flag | Note 4 on page two: laser marking per customer specification, which is not in the package | Model reads the note, code finds no spec |
| Material | 1.4404 on the drawing, 316L in the email: the same steel, no flag | Code, lookup table |
| Geometry | Bounding box, volume, bores and threads; two setups likely | CAD kernel, from the STEP file |
| Similar jobs | Three matches; the closest planned 35 minutes of cycle time and booked 41 | SAP production orders |
| Cost | Material, setup, cycle and outside processing for 10, 50 and 250 pieces, four assumptions listed | Cost model, in code |
| Price | Empty | Ruud |
Below the table sit two drafted questions for the buyer, which revision is valid and where the marking specification is, waiting for Ruud to send or edit. The whole design is in the blueprint for RFQ to quote automation, including the cost routes for sheet metal and assemblies.
The replay that came out cheap
Before Ruud relies on a single draft, the system quotes last quarter's RFQs again, the ones the shop won and has since made, and lays its costs next to what those parts actually cost on the floor. It is the only honest test of a cost model, and the first version fails it.
On one family of milled stainless parts, the drafts come out consistently cheaper than reality. The cause is mundane. Until a few years ago the shop booked time per production order, not per operation, so its older jobs have no operation actuals. Where they were missing, the first cost model quietly fell back to the routing's planned times, which are optimistic. That is exactly how instant quotes drift low, and every one of those drafts would have looked competitive.
So the rule changes: no silent fallback. When a similar job has no booked times, the draft says so, and "planned time only" sits among the flags, above the number. And the replay does not stop at launch. Once a month the system compares quoted cost with actual cost per part family, so drift shows up in a report before it shows up in the margin.
The replay finds one more thing: a customer in Ohio who draws in inches, and a title block with no units at all. Units are now resolved in code from the title block, the geometry and the dimensions together, and when they disagree, the part stops at review instead of a tolerance of a thousandth of an inch being read as a thousandth of a millimeter.
Nothing leaves without Ruud
The review screen is where the system stops. Ruud adjusts a time where he knows better, sets the margin and approves. Nothing reaches a customer without that click. A suggested decline, for a size, a material or a tolerance class the shop does not run, comes with its reason, and Ruud confirms it or overrules it. The questions to buyers are drafts until he sends them.
The inputs have owners too. Purchasing owns the material price list. Marloes owns the machine rate per work center. Ruud owns every adjustment he makes, and the quote records it. The approved quote is written to SAP as a sales quotation keyed on RFQ and revision, so a retry can never create a second one.
Drawings are processed in an EU region under a data processing agreement, with no training on the files, which stay in the shop's own storage. One machine builder's NDA rules out cloud processing, so a self-hosted model reads theirs.
The Monday after
Forty-odd RFQs again, the same folder, the same coffee. But none of them is unread in the old sense. Each package has been sorted, each drawing read, each STEP file measured, and each part either has a draft with its similar jobs beside it or a question waiting to go to the buyer. Ruud no longer starts by reading title blocks. He starts by checking a reading of them, which is faster, and which he does better than anyone.
The order he works in is now his decision rather than the queue's. The machine builder still goes first. But a new company with four lab automation parts gets a real quote this week instead of a rounded-up guess, and when Ruud declines something, it is because the shop does not run that material or that size, and the email says so. A corrected drawing that arrives on Thursday reopens its quote on Thursday, instead of quietly updating it.
And once a month Marloes gets something the shop has never had: a page comparing what it quoted with what the parts actually cost, by part family. A quote that won a job at a loss now shows up on that page within a month, not at the year-end accounts.
Before you build one
If you mostly quote milled and turned parts, try Paperless Parts or CloudNC's Quote Agent before anything custom. Both are built for exactly that job, and a subscription costs less than a build. A build earns its cost when the work does not look like their typical customer's: sheet metal, weldments, assemblies with purchased parts, or a mix of all of them, and when the estimate should come from your own ERP history. SAP Business One has no native AI agent, so any AI there is integration work whichever way you go.
This kind of build is usually a multi-step workflow with a human in the loop, one of the tiers on the AI workflow automation page. The effort depends on the mix of work, how complete the booked times in your ERP are, how open its interface is, and whether your customers' NDAs demand a self-hosted model. The full blueprint covers the cost routes and the failure modes, the same intake later feeds order entry when the purchase order arrives, and the reading side is covered in depth in the post on AI document extraction.
Frequently asked questions
Can AI read engineering drawings for quoting?
It reads title blocks, notes and most callouts reliably, into a strict schema with a pointer to where each value sits on the sheet. It is not trusted with geometry: dimensions for costing come from the STEP file through a CAD kernel. Anything read with low confidence is shown to the estimator next to the drawing crop, and unreadable scans are flagged rather than guessed.
How do I automate RFQs without losing control of pricing?
Automate everything around the price and leave the price alone. The system reads the package, checks units and revisions, finds similar past jobs and computes material, setup and cycle costs from your own rates, then stops. The estimator adjusts times, sets the margin and approves every quote, and the draft lists each assumption, so a wrong one is visible before the customer sees it.
Does RFQ automation work with SAP Business One?
Yes. The Service Layer exposes items, business partners, production orders and sales quotations, which is everything this needs: actual times from past production orders in, a draft sales quotation out. SAP Business One has no native AI agent, so any AI there is integration work. Business Central works the same way through its API, and abas or proALPHA through their own interfaces.
Is it safe to send customer drawings to an AI model?
It can be, with the right setup: an EU region, a data processing agreement, no training on your files, and the files kept in your own storage with the same permissions as the shared drive. Some NDAs forbid any cloud processing, and for those customers a self-hosted model reads the drawings on your own infrastructure. Check the NDAs before the pilot starts.