home
Requirements Catalogue Kingsway Retail Group — Fabric Data Platform — Sales & Stock Analytics ← engagement hub
Catalogue · phase design_refinement in-review · rendered from the engagement requirements-catalog.yaml — click any ID to follow a cross-reference
Golden referencethe hand-authored target catalogue a perfect discovery run should produce for Kingsway — every agent run is scored against this.compare with the agent-built catalogue →
No catalogue items match — clear the filter.

Conceptual model — which dimensions relate to which fact (click a node)

f_sales_linefact · one row per order line (transaction fact)d_storeD-001d_productD-002d_customerD-003d_channelD-004d_dateD-005
schema for f_sales_line — sourced from SE-001
f_stock_snapshotfact · one row per store per SKU per day (periodic snapshot fact)d_storeD-001d_productD-002d_dateD-005
schema for f_stock_snapshot — sourced from SE-006

Use cases

IDUse caseSponsorSuccess criteriaStatusLinks
UC-001Weekly trading pack (sales analytics)
Commercial exec, trading team, board (monthly)
Sarah WhitfieldChief Commercial OfficerMonday trading pack produced automatically — like-for-like sales, margin and discount by store, channel and category, on desks by 09:00 with data landed by 07:00approvedD-0001 D-0003
Q2.2 00:01:12 email
UC-002Daily stock availability & shrinkage monitoring
Supply chain, store operations
Priya NairSupply Chain DirectorPrevious day's stock position for every store and SKU available before the 08:30 trade call — stock on hand, stockouts, days of cover, shrinkageapprovedD-0002
Q2.3 00:01:05 email

User stories

IDStoryUse caseOwnerSourcesMetricsStatusSrc
US-001As a trading analyst I want weekly like-for-like sales by store and channel (52-weeks-trading rule) so the Monday pack needs no manual work
→ superseded by US-008
UC-001James OkonkwoHead of Trading AnalyticsS-001 S-003M-001 M-002confirmed
00:02:05 00:03:18
US-008As a trading analyst I want weekly like-for-like sales by store and channel, counting stores trading ≥52 weeks and excluding stores closed for refit >2 weeksUC-001James OkonkwoHead of Trading AnalyticsS-001 S-003M-001 M-002approved
00:03:00 email
US-002As a commercial manager I want gross margin by category computed with the cost in effect at the time of sale, so repriced products don't rewrite historyUC-001James OkonkwoHead of Trading AnalyticsS-001 S-002M-003approved
00:06:24
US-003As the CCO I want the online-versus-store revenue split daily, not buried in a monthly deckUC-001Sarah WhitfieldChief Commercial OfficerS-001M-001approved
00:10:05
US-004As a trading analyst I want markdown spend by category so we know what each promotion actually costUC-001James OkonkwoHead of Trading AnalyticsS-001 S-002M-004confirmed
00:11:00
US-005As the Supply Chain Director I want yesterday's stock on hand for every store and SKU on one screen before the 08:30 trade callUC-002Priya NairSupply Chain DirectorS-004 S-003 S-002M-005approved
00:01:05
US-006As the Supply Chain Director I want a daily stockout count by store (ranged SKUs with zero on hand at close) so availability problems surface before the Friday callUC-002Priya NairSupply Chain DirectorS-004M-006approved
00:04:50 00:04:15
US-007As the Supply Chain Director I want days of cover per store and SKU as the early-warning number for the trade callUC-002Priya NairSupply Chain DirectorS-004 S-001M-007confirmed
00:05:00 00:05:40
US-009As a marketing lead I want repeat-purchase and customer-segment analytics (DEFERRED to phase 2 — loyalty data too sparse)
→ superseded by D-0004
UC-001TBDMarketingS-001draft
00:13:30

Source systems

S-001 Vista POS + web checkout (order store) Vista Retail Solutions approved
BusinessJames OkonkwoHead of Trading Analytics
TechnicalDan HughesIT Platform Lead
DataJames OkonkwoHead of Trading Analytics
Access: Nightly CSV extract to landing (orders, order_lines, customers)Refresh: nightly ~03:00Volume: 46,000,000 rows, 120.0 GB, +8.0%/yrClass: confidentialPII: name, email, postcode
Q4.1 (S-1) 00:14:20
S-002 Merlin product master (PIM) In-house (SQL Server) approved
BusinessJames OkonkwoHead of Trading Analytics (interim — hierarchy ownership OQ-001)
TechnicalDan HughesIT Platform Lead
DataJames OkonkwoHead of Trading Analytics (interim)
Access: Weekly full CSV export (products, categories)Refresh: weekly full reloadVolume: 24,000 rowsClass: internalno PII
Q4.1 (S-2) 00:15:05
S-003 Property store list (SharePoint) SharePoint list (Property team) confirmed
BusinessProperty TeamEstates
TechnicalDan HughesIT Platform Lead
DataProperty TeamEstates
Access: Ad-hoc CSV export of the listRefresh: on change (in practice sporadic — expect staleness)Volume: 12 rowsClass: internalno PII
Q4.1 (S-3) 00:15:40
S-004 StockRoom WMS (inventory) In-house approved
BusinessPriya NairSupply Chain Director
TechnicalTom GallagherInventory Systems Manager
DataPriya NairSupply Chain Director
Access: Nightly snapshot CSV + receipts CSV to landingRefresh: nightly ~02:00 (snapshot); receipts Mon/ThuVolume: 380,000,000 rows, 90.0 GBClass: internalno PII
Q4.1 (S-4) 00:02:10

Data-quality findings

IDSourceIssueSevAffectsOwnerRemediationStatus
DQ-001S-001Null customer_id on guest checkouts: 45% of online orders have no customer; 64% of all orders overall (in-store captures a customer only on loyalty scan)mediumUS-003 US-009Emma RileyData & Insights LeadMap guest/anonymous orders to the explicit UNKNOWN member on d_customer (D-0005) so revenue always reconciles; do not drop rowsaccepted-risk
DQ-002S-002Duplicate natural key in products: 3 SKUs (KW-1017, KW-1042, KW-1058) appear twice — February supplier-feed re-import left stale rows behind when prices changed on 2026-06-10highUS-002 US-004Emma RileyData & Insights LeadDedup on sku keeping the row with the latest updated_at (per Emma — the later row is the live one); raise with Merlin owners for source-side cleanupopen
DQ-003S-002Orphaned order lines: discontinued SKUs are purged from Merlin while still selling through clearance (KW-0817, KW-0823, KW-0844 in the sample extract) — sales rows reference products that do not existhighUS-002James OkonkwoHead of Trading AnalyticsSentinel fallthrough on FK_ProductID in f_sales_line plus an unresolved-FK rate check; longer term, stop purging discontinued SKUs from Merlinopen
DQ-004S-003Stale store list: ST-0011 Croydon Centrale (opened 2026-06-05) trades in POS and snapshots in StockRoom but is missing from the Property list — orphan store_id in both data productshighUS-001 US-008 US-005Emma RileyData & Insights LeadOrphan-store DQ alert on load; interim auto-stub row on d_store for unknown store_ids; fix the Property update processopen
DQ-005S-004Negative qty_on_hand at ST-0006 Glasgow: store posts shrinkage adjustments directly with no zero-floor; rows are real, not load corruptionmediumUS-005 US-007Tom GallagherInventory Systems ManagerPass through to bronze/silver unmodified; flag in the availability views and exclude negative rows from days-of-cover; chase stock office to post correctionsopen
DQ-006S-004Missing snapshot day: the nightly job failed for ST-0004 Leeds on 2026-06-21 leaving the store-day blank; job does not self-heal (~2×/year)mediumUS-005 US-007Tom GallagherInventory Systems ManagerCompleteness check (expected store×SKU row count per day) with alert; days-of-cover logic must treat a missing day as unknown, not zero stockopen
DQ-007S-001loyalty_id populated on only ~25% of the customer file — loyalty relaunch stalled; customer-level analytics not viable this phaselowUS-009Emma RileyData & Insights LeadAccepted for phase 1 (drives D-0004 deferral); revisit after the loyalty relaunch completesaccepted-risk

Conformed silver entities

IDEntityGrainBusiness keySCDOwnerSourcesStatus
SE-001pos_orderone row per orderorder_idnoneJames OkonkwoHead of Trading AnalyticsS-001confirmed
SE-002pos_order_lineone row per order lineorder_line_idnoneJames OkonkwoHead of Trading AnalyticsS-001confirmed
SE-003productone row per SKU per validity period (SCD2)skuscd2James OkonkwoHead of Trading Analytics (interim)S-002confirmed
SE-004storeone row per storestore_idscd1Property TeamEstatesS-003confirmed
SE-005customerone row per customer (plus explicit UNKNOWN member)customer_idscd1James OkonkwoHead of Trading AnalyticsS-001confirmed
SE-006stock_snapshotone row per store per SKU per snapshot daystore_id sku snapshot_datenonePriya NairSupply Chain DirectorS-004confirmed
SE-007stock_receiptone row per delivery linereceipt_idnonePriya NairSupply Chain DirectorS-004confirmed

Fact × Dimension × Metric matrix

f_sales_line grain one row per order line (transaction fact) · owner James OkonkwoHead of Trading Analytics
IDMetricDefinitionUsed byPlacementOwnerStatus
M-001Net revenue
by store / channel / category, week-on-week, like-for-like (per D-0003 store eligibility), vs same week last year
Gross takings excluding VAT (POS unit_price is VAT-inclusive — divide by 1.2), after line-level discounts, before card fees. Returns (negative-quantity lines) net off in the week the return happens.US-001 US-008 US-003Trading pack p.1; daily channel-split viewMark DaviesFinance Controllerapproved
M-002Units sold
by store / channel / category
Sum of order-line quantity, including negative return/exchange linesUS-001 US-008Trading pack p.1James OkonkwoHead of Trading Analyticsconfirmed
M-003Gross margin
margin %, by category
Net revenue minus (units × unit_cost effective at the date of sale, via the SCD2 product dimension — D-0002). Gross of supplier funding pending OQ-002.US-002Trading pack p.2 (category view)Mark DaviesFinance Controllerconfirmed
M-004Markdown / discount spend
discount rate (discount ÷ gross), by category / promotion window
Sum of line_discount excluding VAT (divide by 1.2). Reference case is the mid-season sale, 20% off Womenswear 12–22 June 2026.US-004Trading pack p.2James OkonkwoHead of Trading Analyticsconfirmed
f_stock_snapshot grain one row per store per SKU per day (periodic snapshot fact) · owner Priya NairSupply Chain Director
conformed dims: d_store d_product d_date · from SE-006
IDMetricDefinitionUsed byPlacementOwnerStatus
M-005Stock on hand
by store / SKU / category
qty_on_hand from the nightly snapshot — the closing position of the previous trading day (snapshot job runs ~02:00; NOT the morning opening position). Semi-additive — never sum across days.US-005Morning availability screen (08:30 trade call)Priya NairSupply Chain Directorapproved
M-006Stockout count
by store, by SKU (chronic-stockout ranking)
Daily count of ranged store×SKU positions with qty_on_hand = 0 at close. Zero, not "low". (Sample data reference — KW-1042 Everyday Wrap Dress is out of stock ~56% of store-days.)US-006Morning availability screen; weekly availability summaryPriya NairSupply Chain Directorapproved
M-007Days of cover
by store / SKU, thin-cover exceptions (< 7 days)
Stock on hand ÷ average daily units sold over the trailing 28 days (from f_sales_line — cross-product dependency on the conformed store and product dimensions). Missing snapshot days (DQ-006) are unknown, not zero; negative on-hand rows (DQ-005) excluded.US-007Morning availability screen (early-warning column)Priya NairSupply Chain Directorconfirmed
M-008Shrinkage (units)
shrinkage value (units × unit_cost)
Prior-day stock on hand + receipts − units sold − current stock on hand, per store×SKU×day. Caveat — Glasgow's raw negative adjustments (DQ-005) already embed shrinkage; flag, don't double-count.US-005Weekly shrinkage report by storePriya NairSupply Chain Directorconfirmed

Dimensions

IDDimensionGrainSCDSource SEOwnerStatus
D-001d_storestorescd1SE-004Property TeamEstatesapproved
D-002d_productSKUscd2SE-003James OkonkwoHead of Trading Analytics (interim)approved
D-003d_customercustomer (with explicit UNKNOWN member for guest/anonymous orders)scd1SE-005James OkonkwoHead of Trading Analyticsapproved
D-004d_channelsales channel (store / online)noneSarah WhitfieldChief Commercial Officerapproved
D-005d_datecalendar day (with UK trading-week and working-day attributes)noneEmma RileyData & Insights Leadconfirmed

Non-functional requirements

IDCategoryRequirementTargetOwnerStatus
NFR-001SLAData landed and processed by 07:00 UK each weekday; Monday trading pack out by 09:0007:00 data / 09:00 pack, 99% of weeksSarah WhitfieldChief Commercial Officerapproved
NFR-002Data residencyAll data remains in the UK; customer PII never leaves UK SouthUK South only; no cross-region replicationDan HughesIT Platform Leadapproved
NFR-003RetentionSales transactions 7 years; daily stock snapshots 13 months then monthly aggregates; customer file active + 2 yearsper category (Q6.3)Priya NairSupply Chain Directorconfirmed
NFR-004ConcurrencySupport Monday-morning report load~80 concurrent report usersDan HughesIT Platform Leaddraft

Open questions & contradictions

OQ-001open→ resolve in sources_qualitySarah WhitfieldChief Commercial Officer
Who owns the product hierarchy — trading or merchandising? (Categories restructure every spring and break reporting; S-002 ownership is interim)
surfaced from: transcript kickoff @ 00:18:00: 'who actually owns the product hierarchy — trading or merchandising?'
OQ-002open→ resolve in design_refinementMark DaviesFinance Controller
Is supplier-funded markdown netted off gross margin in the trading pack? (CFO policy call; margin stays gross of supplier funding until resolved)
surfaced from: transcript kickoff @ 00:18:40 + email <KWR-FIN-20260617-0412@kingswayretail.co.uk>: 'Leave margin gross of supplier funding for now'
OQ-003resolved→ resolve in sources_qualityTom GallagherInventory Systems Manager
CONTRADICTION (resolved): is the 02:00 snapshot the morning opening position (Priya's assumption) or the previous day's close (Tom)? Resolution: previous trading day's close, confirmed in writing.
surfaced from: stock-deepdive @ 00:02:48 vs 00:03:05; resolved by email <KWR-OPS-20260624-1187@kingswayretail.co.uk>
OQ-004resolved→ resolve in design_refinementJames OkonkwoHead of Trading Analytics
CONTRADICTION (resolved): like-for-like = 52 weeks trading only (James, kickoff) vs also excluding refit closures (Sarah, design review). Resolution: D-0003 — 52 weeks AND exclude refit closures >2 weeks.
surfaced from: kickoff @ 00:03:18 vs design-review @ 00:02:15; resolved design-review @ 00:03:20

Decision log

IDDecisionStatusDecidedApproverEvidenceAffects
D-0001Net revenue = ex-VAT, after line discounts, before card feesapproved2026-06-17Mark DaviesM-001 US-001 UC-001
D-0002Product price/cost history kept as SCD2 on d_product (platform-side — Merlin overwrites in place)approved2026-06-30Dan HughesD-002 SE-003 M-003 S-002
D-0003Like-for-like definition: stores trading ≥52 weeks, excluding stores closed for refit >2 weeksapproved2026-06-30Sarah WhitfieldUS-001 US-008 M-001
D-0004Customer-level analytics deferred to phase 2 (loyalty data too sparse)approved2026-06-16Sarah WhitfieldUS-009 DQ-007
D-0005Guest/anonymous orders map to an explicit UNKNOWN member on d_customerapproved2026-06-30James OkonkwoDQ-001 SE-005 D-003