Skip to content

Supplier Source Profile — Supplier A

A characterization of one synthetic supplier's data as it would arrive at the platform. Profile is synthetic; structural archetype only — no real catalogue file underlies it.

Status

Authored: 2026-05-17. Last updated: 2026-05-17 with v0 decisions on cost-placement, image-URL strategy, variant reconciliation, brand handling, and highlights. Stage: v0 scoping. Synthetic. Modelled on the structural archetype of a brand-owned Australian subsidiary distributing a multi-brand portfolio of fretted instruments, amplification, effects, and accessories. No real supplier file informs the contents of this profile; it captures the kind of supplier this archetype represents and the kinds of mess such a supplier produces.

This is the "rich-data distributor" slot in the v0 supplier set described in scope.md. The medium and degraded slots are filled by supplier-b-profile.md (print music distributor archetype) and supplier-c-profile.md (drum-and-percussion wholesaler archetype) — together they round out the v0 ingestion test surface.

Identity

  • Synthetic ID: Supplier A.
  • Role: brand-owned Australian subsidiary of a multi-brand instrument and audio conglomerate. Distributes the conglomerate's portfolio brands direct to AU retailers under exclusive arrangements.
  • Catalogue size: approximately 2,500–7,500 stocked AU SKUs including variants.

Product coverage

  • Electric and acoustic guitars, bass guitars, guitar and bass amplification, effects pedals, hardware, strings, and accessories. Adjacent audio categories may be present depending on portfolio composition.
  • Brand mix: multi-brand. A primary flagship brand carries most flagship products; one or more secondary owned brands cover entry-level/mid-tier; a small number of affiliated brands cover adjacencies (boutique amplification, lap steel, pro audio, etc.).
  • Overlap with other v0 suppliers: none. AU exclusive distribution means no other v0 supplier carries this portfolio's products. This profile therefore does not exercise cross-supplier deduplication; it exercises cross-supplier category and facet consistency, which is the more load-bearing concern for the canonical model at v0.

Source format

CSV files exported from a dealer-facing web portal. Portal-gated download (dealer login required). At minimum a master product file is available; pricing and lifecycle status may arrive as separate files or as columns within the master, depending on portal configuration.

Refresh cadence: aligned with the brand's quarterly price-revision schedule, with out-of-cycle pushes when new products launch (marketing-calendar bursts) and when FX moves trigger an intra-quarter price adjustment.

No supplier-side push API at v0. Ingestion path is catalogue-file upload via the per-supplier mapping config described in scope.md.

Field inventory

Field set is broad but unevenly normalised.

Reliably present:

  • Identifiers — MPN, UPC/barcode, supplier SKU (identical to MPN).
  • Product Name — the product family name, duplicated across every variant row in that family.
  • Model Name — a composite string of the form Model Name, Variant Opt 1, Variant Opt 2. 1–3 variant tokens after the comma.
  • Brand — single column, simple string (no sub-brand structure carried through the file).
  • Price tiers — RRP and MAP.
  • Short marketing description.
  • Marketing highlights — a flat set of highlight 1, highlight 2, ... columns, one short bullet per column. Number of populated columns varies; older/utility SKUs may have none.
  • Image URLs (one or more per row).
  • A 2-level category path.

A long tail of narrow spec columns sits to the right of the core columns — one column per spec (finish, body wood, neck profile, scale length, pickup configuration, switching, hardware finish, case included, etc.). Sparsely populated; populated columns vary by product line.

Notably absent: wholesale cost. See Mess profile below.

Identifiers

  • Primary identifier: MPN. Stable across catalogue refreshes.
  • Supplier SKU: identical to MPN. There is no separate supplier-namespaced SKU.
  • UPC/barcode: present for most stocked items; intermittently absent on accessories and parts.
  • Canonical-layer identity resolution should anchor on MPN, with no need for supplier-namespaced SKU fallback for this supplier.

Mess profile

This is the load-bearing section. Each item is a specific mess the canonical model must absorb.

  • Variant axes expressed in two disagreeing forms. The Model Name column carries variant tokens as positional, comma-separated strings; the same axes also appear as values in named spec columns. The two forms frequently disagree in wording — the Model Name token tends to be a marketing variant name while the spec column carries a more normalised internal value. There is no reliable positional convention mapping which token in the Model Name corresponds to which spec column.
  • Image references are CDN URLs with no stability guarantee. Image fields hold URLs pointing to the brand's own CDN. Coverage is comprehensive, but the same SKU's image URL may change between catalogue refreshes during marketing photography updates, without notice.
  • Highlights flatten a list into numbered columns. Marketing highlights arrive as highlight 1, highlight 2, ... — a denormalised representation of what is conceptually a single ordered list. The canonical layer needs to recompose these into a list per product.
  • Source category path is too shallow for canonical use. Maximum depth is two levels (e.g., Guitars > Electric Guitars). The canonical taxonomy (Sweetwater-derived) goes meaningfully deeper. The source category cannot be used as the canonical category directly; it must serve as a starting point refined via attribute-based inference or per-supplier mapping rules.
  • Wholesale cost is absent from the file entirely. Cost in AU is a function of per-retailer trade-discount terms applied to RRP, varying by brand and product category, with retailer-specific overlays. This is not a data gap to fill from this supplier — it is a structural property of how AU distribution prices work.

What this synthetic supplier stress-tests, and the v0 decisions it has forced

This profile stresses five canonical-model concerns. Decisions taken on 2026-05-17 are recorded inline; remaining open items are listed under Open questions.

  1. Variant parsing from a flattened Model Name, Opt1, Opt2 string when a parallel spec-column representation exists but disagrees.

    v0 decision: per-supplier configuration in the ingestion mapping. Each supplier mapping declares family grouping, variant axes, and which source (model-name string vs spec column) wins per axis when they disagree. The canonical layer does not need a global reconciliation rule.

    (Public brand-website data could in principle supply cleaner variant structure than the dealer file for some real suppliers in this archetype, but web-based ingest is firmly post-v0. Post-v0, the platform may expose web-data enrichment as a tool suppliers use to improve their own data; v0 ingests dealer files only.)

  2. Identifier discipline when MPN doubles as supplier SKU. The canonical layer should anchor identity on MPN for this supplier with no namespaced-SKU fallback path. Still genuinely a stressor for the model in case a future supplier breaks this assumption.

  3. Category remapping from a too-shallow source taxonomy into the deeper canonical taxonomy. Forces per-supplier mapping rules and/or attribute-based category inference. Remains a real exercise of the mapping layer at v0.

  4. Cost-placement.

    v0 decision: a single canonical cost field, applied across the board. No retailer-specific cost overlay at v0. This is an explicit simplification — in reality wholesale cost is per-retailer (see Mess profile) — and a per-retailer cost overlay is a known post-v0 evolution carried by the transformation layer.

  5. Image-URL stability.

    v0 decision: pass-through brand CDN URLs only. The canonical layer stores the URL, does not fetch, hash, or store image bytes. Staleness when the brand swaps URLs is accepted at v0. Content-hash-pinned storage is post-v0 architecture.

If the layered canonical + transformation model can absorb these cleanly under the v0 decisions above, the thesis in ../decisions/0001-layered-canonical-model.md holds against the rich-data end of the supplier range.

The cost-placement and image-URL decisions are canonical-layer policies and are captured as small details directly in scope.md. They are small enough not to warrant separate decision memos.

Update behaviour

  • New products arrive in marketing-calendar bursts, not steadily. Net new SKUs cluster around major trade-show cycles. The ingestion pipeline experiences spikes a few times per year rather than steady-state load.
  • Prices revised quarterly with occasional FX-driven mid-cycle adjustments. RRP/MAP revisions follow a predictable schedule; FX moves can trigger out-of-cycle revisions. Per-retailer wholesale cost is unaffected by file changes — it is derived externally from trade-discount terms.
  • Lifecycle expressed via a multi-value status column; discontinued rows persist. The file does not remove old SKUs — they stay with a status flag. The source column carries a richer vocabulary than a simple active/inactive split: values like active, under embargo, new release, and EOL (or supplier-specific equivalents) appear, partly as lifecycle state and partly as marketing metadata. At v0 the canonical layer collapses this to a binary active / inactive field via per-supplier mapping config. The "EOL but still orderable while stock lasts" case is not a third state — it emerges from the combination of inactive status and a non-zero supplier stock level. Downstream behaviour: inactive products cannot be added to any new retailer catalogues, but existing retailer catalogues containing them continue to behave correctly based on stock-level signals. Post-v0 enrichment opportunity: preserving the richer source vocabulary and surfacing it to retailers (e.g., a "coming soon" affordance for embargoed items, "new release" badges) is real product value, deliberately deferred from v0.

Open questions

  • Confirm exhaustive source-side status vocabulary. Suspected values for this archetype's status column include active, under embargo, new release, EOL, and possibly others (see Update behaviour). The per-supplier ingestion mapping collapses these to the canonical binary active/inactive. Only the exhaustive list and the collapse mapping remain to be confirmed against a real catalogue file when one is in hand.
  • (Public-web ingest, catalogue-subset, and lifecycle vocabulary were raised here on 2026-05-17 and resolved the same day: web-based ingest is post-v0; subset is handled via filtered CSV exports plus an in-platform retailer-facing browse UI; status is binary with orderability derived from stock levels. See scope.md.)