AI Order Reading
The AI Order Reading feature lets users upload a customer purchase order document — such as a PDF or image — and have an AI model extract the order details automatically. The results are displayed side by side with any existing order for review and verification before anything is committed to the database.
Starting AI Order Reading
From the Customer Editor, click Create Order with AI in the Info tab toolbar. A file picker opens — select the purchase order document to upload. The AI Order viewer tab opens immediately, and the file is submitted to the selected AI model in the background. The order appears as a row in the Orders table right away, with its file name shown in italics and blinking while the document is read; the row fills in with the extracted order the moment it finishes.
You can keep adding files to the same viewer at any time — from the Resubmit menu's Add Files…, or by dragging documents onto the Orders table — to read several orders together (see Batch Import below).
The viewer has two tabs:
- Review — the main comparison interface where the AI results are verified and applied.
- Raw JSON — the complete JSON response returned by the AI model, useful for diagnosing unexpected results.
Importing Several Orders at Once (Batch Import)
When a customer sends several purchase orders together, you can read them all in the same viewer instead of one file at a time. Every file becomes its own row in the Orders table and is reviewed individually — nothing is created in bulk.
Add files in either of two ways:
- Add Files… — the Resubmit menu's Add Files… item opens a file picker for selecting multiple documents at once.
- Drag and drop — drag one or more files from the desktop or a folder directly onto the Orders table (or anywhere on the viewer). Files already in the table are skipped, so you won't get duplicate rows.
There's no separate “extract” step: files start reading as soon as they're added, smallest first (so the quickest results come back soonest), using the model chosen in the AI Model drop-down. Each file's row moves through these states, reflected in its File cell and Action column:
| Status | Meaning |
|---|---|
| Queued | Added but not yet processed — the file name shows in grey italics. |
| Extracting… | The file is being uploaded to the selected AI model and read — the file name blinks. |
| (ready) | The AI extracted a candidate order; the row fills in with the order for your review. |
| Error | This file could not be processed. It stays in the Orders table as a red row whose Action cell reads Click to see error — click it to open a dialog with the full error details. Other files in the batch are unaffected. Right-click the row and choose Resubmit to try again. |
When No Customer Matches
When you read orders without first choosing a customer, the system matches each document's customer against your customers in two stages. If you have uploaded a customer list, the AI does an intelligent match first — it can recognise a customer even when the document names them differently than your records (abbreviations, a parent-company or "doing-business-as" name, extra punctuation, and so on). Each order still shows the AI's best-guess customer (the name read from the document) in the Customer column; when no customer was matched, that cell is highlighted red so the gap is obvious.
You can steer the intelligent match with AI Notes. Each customer has an AI Note on its Settings → AI tab, and each ship location/contact has one in the Locations/Contacts table — free-form hints that are included in the uploaded customer list. Use them to tell the AI things it can't infer, such as a customer that was acquired and now orders under a new company name but should still be booked under its original entry. Because the notes travel with the customer list, refresh the upload after editing them.
When a note actually drives a match, the order worksheet shows it: the matched Customer cell is tinted green when a customer note was used, and the Ship Location cell is tinted green when a location note was used. Hovering the tinted cell displays the AI's own short explanation of how that note was applied. This lets you confirm at a glance why an order attached where it did — useful precisely when the document's customer name or ship-to address doesn't match your records on the surface.
Unmatched orders are surfaced directly in the Orders table — there is no pop-up. Each such order shows its best-guess customer highlighted red and an Action of Needs customer match. A stale customer list is a common reason a match fails; if the customer already exists but the uploaded list was out of date, refresh it from the Resubmit menu's Upload Refreshed Customer List item and resubmit the orders.
To resolve orders one at a time, right-click them in the Orders table (these options are enabled only when an order that needs a customer match is selected):
- Create New Customer — adds a new customer from the document's best-guess name and attaches it, then refreshes the customer list automatically so future orders match. It also creates a ship location seeded with the document's shipping address and assigns it to the order, so the new customer's order already ships to the right place.
- Select Customer… — attaches an existing customer you pick from the list, then re-reads the order for that customer so a ship location can be matched for it (the same matching a customer-specific upload performs).
You can also refresh the customer list on demand from the Resubmit menu's Upload Refreshed Customer List item, or from the Customers list — click the Upload customer list to AI button above the list, then pick Anthropic, OpenAI, or Both (only the providers you've entered an API key for are available).
Not sure what gets sent? On that same Upload customer list to AI button, choose Preview data to upload… to see the exact customer-reference document any of the upload options would send — generated from your customers and their ship locations — in a read-only window. Previewing uploads nothing; your data only leaves the app when you pick one of the upload options.
When No Ship Location Matches
Once an order has a customer, the system also tries to match the document's shipping address against that customer's ship locations. The matched location (or the address read from the document, when none matched) appears in the Ship Location column, and is saved on the order when you accept it.
Ship-location matching follows the same two stages as customer matching. With a customer list uploaded, the AI matches the address intelligently, tolerating formatting and wording differences. Without an uploaded list it falls back to traditional "dumb" matching — the document's shipping address has to match one of the customer's location addresses almost exactly (differences in case, spacing, and punctuation are ignored). If the customer has a single ship location it is used automatically; if they have several and none matches closely enough, the order is left needing a ship location for you to set.
If the customer is matched but no ship location could be matched, the Ship Location cell is highlighted red and the Action column reads Needs ship location. Right-click the order to resolve it (both items are enabled only once a customer is matched):
- Select ship location… — attaches one of the customer's existing ship locations that you pick from the list.
- Add ship location — creates a new ship location for the customer, seeded with the shipping address the AI read off the document, and assigns it.
Creating the customer via Create New Customer also creates and assigns the ship location automatically, and Select Customer… re-reads the order for the chosen customer so a ship location is matched.
Choosing an AI Model
A Model drop-down at the top of the viewer lists every AI model available to the organization, prefixed with their provider (Anthropic: or OpenAI:). The last-used model is remembered between sessions.
Next to the drop-down, a short cost / performance hint updates as you change the selection to help you weigh the tradeoff between speed, cost, and accuracy. It shows a relative token-cost indicator ($, $$, or $$$), a tier label (Fast & cheap, Balanced, or Most accurate), and a one-line description. Hover over the hint for the full description.
The toolbar's Resubmit drop-down button gathers the viewer's commands:
- Resubmit File — re-runs AI extraction on the order file currently being viewed, using the currently selected model. Use this to compare results across models.
- Reload Models — refreshes the model list from the server, useful after adding a new API key.
- Add Files… — adds more order files to the batch (each becomes its own order); files can also be dragged onto the viewer.
- Upload Refreshed Customer List — regenerates the customer/ship-location list the AI matches against and re-uploads it to the selected model's provider.
- Create Order / Update Order — accepts all AI results and writes them to the database (see Accepting Results below).
- View AI Token Usage — opens the AI token usage report.
The toolbar also contains:
- Auto-create parts checkbox — when checked, any line item that cannot be matched to an existing part will have a new part created for it automatically when the order is accepted (see Part Matching below).
When Extraction Fails
If the AI provider cannot be reached or rejects a file, that file's row in the Orders table turns red and its Action cell reads Click to see error. Click the cell to open a dialog with a clear, plain-language explanation of what went wrong (long messages scroll). Other files in the batch are unaffected and keep processing.
To try again after fixing the cause, right-click the row and choose Resubmit (or select a different model in the AI Model drop-down first, to re-read the file with your other provider). If a problem would affect every file — for example a missing or invalid API key for the selected provider — it's reported once for the whole batch. (A missing customer list is no longer one of these: orders still read, they simply fall back to traditional near-exact matching as described in When No Customer Matches.)
Common messages you may see, and what to do about them:
| What you see | What it means / what to do |
|---|---|
| No API key is configured for this AI provider | Add your Anthropic or OpenAI key in AI Settings, then try again. |
| The AI provider rejected your API key | The key is wrong, expired, or revoked. Check it in AI Settings. |
| The selected AI model is not available for your account | Pick a different model from the drop-down, or update the model list in AI Settings. |
| The AI provider is rate-limiting requests right now | Wait a few seconds and click Retry, or try your other provider. |
| Could not reach the AI provider | Check your internet connection, then click Retry. |
| The AI provider had a temporary problem | A transient issue on the provider's side — Retry usually succeeds. |
Order Summary Table
The upper section of the Review tab shows an Orders table. After the AI processes the file it searches for an existing order that has the same PO number and the same customer. If one is found, it appears as a child row nested beneath the AI-extracted order row, enabling a direct side-by-side comparison.
The columns in this table are:
| Column | Description |
|---|---|
| Action | Shows Needs customer match (highlighted yellow) when the AI could not match a customer for the order — create a customer or refresh the customer list to resolve it; Needs ship location when the customer matched but no ship location did — create or select the customer to resolve it; otherwise New Order if no existing order was found, In sync if the AI and existing data match, or Resolve discrepancies (highlighted yellow) if differences exist. |
| File | The name of the source document this order was extracted from. Right-click the order and choose Open file to open it in your computer's default application. |
| Size | The size of the source document. Files in a batch are processed smallest first. |
| PO # | Purchase order number extracted from the document. |
| Order Date | Order date extracted from the document. |
| Due Date | Requested delivery date. |
| Total $ | Sum of all line item extended prices. |
| Customer | Customer name. |
| Ship Location | The order's ship-to destination: the matched ship location's name and address, or — when none matched — the shipping address read from the document (highlighted red, the order Needs ship location). |
| Confidence | Overall AI confidence score as a percentage (AI row only). Hover over the cell to see a per-field breakdown. |
| Tokens | Total tokens consumed by this AI call. |
| Tokens In | Prompt tokens sent to the model. |
| Tokens Out | Completion tokens returned by the model. |
| Est. Cost | Estimated US-dollar cost of this AI call, based on the tokens used and the selected model's published rate. A leading ~ means the model isn't in the built-in price list, so a default rate was used. |
Any cell where the AI-extracted value differs from the existing order value is highlighted in red. The Action column for both rows is highlighted in yellow when discrepancies exist.
Confidence Scores
The Confidence column on the AI row shows the model's overall confidence that it read the document correctly. Hover over that cell to see a tooltip with per-field confidence scores:
- PO Number
- Order Date
- Due Date
- Customer Address
- Line Items
Confidence is expressed as a percentage. A lower score is a signal to inspect that field more carefully before accepting.
Token Usage & Estimated Cost
The Tokens, Tokens In, and Tokens Out columns show how many tokens the AI provider consumed processing this document. Token counts are purely informational — they help users understand cost and identify unusually large documents.
The Est. Cost column translates those tokens into an estimated US-dollar cost for the call, using the selected model's published per-token rate. Because Backbone MRP uses your own AI provider account (you supply your own OpenAI or Anthropic API key), this estimate helps you keep an eye on what each extraction costs. It is an estimate only — the authoritative charge always comes from your provider's own billing. A leading ~ on the figure means the chosen model isn't in Backbone's built-in price list, so a conservative default rate was applied.
Updating Order Header Fields
Right-click on any row in the Orders table to access the Update submenu, which lets users push individual AI-extracted values into the existing order without accepting everything at once:
- All — updates PO #, Order Date, and Due Date.
- PO # — updates only the purchase order number.
- Order Date — updates only the order date.
- Due Date — updates only the due/delivery date.
The context menu also provides Open order to open the existing order in an Order Editor tab, Open file to open the order's source document in your computer's default application, and Lock order / Unlock order to control whether the order can be edited.
Part Matching
For each line item, the AI extracts a Customer Part # from the document. The server looks this number up in the customer's part list and, if a match is found, automatically links the line item to the corresponding Backbone part. The Backbone Part # column shows the result of this lookup.
When a line item cannot be matched to an existing part, both the Customer Part # and Backbone Part # cells for that row are highlighted in red, signalling that human review is required before the order can be accepted.
Creating New Parts
To resolve an unmatched item, select it in the Order Items table, right-click, and choose Create parts. This creates a new Backbone part using the AI-extracted item description as the part description, and creates a customer part record linking that new part to the customer's part number. If multiple unmatched items share the same description, all of them are linked to the single newly created part automatically.
Once a part is created it can be reviewed immediately by right-clicking and choosing Open part(s), which opens the Part Editor for the matched part. Open customer part(s) opens the Customer Part Editor for the customer's part number record.
Auto-create Parts
Checking the Auto-create parts checkbox before clicking Create Order or Update Order tells the system to create new parts automatically for any unmatched line item at the moment the order is accepted, without requiring manual intervention per item. This is convenient for orders that contain many new parts, but the created parts will have only the AI-extracted description and will need to be filled out further in the Part Editor afterwards.
Order Items Table
The lower section of the Review tab shows an Order Items table. It shows the line items of the orders selected in the Orders table above — or of every order when none is selected — so you can focus on one order or compare a few.
When more than one order's items are shown, they are grouped by order: each AI order is a top-level row (with its Order #, PO #, and source file) that you expand to see its items. When only a single order's items are shown, the order-level row is omitted and the items appear directly. Either way, if an existing order was found, each AI item has the corresponding existing order item nested beneath it as a child row for a line-by-line comparison.
Existing items that have no matching AI line item (items the AI did not find in the document) appear alongside the AI items with the action Remove item.
The columns in this table are:
| Column | Description |
|---|---|
| # | Line item number (ordinal position in the document). |
| Order # | The matched existing Backbone order number for the item's order (blank for a new order with no PO# match). |
| PO # | The purchase order number of the item's order. |
| Action | New item if the AI found a line not in the existing order; In sync if the values match; Resolve discrepancies (yellow) if values differ; Remove item if an existing line has no AI counterpart. |
| Customer Part # | Part number as it appears on the customer's purchase order. Red if unmatched or changed. |
| Backbone Part # | Internal Backbone part number resolved from the customer part lookup. Red if unmatched or changed. |
| Description | Item description extracted from the document. Red if different from existing. |
| Qty | Ordered quantity. Red if different. |
| U/M | Unit of measure. Red if different. If the AI reads a unit that Backbone doesn't recognize, right-click the item to add a custom unit of measurement for it. |
| Unit $ | Unit price. Red if different. |
| Total $ | Extended price (Qty × Unit $). |
Updating Individual Line Items
Right-click on any row in the Order Items table and choose Update to push the AI value for a specific field into the existing order item:
- All — updates Customer Part #, Part #, Description, Qty, and Unit Price at once.
- Customer Part #
- Part #
- Description
- Qty
- Unit $
Adding and Removing Line Items
When the AI finds a line item that does not exist in the current order (Action = New item), right-click and choose Add new item to create that line in the existing order using the AI-extracted values.
When the current order contains a line item that does not appear in the AI result (Action = Remove item), right-click and choose Remove extra item to delete it from the order.
Adding a Custom Unit of Measurement
Customer documents sometimes use a unit of measure that Backbone doesn't know about — an industry abbreviation, a packaging term, or a company-specific unit. When the AI reads such a value into the U/M column, it won't match any built-in or existing custom unit, and you can define it on the spot instead of leaving it unrecognized.
When an extraction finishes and one or more line items use units Backbone doesn't recognize, the reader automatically lists them and asks whether you'd like to add matching custom units. Choose Yes to be guided through the create dialog for each distinct unit in turn. You can also add a unit manually at any time by right-clicking a line item.
- If you answered Yes to the prompt, the create dialog opens for each unrecognized unit automatically. To add one manually instead, select the line item whose U/M value isn't recognized, then right-click and choose Add custom unit of measurement...
- In the dialog, the item's units are pre-filled as the Singular name and Abbreviation. Review and adjust them, and optionally add a Plural form.
- Choose the Type of units (Unitless, Length, Area, Volume, Weight, or Time) and enter a Conversion factor when the unit converts to that type's base unit — for example, a "dozen" of type Unitless has a factor of 12. Leave the type blank for a standalone unit that doesn't convert. The unit type also decides whether it reads with "per": unitless (count) units are shown without it, while all other types read with "per" (e.g. "per box").
- Click Create. The new unit is registered for the organization and is recognized immediately — both on this order and on any future order.
Processing Change Orders
A change order is a revised purchase order from the customer that modifies a previously placed order. The AI Order Reading feature handles change orders without any special setup: upload the revised document the same way as the original order.
After the AI processes the file, it searches for an existing order with the same PO number and customer. When one is found, the viewer automatically switches to comparison mode — the button label changes from Create Order to Update Order, and every discrepancy between the AI-extracted revision and the current order data is highlighted in red.
The user can then:
- Review each discrepancy cell by cell.
- Use the Update context menus to push individual changed values into the existing order.
- Use Add new item for any line the customer added.
- Use Remove extra item for any line the customer cancelled.
- Click Update Order to apply all AI-extracted values at once.
Accepting Results
Clicking Create Order (when no existing order was found) or Update Order (when an existing order was found) applies all AI-extracted data to the database in one step:
- Order header fields (PO #, Order Date, Due Date) are written.
- Each line item is created or updated with the AI-extracted Customer Part #, Backbone Part, Description, Qty, U/M, and Unit Price.
- Any unmatched line item has a new part (and customer part record) created for it automatically when Auto-create parts is checked.
After a new order is created, its Order Editor tab opens automatically. A confirmation dialog is shown in both cases.