Choose & Justify a Supplier
procurement_supplier_selectionExplained, audit-ready supplier selection and buying-quantity decisions in one call. Weights the user's criteria from pairwise importance answers and CHECKS THEM FOR CONTRADICTIONS (AHP consistency ratio; refuses and names the judgement to revisit), ranks suppliers by closeness to the ideal supplier respecting lower-is-better vs higher-is-better criteria (TOPSIS) and tests how robust the winner is to the weights, scores vendor reliability from delivery history (on-time and defect rates with 95% ranges, step-change and steady-drift trend checks, survival of problem-free delivery runs with the chance the next 5 deliveries are fine), works out whether quantity-discount price breaks are worth it (all-units discount EOQ, total annual cost), sorts spend into strategic / leverage / bottleneck / routine (Kraljic), and returns a decision record with an inputs hash and approver. Output starts with plain-language decision cards (CHOOSE, TOO CLOSE, FIX FIRST, STOP USING, ORDER, DO NOT BULK BUY, PROTECT, NEGOTIATE ...). Any subset of inputs works — e.g. only price_breaks for a bulk-discount question. Up to 1,000 delivery rows; larger files: procurement_get_engine.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "procurement_supplier_selection"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Decision date YYYY-MM-DD (recorded; filters later deliveries). | |
| criteria | No | Criterion names in order, e.g. [price, quality, delivery_days, service]. | |
| currency | No | ISO code, e.g. INR. No FX conversion. | USD |
| item_name | No | What is being bought, e.g. 'surgical gloves'. | |
| suppliers | No | One object per shortlisted supplier: {name, <criterion>: number, ...}. | |
| order_cost | No | Cost of placing one order (admin, freight, inspection). | |
| approved_by | No | Approver name/role; leave empty until approved. | |
| decision_id | No | Your reference (file no., PO no.). Generated if absent. | |
| spend_items | No | One row per item/category: {item, annual_spend, supply_risk (low/medium/high or 1-5)}. | |
| cr_threshold | No | Max consistency ratio accepted. | |
| holding_rate | No | Yearly cost of holding stock as a share of its value (0.15-0.30 typical). | |
| price_breaks | No | All-units price slabs [{min_qty, unit_price}], or {supplier: [slabs]} to compare suppliers. | |
| annual_demand | No | Units needed per year (for order sizing). | |
| max_order_qty | No | Optional cap per order (storage, shelf life, budget). | |
| on_time_floor | No | On-time target, e.g. 0.90. | |
| tie_threshold | No | Score gap below which suppliers are tied. | |
| currency_symbol | No | ||
| late_grace_days | No | ||
| spend_threshold | No | Optional spend line between high and low (default: median). | |
| criteria_weights | No | Fallback when the user insists on fixed weights: {criterion: weight}. Not consistency-checked — prefer pairwise_comparisons. | |
| delivery_history | No | One row per delivery: supplier + (on_time yes/no OR promised_date + delivered_date); optional qty, rejected_qty, date. ERP headers accepted as-is. | |
| criteria_directions | No | cost = lower is better (price, lead time, defects); benefit = higher is better. | |
| include_diagnostics | No | ||
| procurement_context | No | 'private' or 'public_tender' (government / PSU / GeM). | private |
| pairwise_comparisons | No | Importance judgements on Saaty's 1-9 scale. Preferred form: a list of {a, b, value} meaning 'a is value times as important as b' (1 equal, 3 a bit more, 5 clearly more, 7 much more, 9 overwhelmingly more; fractions like 1/3 or "1/3" for the reverse). Every pair once. Also accepted: a square matrix (rows in `criteria` order), or a committee object {"member": [rows...], ...}. | |
| min_deliveries_for_assessment | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| alerts | No | ||
| status | Yes | 1 = ok/partial, 0 = nothing decidable | |
| message | No | ||
| metadata | Yes | ||
| decisions | Yes | Plain-language cards, priority order. Relay these first. | |
| assumptions | No | ||
| order_sizing | No | ||
| decision_record | No | ||
| spend_portfolio | No | ||
| criteria_weights | No | ||
| supplier_ranking | No | ||
| vendor_reliability | No | ||
| data_quality_report | No |