Supplier Risk Scoring Copy link
Plugin: Blitz Report Excel Add-in Skills (
br-supplier-risk-scoring)Works with: Claude in Excel, Microsoft 365 Copilot in Excel
Score Oracle EBS suppliers on risk in Excel: have the br-run-reports skill extract spend, holds, price variance and delivery history, then combine dependency, reliability, price stability and anomaly signals into a ranked supplier risk register with a named driver per supplier.
When to use it
- Use when the user asks which suppliers are risky, supplier risk review, vendor scorecard, supplier dependency/concentration, or who to review before contract renewal.
- Download the skill zip. br-supplier-risk-scoring.zip
- In Claude in Excel open Customize > Skills > Create skill and upload the zip.
- Connect the Blitz Report Excel add-in to your Oracle EBS instance, then ask Claude for the task in your own words.
- Download the skill folder from GitHub. br-supplier-risk-scoring
- Copy the folder into Documents/Copilot/Microsoft Excel/Skills in your OneDrive.
- Open Excel with the Blitz Report add-in connected and ask Copilot for the task.
- Add the Enginatics marketplace in Claude Code.
/plugin marketplace add enginatics/ai-skills - Install the Excel add-in skills plugin.
/plugin install blitz-report-excel-addin-ai-skills@enginatics - Run the setup skill; it installs or updates the skills in Claude in Excel or Microsoft 365 Copilot in Excel.
/blitz-report-excel-addin-ai-skills:excel-skills-setup
Requirements: Blitz Report and the Blitz Report Excel add-in, connected to your Oracle EBS instance, plus Claude in Excel or Microsoft 365 Copilot in Excel.
🚨 Blitz data = Excel worksheet UDFs, not MCP tools/connectors. Extract data only by writing
=br_...()into a cell (viaexecute_office_js) and reading the spill — nevertool_searchforbr_*, neverrefresh_mcp_connectors, and never conclude "no Oracle EBS / Blitz connector is set up" (the Blitz Report add-in is an Excel add-in, not an MCP connector, so it never appears in the connector list — its absence there is expected). Load the extraction mechanism first:read_skill("br-run-reports").Performance: Read
br-analytics-standardsat the start of every run (read_skill("br-analytics-standards")). All pipeline steps must follow those rules. Target runtime: under 10 minutes (multiple extracts).
Produce a ranked supplier risk register in one workbook. You own the scoring model and the register; br-run-reports does extraction, br-rfm-analysis the spend-pattern segmentation, br-anomaly-detection the invoice-anomaly scan, br-data-dashboard the build. Run steps in order, keeping intermediate sheets.
Requires: br-run-reports, br-rfm-analysis, br-anomaly-detection, br-data-dashboard.
Division of responsibility — READ FIRST
You do NOT run Blitz reports yourself. Extraction is by br-run-reports; never call br_* functions or touch a result sheet mid-run. Read-and-recommend only — this skill never holds a
supplier, changes sites, or blocks POs; it scores and routes to review.
🚨 A score is a review queue, not a verdict
This model sees only EBS transaction history — no financials, sanctions, ESG or news. A high score means look at this supplier, never this supplier is failing. Say so on the dashboard, and never auto-derive an action from the score.
When to use
"Which suppliers are risky", "supplier risk assessment", "vendor scorecard", "how dependent are we on X", "who should procurement review this quarter". For duplicate payments specifically, use br-ap-duplicate-payments; for holds, br-ap-holds-analysis.
Inputs
- Operating Unit — required. Lookback window — default 12 months (spend/history); the window drives extract size, so confirm it before a big pull.
Step 0 — Analysis depth (one ask_user_question, before any extraction)
Delivery performance costs an extra extract and is empty at sites not using supplier scheduling — ask once, nothing pre-selected:
- Standard — spend, holds, price variance (3 extracts).
- + Delivery performance — adds the on-time-delivery extract. Skip the question when the request implies it ("delivery risk" → include; "quick look" → Standard).
Reports used (authoritative names — do NOT broad-search for them)
Pass the documented name directly; search only on #BLITZ_REPORT_NOT_FOUND.
| Report (exact name) | Run with | Feeds |
|---|---|---|
AP Invoices and Lines | OU + Invoice Date window | Spend, frequency, recency per supplier — the RFM base. The heaviest extract: restrict to the window, header-level template if offered. |
AP Invoice on Hold | OU | Holds count/aging per supplier — the friction signal. |
PO Invoice Price Variance | OU + date window | Price instability per supplier. |
AP Suppliers | (site filters as offered) | Master data: sites, terms, inactive flags — and the register's display names. |
PO Vendor Service Performance Analysis (optional — Step 0) | OU + window | Delivery performance. If empty/not found, score without it and say so — never fake a delivery score. |
CONFIG — scoring model (edit weights to the customer)
Score 0–100 per supplier = weighted sum of four 0–25 components:
| Component | Source | High-risk signal |
|---|---|---|
| Dependency | Invoice spend | Share of OU spend (concentration), single-site supplier for that spend |
| Friction | Holds | Holds per 100 invoices, aged holds outstanding |
| Price instability | IPV | Variance $ / spend ratio, worsening trend across the window |
| Anomaly | br-anomaly-detection over the supplier's invoices | Outlier amounts, round-number clusters, duplicate-shaped patterns |
(With delivery data: reweight to five components × 20; late-delivery rate is the fifth.) Band: High ≥ 70, Medium 40–69, Low < 40. Every High supplier must carry a one-line driver ("82% of spend in one site", "14 aged holds", …) — a number with no reason is not reportable. Exclusions: intercompany suppliers, employees-as-suppliers, one-time suppliers under the $ floor (default $10k window spend).
Output sheets & tab order (left to right)
Supplier_Risk (dashboard, first), Risk_Register (every scored supplier), AP_Invoices, AP_Holds, PO_IPV, AP_Suppliers, [PO_Delivery] (last).
Pipeline
- Extract — DELEGATE. br-run-reports runs the Step-0 report set → their sheets. Wait for each; the invoice extract is the long pole.
- Anchor. Supplier count, total window spend, holds count, IPV total $. Record per-sheet row counts.
- Segment (delegate to br-rfm-analysis if it fires; else inline). RFM over the invoice extract keyed on supplier — recency of activity, invoice frequency, monetary spend. Keep the segment per supplier for the register.
- Anomaly scan (delegate to br-anomaly-detection if it fires; else inline). Over the invoice extract grouped by supplier; carry each supplier's anomaly count + worst finding.
- Score (single
execute_office_jscall). Join holds, IPV, (delivery), segments and anomalies per supplier; apply CONFIG; writeRisk_Registerin one.values =call: supplier, number, band, score, the four component scores, the driver line, window spend, segment. - Dashboard (single call; charts second) (delegate to br-data-dashboard if it fires; else
inline). KPI cards (High count, spend at High, top concentration), band distribution and
spend-vs-score charts, top-10 High table with drivers. NEW sheet at position 0; don't rename
report sheets; no multi-row
copyToRange; clear strays; widen amount columns. Carry the "review queue, not a verdict" line on the dashboard itself. - Narrative. ≤5 bullets: the top risk and its driver, the concentration headline, any systemic pattern, recommended first review. If delivery was skipped, label the model "excl. delivery" — an unscored dimension must read as not scored, never as clean.
- Arrange tabs + final validation. Order per CONFIG;
Supplier_Riskactive. One permitted verification read: register band counts and total spend tie to the Step-2 anchor.
Validation
Every High has a driver; excluded suppliers listed, not silently dropped; component sources absent on the instance shown as "not scored"; register ties to raws.
Closed-loop (roadmap, not executed here)
Findings route to procurement review; supplier-master fixes to the AP Supplier Upload; hold follow-ups to br-ap-holds-analysis. This skill scores; a human decides.