Prototype - Sample data for demonstration
Dashboard
Last refresh: 16 Mar 2026 06:45

Welcome to the Standard Wool Data Platform

This dashboard covers 6 analytical reports built on data from WTS (JHP, DEWSDB0). Take a guided tour to see how each report maps to a user story, or explore on your own - look for the pulsing hotspots for context.

Net Position
-42,300 kg
Short across 8 wool types
P&L Exposure
−£186,400
At current replacement prices
Cash Outflow (4 wk)
£1.24M
73% with confirmed dates
Avg Stock Age
67 days
142 lots · £38k holding cost
Avg Margin (MTD)
11.3%
Weighted · up from 9.8% last month
Position Summary
Long/short by wool code against forward sales
Wool CodeRequiredIn StockNetStatus
64s NZ Fleece18,200 kg12,400 kg-5,800Short
60s AU Fleece24,500 kg8,100 kg-16,400Short
56s SA Crutch6,800 kg14,200 kg+7,400Long
70s NZ Lamb9,300 kg2,100 kg-7,200Short
58s AU Pieces5,400 kg11,600 kg+6,200Long
Stock Aging Distribution
By value held in warehouse
0-30 days
£412k
35%
31-60 days
£330k
28%
61-90 days
£259k
22%
90+ days
£177k
15%
Total stock value: £1,178,000 · Estimated holding cost: £38,200
Recent Margin Performance
Daily weighted margin including holding costs
DateInvoicesRevenueCostHolding CostRaw MarginWeighted Margin
15 Mar4£84,200£72,600£1,24013.8%12.3%
14 Mar7£156,800£141,200£2,8909.9%8.1%
13 Mar3£61,400£52,100£98015.1%13.5%
12 Mar5£112,300£100,900£1,81010.1%8.5%
1 User Story 1: Blend Recipe Derivation
1
As a trader, I want to see the average blend recipe for a given product and client, so I can create consistent blends without relying on memory.
Recipe = Product + Client, averaged from the last N similar blends. The blend-to-sale linkage traces through ALLOCATION (only exists after invoicing).
Data: JHP.BLEND → BLEND_RESULTS → ALLOCATION → SALE.CUST_CODE
Blend Recipe Derivation
Average input proportions from historical blends by product and client
?
Story 1 Fallback behaviour
If fewer than 5 matching blends exist, all available matches are shown with a small sample warning. If no matches exist for this product/client, it falls back to the same product across all clients. Try selecting Botto Giuseppe + 70s NZ Lamb to see this.
Acceptance criteria: Falls back to showing blends for the same product across all clients when no match exists.
Got it
5 matching blends found for Schneider Group + 64s NZ Fleece
Average Recipe: 64s NZ Fleece for Schneider Group
Based on 5 blends (SS-4281, SS-4256, SS-4234, SS-4198, SS-4172) · Avg yield: 72.4%
H-8834 NZ 64s Fleece FNF
42%
42.0%
H-8821 NZ 64s Fleece BKN
24%
24.0%
H-8790 NZ 66s Fleece FNF
18%
18.0%
H-8756 AU 64s X-bred
11%
11.0%
H-8812 NZ 62s Pieces
5%
5.0%
Blend (SS)DateInput Weight (kg)Output Weight (kg)Yield# Input LotsClient Link
SS-428128 Feb 20268,4206,15073.0%4Invoiced
SS-425614 Feb 20267,8905,68072.0%5Invoiced
SS-423430 Jan 20269,1006,62072.7%4Invoiced
SS-419812 Jan 20268,0505,84072.5%5Invoiced
SS-417218 Dec 20257,6005,49072.2%4Invoiced
2 User Story 2: Stock Position Report (Long/Short)
2
As a trader, I want to see whether I'm long or short on each wool type against my forward sales commitments, so I can make informed buying decisions.
Converts forward sales into wool type requirements using derived recipes (Story 1), then compares against current stock minus allocations. Groups by WOOL_CODE because WOOL_CLASS is unreliable.
Data: JHP.SALE_ITEM + BLEND_INV_SUMMARY + GREASY_INV_SUMMARY + ALLOCATION + derived recipe
Total Short
-42,300 kg
Across 8 wool types
Total Long
+31,800 kg
Across 5 wool types
Forward Sales
127
Open commitments
No Recipe
3
Sales with unknown position
Long/Short Position by Wool Code
Forward sales requirements vs current stock, net of allocations
WOOL_CLASS grouping is unreliable. Showing by specific WOOL_CODE. 3 sales flagged as "position unknown - no recipe history".
?
Story 2 Product grouping risk
WOOL_CLASS in JHP.WOOL is "airy fairy" (Pete's words) - different recipes get lumped under the same group, and the decision to create vs reuse a wool code is inconsistent. The dropdown lets you try WOOL_CLASS grouping but shows a warning. An open question is whether to propose a new taxonomy.
Pain point PP2 / PP7: Primary view groups by WOOL_CODE. WOOL_CLASS grouping is optional with accuracy warning.
Got it
Wool Code Division Forward Required (kg) In Stock (kg) Allocated (kg) Net Position (kg) Status
60s AU FleeceScour 24,5008,1003,200 -19,600 Short
64s NZ FleeceScour 18,20012,4005,600 -11,400 Short
70s NZ LambScour 9,3002,100800 -8,000 Short
62s NZ BelliesScour 4,2003,9001,100 -1,400 Short
48s NZ OddmentsMerch 1,20016,800400 +15,200 Long
56s SA CrutchScour 6,80014,2002,800 +4,600 Long
58s AU PiecesMerch 5,40011,6002,400 +3,800 Long
66s NZ FleeceScour 3,1003,300200 0 Balanced
60s ZA Fleece No RecipeScour 2,800?? unknown No Data
3 User Story 3: Profit & Loss Analysis
3
As a trader, I want to see the P&L impact of replacing wool I'm short on at today's market price, so I can understand the true cost of fulfilling forward sales.
Only applies to short positions (from Story 2). Compares replacement cost at market price against average cost of current stock. Currency conversion via CURRENCY.CONV_FACTOR. Traders can override market prices for scenario modelling.
Data: Stock position (Story 2) + JHP.SALE.Replacement_Cost + BLEND_INV_SUMMARY.NATIVE_COST
Total P&L Exposure
−£186,400
Cost to cover all short positions
Short Positions
4
Wool types below requirement
Avg Replacement Premium
+8.2%
Over current stock cost
Stale Prices
1
Replacement cost > 7 days old
P&L Impact - Short Position Replacement
Cost of covering short positions at current market replacement prices (GBP)
Wool Code Qty Short (kg) Avg Stock Cost /kg Replacement /kg Premium Total Exposure Price Date
60s AU Fleece 19,600 £4.82 £5.31 +10.2% −£96,100 14 Mar
64s NZ Fleece 11,400 £5.14 £5.68 +10.5% −£61,600 14 Mar
70s NZ Lamb 8,000 £6.20 £6.48 +4.5% −£22,400 15 Mar
62s NZ Bellies 1,400 £3.90 £4.40 +12.8% −£6,300 8 Mar
Total 40,400 kg +8.2% avg −£186,400
Exchange rates: NZD/GBP 0.4712 (contracted forward), AUD/GBP 0.5134 (spot) · 62s NZ Bellies replacement price is 8 days old - update price
?
Story 3 Price staleness
Where SALE.Replacement_Cost is stale or missing, the report flags those rows for manual update. An open question is whether this price comes from a manual entry or an external feed.
Got it
Scenario Analysis
Adjust replacement prices to model different market conditions
Current Exposure
−£186,400
+5% Scenario
−£197,200
-5% Scenario
−£175,600
4 User Story 4: Cash Flow Forecasting
4
As a trader, I want to see a weekly forecast of purchase outflows for the next 3-6 months, so I can plan cash requirements and negotiate better terms.
Purchase outflows are ~80% of costs. Grouped by expected payment week (delivery date + payment terms offset). Missing dates are surfaced explicitly rather than silently excluded. Confidence fades beyond week 8 as fewer contracts have dates.
Data: JHP.PURCHASE_ITEMS + PURCH_DELIVERY_STAGES.ARRIVAL_DATE + SALE_INVOICE.PAYMENT_DATE
4-Week Outflow
£1.24M
Purchase commitments due
4-Week Inflow
£890k
Expected receivables
Net Cash Flow
−£350k
Next 4 weeks
Date Coverage
73%
Contracts with valid dates
Weekly Cash Flow Forecast
Purchase outflows and sale receivables by week (GBP)
27% of open purchase contracts are missing payment dates (£462k unscheduled). Data completeness degrades beyond week 8.
£340k
W/C 17 Mar
£290k
W/C 24 Mar
£310k
W/C 31 Mar
£300k
W/C 7 Apr
£260k
W/C 14 Apr
£220k
W/C 21 Apr
£180k
W/C 28 Apr
£150k
W/C 5 May
£120k
W/C 12 May
£90k
W/C 19 May
Purchase outflows
Sale receivables
Low confidence (fewer dated contracts)
Unscheduled Contracts
?
Story 4 Data quality surfacing
Pete flagged that payment/due dates on purchase contracts are "sometimes missing or wrong." Rather than silently excluding them, the platform surfaces these gaps so traders can fix them. The "data completeness" KPI (73%) tracks improvement over time.
Got it
Purchase contracts without valid payment or delivery dates
PO NumberSupplierValue (GBP)CurrencyIssue
PO-8834Canterbury Wool Growers (NZ)£142,000NZDNo Delivery Date
PO-8821Cape Mohair (SA)£98,400ZARNo Payment Terms
PO-8799Lempriere (AU)£86,200AUDDelivery Date Past
PO-8776Segard Masurel (FR)£74,800EURNo Delivery Date
PO-8761NZ Merino Co (NZ)£60,600NZDBoth Missing
Total unscheduled £462,000
5 User Story 5: Stock Aging for Weighted Margin
5
As a trader, I want to see how long each stock lot has been in the warehouse, so I can factor holding costs into margin calculations and prioritise old stock.
Age = today - receipt date. Scoured (SS): receipt = BLEND_DATE. Greasy (H): receipt = earliest deliveryNote where IsAReceipt=true. SS lots map to DEWSDB0 via C-prefix CustomerRef (not OurRef). Holding cost feeds into the margin report (Story 6).
Data: JHP.BLEND_RESULTS + DEWSDB0.stock.stockLot + stock.deliveryNote (cross-system join)
Lots in Stock
142
Scoured + greasy
Average Age
67 days
Weighted by value
Over 90 Days
18 lots
£177k value · £12.4k holding cost
Total Holding Cost
£38,200
At 6.5% annual financing rate
Stock Aging Detail
All lots in warehouse, ordered by age (oldest first)
Lot Number Type Wool Code Weight (kg) Value (GBP) Receipt Date Days Holding Cost Age
SS-4089Scoured48s NZ Oddments 4,200£16,800 28 Nov 2025108£326 90+
H-8612Greasy56s SA Crutch 6,800£24,500 5 Dec 2025101£442 90+
SS-4102Scoured58s AU Pieces 3,600£14,400 12 Dec 202594£242 90+
H-8645Greasy60s AU Fleece 5,200£25,100 22 Dec 202584£376 61-90
SS-4178Scoured64s NZ Fleece 2,800£14,400 3 Jan 202672£185 61-90
SS-4201Scoured70s NZ Lamb 2,100£13,020 18 Jan 202657£132 31-60
H-8701Greasy64s NZ Fleece 8,400£40,320 28 Jan 202647£338 31-60
SS-4256Scoured60s AU Fleece 5,680£27,380 14 Feb 202630£147 0-30
H-8756Greasy56s SA Crutch 7,400£28,860 1 Mar 202615£77 0-30
SS-4281Scoured64s NZ Fleece 6,150£31,570 5 Mar 202611£62 0-30
Showing 10 of 142 lots · Financing rate: 6.5% p.a. · Cross-system mapping: SS lots matched via C-prefix CustomerRef in DEWSDB0
?
Story 5 Cross-system lot mapping
SS lot numbers in JHP don't map directly to DEWSDB0. The warehouse tracks scoured stock under C-prefix lots (1,070 of them), with the SS number in the CustomerRef field. The stored procedure joins via CustomerRef, not OurRef. 33% of stockDelivery records have orphaned BaleIDs (QA finding F5), so the report uses lot-level receipt dates.
Got it
6 User Story 6: Margin Report (Daily Production)
6
As a trader, I want to see the margin report updated daily rather than monthly, so I can react to margin changes quickly.
Existing MARGIN_REPORT procedure upgraded from monthly to daily (before 8am). "Weighted margin" deducts estimated holding costs (Story 5) from raw margin. Low-margin rows (below 5% weighted) are highlighted for attention.
Data: JHP.MARGIN_REPORT procedure + SALE_INVOICE + SINVOICE_ITEMS + Stock aging (Story 5)
Today's Margin (Raw)
13.8%
4 invoices processed
Today's Margin (Weighted)
12.3%
After holding costs deducted
MTD Average
11.3%
Weighted margin, 15 days
vs Last Month
+1.5pp
Feb avg was 9.8%
Daily Margin Report
Invoice-level margin with holding cost adjustment · Refreshed daily at 06:45
Invoice Date Client Trader Wool Code Sale Price Stock Cost Holding Cost Raw Margin Weighted Margin
INV-22841 15 Mar Schneider Group pha 64s NZ Fleece £32,400 £27,200 £480 16.0% 14.6%
INV-22840 15 Mar Botto Giuseppe kstirk 60s AU Fleece £24,800 £21,900 £380 11.7% 10.2%
INV-22839 15 Mar Abraham Moon pha 56s SA Crutch £18,200 £16,100 £240 11.5% 10.2%
INV-22838 15 Mar Zegna mwren 70s NZ Lamb £8,800 £7,400 £140 15.9% 14.3%
INV-22835 14 Mar Schofield & Smith jov 48s NZ Oddments £12,600 £12,100 £326 4.0% 1.4%
INV-22834 14 Mar Schneider Group pha 64s NZ Fleece £44,200 £39,800 £620 10.0% 8.6%
INV-22833 14 Mar Botto Giuseppe kstirk 60s AU Fleece £38,600 £34,200 £540 11.4% 10.0%
INV-22832 14 Mar Südwolle Group mwren 66s NZ Fleece £28,400 £25,800 £410 9.2% 7.7%
Showing 8 of 42 invoices this month · Highlighted row: weighted margin below 5% threshold · Cancelled invoices excluded
?
Story 6 Weighted margin explained
The "weighted margin" column deducts estimated holding costs (from Story 5) from the raw margin. INV-22835 shows 4.0% raw but only 1.4% weighted - the 48s NZ Oddments lot (SS-4089) has been in stock 108 days, eroding the margin through financing costs.
Dependency: Story 6 depends on Story 5 (Stock Aging) for holding cost data.
Got it