Viaduct · Engagement Phase 1

What data we actually have

A complete map of the Dunlop Sports America S&OP data estate — every file, every column, every sheet — and the three gaps that decide whether the rest of this engagement is measurable.

Prepared30 Aug 2026
SourcesMy Mai (IT) · Brian (VP Planning)
Files examined16 data files
Rows profiled2.0 M
Workbook sheets235

A1Summary

DSA has sent us ten of the twenty-four datasets we asked for. The ten that arrived are rich enough to build on. The fourteen that didn't include two that quietly determine whether we can measure anything at all.

The estate splits cleanly in two. My Mai's extracts are eleven system pulls from JDE — shipments, item master, purchase orders, inventory, market data — delivered as flat files against a formal request specification. Brian's files are five Excel workbooks, and they are not extracts at all: they are the planning process. The SRX workbooks carry 79 sheets each, and the plan itself exists nowhere but inside them.

That asymmetry is the single most important structural fact in this document. The forecast we are being asked to improve is not a system output that can be queried. It is a spreadsheet built by hand, one channel at a time, from six manually entered drivers. Everything downstream of that — accuracy benchmarking, value estimation, automation — depends on reading it correctly first.

Resolved during this pass

Both data issues flagged at kickoff turned out to have different root causes than assumed. The missing shipping detail in T02OrderData.csv is not a bad extract — it is a dataset that was never requested to contain it. The disagreement between F01HistoricalForecast.xlsx and the B1 submission is not an error — it is a brand-coverage gap that reveals missing workbooks nobody had noticed. Both are set out in full below.

A2Delivery coverage

My's own request register — DSA_Data_Request_vShare.xlsx — lists 24 datasets with priorities, grains, join keys and DSA's own availability assessment. It is the most useful file in the estate, because it lets us measure delivery against intent rather than guess.

TRANSACTIONAL & DIMENSIONAL · T-SERIES T-01 Plan rowsNot in JDEBrian only · P0 T-02 Shipments640,433 rowsdelivered · P0 T-03 Open orderavailableNOT SENT · P1 T-04 Order dateavailableNOT SENT · P1 T-05 Item master14,742 rows7 cols empty · P0 T-06 Channel dim71,369 rowsgrain differs · P0 T-07 Pricing2,554 rowsno clubs · P1 T-08 Calendarnot in systemwe generate · P2 FORECASTING INPUTS · F-SERIES F-01 Hist. fcst62,739 rowsB1–B4 ×3yr · P0 F-02 Sell-throughavailableNOT SENT · P1 F-03 Acct on-handavailableNOT SENT · P1 F-04 Inventory1 SNAPSHOT ONLYno history · P0 F-05 Purch. orders155,924 rowsdelivered · P1 F-06 Backordersno responseP2 F-07 BOM13,235 rowsstructurally void F-08 Comp invno responseP2 F-09 Returnsno responsebut see T-02 F-10 Non-salesno responseP2 F-11 Promotionsno responsemarkdown driver F-12 Launch cal.Brian must supplydeclined · P1 F-13 Golf Datatech222,448 rows2007–2026 · P1 F-14 NGF1,880 rowsno rounds played F-15 Mix detailno response#1 BO driver F-16 Canadano responseP2 TALLY 10 delivered 4 available, not sent 8 no response 2 declined Of the four marked "available, not sent", T-03 and T-04 are the order-level shipping detail assumed missing from T-02. F-02 sell-through is described in DSA's own register as "the truer demand signal" with a working ML pilot already against it.
Figure 1 — Coverage against the request register. Colour encodes delivery state, not priority. The dashed borders are the actionable group: DSA has confirmed these exist and can be extracted, they simply weren't included in the transfer. That is a follow-up email, not a project risk.

A3Findings that matter

Five findings change what we do next. They are ordered by how much they affect the plan, not by how interesting they are.

1

The SRX workbook covers one brand out of five

Every SRX workbook we hold plans Srixon only — the BRAND column contains exactly one value, SRX, across all 1,067 build-up rows. But F01HistoricalForecast.xlsx is portfolio-wide, covering Cleveland Golf, XXIO, Asics, Never Compromise and SRX Accessories.

That gap is 1.71 M units, 24% of the 2026 B1 plan. Those brands are planned somewhere — almost certainly in equivalent workbooks we have never been sent. Until we see them, any statement we make about "the plan" describes three-quarters of it.

2

Inventory has exactly one snapshot

F04OnHandInventory.csv holds 9,966 rows, all stamped 2026-08-18, across two locations. DSA's own register already flagged history as unavailable.

Inventory optimization is the engagement's primary value driver, and a single snapshot cannot support it — no turns, no ageing, no excess trend, no working-capital movement. This is also the only finding here that gets worse with time: if DSA isn't archiving monthly snapshots, every month we wait is permanently unrecoverable. Worth raising this week regardless of where Phase 1 stands.

3

B1 is far thinner than the submissions that follow it

Across three plan years, B1 carries a fraction of the detail of later cycles — 372 rows against B2's 3,067 for plan year 2024; 762 against B3's 3,849 for 2025. The 2024 B1 submission has no unit figures at all.

This directly shapes Step 2. Benchmarking "B1 accuracy" against actuals is only meaningful where B1 was submitted at a comparable grain, and for two of the three years it wasn't. The 2026 cycle (10,728 rows) is the first that supports a serious comparison.

4

The item master is delivered but hollowed out

Seven of eighteen columns in T05ItemMaster.csv are 100% empty: VARIANT_GROUP, GENERATION, PREDECESSOR_ITEM, LAUNCH_DATE, EOL_DATE, DEGREE, USED_CLUBS_FLAG.

Each was explicitly requested. Their absence removes predecessor-based new-product forecasting, lifecycle logic, and the mix analysis that DSA's own register calls the team's number one backorder driver.

5

The workbook disagrees with itself

Inside the single B1 Submitted file, the 2026 - SALES build-up totals 5,365,101 units while the 2026 SOP Template Format sheet — the tab shaped like the actual submission — totals 5,349,631. A 15,470-unit drift between two tabs of the same workbook.

F01 matches the build-up sheet, not the template sheet. So the submission tab is a stale copy that was not refreshed before the file was saved. That is a manual-process control gap, and it is exactly the class of problem that software removes.

A4The F01 reconciliation

This was the founding question: F01HistoricalForecast.xlsx does not agree with the B1 forecast in the SRX submission. Because if two sources disagree about what was forecast, "forecast accuracy" has no single definition and Step 2 cannot start.

It resolves cleanly. The two files disagree because they cover different scopes, not because either is wrong.

2026 PLAN YEAR · B1 SUBMISSION · UNITS 7,075,630 F01 Historical portfolio-wide 3,576 rows −971,269 SRX Accessories −535,656 Cleveland / NC −160,556 XXIO −43,017 Asics + other 1,710,499 units · 24.2% of plan brands with no workbook in our possession chip size is uniform — values differ by 20× 5,365,101 SRX “2026 – SALES” Srixon only · 1,067 rows matches F01 to ±30 units 5,349,631 “SOP Template Format” same workbook stale by 15,470 ≠ Three of seven Srixon product lines reconcile exactly: Range Balls 1,711,543 · Other 3pc Balls 749,291 · SRX Woods 22,070. Four carry residuals: Z-Series +23,052 · 2 Piece Balls −4,474 · 3 Piece Balls −3,474 (absent from F01 entirely) · SRX Irons +396.
Figure 2 — F01 reconciles to the build-up sheet once brand scope is matched. The headline disagreement is entirely explained by portfolio coverage. What survives is smaller and more interesting: a ±30-unit tie to the build-up tab, four product lines carrying residuals worth chasing, and a submission tab inside the workbook that is 15,470 units stale. The Z-Series residual (+23,052) is the largest and the one to open with — it is the only one big enough to move a product-line accuracy figure.
Srixon product lines — F01 against the workbook's own submission tab, 2026 B1
Product lineF01SOP Template tabResidualRead
Range Balls1,711,5431,711,5430Exact
Other 3pc Balls749,291749,2910Exact
SRX Woods22,07022,0700Exact
SRX Irons514,689514,294+396Rounding-scale; ignore
2 Piece Balls1,534,0931,538,566−4,474Small; likely late edit
3 Piece Balls03,474−3,474Absent from F01 entirely — a line that exists in the workbook never reached the downstream record
Z-Series833,445810,393+23,052Largest residual. Start here
Subtotal5,365,1315,349,631+15,500F01 ties to the 2026 - SALES build-up (5,365,101) within 30 units

What this means for Step 2

We now have a defensible answer to "which source is authoritative": for Srixon, the YYYY - SALES build-up tab is the system of record, and F01 is a faithful downstream copy of it. B1 accuracy can be benchmarked. But it can only be benchmarked for Srixon until the other brands' workbooks arrive — and the 2026 cycle is the only year where B1 was submitted at sufficient grain to make the comparison fair.

A5Agreement map

Seven business concepts appear in more than one place. Where two sources describe the same thing, we can measure whether they agree — and the answers range from a 0.1% tie to a sheet that disagrees with its own predecessor on two-thirds of its rows.

Duplication here is not waste. It is the only cross-check available, and in three cases it is the only route to data DSA told us did not exist.

DUPLICATED — CROSS-CHECK POSSIBLE Shipment actuals T02 (JDE) SHIP DATA tabs invoice-date sheet fails by year Plan — closed years “YYYY – SALES” × 3 vintages 94–100% frozen Plan — live year 2025 – SALES, B1’24 → B1’25 37% unchanged Forecast → downstream F01 SALES build-up ±30 units (Srixon) Forecast — same file SALES build-up SOP Template tab 15,470 units apart Inventory F04 INV by Item × 3 vintages 4 dates, not 1 Purchase orders F05 PO by Item Data workbook tab empty SINGLE SOURCE — NOTHING TO CHECK AGAINST F13 Datatechexternal F14 NGFexternal T05 Item masterthe spine itself T06 Channel dimcustomer grain T07 Pricing17% of items F07 BOMstructurally void Other brandsF01 only The four brands outside Srixon are the most exposed: 24% of plan volume, present in exactly one source, with no build-up behind it and no second opinion. Everything we know about how those numbers were produced is inference. Agreement figures are measured on shared keys after normalisation; see the appendix for method and caveats.
Figure 6 — What can be cross-checked, and how well it agrees. Green means two sources tell the same story. Red means they don't, or the check isn't possible. The inventory row is the surprise: what looked like a single snapshot is four observations once the workbook copies are counted.

Duplicated concepts, measured

Agreement between sources describing the same thing
ConceptSources comparedAgreementWhat the gap is
Shipment actuals T02 (JDE) vs SHIP DATA 2, 2021–25 0.11%
on a 5-year total
0.43–1.61×
year by year
Do not rely on the aggregate. Over 2021–25 the two agree to 0.11% — 26,218,239 against 26,189,213 — but that is an artifact of offsetting annual errors. Year by year the ratio swings from 0.43× (2022) to 1.61× (2024). Raw units instead of pieces does not fix it either (0.83× to 2.69×). Most likely a date-basis difference: the workbook columns are named Pieces Ordered_Report Date. Unresolved.
Plan — closed years 2022/2023/2024 – SALES across the three workbook vintages 94–100% Once a plan year is past, the sheet freezes. 2023 is byte-identical across vintages. 2022 drifted +5.6% between the 2024 and 2025 files on just 11 rows — a restatement of closed history two years after the fact, worth one question.
Plan — live year 2025 – SALES: 2024 B1 file → 2025 B1 file 37.2% The plan is rebuilt, not adjusted. 766 SKU-channel rows dropped, 965 added, only 310 of 833 surviving rows unchanged. Volume +7.1%. By the following cycle it settles to 96.2%.
Forecast → downstream F01 vs 2026 – SALES, Srixon only ±30 units 5,365,131 vs 5,365,101 on 5.4 M units. F01 is a faithful copy of the build-up for Srixon.
Forecast — within one file 2026 – SALES vs 2026 SOP Template Format 15,470 u 0.3% apart, but they should be identical. The submission tab was not refreshed before the file was saved.
Inventory F04 vs INV by Item Data in each workbook n/a
different dates
Not a duplicate — a recovery. Four separate observations: 13.4 M pieces (2024 file), 9.9 M (2025 file), 10.9 M (2026 live), 6.8 M (F04, Aug 2026). Scope differs between them, so these are not directly comparable without work — but it is history where DSA reported none.
Purchase orders F05 vs PO by Item Data Broken The 2025 B1 workbook's PO tab totals zero across all 22,957 rows — a paste that captured structure but no values. The 2024 file's copy holds 5.1 M. F05 is the only usable source.

A correction to an earlier reading of this

An earlier version of this section reported that T02 reconciles to the workbook within a tenth of a percent, and treated that as the most useful finding here. The 0.11% is real but it is a five-year total, and it survives only because large annual errors cancel. Tested year by year the two sources disagree badly — 0.43× to 1.61× — so the aggregate agreement carries no weight.

Two decoding corrections still stand and are still undocumented anywhere in the client's own material: T02's quantity column is units, not pieces, and the workbook tabs are filtered to Srixon + Domestic Sales + Shipped. They are necessary but not sufficient.

The cause is now identified. T02's status column is an order status, not a ship status — Open is 0% of rows before 2025, 1.0% in 2025 and 16.4% in 2026, which is an order lifecycle rather than a shipment flag. Its date column is not a transaction date at all: 307 distinct values spanning 2009–2027, matching the row's own Year on only 33.6% of rows. So T02 counts orders on an order calendar while the workbook tabs count shipped volume on a report-date calendar. Those are different events measured on different clocks, and no filter reconciles them.

Consequence: T02 cannot be substituted for the workbook tabs as an actuals source — which is a real constraint, since it is the only source that separates returns and the only one covering all brands. It also means the monthly phasing result in the baseline rests on the workbook tabs alone.

Why cell-level agreement is only 10%

Product-line naming. T02 carries 216 Srixon product lines, the workbook 199, and only 163 match exactly. The rest differ by spelling and case — BALL Q-Star 5 against Ball Q-Star 5, BALL Marathon 4 present in one and not the other. Totals agree because the volume lands in both; individual cells don't because the labels don't. A name-mapping table fixes this once and permanently, and it is a prerequisite for any SKU-level accuracy work.

Concepts with no second source

Seven things exist in exactly one place. For these, "agreement" is not a question we can ask — which makes their quality assumptions load-bearing.

  • F13 Golf Datatech and F14 NGF — external market data, unverifiable internally by design. Note the workbook's MARKET SIZE column is hand-keyed rather than drawn from F13, so those two could be cross-checked and currently aren't.
  • T05 item master — the join spine. Nothing validates it, and seven of its attributes are empty.
  • T06 channel dimension — delivered at customer grain with 40% of region labels missing.
  • T07 pricing — 17% of items, no clubs. The workbook's cost tabs cover different ground and use a different structure, so they are a supplement, not a check.
  • F07 BOM — single source and structurally void.
  • The four non-Srixon brands — 24% of plan volume, visible only in F01, with no build-up behind them. This is the largest unverifiable block in the estate.

A6What we need next

Outstanding requests, ordered by what they unblock
AskOwnerUnblocksUrgency
Monthly inventory snapshots — archive going forward, plus whatever history existsMyInventory optimization / working capital — the primary value driverThis week
Workbooks for Cleveland Golf, XXIO, Asics, SRX AccessoriesBrian24% of plan volume; portfolio-level accuracy benchmarkingThis week
T-03 open order book & T-04 order-date detailMyLost-sales recapture; order-vs-ship varianceGating
Column definitions for T02OrderData.csv — file has no header rowMyAny use of the shipment actuals at allGating
Re-extract of T-05 with the seven empty columns populatedMyNew-product forecasting, lifecycle, mix analysisGating
F-02 key-account sell-through & F-03 account on-handMyThe demand signal DSA itself rates highestPhase 2
Fiscal calendar definition — what period does “SRX 2025 / B1” cover?BrianCorrect alignment of forecast to actualsGating
Methodology behind 2025 forecast accuracy.xlsxBrianMatching — or knowingly departing from — DSA's own accuracy definitionBefore Step 2
F-11 promotions & markdown eventsMyMarkdown reduction — currently unmeasurablePhase 2

B1File inventory

Sixteen data files under 01_Data/Client_data/, split by provenance. Sizes and row counts are measured, not reported.

From_My — eleven system extracts
FileReqSizeRowsColsGrainState
DSA_Data_Request_vShare.xlsx—26 KB24+19419/8Register + field specsSpec
T02OrderData.csvT-02108.2 MB640,43319Item × year × period × regionNo header
F13GolfDataTech.csvF-1364.5 MB222,44820Period × channel × brand × modelGood
F05PurchaseOrder.csvF-0516.5 MB155,92413PO × lineGood
F01HistoricalForecast.xlsxF-017.8 MB62,73922Submission × year × PL × regionMixed grain
T06ChannelRegionDim.csvT-064.9 MB71,3698Customer account (not region)28 bad rows
T05ItemMaster.csvT-052.6 MB14,74218Item7 cols empty
F07BOM.csvF-072.1 MB13,2359Parent × componentVoid
F04OnHandInventory.csvF-040.9 MB9,96615Snapshot × location × item1 snapshot
T07Pricing.csvT-070.3 MB2,55413ItemNo clubs
F14NGF.csvF-1477 KB1,8804Period × categoryNo rounds
From_Brian — five planning workbooks
FileSizeSheetsRole
2025 forecast accuracy.xlsx23.4 MB3DSA's own accuracy analysis. Contains a 663,610-row order date and invoice date sheet — likely the closest thing we have to T-04.
SRX 2025 11-13-2025 — B1 Submitted.xlsx19.8 MB79The submitted B1 for plan year 2026. Primary reference for the formula trace.
SRX 2026 Live File_new_format_with_orders.xlsx18.0 MB79Working file, restructured template. Adds order data and a “2026 Pivot for My” handoff sheet.
SRX SOP 2024-11-15 — B1.xlsx17.0 MB73Prior-year B1. Template predates the current format — direct comparison needs care.
Order Date Analysis.xlsx0.4 MB4Standalone analysis of order timing and GDT trends.

Housekeeping

A LibreOffice lock file — .~lock.2025 forecast accuracy.xlsx# — is sitting in Client_data/, which means that workbook was open (or left open) when the folder was captured. Worth confirming we have the saved version.

B2System of record

Where each business concept authoritatively lives, and how a number travels from source system to submitted plan.

SOURCE SYSTEMS THE SRX WORKBOOK · MANUAL SUBMISSION JDE · shipments JDE · item master JDE · PO / inventory Golf Datatech NGF paste Raw data tabs SHIP DATA · OPEN DATA INV · PO · ACC DATA Cost tabs 2024/25/26 costs Trf MTP · new method Model tabs ZXi · ZXi2 · Z-Forged ~35 fitting sheets “YYYY – SALES” the plan build-up 1,067 rows · 22 channels SKU × channel × sales type SYSTEM OF RECORD SOP Template Format tab 143 rows · 7 PLs stale by 15,470 Submitted to corporate B1 · B2 · B3 · B4 F01HistoricalForecast 62,739 rows reconciles to build-up MISSING · Cleveland · XXIO · Asics · SRX Accessories equivalent workbooks not in our possession · 1.71 M units Every arrow crossing into the dashed zone is a manual paste. Nothing inside it is connected to a source system.
Figure 3 — How a number reaches the plan. The workbook is not fed by anything; it is filled by hand. That is why T-01 could not be extracted from JDE, and it is the specific process that Phase 1 tooling replaces.
Authoritative source by concept
ConceptSystem of recordAlso appears inRuling
Plan / forecast (Srixon)SRX YYYY - SALESF01, SOP Template tabBuild-up wins; F01 is a faithful copy; template tab is stale
Plan / forecast (other brands)UnknownF01 onlyF01 is our only view until the workbooks arrive
Shipment actualsT02OrderData.csvSRX SHIP DATA tabsJDE extract wins; workbook tabs are point-in-time pastes
Item masterT05ItemMaster.csvF04, T07, workbook listsSole candidate, but 7 requested attributes are empty
InventoryF04OnHandInventory.csvSRX INV DATASingle snapshot; workbook tabs may hold older pastes worth mining
ReturnsT02OrderData.csv c17—Commingled with demand; must be separated before modelling
Market size / shareF13GolfDataTech.csvSRX MARKET SIZE columnGDT wins; workbook figure is hand-keyed
CostSRX cost tabsT07Pricing.csvT07 covers no clubs, so workbook is the only complete view

B3Join spine

Item is the backbone, as expected. What matters is where the key formats diverge and where the grain shifts underneath a join.

T05ItemMaster 14,742 items · ITEM char(25), space-padded T02 Shipments15,284 items · 640k rowspadded key · no header F05 Purchase orders13,349 itemsINT key — cast needed F04 Inventory9,966 items1 snapshot only F07 BOM1,248 parentsparent = component F01 Forecastproduct-line grainNO ITEM KEY T07 Pricing2,554 items · 17%accessories only T06 Channel dim71,369 customers40% no region F13 Golf Datatechbrand × modelNO ITEM KEY solid = clean join · amber = partial coverage · red = no usable key F01 and F13 must be bridged through product line and brand/model mapping — neither carries an item code.
Figure 4 — The spine and its breaks. Three joins are clean. Two are partial. Two have no item key at all: F01 sits at product-line grain and Golf Datatech at brand/model, so both require a mapping layer we will have to build and maintain. That mapping is a deliverable in its own right.

Key format hazards

  • Space padding. ITEM in T02, T05 and F07 is right-padded to 25 characters. F05 stores it as an integer. Any join must normalise both sides or it silently returns nothing.
  • Case drift in descriptors. F01's SRICDDESC contains both CG Accessories and CG ACCESSORIES, both Asics Accessories and ASICS Accessories, and separate XXIO Irons / XXIO IRONS entries. 48 distinct values collapse to roughly 30 real ones.
  • Metric vocabulary drift. F01's METRIC column holds nine values across three casings — Units/UNITS, Revenue/REVENUE, Margin/MARGIN, plus ASP, COST, MARGIN_PCT. Filtering on exact string will drop rows.
  • Mixed grain inside one file. F01's SOPRegion and SalesType are populated on only 72.4% of rows. Earlier plan years were submitted at product-line level, 2026 at channel level. Summing across the file without partitioning by year risks double counting.
  • Region coverage. T06 maps customers to SOP_REGION_DESC for only 59.9% of accounts, and T02's own region column is null on 4.8% of rows. Both need a fallback rule.

B4SRX workbook anatomy

79 sheets in the B1 Submitted file, 73 in the 2024 edition, 79 in the 2026 live file. They group into seven functional families.

Sheet families — SRX 2025 B1 Submitted
FamilySheetsMembersRole
Plan build-up82020 – SALES … 2027 – SALESThe plan itself. SKU × channel × sales type with the full driver chain.
Submission format22025/2026 SOP Template FormatAggregated to product line × metric — the shape corporate receives.
Model build-ups~35ZXi *, ZXi2 *, Z-Forged *, Z22 *, fitting sheetsPer-model unit build with shaft/flex/loft matrices.
Cost82024/25/26 costs, Trf MTP, Balls+Acc, new method clubs, Product CostsFeeds the COST column by SUMIFS. Tariff handled separately.
Pasted raw data16SHIP DATA 2, OPEN DATA, INV DATA, PO by Item, ACC DATA, Distribution TrackingPoint-in-time extracts pasted in. ACC DATA and SHIP Promo hold 171,197 rows each.
Category sheets6Components, Headwear, Bags, Gloves, LuggageAccessory planning, separate from the main build-up.
Review & accuracy4Monthly Review (319 cols), FCST Accuracy, Promo review, Planned OutsFCST Accuracy already compares B1 / B2 / Current FC by month — DSA's own accuracy view.

Structural debt worth noting

2020 – SALES and C&B FCST each report 16,381 and 16,376 columns — column bloat from years of editing. In the 2024 file, ZXi Hyb reports 1,048,575 rows against ~20 real ones. These inflate file size, slow recalculation and make automated parsing fragile. Any tooling we build should read by named range or explicit bounds, never by max_row.

Version drift across the three workbooks

  • The 2024 edition carries Z22 * model sheets, MARGIN DATA 2, 2023 Original Plan, DISTRIBUTION GOALS and 2024 ball seasonality — all absent later.
  • The 2025 B1 Submitted adds the ZXi2 * family and 2026/2027 plan years.
  • The 2026 live file is explicitly a new format: it adds 27ZXi * sheets, SHIP DATA by item and by region, and a 2026 Pivot for My handoff tab — while dropping Distribution Tracking, ACC DATA and PO by Item Data.

The consequence for Step 2: a year-over-year B1 accuracy comparison is not comparing like with like. The template changed twice in three cycles.

B5Planning driver tree

Traced from the 2026 - SALES sheet by separating formula cells from literals. This is where human judgment enters the forecast — and therefore where both the automation opportunity and the accuracy opportunity live.

MANUALLY ENTERED CALCULATED OUTPUT DOORS DISTRIBUTION UNIT / DOOR TURN FACTOR −1 MAP WHOLESALE % DISCOUNT SEASONALITY12 monthly weights LAUNCHdoors × dist × unit/door REFILL same three drivers× turn × factor WHOLESALEMAP × wholesale % NET PRICEwholesale × discount TOTAL UNITS(launch+refill) × factor COSTSUMIFS ← cost tabs MONTHLY PLANtotal × seasonality REVENUEnet price × total GROSS MARGIN(net price − cost) × total
Figure 5 — Six numbers decide the plan. Doors, distribution, units per door, turn, an adjustment factor and a twelve-month seasonality curve. Everything else in the build-up is arithmetic on top of those. Any accuracy improvement has to come from better estimates of these six inputs — or from replacing them with a statistical forecast entirely.
Column classification — 2026 - SALES
ColHeaderTypeFormula / example
AMAPMixedHalf literal, half =20*12/15 — a smell worth confirming
CWholesale %Entered0.76
DWHOLESALEFormula=A6*C6
FDISCOUNTEntered0.68
GNET PRICEFormula=F4*D4
JCOSTFormula=SUMIFS('2026 Costs new method clubs'!…)
LREVENUEFormula=G4*AA4
MGMFormula=(G4-J4)*AA4
O–TBRAND … SALES TYPEEnteredDimensions: SRX · product line · channel cat · sales type · channel
UDOORSEntered1105
VDISTRIBUTIONEntered1
WUNIT / DOOREntered725
XTURNEntered1.0251
YLAUNCHFormula=U28*V28*W28
ZREFILFormula=W4*U4*X4*V4*AD4
AATOTALFormula=(Y4+Z4)*AC4
ACFACTOR −1Entered1
ADMARKET SIZEEnteredHand-keyed despite F13 holding the real figure
AK–AVJ … DEnteredMonthly seasonality weights, entered per row

B6Column dictionary

Every column in every delivered extract, with measured fill rates and cardinality. Fill rate is share of non-null rows.

T02OrderData.csv — 640,433 rows · no header row in file · positions inferred
PosInferred meaningFillUniqValues / range
c00item100%15,284Space-padded to 25 chars
c01product_line_desc100%643RTX 6 Zipcore Wedge, COMP GRIPS…
c02year100%72020 – 2026
c03period_num100%121 – 12
c04sop_region_desc95.2%17ON COURSE, Off Course, Golftec…
c05pieces / qty100%4,244−31,960 → 185,500 · 145,427 negative
c06sales_amt_usd100%123,992−390,400 → 1,689,000
c07gross_profit_usd100%289,558−390,400 → 1,247,000
c08line / order class100%6BI, C, D, S, W, ZX
c09sub-class100%13CA, CK, NG, NI, NN, NO, NS, NT, SD, SG, SI, SO, SZ
c10domestic / affiliate100%8CGA, CGC, CGE, CGJ, DOM, INT, SAM, SSA
c11gl_brand_desc100%7Asics, Cleveland Golf, Never Compromise, Nike, Srixon, Tennis, XXIO
c12company / cost centre100%13521 – 999
c13order status — not ship status100%2Closed / Open. Open is 0% of rows before 2025, 1.0% in 2025, 16.4% in 2026 — the profile of an order lifecycle, not a shipment flag. Filtering on Closed does not reproduce the workbook's Ship Open = Shipped.
c14date — not a transaction date88.6%307307 distinct dates spanning 2009-10-28 to 2027-05-25. Only 33.6% of rows have c14's year matching the Year column, and 2009–2014 dates appear on 2025 rows. An item-level attribute (first-available or launch date), not a ship or report date.
c15ratio / share100%4,042−3.196 → 25.69
c16flag100%2N, Y
c17return / credit reason28.7%163Stock Transfer, Excess Inv-mgmt approved, Salesrep Return…
c18sales category100%3Domestic Sales, Int Affiliate Sales, Other

T-02 cannot be used until the header is confirmed

Nearly 23% of rows carry negative quantities and 28.7% carry a return reason code. Returns are commingled with demand, and the file has no header to tell us which column is which. Every inference in the table above is ours, not DSA's. One email to My resolves it; building on the guess does not.

T05ItemMaster.csv — 14,742 rows · the join spine
ColumnFillUniqNotes
ITEM100%14,742Primary key, space-padded
ITEM_DESC100%14,70933 duplicate descriptions
PRODUCT_LINE_CD / _DESC100%461Clean 1:1 pairing
CATEGORY100%5ACCESS, CLUBS, COMPS, RANGE, ROUND
SUB_CATEGORY100%21XXIO Irons, CG Wedges, Women's/Jr/Other…
GL_BRAND_DESC100%6Space-padded — trim before joining
VARIANT_GROUP0%0Empty requested, not delivered
GENERATION0%0Empty requested, not delivered
PREDECESSOR_ITEM0%0Empty blocks predecessor-based launch forecasting
PIECES_PER_UNIT100%160.0833 – 20
UOM100%24EA, S5, S7, DZ…
FIRST_AVAILABLE_DATE100%251Only date field populated
LAUNCH_DATE0%0Empty blocks lifecycle logic
EOL_DATE0%0Empty blocks end-of-life / markdown timing
STATUS100%2IN / OUT — not the Active/Inactive in the spec
DEGREE0%0Empty blocks mix analysis (#1 backorder driver)
USED_CLUBS_FLAG0%0Empty
F01HistoricalForecast.xlsx — 62,739 rows · the forecast history
ColumnFillNotes
METRIC100%9 values across 3 casings — Units/UNITS, Revenue/REVENUE, Margin/MARGIN, ASP, COST, MARGIN_PCT
SRICD / SRICDDESC100%48 raw values, ~30 real after case normalisation. This is the brand-category level.
PL_CD / PL_CD_DESC100%1,622 distinct product lines — finer than T05's 461. Mapping required.
SOPRegion72.4%Null on earlier plan years — grain shifts by year
SalesType72.4%Same pattern as SOPRegion
1 … 12100%Monthly values; TOTAL is their sum
COMMENTS100%This is the submission ID — B1 / B2 / B3 / B4, not free text
YEAR100%Plan year: 2024, 2025, 2026
Submission coverage in F01 — rows, and total units where present
Plan yearB1 rowsB2 rowsB3 rowsB4 rowsB1 unitsB4 units
20243723,0673,1093,115—6,253,676
20257621,8483,8491,1946,647,8207,248,558
202610,72813,65021,045—7,075,630—
Remaining extracts — condensed
FileColumns of noteIssue
F04OnHandInventorySNAPSHOT_DATE, LOCATION, ITEM, QTY/PIECES_ON_HAND, QTY_AVAILABLE, ON_WORK_ORDER, ON_PURCHASE_ORDER, STOCKING_TYPE, PROCESS_TYPEOne snapshot. PRODUCTGROUP 100% empty. PROCESS_TYPE 69% filled. 275 rows with negative availability.
F05PurchaseOrderPO_NUMBER, PO_LINE, ITEM, QTY/PCS ORDERED · RECEIVED · OPEN, ORDER_DATE, PROMISED_DATE, RECEIVED_DATE, STATUS_CODE, VENDORClean. ITEM stored as integer — cast before joining. 161 vendors, 5 status codes.
F07BOMPARENT_ITEM, COMP_ITEM, LEVEL_, QTY_PER, UOM, EFFECTIVE_FROM/TOStructurally void. PARENT_ITEM and COMP_ITEM are identical; LEVEL_ is 0 on every row. Explodes nothing.
T06ChannelRegionDimSOP_REGION, SOP_REGION_DESC, SOP_CHANNEL_DESC, SOP_ON_OFF_KEY, GDT_ROLLUP, CUSTOMER_ACCOUNT, COUNTRY, ACTIVE_FLAGDelivered at customer grain (71,369 rows) not region grain (~20). Region desc null on 40%. 28 rows unparseable — unquoted commas in names. ACTIVE_FLAG always Y.
T07PricingCOSTCENTER, PRODUCTGROUP, ITEMNUMBER, WHOLESALEUNITPRICE, RETAILMAPUNITPRICE, A1_AMTSTDROLLUP, X2_AMTDUTY, X3_AMTFREIGHT, TX_AMTTAXCovers ACCESS, RANGE, ROUND, SHOES — no CLUBS, no COMPS. 2,554 of 14,742 items (17%). COSTCENTER single-valued, TX_AMTTAX always 0.
F13GolfDataTechPRODUCT, CHANNEL, PERIOD, REGION, MFG, BRAND, MODEL, UNITS, share and prior-period comparators, INVENTORY, PCTOFSHOPSStrongest history in the estate: 2007-01 → 2026-06. But only US and UK national — no sub-region. 76 manufacturers, 3,273 models. No item key.
F14NGFPeriod, Product, Units, Dollars235 periods from 2007-01. Eight categories. Rounds-played not supplied, as DSA flagged.

B7Quality register

Defects found, ranked by impact on the engagement
#DefectWhereConsequenceFix
Q1Four brands have no workbookFrom_Brian24% of plan invisible; portfolio accuracy impossibleRequest from Brian
Q2Inventory history absentF04Primary value driver unmeasurable; worsens monthlyStart archiving now; consider reconstruction from F05 + T02
Q3No header rowT0219 columns unlabelled; all semantics inferredRequest column list from My
Q4Returns commingled with demandT02 c1723% of rows negative; inflates variance, distorts any modelSplit on reason code once header confirmed
Q5Seven item attributes emptyT05No lifecycle, predecessor or mix analysisRe-extract
Q6BOM has no hierarchyF07Cannot explode finished goods to componentsRe-extract with real parent/child
Q7Pricing excludes clubsT07Margin and markdown analysis limited to 17% of itemsWorkbook cost tabs as interim source
Q8Template tab stale vs build-upSRX workbook15,470-unit drift inside one fileProcess control — resolved by tooling
Q9B1 grain inconsistent across yearsF01Year-over-year B1 comparison not like-for-likeRestrict benchmark to 2026, or normalise to product line
Q10Mixed grain within fileF01Double-counting risk on naive aggregationPartition by year before summing
Q1128 unparseable rowsT06Customer names contain unquoted commasRe-extract with proper quoting
Q12Case drift in descriptorsF0148 values collapse to ~30; silent row loss on exact matchNormalisation layer
Q13Region unmapped for 40% of customersT06Shipments unattributable to planning channelFallback rule + client confirmation
Q14Column and row bloatSRX workbook16,381 columns; one sheet reports 1,048,575 rowsParse by explicit bounds, never max_row
Q15Quantity column is units, not piecesT02Undocumented. Naive comparison to the workbook is off by 22% and reads as a data failureMultiply by PIECES_PER_UNIT; confirm with My
Q16Product-line names don't matchT02 vs workbook163 of 216 names align; blocks all cell-level reconciliationBuild a name-mapping table
Q17PO tab pasted with no valuesSRX 2025 B122,957 rows, every total zeroUse F05; flag to Brian as a broken refresh
Q18Live plan year rebuilt between cyclesSALES sheetsOnly 37% of rows survive unchanged; 47% key churnNot a defect — but it means B1-vs-actual needs a fixed key set
Q19Closed plan year restated2022 – SALES+5.6% volume changed two years after the year closed, on 11 rowsAsk Brian what was corrected and why
Q20Market size hand-keyedSALES sheetsTyped by hand although F13 holds the real figure — an avoidable single sourceWire to F13 in tooling
Q21T-02 is order data on an order clock, not shipments on a report clockT02 vs workbook SHIP tabsThe two sources count different events against different calendars, so they cannot be reconciled by filtering. Annual ratios swing 0.43×–1.61×.Request a shipment extract keyed on ship or invoice date; or have My confirm what c02/c03 date basis represents
Q22The request spec contradicts itself on T-02DSA_Data_Request_vShareThe dataset is described as "Shipment actuals at SKU x channel x month" but its own field is named pieces_ordered, and the delivered file is T02OrderData.csv. Three names, two different concepts.Settle which was intended before any further use

Method behind the agreement figures

So the numbers in Figure 6 can be reproduced or challenged:

  • Plan comparisons match on the five-part key product code · product line · channel cat · sales type · channel, summing TOTAL. "Unchanged" means equal within a relative tolerance of 1e-6 on keys present in both files. Keys present in only one side are reported separately as dropped/added rather than counted as disagreement. Note the 2024-and-earlier sheets use SRI CAT/MODEL where later ones use DSP Product Code/Product Line; the comparison uses whichever pair the sheet carries.
  • Shipment comparison aggregates T02 to product line × year × period after filtering to Srixon + Domestic Sales + Closed and converting quantity to pieces via PIECES_PER_UNIT from T05. Pieces-per-unit is available for 77.2% of T02 rows; unmatched rows are treated as 1:1, which understates the true total slightly.
  • Grand Total rows in the workbook's pivot exports are excluded. Failing to do so double-counts every figure.
  • Caveat on inventory. The four observations differ in filter scope — F04 covers two locations with no brand filter, the workbook tabs are pivot exports with their own filters. Treat the trend as indicative until scope is normalised.
  • Not yet tested: the invoice-date sheet in 2025 forecast accuracy.xlsx (663,610 rows) against T02; the workbook's hand-keyed MARKET SIZE against F13; and DSA's own accuracy figure of 43.3% found in that workbook, which we should reproduce before proposing any alternative.

B8Open questions

Answers we need before Step 2 can produce a defensible number.

For Brian

  • Fiscal calendar. The B1 files are dated mid-November — 2024-11-15 and 2025-11-13 — and the register describes the submission cycle as roughly October, January/February, May and September. That implies B1 for plan year N is submitted in November of N−1, which fits the file naming for 2026 but not obviously for 2025. This must be confirmed, not inferred: a one-quarter misalignment would still produce plausible accuracy figures, just wrong ones.
  • Where are the other brands planned? Separate workbooks, a different owner, or not planned at this level at all?
  • Is the B1 Submitted file the version that actually went to corporate, given its template tab is 15,470 units out of step with its own build-up?
  • What definition of accuracy does 2025 forecast accuracy.xlsx use, and does the FCST Accuracy tab inside the workbook use the same one?

For My

  • Column definitions for T-02, and confirmation of what c14 represents.
  • Are monthly inventory snapshots archived anywhere, or does only the current position exist?
  • Why are the seven T-05 attributes empty — not populated in JDE, or dropped by the extract?
  • Was the F-07 BOM extract intended to be parent-to-component, or is it an item list?

A note on the Step 3 hypothesis

The working assumption entering this engagement was that improving forecast accuracy is the low-hanging fruit. This pass does not settle that, but it sharpens it. The plan is built from six hand-entered drivers per SKU-channel row, with no statistical baseline anywhere in the process and market size keyed by hand despite Golf Datatech sitting in the same estate. That is a real and addressable gap. But part of the measured error will also be process drift — stale tabs, missing brands, inconsistent grain — which is a governance fix rather than a modelling one. Both are worth money. They are not the same project, and the value case should not conflate them.

B9Companion report

The forecast-accuracy work that rests on this map lives in a separate document, B1 Forecast Baseline — the options catalogue for pairing a plan with actuals, the decisions taken, and the measured result for plan year 2025.

This atlas stays what it says on the front: a map of what data exists, how the pieces connect, where they agree, and what is missing.

Compiled from direct inspection of 16 files, 2.0 M data rows and 235 workbook sheets under 01_Data/Client_data/. Figures are measured unless marked inferred. Column semantics for T-02 are inferred and await confirmation from DSA.