AI Agents · Ai

AI Agent for Procurement Suggestions

AI Agent for Procurement Suggestions is the work that defines the next phase of enterprise software. ERP systems hold the most valuable business data in the company — customers,.

John Kihiu12 min read

"What should we reorder this week" is a question Acumatica's MRP and reorder-point logic already answers deterministically from lead times, safety stock, and demand history — that part doesn't need an LLM. Where an agent earns its place is layering judgment on top of that deterministic output: explaining the reasoning in plain language, flagging anomalies the reorder-point math won't catch on its own, and drafting the PO for a human to review rather than requiring a buyer to reconstruct the "why" from raw numbers every time.

Don't let the model compute reorder quantities

Reorder point, economic order quantity, and safety stock are formulas, not judgment calls — they belong in deterministic code (or in Acumatica's own MRP engine) that produces the same answer every time given the same inputs. The agent's job is to call that calculation, not re-derive it via reasoning over a prompt. An LLM asked to "figure out how much to reorder" from raw sales history will produce a plausible-sounding number that may not match what your actual safety-stock policy would compute — and a plausible wrong number is more dangerous here than an obviously wrong one, because a buyer is more likely to trust it.

PYTHON · AGENT CALLS THE CALCULATION, DOESN'T REPLACE IT
def suggest_reorder(item_id: str) -> dict:
    stock = get_current_stock(item_id)
    reorder_point = get_reorder_point(item_id)  # from Acumatica item settings
    if stock["qty_available"] > reorder_point:
        return {"item_id": item_id, "action": "none"}
    suggested_qty = calculate_eoq(item_id)  # deterministic formula, not LLM
    vendor = get_preferred_vendor(item_id)
    return {
        "item_id": item_id, "action": "reorder",
        "suggested_qty": suggested_qty, "vendor": vendor,
        "reason": f"Stock {stock['qty_available']} below reorder point {reorder_point}",
    }

Where the agent adds real value

Reorder-point logic is blind to context a buyer would catch instantly: a vendor with a recent history of late deliveries, a demand spike that looks like a one-off promotional order rather than a new baseline, or two items that are usually ordered together showing wildly different suggested timing. An agent with access to vendor performance history, recent order patterns, and lead-time variance can flag "this suggestion looks routine" versus "this one is worth a second look" — turning a flat list of SKUs into a prioritized review queue, which is the actual bottleneck for a busy buyer.

Draft, not submit

Procurement suggestions should produce a draft PO a buyer approves, not an auto-submitted purchase order — this is squarely in the "hard to reverse, moves money" tier from the oversight patterns discussed elsewhere on this blog. Have the agent populate the PO with vendor, quantities, and pricing pulled from real Acumatica data, plus a short explanation of why, and stop there. The buyer's approval is not friction to engineer around; it's the control that catches the cases the deterministic logic and the agent's judgment both missed.

Vendor selection needs the same validation as quantity

If the agent suggests a vendor based on "who we usually order this from," validate that vendor is still active and not on hold in Acumatica before drafting the PO. A stale vendor reference in a suggestion is an easy mistake for a busy buyer to wave through without checking.

Explaining the suggestion in terms a buyer trusts

"Reorder 200 units" is an instruction. "Stock at 40 units, below the 75-unit reorder point, average lead time from this vendor is 12 days, and demand has been steady at 15/week for the last quarter" is something a buyer can evaluate and either trust or override with their own knowledge. Always surface the inputs the suggestion is based on, not just the conclusion — it's what turns the agent into something a buyer relies on instead of something they learn to ignore after the first bad suggestion.

Seasonal and promotional demand need a human signal

A pure historical-demand model will systematically under-order ahead of a known seasonal peak or promotion the data hasn't seen yet, because it has no way to know the promotion is coming. Give the agent (or the underlying forecast it calls) an input for known future events — a promotion calendar, a seasonal flag — rather than expecting it to infer future demand purely from past patterns it has no visibility into.

LayerOwned by
Reorder point, EOQ, safety stockDeterministic formula / Acumatica MRP
Vendor performance flaggingAgent, from historical delivery data
Anomaly / priority flaggingAgent, surfaced as review priority
Final PO submissionHuman buyer, always

Wrapping up

Keep the actual reorder math deterministic and let the agent add the layer that math can't: explanation, anomaly flagging, and prioritization for a buyer's review queue. Draft, never auto-submit, and always show the numbers behind a suggestion rather than just the conclusion — that's what earns the buyer's trust enough that they actually use the tool instead of working around it.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.