A quantified analysis of supplier dependency, geographic concentration, and event-driven disruption exposure across the direct procurement portfolio — with a costed mitigation program.
The company’s supply risk profile is unusual: international exposure is negligible (0.1% of spend), but domestic concentration is severe along two compounding axes. First, five suppliers carry 87% of direct spend. Second, the four largest of them — Bedline, Broyhill, Generation N, and their peers — cluster in the San Francisco Bay Area, so a single regional event (seismic, fire, grid) does not disrupt one supplier; it disrupts the top of the entire portfolio simultaneously.
Expected annual losses from modeled scenarios are modest in absolute terms (~$5–6K/yr against a $1.28M base) because per-event probabilities are low. The correct management read is tail exposure: a single Bay Area disruption is modeled at $70K+ per event in lost margin and recovery cost, concentrated in the flagship mattress and furniture lines, with reputational cost on top.
The recommended mitigation package (§05) costs approximately $20K one-time plus $12K/yr and cuts the single-source spend share from 65% to roughly 35%, halving modeled tail-event impact. Payback is a single avoided moderate disruption.
Two-thirds of direct spend ships from one seismically active metro area. The portfolio is diversified on paper — and correlated in practice.
| Metric | Value | Interpretation |
|---|---|---|
| Top-1 share — Bedline | 29.0% | Above the 15–20% single-supplier comfort zone |
| Top-3 share | 66.4% | High — three vendors carry two-thirds of spend |
| Top-5 share | 87.2% | Very high |
| Top-10 share | 98.3% | Long tail is economically negligible |
| HHI (spend) | 1,850 | Moderately concentrated; an even 18-way split would score ~556 — actual concentration is 3.3× the vendor count implies |
transaction/transactionline, type PurchOrd, Sep 2025–Aug 2026. Query Q3, Appendix B.Single-sourcing is not scattered — it is organized into whole product lines with no alternate supplier ever used:
| Product line (single-source) | Sole supplier | TTM spend | Notes |
|---|---|---|---|
| Contour Rhapsody Breeze (7 SKUs) + Patriarch Luxury Firm (4 SKUs) + Box Spring | Bedline | ~$290K | Flagship mattress assortment; zero alternates in history |
| Estes Park furniture line (10+ SKUs) | Broyhill | ~$210K | Chest, chair, ottoman, tables, headboard, nightstand |
| Leather goods & accessories (satchels, valises, watches, belts) | Generation N | ~$130K | High-ticket accessory assortment |
| Selected apparel (Bindel Jacket, Skinny Tinted, blouses) | The Apparel Co Inc. | ~$60K | Partially mitigated — other apparel SKUs are dual-sourced |
The California cluster comprises five vendors — Bedline (Oakland), Broyhill (San Mateo), Generation N (San Francisco), Hestra, and Flexsteel (San Jose) — including the portfolio’s #1, #2, and #4 suppliers. This inverts the standard risk playbook: offshore/logistics exposure is negligible, while correlated domestic regional risk is the dominant tail scenario. Seismic, wildfire-smoke, and grid events in the Bay Area would strike suppliers representing nearly two-thirds of the assortment at once.
The three risk axes are not independent. Bedline is simultaneously the largest supplier (29% of spend), the largest holder of single-source items (~$290K with no alternate), and located inside the Bay Area cluster. Concentration risk multiplies where these circles overlap — a Bay Area event is modeled at $70K+ per occurrence, before reputational cost on the flagship mattress line.
| Scenario | P (annual) | Exposure at risk | Impact per event | Expected loss / yr |
|---|---|---|---|---|
| S1 — Bedline failure or extended stoppage | 4% | $371K cost → ~$631K revenue | ~$39K | ~$1.6K |
| S2 — Broyhill or Apparel Co failure (each) | 4% | ~$240K cost each | ~$26K each | ~$2.1K combined |
| S3 — Bay Area regional event (hits 4–5 suppliers simultaneously) | 1.5% | $833K cost → ~$1.42M revenue | ~$70K+ | ~$1.0K |
| S4 — Indirect single points (leasing, cloud, key services) | 5% | $424K services | ~$15K | ~$0.8K |
How to read this. Expected-loss values are small because per-event probabilities are low and the spend base is $1.28M. The decision-relevant number is the per-event impact, especially S3: one event disrupting 65% of the assortment simultaneously breaks the “diversified enough” assumption that holds for uncorrelated supplier failures. Insurance-style reasoning applies — you mitigate S3 for the same reason you buy earthquake cover: tail severity, not expected value.
Measured lead-time caveat. PO→receipt intervals in the ERP average ~0–1.3 days (same-day receipting practice), so they cannot serve as recovery-time estimates. Recovery durations below use industry-standard requalification assumptions (10 weeks single supplier, 8 weeks regional), stated in Appendix A.
| # | Action | One-time | Annual | Benefit | Verdict |
|---|---|---|---|---|---|
| 1 | Dual-source the Bedline mattress lines — qualify one alternate for Contour + Patriarch (~$290K/yr flow) | $8–12K | ~$3K | Cuts S1 per-event impact ~70% ($39K → ~$12K); halves the top vendor’s single-source share | DO FIRST |
| 2 | Safety stock on top A-class single-source SKUs — 4 weeks extra cover on Box Spring, Estes Park core, Breeze Q/K | — | ~$8K carrying | Converts a 10-week outage into ~6 weeks across S1–S3; protects ~$50K margin per event | DO (A-items) |
| 3 | Geographic diversification policy — next qualified furniture/bedding vendor must be outside California | $0 | $0–2K | Directly attacks the 65% Bay Area concentration — the dominant tail risk | ADOPT NOW |
| 4 | Close the Generation N off-PO gap — $355K/yr buying outside purchase orders (§06) | ~2 days | $0 | Restores visibility and controls over ~16% of vendor spend; prerequisite for managing that vendor’s risk at all | DO |
| 5 | Dual-source Broyhill Estes Park + Apparel Co single-source lines | $16–24K | ~$5K | Reduces S2/S3 residual after actions 1–3 | PHASE 2 |
| 6 | Contractual protections with top-4 vendors — continuity clauses, 60-day notice, capacity commitments | ~$5K legal | $0 | Improves warning time; does not itself reduce exposure | AT RENEWAL |
| 7 | Broad multi-sourcing of the long tail (13 vendors, 12.8% of spend) | High | High | Negligible — tail exposure is economically immaterial | SKIP |
~$20K one-time + ~$12K/yr. Reduces single-source spend share from 65% → ~35%, cuts modeled Bay Area tail-event impact by roughly half, and restores procurement visibility over the largest off-PO spend gap. Payback: one avoided moderate disruption. Phase 2 (action 5) proceeds only after action 1 validates the qualification process.
The ranking of actions 1–4 is robust to assumption changes: doubling the supplier-failure base rate (4% → 8%) or extending recovery time (10 → 15 weeks) scales all expected losses proportionally without reordering priorities, because the ranking is driven by exposure structure (who is big, single-sourced, and co-located), not by the probability estimates. The only assumption that would materially change the program is the Bay Area event probability — at 5%/yr (vs 1.5%), action 3 escalates from “free policy” to “fund proactive relocation of volume,” i.e., accelerating action 5.
| Vendor | TTM billed | TTM PO spend | Observation |
|---|---|---|---|
| Generation N | $556.7K | $202.4K | $354K gap — more than half this vendor’s spend bypasses POs (drop-ship or unstructured buying); invisible to PO-based controls |
| FrisCo US | $249.8K | — | Recurring monthly billing; no PO trail; single point for its service |
| Davidson Leasing | $120.0K | — | Single bill; equipment leasing dependency |
| Dell US / Brocade | $101.0K / $84.2K | — | IT infrastructure; standard replaceable suppliers |
| Cloud Consulting | $53.6K | — | New relationship (Jul 2026), rapid spend ramp — monitor |
Off-PO spend is a control finding as much as a risk finding: dependency ratios computed on POs alone understate true reliance on Generation N (actual TTM relationship: ~$557K, which would make it the largest supplier overall). Action 4 addresses this directly.
Q1 — Vendor roster with default billing geography
SELECT v.id, v.entityid, v.companyname, v.isinactive, a.country, a.state, a.city FROM vendor v LEFT JOIN entityaddress a ON a.nkey = v.defaultbillingaddress ORDER BY v.companyname
Q2 — Vendor-bill spend: lifetime and trailing twelve months
SELECT t.entity AS vendor_id, v.entityid AS vendor,
COUNT(t.id) AS bill_count,
ROUND(SUM(t.foreigntotal),2) AS lifetime_spend,
ROUND(SUM(CASE WHEN t.trandate >= TO_DATE('2025-09-01','YYYY-MM-DD')
THEN t.foreigntotal ELSE 0 END),2) AS ttm_spend,
MIN(t.trandate) AS first_bill, MAX(t.trandate) AS last_bill
FROM transaction t
JOIN vendor v ON t.entity = v.id
WHERE t.type = 'VendBill'
GROUP BY t.entity, v.entityid
ORDER BY SUM(t.foreigntotal) DESC
Q3 — TTM PO spend by product category and vendor
SELECT COALESCE(c.name,'(none)') AS category, v.entityid AS vendor,
ROUND(SUM(ABS(tl.netamount)),2) AS ttm_po_spend
FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id
JOIN item i ON tl.item = i.id
LEFT JOIN classification c ON i.class = c.id
JOIN vendor v ON t.entity = v.id
WHERE t.type = 'PurchOrd' AND tl.mainline = 'F' AND tl.taxline = 'F'
AND t.trandate >= TO_DATE('2025-09-01','YYYY-MM-DD')
GROUP BY COALESCE(c.name,'(none)'), v.entityid
ORDER BY COALESCE(c.name,'(none)'), SUM(ABS(tl.netamount)) DESC
Q4 — Item-level sourcing depth (distinct vendors per item) and spend
SELECT i.id AS item_id, i.itemid, i.itemtype,
COUNT(DISTINCT t.entity) AS vendor_count,
ROUND(SUM(ABS(tl.netamount)),2) AS po_spend,
ROUND(SUM(CASE WHEN t.trandate >= TO_DATE('2025-09-01','YYYY-MM-DD')
THEN ABS(tl.netamount) ELSE 0 END),2) AS ttm_po_spend
FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id
JOIN item i ON tl.item = i.id
WHERE t.type = 'PurchOrd' AND tl.mainline = 'F' AND tl.taxline = 'F'
GROUP BY i.id, i.itemid, i.itemtype
ORDER BY SUM(ABS(tl.netamount)) DESC
Q5 — Single-source vs multi-source spend split
SELECT src.bucket, COUNT(*) AS items, ROUND(SUM(src.ttm),2) AS ttm_spend
FROM (
SELECT i.id, CASE WHEN COUNT(DISTINCT t.entity) = 1
THEN 'single-source' ELSE 'multi-source' END AS bucket,
SUM(CASE WHEN t.trandate >= TO_DATE('2025-09-01','YYYY-MM-DD')
THEN ABS(tl.netamount) ELSE 0 END) AS ttm
FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id
JOIN item i ON tl.item = i.id
WHERE t.type = 'PurchOrd' AND tl.mainline = 'F' AND tl.taxline = 'F'
GROUP BY i.id
) src
GROUP BY src.bucket
Q6 — Geographic concentration of TTM PO spend
SELECT COALESCE(a.state,'(unknown)') AS state, COALESCE(a.country,'(unknown)') AS country,
COUNT(DISTINCT v.id) AS vendors,
ROUND(SUM(ABS(tl.netamount)),2) AS ttm_po_spend
FROM transactionline tl
JOIN transaction t ON tl.transaction = t.id
JOIN vendor v ON t.entity = v.id
LEFT JOIN entityaddress a ON a.nkey = v.defaultbillingaddress
WHERE t.type = 'PurchOrd' AND tl.mainline = 'F' AND tl.taxline = 'F'
AND t.trandate >= TO_DATE('2025-09-01','YYYY-MM-DD')
GROUP BY COALESCE(a.state,'(unknown)'), COALESCE(a.country,'(unknown)')
ORDER BY SUM(ABS(tl.netamount)) DESC
Q7 — Open PO pipeline by vendor (in-flight exposure)
SELECT v.entityid AS vendor, t.status,
COUNT(t.id) AS open_pos, ROUND(SUM(t.foreigntotal),2) AS open_po_value
FROM transaction t
JOIN vendor v ON t.entity = v.id
WHERE t.type = 'PurchOrd' AND t.status IN ('A','B') -- A=Pending Receipt, B=Partially Received
GROUP BY v.entityid, t.status
ORDER BY SUM(t.foreigntotal) DESC
Q8 — PO→receipt lead-time proxy (found non-informative; see Appendix A)
SELECT v.entityid AS vendor, COUNT(DISTINCT r.id) AS receipts, ROUND(AVG(r.trandate - po.trandate),1) AS avg_lead_days, MAX(r.trandate - po.trandate) AS max_lead_days FROM transaction r JOIN transactionline rl ON rl.transaction = r.id AND rl.mainline = 'F' JOIN transaction po ON rl.createdfrom = po.id AND po.type = 'PurchOrd' JOIN vendor v ON po.entity = v.id WHERE r.type = 'ItemRcpt' GROUP BY v.entityid ORDER BY AVG(r.trandate - po.trandate) DESC