Supplier Source Profile — Supplier B
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-18 with v0 decisions aligning to the layered canonical + transformation model: imprint = brand (canonical brand field), bibliographic fields handled as Print-Music-category facets per the per-category facet model, and lifecycle normalised to binary active / inactive matching Supplier A's treatment.
Stage: v0 scoping. Synthetic. Modelled on the structural archetype of a global print music publisher with an Australian distribution arm that also redistributes a stable of third-party publisher brands to AU music retailers. 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 "medium distributor" slot in the v0 supplier set described in scope.md. The v0 scope memo originally proposed a pro-audio-shaped medium supplier (Sennheiser-like); a print music archetype was chosen instead because it covers an otherwise-uncovered v0-priority facet category (Print Music) and applies ingest-format pressure (Excel-with-human-formatting) the rich-data distributor in supplier-a-profile.md does not touch.
Identity
- Synthetic ID: Supplier B.
- Role: AU distribution arm of a global print music publisher. Carries the parent publisher's own catalogue and acts as exclusive AU distributor for a stable of third-party publisher brands (educational publishers, classical houses, choral specialists, method-book brands, etc.).
- Catalogue size: approximately 80,000–150,000 titles across all brands, an order of magnitude larger than Supplier A. Single-brand catalogues range from a few thousand to tens of thousands of titles.
Product coverage
- Sheet music, songbooks, method books, instrumental tutors, ensemble parts, choral octavos, vocal scores, exam syllabi, play-along editions with accompanying audio, and a small adjacent line of music-themed merchandise (manuscript pads, batons, etc.) depending on brand.
- Brand mix: multi-brand, where "brand" in this archetype means publisher imprint. The parent publisher's own imprint is the largest single brand; a long tail of distributed publisher imprints carries the rest. Brand conventions differ — large brands carry full bibliographic detail; smaller brands carry only title + composer + format. Brand handling at the canonical layer is identical to Supplier A's multi-brand portfolio: each title's brand goes into the canonical brand field as a single string.
- v0-priority category coverage: Print Music (exclusively — no other v0 supplier covers it). No overlap with Supplier A's category footprint.
- Overlap with other v0 suppliers: none on shared SKUs (AU exclusive distribution holds for print music as it does for instruments). This profile exercises canonical-model breadth across a different product type, not deduplication.
Source format
Excel workbooks, one workbook per brand, delivered by email on a monthly-ish cadence with ad-hoc out-of-cycle pushes for new releases. The workbooks are human-presentable — formatted for a buyer at a retailer to skim, not for machine ingestion. Specifically:
- Each workbook is a single flat sheet but carries header rows, logos or decorative banner rows, and merged cells in the top region above the actual data table.
- Number formats are display-oriented (currency symbols inline with price, leading apostrophes on catalogue numbers to preserve formatting, mixed text/number in identifier columns).
- Column headers vary slightly between brand workbooks — large brands use the parent publisher's standard header set; smaller brands retain their upstream-publisher conventions, so the same logical field arrives under different header strings across workbooks.
- A handful of brands emit one workbook per format band (e.g. one workbook for choral octavos, a separate workbook for instrumental ensemble parts) rather than one combined workbook.
Refresh cadence: monthly bulk update emails, with new-release pushes interleaved (release-calendar driven, not FX-driven as in Supplier A).
No supplier-side push API at v0. Ingestion path is workbook upload through the per-supplier mapping config described in scope.md. Because this supplier emits many workbooks with header drift between them, the per-supplier mapping config must support multiple file variants per supplier — one variant per brand workbook — not a single supplier-wide schema. This is a mapping-editor UX consideration, not a canonical-model concern.
Field inventory
Field set is bibliographic rather than spec-based, but the canonical handling is identical to Supplier A's pattern: primary fields populate the canonical primary fields, and category-specific fields populate the curated facets for the Print Music category.
Reliably present (across brand workbooks):
- Publisher catalogue number — the supplier-SKU (column header varies — "Cat. No.", "Pub. No.", "Item Code", "Product Code").
- Title — the canonical product name.
- Brand — the publisher imprint, sometimes a column, sometimes implicit from which workbook the row arrived in. Lands in the canonical brand field, single string, exactly as Supplier A's brand handling.
- Format — book, spiral-bound, score, score + parts, octavo, digital download, audio bundle, etc. Vocabulary varies between brands. Lands as a Print Music category facet.
- RRP — with currency symbol inline as a display artefact.
Intermittently present:
- Composer — present on most classical, educational, and instrumental titles; sometimes carried as "Composer / Arranger" or "Composer / Artist" depending on brand. Print Music facet.
- Arranger / editor — carried by classical, educational, and choral brands; usually absent on popular-music songbooks. Print Music facet.
- Instrumentation / voicing — carried where meaningful (choral SATB / TTBB / SSA, ensemble scoring, solo instrument indication). Print Music facet.
- Grade / level — carried by educational and method-book brands; absent elsewhere. Print Music facet.
- Series — carried where the brand organises its catalogue into named series (method-book lines, "Easy Piano" collections, exam syllabus tiers). Print Music facet.
- ISMN — present for newer titles from major brands; absent on older catalogue and on most smaller-brand titles. Where present, populates the canonical GTIN/barcode primary field.
- ISBN — present for book-format items from publishers that registered them; sparse elsewhere. Where present, populates the canonical GTIN/barcode primary field.
- Cover art — image URL or filename present for newer titles; absent for backlist items. Where present, may be a thumbnail-grade asset, not a high-resolution image. Lands in the canonical images primary field as URL pass-through (consistent with the v0 image policy).
- Pages / duration — sometimes carried; can populate canonical descriptions or Print Music facets depending on curation.
- Short description / contents summary — sparse; usually only for hero titles and method-book lines. Canonical descriptions field.
Notably absent:
- MPN. Print music distribution does not use manufacturer part numbers. Identity for this supplier must use the supplier-SKU-fallback path named in
scope.md. - Wholesale cost. Same structural absence as Supplier A — cost is per-retailer trade-discount terms applied to RRP, with schools-channel and educator-discount overlays adding further complication. v0 carries cost as a single canonical field with
nullfor this supplier (or supplier-mapping-derived defaults), consistent with the cost-handling decision inscope.md. - Dimensions / weight. Not meaningful for sheet music products.
- Marketing highlights. Not a print music convention.
Identifiers
- Primary identifier: publisher catalogue number, treated as the supplier-SKU. No MPN at all for this supplier.
- Supplier-SKU uniqueness within the supplier. The same catalogue number value can collide across brands —
12345from one brand is not the same product as12345from another. The per-supplier ingest mapping composes a within-supplier-unique supplier-SKU (e.g., by prefixing with the brand identifier) so that the canonical supplier-SKU is unique within the supplier without requiring any special treatment at the canonical-model layer. - ISMN / ISBN intermittent. Where present, they populate the canonical GTIN/barcode field and are useful for cross-supplier matching of those specific titles. Coverage is too sparse for ISMN/ISBN to serve as primary identity across the catalogue.
- Identity resolution path. Canonical-layer identity for this supplier uses the supplier-SKU-fallback path — the same path
scope.mdnames for any supplier without reliable MPN. This is the non-trivial real-world case for that fallback.
Mess profile
This is the load-bearing section. Each item is a specific mess the canonical model or the ingestion mapping must absorb.
- Excel workbooks are human-formatted. Header banner rows, merged cells above the data table, decorative imagery rows, and inline formatting (currency symbols in price cells, leading apostrophes on catalogue numbers, mixed-type identifier columns) all show up. Naive
pandas.read_excel-style ingest will not find the data table without a defined header-row offset per workbook, and inline formatting will pollute parsed values. - Slightly different headers per brand workbook. "Cat. No." vs "Item Code" vs "Product Code" all denote the supplier-SKU; "Composer" vs "Composer / Arranger" vs "Composer / Artist" all carry the same logical field. The per-brand mapping variant absorbs this at ingest time. No canonical-model implication — the canonical layer never sees the raw header strings.
- One supplier, many file variants. A workbook per brand means the per-supplier mapping config carries N file variants — one per brand workbook — each with its own header offset, column mapping, and inline-format scrubbing rules. The mapping editor UX must accommodate adding, editing, and removing file variants under a single supplier without forcing each variant to be registered as its own supplier.
- Supplier-SKU collision across brands within the supplier. Catalogue numbers are namespaced by brand at the source. The per-supplier ingest mapping composes a unique supplier-SKU within the supplier (e.g., brand-prefixed). Same mapping mechanism that handles any namespacing decision; no canonical-layer impact.
- No variant grouping in the file. Every format, arrangement, grade, and voicing of the same underlying work arrives as its own row, with no field linking them. The same work (e.g., a popular song) may appear as a solo piano arrangement, an easy piano arrangement, a piano-vocal arrangement, a guitar tab arrangement, a choral SATB arrangement, and a play-along edition with backing audio — six rows, no link. Different stress shape from Supplier A: A's variant axes are present but disagreeing; B's are absent from the file entirely. Variant grouping in the canonical layer (where retailers want it) must be inferred from title + composer + arrangement fingerprinting, or curated, or explicitly deferred post-v0.
What this synthetic supplier stress-tests, and the v0 decisions it forces or exercises
This profile stresses four concerns. Some force new v0 decisions; others exercise decisions already made for Supplier A.
-
Ingest format diversity (open v0 decision). Excel-with-human-formatting is a different ingest pipeline from Supplier A's CSV-via-portal. Either v0 supports Excel as a first-class ingest format (with per-workbook header offset, sheet selection, inline-format scrubbing as part of the mapping config), or v0 scope-limits to suppliers that emit structured CSV exports and treats Excel ingest as post-v0. Practically, the print music archetype cannot be ingested into v0 without Excel support; choosing this archetype as the medium supplier slot commits v0 to first-class Excel ingest.
-
Identity resolution via supplier-SKU-fallback (exercises existing decision). The supplier-SKU-fallback identity path named in
scope.mdis exercised here in its non-trivial form: no MPN at all, and supplier-SKU values that collide across brands within the supplier until the ingest mapping composes them into within-supplier-unique form. Confirms supplier-SKU-fallback is a real path the canonical layer must support cleanly, not a degenerate case. -
Multi-file mapping config under one supplier (mapping-editor UX concern). A single supplier emits N workbooks (one per brand) with per-file header drift. The mapping editor must support multiple file variants per supplier and per-variant configuration. Not a canonical-model concern — the canonical layer sees only normalised post-ingest data — but a v0 mapping-editor UX requirement.
-
Variant grouping by inference, not by parsing (open v0 decision). Supplier A's variant axes are present-but-disagreeing; Supplier B's are absent. Whether v0 attempts inference (title + composer + arrangement fingerprint), defers to curation, or treats each row as atomic and accepts that retailers receive un-grouped variants for print music titles is an open v0 decision with direct retailer-experience consequences. Default-atomic with optional curation is the path of least implementation cost; whether retailers find that acceptable for print music specifically is a real product question.
Catalogue scale (10× Supplier A's size) is not a stress-test in its own right — it sharpens the same retailer-side filter/browse concern already addressed by the retailer UI and filter-driven exports in scope.md. Worth noting; not a new open question.
The canonical primary-fields set and the per-category facet model both absorb Supplier B's shape cleanly. Bibliographic fields (composer, arranger, instrumentation, voicing, grade, series, format) are Print Music category facets — analogous to Supplier A's spec columns (finish, body wood, pickup configuration, etc.) being Electric Guitars / Pedals facets. Per-category facet flexibility is the core design intent of the layered canonical + transformation model; Supplier B exercises that intent on the curated facet set for the Print Music category.
Update behaviour
- Monthly bulk workbook refreshes per brand, delivered by email. Cadence is more predictable than Supplier A's marketing-burst pattern; volume per refresh is higher because catalogue size is larger.
- New releases pushed out-of-cycle as smaller addendum workbooks or revised full workbooks, depending on brand. Release calendars cluster around back-to-school cycles and major publication seasons.
- Lifecycle expressed via a status column; OOP rows often persist. Some brands emit a status column; others remove out-of-print rows from the workbook entirely; others keep the row but blank the price. The canonical layer normalises all of these to the binary
active/inactivefield defined inscope.md. Under the v0 per-supplier (here per-file-variant) missing-product handling setting captured in v0-scope, brand workbooks with a status column run in ignore-missing-rows mode (lifecycle derived from the source column via mapping rules), and brand workbooks that signal OOP via row deletion run in snapshot-diff mode (rows missing from a new monthly workbook →inactive). The "reprint pending" and "available while existing stock lasts" cases are not third states — they emerge from the combination ofinactivestatus and supplier-stock-level signals, identical to Supplier A's "EOL but orderable" treatment. - Prices change less frequently than Supplier A. Print music RRPs are typically revised annually rather than quarterly. FX-driven mid-cycle adjustments are rare.
- Brand additions and removals. The supplier occasionally takes on a new publisher brand (new workbook starts arriving) or drops one (workbook stops arriving). This is a structural change the ingest pipeline must accommodate without code changes — adding a brand is a per-supplier mapping-config change (a new file variant), not a deploy.
Open questions
- v0 Excel ingest decision. Does v0 commit to Excel-with-human-formatting as a supported first-class ingest format? Selecting the print music archetype for the medium slot implicitly commits v0 to Excel support, but the decision should be made explicit at the v0-scope level rather than absorbed implicitly through this profile. Decision memo candidate.
- Variant-grouping policy for atomic-row catalogues. Inference, curation, atomic-rows-accepted, or post-v0 deferral. Has direct user-visible consequences in retailer-facing output. Decision memo candidate.
- Source-side status-column string values per brand. The canonical model is binary
active/inactive(decided 2026-05-17, applied here). The remaining unknown is what discrete string values each brand workbook's status column actually carries — and for brands that signal OOP by row deletion or blank price rather than a status column, what the ingest mapping's heuristic should be. Same shape as Supplier A's source-side status open question; cheap to resolve when real catalogue files in this archetype are in hand.