Part 1 — The Business of Fashion Wholesale
H Sales Channels and the Selling Season
Wholesale apparel sells in short, brutal bursts a few times a year: in person, from a printed sheet, by people who do not work for you, against dates that were fixed before the product existed. This chapter explains who does the selling, how the calendar works, what a linesheet and an order actually are, and how a scribbled booth order turns into a row in your database, and eventually into money.
In this chapter
- What you need to know first
- The shape of a wholesale sales organization
- The selling season in practice
- The linesheet
- Order writing mechanics
- Key account management
- Marketplaces and dropship as a channel
- Distributors and international expansion
- Channel conflict and pricing policy
- Sales operations and reporting
- Trade show logistics as an operational problem
- What this means for your ERP
What you need to know first
Let's start from absolute zero, because every later section leans on this vocabulary.
Wholesale means selling your product to another business that will resell it. You sell a jacket to a boutique for $120. The boutique sells it to a shopper for $260. You are the brand (sometimes called the vendor or supplier). The boutique is the account, the retailer, or the buyer. Those three words get used interchangeably and you should treat them as one concept in your head, even though in a big company "the buyer" is a specific human and "the account" is the company they work for.
The price you charge the retailer is the wholesale price. The price the retailer charges the shopper is the retail price, and when the brand suggests it, the MSRP (manufacturer's suggested retail price) or RRP (recommended retail price).
The ratio between them is the markup, and the traditional benchmark for it has a name: keystone, meaning exactly 2.0× (wholesale $120, retail $240). Many brands now suggest a higher multiple, often 2.2× to 2.8×, because retailers want room to discount later and still make money. The multiple varies widely by category, price point and country, so treat any single figure as a starting point for your own math rather than a rule.
Remember one thing here: the retailer's whole business model is the gap between those two numbers, so anything that shrinks the gap (selling direct at a discount, dumping to off-price) is an attack on your own customer.
Direct-to-consumer, always shortened to DTC, means you sell to the shopper yourself. DTC and wholesale are the two big channels, and they fight. Chapter B introduced the entity map. Here we populate the "customer" side of it with real-world roles.
The seasonal calendar and selling forward
Apparel is sold on a seasonal calendar. A season is a named block of product: Spring/Summer (SS), Fall/Winter (FW), plus in-between drops called Resort or Cruise and Pre-Fall. The critical, counterintuitive fact for a programmer: you sell a season roughly six months before it ships, and you make it after you sell it.
A buyer sits in a showroom in February looking at samples of clothes that will not exist until June and will not be in her store until August. This is called selling forward, and it is why the wholesale order sits at the center of the industry's paperwork, months ahead of any actual retail sale.
Your entire production plan is built on orders written against product that has never been manufactured.
Market week, trade shows and marts
The dense block of weeks when that selling happens is market, or market week. It covers a rolling wave of trade shows, showroom appointments and regional marts spread over several weeks, rather than one single event on one date.
A trade show is a rented hall where hundreds of brands take booths and thousands of buyers walk the aisles. A mart is the permanent version: a large building full of year-round showrooms that opens its doors for scheduled market weeks several times a year. A showroom is a single space inside such a building — or a standalone one, usually in New York, Los Angeles, Dallas, Atlanta or Paris — where a brand, or an agency representing many brands, receives buyers by appointment.
Linesheets, purchase orders and ship windows
The paper that makes selling possible is the linesheet: a compact, unglamorous document listing every style you offer, with style number, colors, sizes, wholesale price, suggested retail, minimums and delivery window. Its glamorous cousin is the lookbook: photography and mood, no prices. Buyers browse the lookbook and order from the linesheet.
The order itself is a purchase order or PO, the retailer's document committing to buy specified quantities at specified prices within a ship window. That window has two dates: the start ship date (do not ship before this) and the cancel date (miss it and the retailer may refuse the goods and owe you nothing). These are the most operationally violent fields in the system. Almost every fine you will ever pay traces to one of them.
Styles, colorways and SKUs
Now the words for the thing you actually sell. A style is a design: "the Marin Shirt." A colorway (or style-color) is that design in one specific color. A SKU (stock-keeping unit, pronounced "skew") is the smallest thing you can physically pick off a shelf: one style, in one color, in one size. The Marin Shirt in Sky Blue in size M is a SKU.
Inventory is counted in SKUs, orders are written in SKUs, and almost every table in your database that touches a physical garment points at a SKU. If you take one vocabulary item from this chapter, take that one.
Two words about the retailer's side. A door is a single physical store location. A retailer with "3 doors" runs three shops. A national chain has hundreds. Brands count distribution in doors because that is what determines how many units a season can absorb.
Sell-through is the percentage of units the retailer bought from you that they have since sold to shoppers: 40 units bought, 28 sold, 70% sell-through. It is the single number that decides whether they buy you again, and retailers are under no obligation to share it. When one does, treat it as gold and store it.
Terms, factoring and commission
Two more money words. Terms means when you get paid: Net 30 is due 30 days after the invoice date. 2/10 Net 30 lets the buyer deduct 2% by paying within 10 days.
Factoring means selling your unpaid invoices to a finance company (a factor) at a discount, so you get cash now instead of in 60 days. In apparel the factor also acts as a credit bureau: before you ship, you ask whether a boutique is good for the money, and the factor answers.
Factoring comes in two forms and the difference is large. Under non-recourse factoring the factor absorbs the loss if an approved customer simply cannot pay. Under recourse factoring the unpaid invoice comes back to you. You repay the advance and keep the bad debt. Read which one you signed, because your ERP has to model the difference: recourse means a factored invoice is still your credit exposure.
Finally, commission: the percentage of an order's value paid to whoever sold it. Reps live on it, and a large share of this chapter's ERP design exists purely so commission can be computed correctly, disputed rarely and paid on time, because reps who get paid late stop selling your line, and a rep who leaves takes their accounts with them.
The abbreviations, all in one place
Wholesale runs on initialisms, and they arrive without warning in emails from people who assume you know them. Here is the full set used in this chapter. Skim it now. Come back when one ambushes you.
| Short form | Full name | What it actually means to you |
|---|---|---|
| SKU | Stock-keeping unit | One style, one color, one size. The unit inventory is counted in |
| PO | Purchase order | The retailer's commitment to buy. Your order document |
| MSRP / RRP | Manufacturer's suggested / recommended retail price | The shelf price you suggest. You cannot force it |
| MOQ | Minimum order quantity | The fewest units a buyer may order of a style or color |
| OTB | Open-to-buy | The budget a buyer is allowed to spend on a given delivery month. When it is gone, it is gone |
| DTC | Direct-to-consumer | You sell to the shopper yourself, through your own site or shop |
| COGS | Cost of goods sold | What one unit costs you to make and land in your warehouse |
| AR | Accounts receivable | Money customers owe you but have not yet paid |
| DSO | Days sales outstanding | Average days between invoicing and getting paid |
| RA | Return authorization | Permission you issue before a customer may send goods back |
| DC | Distribution center | The retailer's warehouse. Where your cartons must arrive |
| MABD | Must-arrive-by date | The date goods must be at the DC, not the date they leave you |
| FOB | Free on board | Names the point where risk and cost pass to the buyer. "FOB origin" = at your dock; "FOB destination" = at their door |
| CIF | Cost, insurance and freight | A price that already includes shipping and insurance to the destination port. Customs often values goods on this basis |
| EDI | Electronic data interchange | The decades-old file format big retailers exchange orders and invoices in. Chapter 4 covers it |
| ASN | Advance ship notice | An electronic message, sent before your truck arrives, saying exactly what is in every carton. EDI document 856 |
| GTIN / UPC | Global trade item number / universal product code | The barcode number identifying a sellable item. UPC is the familiar 12-digit US form |
| SSCC | Serial shipping container code | An 18-digit license-plate number for one physical carton or pallet. The ASN says "carton SSCC X contains these SKUs" |
| GS1-128 | (a barcode standard) | The barcode format used on shipping-carton labels, which carries the SSCC |
| HTS / HS code | Harmonized (Tariff) Schedule code | The customs classification number for a garment. It determines the duty rate |
| VAT | Value-added tax | A consumption tax added at the till in the EU, UK and many other markets. Not used in the US |
| MAP | Minimum advertised price | The lowest price a retailer may advertise your product at |
| RPM | Resale price maintenance | An agreement fixing the price a retailer may actually sell at. Legally fraught |
| ATS | Available-to-sell | Stock you can genuinely promise right now: physical units minus everything already committed |
| GMM / DMM | General / divisional merchandise manager | The buyer's boss and the buyer's boss's boss at a large retailer |
In wholesale, the order is the primary business object and it exists months before any inventory does. Your ERP must model a promise to ship goods that do not exist, to a customer whose credit is unknown, on a date that will move, at a price that may be renegotiated. And it must never let that promise be confused with revenue.
The shape of a wholesale sales organization
There are four ways to get your product in front of a buyer, and most brands use a mix of all four simultaneously. Each has a different cost structure, a different degree of control, and, for you, a different data model.
In-house sales
You hire someone. They are your employee, they carry only your line, they sit in your office (or your showroom), and they are paid a salary plus a bonus or a modest commission. The split between guaranteed salary and variable pay is negotiated case by case.
It varies widely with brand size, territory and how much of the selling the founder still does personally, and any single "typical" ratio you read online describes one company's arrangement rather than an industry norm. What matters for your software is only that both components exist, that the variable part is computed from order data, and that the rule which computes it is written down somewhere your ERP can read.
You get total control of messaging and of which accounts get opened, and every scrap of customer data lives in your system. You also get a fixed cost you pay in a bad season, limited geographic reach, and no borrowed credibility. A new brand's in-house rep cold-calling a boutique in Nashville is a stranger to that buyer. A road rep who has sold the same shop for eleven years already has her trust, and lends a little of it to every line in the bag.
The independent multi-line road rep
This is the classic apparel figure and the one most likely to surprise a software founder. A multi-line rep is a self-employed salesperson who carries a portfolio (a "bag") of six to fifteen non-competing brands, and sells all of them to the same set of buyers in a defined territory (for example: Texas, Oklahoma, Arkansas, Louisiana). They are not your employee. They pay their own travel, their own samples freight, their own booth share. They are paid pure commission on the orders they write.
The economics are the whole story. Because the rep's cost of visiting a boutique is amortized across fifteen brands, they can profitably call on a store that would never justify a dedicated trip for one line. That is what you are buying: distribution reach at zero fixed cost. The flip side is that your line competes for attention inside the bag. If you are 4% of their income, you get shown fourth.
Territory is usually granted exclusively: you agree not to appoint another rep in those states, and the rep earns commission on every order from that territory whether they wrote it or not. That last clause matters more than founders expect: if a buyer in Dallas orders straight from your wholesale portal, the Dallas rep is still owed commission under most agreements. Your ERP must therefore assign a rep by territory rule, not by who typed the order in.
The showroom
A showroom (also "sales agency") is a multi-line rep organization with a physical space. It rents a suite in a fashion building — 262 West 38th Street or 1407 Broadway in New York, the California Market Center in LA, the Dallas Market Center, AmericasMart in Atlanta — merchandises your samples on racks alongside twenty other brands, and receives buyers by appointment during market. Larger showrooms employ several reps, an operations person who enters orders, and sometimes their own PR.
Showrooms typically charge a commission plus a monthly retainer or a seasonal "rack fee" that covers space, sample handling and staff. The retainer is the part new brands get wrong: it is a real fixed cost, payable whether or not the season sells, and it makes showroom representation meaningfully more expensive than a pure road rep. In exchange you get a merchandised presence in the building where buyers already are, and the showroom's relationships, which are often the only reason a major-account buyer takes the meeting at all.
Agents and distributors abroad
Outside your home market you face a choice with big accounting consequences.
An agent is a multi-line rep in another country. They write orders in your name, the retailer becomes your customer, you invoice the retailer, you carry the credit risk, you ship internationally, and you pay commission.
A distributor buys the goods from you and resells them. You issue one invoice to one company. The distributor takes title, meaning legal ownership of the goods passes to them, so the stock is theirs and the risk is theirs. They then hold that inventory in-country and handle import duty, VAT registration, local returns and local retailer credit. In return they buy at a steep discount to your normal wholesale price, commonly 40–60% off, because they must fund inventory and still make a margin reselling to local shops.
To the ERP these are radically different. An agent produces many customers, many invoices, many small credit exposures and a commission liability. A distributor produces one customer, one price list, huge single orders, no commission, and contractual obligations (minimum annual purchase, exclusivity, marketing spend) that someone must track.
| Channel | How they are paid (indicative, all negotiated) | Fixed cost to you | Who owns the customer | Credit risk |
|---|---|---|---|---|
| In-house rep | Base salary + 1–4% commission or bonus | High (salary, benefits, travel) | You | You |
| Independent road rep | Straight commission, commonly 7–15% of net shipped wholesale | None | Shared: in practice, the rep | You |
| Showroom / agency | Commission (often 10–15%) plus monthly or seasonal retainer | Moderate (retainer, samples) | The showroom | You |
| Foreign agent | Commission, commonly 8–12% | Low | The agent | You |
| Distributor | No commission. They buy at 40–60% off wholesale | None | The distributor | The distributor |
Treat every percentage in that table as the rough middle of a wide distribution. Commission rates in apparel wholesale are privately negotiated, are not published in any authoritative survey, and genuinely range from low single digits to the high teens depending on who is doing what.
The logic behind the spread is easy to follow, though: a rep writing $2,000 opening orders to one boutique at a time needs a much higher rate than one who writes a single $400,000 department-store order, because the work per dollar is wildly different. Rates also drop on house accounts, customers the brand acquired and services itself, on which a rep typically earns a reduced rate or nothing.
Ask three reps in your category what they charge before you set your own number, and write whatever you agree into the commission plan record rather than into an email.
When commission is actually earned
This is the single most disputed clause in every rep agreement, and it is a pure data-model question. There are three possible trigger points:
TRIGGER CASH IMPACT ON BRAND RISK TO REP
------------------- -------------------------- ------------------
On order written Pay before you're paid. None. Rep gets paid
Cancellations become your on orders that later
loss twice over. cancel.
On shipment/invoice Pay ~30-60 days before Rep loses commission
the retailer pays you. on cancelled orders.
Common compromise.
On cash collected Never pay on money you Rep waits 60-120 days
never received. Safest after writing. Chases
for the brand. your AR for you.
------------------- -------------------------- ------------------
WORKED EXAMPLE - one order, 10% commission
Order written 15 Feb 2026 $40,000 booked
Shipped 2 Aug 2026 $36,400 (91% fill rate)
Chargebacks -$ 700 (late ASN, label)
Returns/RA -$ 900
Net invoiced $34,800
Collected 15 Sep 2026 $34,100 (short-pay, disputed)
Commission if paid on ORDER WRITTEN = $4,000.00
Commission if paid on NET INVOICED = $3,480.00
Commission if paid on CASH COLLECTED = $3,410.00
Spread between best and worst case = $590.00 (14.8%)
Read that bottom block carefully, because it is the reason commission needs to be a computed, auditable object rather than a spreadsheet. The same order produces three different commission numbers depending on which event you attach payment to, and the gap is nearly 15%.
The order booked at $40,000 shipped at $36,400 because some styles came up short. The ratio of what you shipped to what was ordered is the fill rate, and almost no brand fills at 100%. Chargebacks are penalties the retailer subtracts from your invoice when you break one of their rules. There is a whole section on them below. Then the retailer short-paid by $700, sending less money than the invoice asked for, and you will spend a week trying to establish why.
Most brands settle on "commission earned on shipment, clawed back if the invoice is not collected within N days," which means your ERP needs both a commission accrual at invoice time and a reversal path: exactly the append-only ledger pattern from Chapter 1, applied to money instead of units.
The moment a rep's commission statement disagrees with their own spreadsheet, you lose two days per month forever. Store the commission calculation as rows tied to invoice lines, with the rate, the basis, and the rule version that produced it. Do not store it as a single number on a statement. Reps audit. Always.
The selling season in practice
Selling happens in concentrated windows. Miss one and you have missed a season. There is no "we'll catch up next month," because the buyer's open-to-buy (the budget she is allowed to spend on that delivery month) will have been committed to someone else.
The shape of a year
A CONTEMPORARY WOMENSWEAR BRAND'S YEAR (approximate, US-centric)
SELL MAKE SHIP
------- ------ ------
FW26 Jan-Mar 2026 Apr-Jun 2026 Jul-Oct 2026
SS27 Jul-Sep 2026 Oct-Dec 2026 Jan-Apr 2027
FW27 Jan-Mar 2027 Apr-Jun 2027 Jul-Oct 2027
Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
<-------- SELL FW26 --------> <---- SELL SS27 ---->
<------- MAKE FW26 ------> <-- MAKE SS27 ..
<------ SHIP FW26 ------>
.. SHIP SS26 ---->
KEY CONSEQUENCE: in July you are simultaneously shipping FW26,
paying for FW26 fabric, and selling SS27 - three seasons of cash
flow overlapping in one month.
That ASCII calendar is the whole cash-flow problem of a wholesale brand in one picture. Notice the overlap in July: goods for the season you sold in February are shipping (so you owe your factory), while you are showing samples for the season after (so you are paying for sample fabric and trade show booths), while last season's invoices are still being collected.
Brands fail in that overlap far more often than they fail on the product itself. Your ERP earns its keep by making that overlap visible eight weeks before it arrives, which means the order book has to be queryable by ship month, not just by order date.
The trade show and market map
Where you sell depends on price point, category and region. The table below gives the rhythm of the main events: the season each one sits in, and roughly when in the year it lands.
Do not treat any date here as bookable. Organizers move, rename, merge and co-locate shows constantly, and exhibitor deadlines fall months before the show itself. Where a specific date appears below, it was read off the organizer's own published calendar in July 2026 and is marked as such. Everything else is described only as a rhythm.
Checking the organizer's site before you plan anything is the actual working practice, and it is why "event" belongs in your database as a record with dates you maintain, rather than as a hard-coded list in your code.
| Event | Where | Roughly when | Who it's for |
|---|---|---|---|
| MAGIC / PROJECT / SOURCING / OFFPRICE (co-located) | Las Vegas | Two main editions a year, usually February and August. The same organizer runs COTERIE | Volume. Broad men's and women's, contemporary through moderate, plus sourcing and off-price |
| COTERIE New York | Javits Center, NYC | Two editions a year, February and September. The organizer's calendar showed 24–26 Feb 2026 and 9–11 Sep 2026 when checked in July 2026 | Advanced contemporary and higher-end women's |
| Atlanta Apparel | AmericasMart, Atlanta | Five apparel markets a year. The organizer listed 3–6 Aug and 6–9 Oct 2026 when checked in July 2026 | Southeast specialty stores. Permanent showrooms plus temporary booths |
| Dallas Apparel & Accessories Market | Dallas Market Center | Several markets a year, on a similar cadence to Atlanta. Dates published more than a year ahead | Southwest/Midwest specialty; strong western and contemporary |
| Pitti Immagine Uomo | Fortezza da Basso, Florence | Two editions a year, January and June (the organizer listed 12–15 Jan and 15–18 Jun 2027 when checked in July 2026) | International menswear; much of the global menswear buying calendar anchors here |
| Tranoï and Première Classe | Paris (Palais Brongniart; Jardin des Tuileries) | Sit alongside Paris Fashion Week, so roughly March and late September/October | European and international wholesale for contemporary and designer |
| WHO'S NEXT | Paris Expo Porte de Versailles | Its own cadence, twice a year in January and September, earlier than the Paris Fashion Week shows above | Volume contemporary, accessories and lifestyle for European specialty stores |
Two structural points about that table. First, the American marts run far more selling moments than the two big international show seasons suggest: Atlanta Apparel holds five general apparel markets a year, and Dallas Market Center runs a comparable schedule. Regional specialty buyers reorder frequently and shop close to need, so a brand selling boutiques has many more selling moments — and many more chances to recover from a bad one — than a brand selling department stores.
Second, the co-location in Las Vegas is deliberate: a buyer flies once and shops full-price contemporary at MAGIC and PROJECT, then walks to OFFPRICE for closeouts (old-season goods sold off cheaply to clear them). That is convenient for her and dangerous for you, since your current season and your liquidated past seasons end up a few hundred feet apart under one roof.
The lesson for the software is small and specific. Model a sales_event table with a name, a venue, start and end dates, the season being sold, and the exhibitor deadlines that hang off it: booth payment, sample ship date, linesheet freeze. Then stamp every order with the event it was written at. Six months later, "how did Coterie September actually go?" becomes a query rather than an argument.
Appointment-based selling
Almost all serious wholesale is appointment-based. Walk-up booth traffic generates leads. The money is written in a scheduled 30-to-60-minute slot, booked three to six weeks ahead by email or through a digital wholesale platform. A rep's market week is a grid of these from 9am to 6pm with lunch sacrificed. The schedule itself is an operational asset: a rep with 42 confirmed appointments across a four-day show has a forecastable week, and one with 12 confirmed plus "we'll see who walks by" does not. Track appointment-to-order conversion by rep and by account and you learn quickly which reps are actually working.
A buyer appointment, minute by minute
SPRING/SUMMER 27 APPOINTMENT - 45 MINUTES
Held September 2026. SS27 is made Oct-Dec, ships Jan-Apr 2027.
Account: Harper & Vine (3 doors, Charleston SC)
Buyer: owner/buyer, buys her own store, spends her own money
00:00 Greeting. Coffee. Two minutes of genuine catch-up.
Rep pulls up the account record: last season she bought
$18,400, sold through 71%, reordered twice, paid on time.
02:00 "How did fall sell?" The most important question in the
meeting. She says the linen shirt sold out in 9 days and
the heavy outerwear sat. That single sentence rewrites
what the rep will show for the next 40 minutes.
05:00 The line walk. Rep moves the rack left to right in
delivery order, not in aesthetic order. Group 1
(January delivery) first. Story briefly, then price.
12:00 Buyer starts pulling. She physically moves hangers to a
second rack. The second rack IS the order. Rep says
nothing while she edits.
20:00 Editing down. Rep pushes back: "You've got four navy
tops in the same delivery. Take three, add the stripe."
Good reps subtract. Buyers remember the ones who did.
26:00 Writing. Now the linesheet comes out. Style by style:
colourway, size run, quantity, delivery. Rep reads back
each line. Buyer confirms.
36:00 The commercial terms conversation:
- order total vs. her open-to-buy for that month
- start ship / cancel dates per delivery group
- payment terms (Net 30? credit card? proforma?)
- freight terms and who pays
- any co-op marketing or exclusivity requests
- returns policy and damage allowance
41:00 Signature. Paper copy signed, or e-signature captured
on the tablet. Buyer keeps a copy.
43:00 Next steps stated out loud: "Confirmation to you within
48 hours, credit check with our factor this week, PO
from your side by Friday, and I'll call you the week
of 9 November with a production update."
45:00 Out. Next buyer is already waiting.
Three terms in that transcript need defining before the design lesson:
- Proforma means the buyer pays in full before you ship anything, the default for a first order from a shop you do not know.
- Co-op marketing is an agreement that the retailer may spend some percentage of what they buy from you on local advertising and deduct it from their bill.
- A damage allowance is a small flat percentage the retailer keeps instead of shipping damaged units back to you, because the paperwork costs more than the garment.
Now walk through what happened, because it dictates a surprising amount of software design. The rep opened the meeting by reading the account's history: last season's dollars, sell-through, reorders, payment behavior. That is four different tables joined together, and if the rep cannot see it in three seconds on a tablet, they will not look at it at all.
The line walk is ordered by delivery group — a set of styles that ship in the same window — rather than by product category, because the buyer's budget is monthly and she is really deciding "what do I want arriving in January?"
The order was written against the linesheet, style by style, with the rep reading each line back, which is why linesheet ordering and order-form ordering must be identical or the read-back breaks. And the last two minutes committed the brand to a confirmation within 48 hours and a credit check. Both of those are workflow states with owners and due dates, not good intentions.
Anything the rep needs during an appointment must be visible in under four seconds, offline, on a tablet held in one hand. If retrieving last season's sell-through takes a page load and a filter, it does not exist. Design the appointment screen first and derive the data model from it, not the other way round.
What the rep needs in hand
- Physical samples, in the right size. Lines are shown in one standard sample size — commonly women's S or 6, men's M or 40R (a 40-inch chest in a regular body length) — pressed, complete, with hangtags attached. A hangtag is the printed card tied to the garment carrying the brand name, the style details and usually the price.
- The linesheet, current, priced, with correct delivery dates. Printed and on the tablet.
- The lookbook, for the story.
- Order forms: paper pads as backup, always.
- Account history: last three seasons' bookings, fill rate, sell-through if the retailer shares it, open balance, credit status.
- Terms and policy sheet: minimums, freight terms, returns, the MAP policy (the lowest price a retailer may advertise you at), exclusivity rules.
- Availability: which styles are already oversold against the production cap, which delivery groups are closed.
- A credit answer, or a fast path to one.
The linesheet
The linesheet is the most under-appreciated document in wholesale, and one of the features that will repay your effort fastest. It is a generated artifact: every field on it already lives in your product database, and every hour a human spends rebuilding it by hand in a page-layout program such as Adobe InDesign is an hour spent introducing errors into a legally significant document.
Linesheet vs lookbook vs catalog
| Linesheet | Lookbook | Catalog | |
|---|---|---|---|
| Purpose | Enable an order | Create desire | Reference the full range |
| Imagery | Plain product-on-white: the garment laid flat, or shot on an invisible "ghost" mannequin. One image per style-color | Editorial: on a model, styled, in a location | Product shots, often smaller |
| Prices | Wholesale and MSRP, always | None | Sometimes MSRP only |
| Style numbers | Mandatory, prominent | Rarely | Yes |
| Sizes / size runs | Mandatory | No | Usually |
| Delivery dates | Mandatory, by group | No | Sometimes |
| Fabric content | Usually | No | Yes |
| Audience | Buyer, in the act of buying | Buyer, press, marketing | Buyer, sales team, reference |
| Regenerated | Constantly, weekly during market | Once per season | Once or twice per season |
The last row is the one that decides your architecture. A lookbook is a design project shipped once. A linesheet changes when a color is dropped, a price is corrected, a delivery slips, or a buyer requests a version with only the styles relevant to her. During a market week you may generate forty variants. Build it as a reporting feature and hand it to the software. A designer laying out each variant by hand cannot keep up.
What must be on a linesheet
Minimum viable fields, per style-color row:
- style number
- style name
- color name and color code
- wholesale price
- suggested retail
- size run offered
- fabric content
- country of origin
- delivery group with start ship and cancel dates
- a product image
- and the minimum order quantity if one applies
Header block: brand name, season, contact details for order placement, currency, terms, minimum opening order, and the date the linesheet was generated (a version stamp, so a buyer arguing about a price can be answered in one query).
A worked linesheet structure
ORCHARD & ASH - SPRING/SUMMER 2027 WHOLESALE LINESHEET
Generated 2026-07-24 09:12 UTC | v7 | Currency USD
Opening order minimum $2,500 | Reorder minimum $750
Terms: Net 30 on approved credit; first order proforma
Freight: FOB Los Angeles, collect or prepay-and-add
Contact: orders@orchardandash.com | +1 213 555 0142
=== DELIVERY GROUP 1 - "EARLY SPRING" ==========================
Start ship 2027-01-15 Cancel 2027-02-15
----------------------------------------------------------------
STYLE NAME COLOUR WHSL MSRP SIZE RUN
----------------------------------------------------------------
SS27-101 Marin Shirt 001 Optic Wht $58 $148 XS-S-M-L-XL
SS27-101 Marin Shirt 412 Sky Blue $58 $148 XS-S-M-L-XL
SS27-101 Marin Shirt 880 Black $58 $148 XS-S-M-L-XL
100% organic cotton poplin. Made in Portugal. MOQ 3 per colour
----------------------------------------------------------------
SS27-140 Ojai Trouser 880 Black $84 $215 0-2-4-6-8-10
SS27-140 Ojai Trouser 215 Bone $84 $215 0-2-4-6-8-10
72% cupro 28% linen. Made in Portugal. MOQ 3 per colour
----------------------------------------------------------------
SS27-155 Bellwood Jacket 640 Olive $142 $365 XS-S-M-L
100% cotton canvas. Made in Portugal. MOQ 2 per colour
=== DELIVERY GROUP 2 - "HIGH SUMMER" ===========================
Start ship 2027-03-15 Cancel 2027-04-15
----------------------------------------------------------------
SS27-210 Palma Dress 101 Ecru $118 $298 XS-S-M-L
SS27-210 Palma Dress 533 Sage $118 $298 XS-S-M-L
100% European linen. Made in Portugal. MOQ 2 per colour
----------------------------------------------------------------
SS27-244 Tide Short 412 Sky Blue $52 $132 XS-S-M-L-XL
100% cotton seersucker. Made in Portugal. MOQ 3 per colour
GROUP 1: 3 styles / 6 style-colours / 31 SKUs
GROUP 2: 2 styles / 3 style-colours / 13 SKUs
TOTAL LINE: 5 styles / 9 style-colours / 44 SKUs
Everything in that document is a database projection:
- The header is your brand and season records plus a policy record.
- Each delivery group is a set of styles sharing a start-ship/cancel pair.
- Each row is a style-color, priced from a price list scoped to a currency and possibly to a customer tier.
- The size run string is a rendered form of the size-scale record attached to that style.
- The MOQ line is a per-style rule.
- The "44 SKUs" footer is a count of style × color × size combinations, the actual sellable units your inventory ledger (Chapter 1) will track.
Check that count yourself, because it is the arithmetic beginners get wrong: the Marin Shirt is 3 colors × 5 sizes = 15, the Ojai Trouser 2 × 6 = 12, the Bellwood Jacket 1 × 4 = 4, the Palma Dress 2 × 4 = 8 and the Tide Short 1 × 5 = 5, which is 44.
If a human is typing any of this into a page-layout tool, that human is the bug.
Notice also what a buyer does with it: she reads down the left column and calls out style numbers. So style numbers must be stable, short, human-pronounceable, and sortable. SS27-101 tells you season and sequence at a glance. A UUID does not. Keep the UUID as your primary key by all means, but the style number is a business identifier with its own uniqueness constraint and its own format rules, and it must never change once a linesheet is out in the world.
So treat the linesheet as what it is: a versioned, timestamped rendering of a price list against a product range for a specific audience. Give every generated copy a version identifier that never changes afterwards, and keep the file itself. Every price dispute then resolves to one question: which linesheet version did the buyer have?
Order writing mechanics
Now the order itself. This is where beginner ERPs go wrong most often, because a wholesale apparel order behaves nothing like the shopping cart on a consumer website.
Size runs, ratios and prepacks
A buyer does not order "12 shirts." She orders a distribution across sizes. There are three ways this gets expressed and your order form must handle all three.
THREE WAYS TO WRITE THE SAME ORDER
SS27-101 / 412 SKY BLUE, roughly two dozen units
(A) OPEN SIZING - buyer specifies every cell
XS S M L XL TOTAL
2 6 8 6 2 = 24
Most control. Most typing. Most common for boutiques.
(B) RATIO / SIZE RUN - buyer orders N runs of a fixed ratio
Ratio "1-2-3-2-1" over XS-S-M-L-XL = 9 units per run
Buyer orders 3 runs:
XS S M L XL TOTAL
3 6 9 6 3 = 27
Fast to write. The rep says "three runs" and moves on.
(C) PREPACK / ASSORTMENT - a pre-boxed, pre-priced pack
Prepack "PP-A" = XS1 S2 M3 L2 XL1, 9 units, one carton,
its own barcode on the outer, one line on the invoice.
Buyer orders 3 prepacks = 27 units.
Warehouse never opens the box. Cheapest to pick.
WHAT THE ERP MUST STORE IN ALL THREE CASES
order_line_id sku qty
------------ ------------------ ---
L-0001 SS27-101-412-XS 3
L-0002 SS27-101-412-S 6
L-0003 SS27-101-412-M 9
L-0004 SS27-101-412-L 6
L-0005 SS27-101-412-XL 3
...PLUS the fact that this WAS ordered as 3x ratio "1-2-3-2-1"
so the confirmation, the pick list and the invoice can all
render it the way the buyer wrote it.
That last line is where beginners go wrong. They explode the ratio into SKU quantities and throw the ratio away. Then the buyer gets a confirmation listing five lines instead of one, does not recognize her own order, and calls. Or she says "make that four runs" and you must reverse-engineer the ratio from quantities, which is ambiguous, since 3-6-9-6-3 could be three runs of 1-2-3-2-1 or one run of 3-6-9-6-3. Store the ordering intent (mechanism, ratio identifier, multiplier) alongside the exploded quantities. The quantities are the truth for inventory. The intent is the truth for the conversation.
Prepacks add a further wrinkle in barcoding. Every individual garment carries its own barcode number: a GTIN, usually in the familiar 12-digit UPC form, which is what a shop scans at the till. A prepack is a grouping of those garments, and under the GS1 standards a grouping gets its own separate number in the longer 14-digit GTIN-14 format. That grouping number identifies the box, not any item inside it, and it is not meant to be scanned at a checkout.
The practical consequence is simple: if you sell prepacks to a large retailer, you must maintain two levels of barcode — one per sellable SKU, one per pack configuration — and your product database needs a place to put both. Brands that treat the pack as "just some units bundled together" discover the gap during barcode testing, which is exactly the wrong week to discover it.
Start ship and cancel dates
Every order line, or at minimum every delivery group, carries a ship window. Ship before the start date and a compliance-strict retailer can refuse the shipment or charge you for receiving it early, because they had no space or budget planned for it yet. Ship after the cancel date and they can refuse it outright, leaving you holding season-specific goods with nowhere to go.
The penalty for missing a cancel date is set by each retailer's own vendor agreement, and the range runs from a modest percentage deduction all the way to outright refusal of the whole shipment. Do not assume a number. Read the agreement you signed, and store the penalty terms against the customer record so the person packing the order can see the stakes.
One term you will meet constantly here: a routing guide is the retailer's rule book for physically delivering to them. It specifies which carrier to use, how to label cartons, how heavy a carton may be, which door to arrive at, how to book a delivery appointment and what paperwork must travel with the freight. It is usually a long PDF, it is updated without telling you, and every rule in it is enforceable with a financial penalty.
Now two dates that look similar and are not: the cancel date (the retailer's deadline for you) and the in-DC date or must-arrive-by date, which is when goods must be physically received at their distribution center. If a large retailer says "cancel 15 August" and their routing guide defines the window as arrival-based, your goods must be at their warehouse by then, not leaving yours then. Transit time comes out of your window, not theirs.
A truck from Los Angeles to an East Coast distribution center can easily eat a week, and that week is yours to lose. Model both dates separately, compute your own internal "must-leave-by" date by subtracting transit and packing time, and raise an alert when today crosses it.
Terms and discounts
| Term | What it means | Effect on you |
|---|---|---|
| Proforma / PIA | Payment in advance of shipping | Zero credit risk. Standard for first orders and unknown accounts |
| Credit card on ship | Card charged when the order ships | Near-zero risk; you eat ~2.5–3.5% processing |
| Net 30 / Net 60 | Due 30 or 60 days from invoice date | You finance the retailer. Majors often demand Net 60 |
| 2/10 Net 30 | 2% off if paid within 10 days, otherwise the full amount at 30 days | You are effectively borrowing for the 20 days you would otherwise wait. The annualized cost works out around 37%: 2 ÷ 98 = 2.04% for 20 days, and there are 18.25 such periods in a year. Expensive money, but sometimes worth it when cash is tight |
| Net 30 EOM | 30 days from the end of the invoice month, not from the invoice date | An invoice dated 2 March is due 30 April. Gives the buyer up to an extra month of float (free use of your money) |
| Dating / extended dating | Invoice due date pushed to a fixed future date regardless of ship date | Common seasonal concession; e.g. "all Fall shipments due 10 December" |
| Anticipation | Buyer deducts an interest-like amount for paying early under dated terms | A legacy department-store practice. Model it as an allowed deduction, or it will look like a short-pay (a payment that arrives smaller than the invoice, for a reason nobody wrote down) |
Other discounts you must be able to represent per order or per customer:
- a flat trade discount off list wholesale for a customer tier;
- a volume discount triggered at an order threshold;
- co-op advertising allowances (a percentage of purchases the retailer may spend on marketing and deduct);
- markdown money (a negotiated allowance paid after the fact when goods sell below plan);
- and defective/damage allowances (a small flat percentage — often a point or two, but negotiated per customer — that the retailer keeps rather than shipping damaged units back).
Every one of these arrives as a deduction on a remittance advice: the note that accompanies a payment explaining which invoices it covers and what has been subtracted from each. If your ERP cannot match a deduction on that note to an allowance you actually agreed to, your accounts-receivable team will spend its life on it.
Written, confirmed, accepted — three different things
ORDER LIFECYCLE - THE STATES THAT MATTER
[1] WRITTEN
Buyer and rep agreed in the room. Signature or not.
In your system: draft / pending.
Legally: usually an OFFER, not a contract.
Financially: NOTHING. Not a forecast input yet.
Can change freely.
[2] SUBMITTED
Rep has transmitted it to the brand (synced from the
tablet, emailed, or entered post-show).
In your system: submitted. Now visible to ops.
Still not a commitment by the brand.
[3] CONFIRMED (by the brand)
Brand has checked: is the style still open? is the
delivery achievable? is the pricing right? are the
minimums met? Confirmation goes back to the buyer.
In your system: confirmed.
This is your ACCEPTANCE of their offer. Now it's a
contract, subject to credit.
[4] CREDIT APPROVED
Factor or internal credit has approved the buyer for
this dollar amount. Often partial: "approved to
$15,000 of the $22,000."
In your system: credit_approved / credit_partial /
credit_declined.
ONLY NOW does the order belong in the forecast.
[5] ACCEPTED / OPEN ORDER
Confirmed + credit approved + inside a live season.
This is your ORDER BOOK. Production plans off this.
[6] ALLOCATED -> PICKED -> SHIPPED -> INVOICED
Physical fulfilment. Fill rate is determined here.
[7] COLLECTED
Money in the bank. Commission finally settles.
CANCELLATION can happen at any point up to [6], and does.
The distinction between states 1, 3 and 4 is where most founder-built systems collapse. A written order is the buyer's offer. You have not agreed to anything. A confirmed order is your acceptance. You are now on the hook to deliver. A credit-approved order is the only kind you should be putting into a production plan or a revenue forecast. An order from a boutique the factor has declined has stopped being a sale and become a decision: do you want to ship this one at your own risk? Model these as explicit states with an audit trail of who moved them and when, not as boolean flags.
Why a signed order is not revenue
US companies keep their books under a rulebook called GAAP (generally accepted accounting principles). The part of it that governs revenue is a standard known as ASC 606, written by the Financial Accounting Standards Board.
Its central idea is short and it matters enormously to you: revenue is recognized when control of the goods passes to the customer, not when an order is signed. The standard frames this as recognizing revenue when the seller satisfies its promise by transferring the goods, and it treats that transfer as happening when the customer obtains control of them.
For a wholesale apparel brand shipping FOB origin — risk passing at your own dock — that is normally the moment the goods leave your warehouse. Shipping FOB destination pushes the moment out to delivery at the customer's door. Your accountant will tell you which applies. Your job is to make sure the software can express both.
The practical consequences are worth stating plainly for a founder:
- A $2M market week does not put $2M anywhere near your income statement. It may put nothing there for six months.
- Between order and shipment you will lose units to cancellations, credit declines, production shortfalls, quality rejections, and buyers who go out of business. What fraction survives varies hugely by brand, category and how disciplined your production planning is, so do not adopt a number from a book, including this one. Measure your own booked-to-shipped conversion for two full seasons, then plan off your own figure. Until you have it, planning at 100% is the one option guaranteed to be wrong.
- Therefore your ERP needs two clearly separated concepts — bookings (order book value, a sales metric) and revenue (invoiced, a financial metric) — and must never let a screen show one labeled as the other. Chapter 4's QuickBooks integration only ever receives the second.
That last point has a naming consequence, and it is the most expensive naming mistake in wholesale software. Do not call an order table column revenue, sales, or total without a qualifier. Call it booked_wholesale_value. Six months from now, someone will build a dashboard on top of whatever you named it, a board deck will quote that dashboard, and you will spend an afternoon explaining that the company did not actually make that money. Names leak. Pick them as if a stranger will read them in a spreadsheet with no context, because that is exactly what happens.
Key account management
Majors versus specialty
| Major / national account | Specialty boutique | |
|---|---|---|
| Order size | $50k–$1m+ per season | $1.5k–$25k per season |
| Sales cycle | 6–18 months from first contact to first shipment | One appointment; ship the same season |
| Who decides | Buyer, with DMM/GMM sign-off and a planner's numbers | The owner, who is also the buyer |
| Onboarding | Vendor packet, EDI testing, compliance agreement, insurance, routing guide | Credit application, maybe not even that |
| Terms | Net 60, plus allowances and markdown money | Proforma, card, or Net 30 |
| Chargebacks | Constant, itemized, automated | Almost none |
| Reorders | Rare mid-season. Replenishment programs if you're big | Frequent, the best sign your product works |
| Concentration risk | Severe. One buyer change can end 30% of your business | Low. Losing one of 200 doors is noise |
The bottom row of that table is the one to sit with. Concentration risk is the most common way a promising wholesale brand dies: three large accounts feel like success right up to the season one of them changes buyers, resets its vendor list, or simply cuts its budget, and a third of your revenue disappears in a single meeting you were not in. A brand spread across four hundred boutiques cannot lose a third of its business in one phone call.
But note the engineering consequence, because it cuts the other way. Four hundred small customers is a completely different software problem from three big ones. Three majors mean deep, gnarly integration work — EDI, compliance rules, routing guides, chargebacks — for a small number of customer records. Four hundred boutiques mean high-volume, low-touch operations: mass credit checking, self-service reordering, automated confirmations, small-parcel shipping, and enough automation that a two-person sales-ops team can service them all.
If you build for one shape and your business becomes the other, you will rewrite. Ask which shape you are heading for before you design the customer module, and expect the honest answer to be "both, eventually."
The buyer hierarchy at a major
WHO YOU ACTUALLY HAVE TO CONVINCE
GMM General Merchandise Manager
Owns a whole store's worth of categories. You will
probably never meet them. Signs off on new vendors
above a threshold.
|
DMM Divisional Merchandise Manager
Owns a division (e.g. "Women's Contemporary").
Approves new vendor additions. Sits in on the
big-decision meeting. Cares about assortment
architecture and brand adjacency.
|
BUYER (Senior Buyer / Buyer)
Owns specific departments and classifications.
Picks the product. This is your relationship.
Rotates roles every 18-36 months - and when they
rotate, your business is re-litigated by a stranger.
|
ASSOCIATE / ASSISTANT BUYER
Does the work. Chases samples, sets up styles in
their system, resolves your PO errors, answers
email. BE EXTREMELY GOOD TO THIS PERSON.
PARALLEL TRACK (equal power, different reporting line)
PLANNER Owns the money and the open-to-buy. Decides how
many units, at what margin, across which doors.
The buyer may love you and the planner may still
cut your order in half.
ALLOCATOR Decides which stores get which units.
ALSO IN THE ROOM
Vendor Compliance Issues chargebacks. Adversarial by design.
Accounts Payable Pays you. Also issues deductions.
Transportation Owns the routing guide.
That diagram explains something founders find baffling: why a buyer who enthusiastically wrote you a $400,000 order comes back three weeks later with $180,000. The buyer picks product. The planner owns the dollars. Your ERP should record the whole cast against an account — buyer, associate, planner, DMM, compliance contact, AP contact, traffic contact — with roles and start dates, because when the buyer rotates you will need to know instantly who inherited the department. A single contact_name field on a customer record is not enough for a major.
Vendor onboarding at a major retailer, realistically
NEW VENDOR SETUP AT A US DEPARTMENT STORE
(typical; ranges are wide and retailer-specific)
WEEK 0 Buyer says yes. Verbal. No paperwork yet.
WEEK 0-2 NEW VENDOR PACKET arrives. Contents typically:
- vendor application / company profile
- W-9 (US tax ID)
- remittance and EFT/ACH banking details
- Vendor Agreement / Terms & Conditions
- Vendor Compliance / Supplier Manual sign-off
- social compliance / factory disclosure forms
- product safety and testing attestations
- anti-corruption and code-of-conduct forms
WEEK 2-4 INSURANCE. Certificate of Insurance naming the
retailer as ADDITIONAL INSURED on your general
liability policy, including products/completed
operations cover. Limits are set by the retailer
and vary; larger chains ask for more, sometimes
backed by an umbrella policy. Ask your broker for
the "additional insured - vendors" endorsement by
name. Allow 1-2 weeks.
WEEK 3-6 GS1 SETUP. GS1 Company Prefix if you don't have
one, GTIN-12 per selling SKU, GTIN-14 for
prepacks/cases, and GS1 US Color and Size Codes
mapped to your own colours and sizes.
WEEK 4-10 EDI ONBOARDING. Connection setup, then testing:
850 purchase order (inbound)
860 PO change (inbound)
856 advance ship notice / ASN (outbound)
810 invoice (outbound)
997 functional acknowledgement (both)
852 product activity / sell-thru(inbound)
832 price/sales catalogue (outbound)
Each document is tested separately and must pass
before you're moved to production. ASN + GS1-128
carton label testing is the one that fails.
WEEK 6-12 ROUTING GUIDE + LABEL APPROVAL. Physical test
cartons, label placement, ticketing and hangtag
specs, hanger specs, polybag specs.
WEEK 8-14 Item setup in the retailer's system. Style,
colour, size, cost, retail, country of origin,
fibre content, care, HTS code.
WEEK 10-16 FIRST PO ISSUED.
WEEK 16-24 FIRST SHIPMENT. Then the first chargebacks.
REALISTIC TOTAL: 3-6 months from "yes" to first shipment.
Budget 6. Never promise a buyer you can do it in 6 weeks.
A few of those lines need explaining, since several will be new:
- EFT/ACH details are just your bank account and routing numbers, so the retailer can pay you by electronic transfer instead of mailing a check.
- A certificate of insurance is a one-page proof from your insurer that you carry cover. Naming the retailer as an additional insured extends your policy's protection to them if a customer sues over your product.
- A GS1 Company Prefix is a licensed number range, bought from the standards body GS1, from which you generate the barcode numbers for your own products. You cannot invent them.
- The 997 in the EDI list is a functional acknowledgement: a tiny automatic message that says "I received your file and it parsed," which is how you learn an order or invoice actually landed.
- Item setup is the retailer keying your styles into their own merchandising system, and it stalls the moment one field is missing.
- Ticketing means attaching the retailer's own price tickets to each garment before you ship, and a polybag is the clear plastic bag a folded garment travels in. Both have specifications you must follow exactly.
Two of those requirements are worth stating precisely, because they are published standards rather than folklore. GS1 US administers both the Company Prefix that your GTINs are built from and the Color and Size Codes standard, which was formerly run by the National Retail Federation. That standard defines thirteen color groupings and seven size category types, and it is the vocabulary a large retailer expects your colors and sizes to map onto before they will set up your items.
Carton labeling is the other. Every large retailer publishes its own label specification, and they are granular to a degree that surprises newcomers: which face of the carton the label goes on, the minimum height of the human-readable text printed beneath the barcode, the size of the blank quiet zone that must surround the bars so a scanner can find them, and a maximum carton weight.
The numbers differ by retailer, so read theirs rather than assuming. But expect rules at that level of detail, and expect a deduction when you break one.
Turning the onboarding timeline into tracked tasks
The design point stands above all the detail: every line in that timeline is a task with an owner, a due date and a blocking relationship. That means it belongs in your ERP as an onboarding checklist attached to the customer record, with the certificate, the signed agreement and the approved label photo stored against it, not scattered across someone's inbox, where it will be unfindable the day the retailer asks for it again.
Chapter 4 covered EDI mechanics. What it could not tell you is that the schedule is the hard part: testing is sequential, each document must pass before the next is enabled, and the retailer's integration team works on their calendar, not yours. A buyer who wants product on the floor for Back-to-School in July must issue the PO in February, which means onboarding started in October.
Chargebacks: the tax on being a vendor
A chargeback (also "deduction," "expense offset," or "compliance violation") is money the retailer keeps from your invoice because you broke a rule in their vendor manual. Late ASN. Wrong carton label. Shipped outside the window. Wrong carrier. Cartons over weight. Missing packing slip. Wrong hanger.
The scale surprises people. Practitioner analysis of apparel wholesale deductions describes brands running deduction rates of 2–5% of gross wholesale invoicing before they do any process work. On $7.5m of wholesale invoicing that is roughly $150,000 to $375,000 a year, eating a meaningful slice of a net wholesale margin that the same analysis puts at around 20–25%.
The same analysis reckons about 1% is achievable for a brand in the $5m–$100m range whose order, warehouse and invoicing systems actually talk to each other. Take those as one practitioner's realistic band rather than a law: deduction rates vary by which retailers you sell and how mature your fulfillment is, and the only rate that matters is the one you measure on your own remittances.
The reason a small error costs real money is that penalties are usually assessed per violation and per carton, not per shipment. A single wrong carton number in a 200-carton delivery shows up in the retailer's system as a mismatch between the ASN you sent and what their receiving scanner found, and that one discrepancy can cascade into a charge against the whole delivery. Nobody publishes their penalty schedule, so ask for it during onboarding, in writing, and store it.
Most chargebacks are caused by a mismatch between what you told the retailer you were shipping (the ASN) and what physically arrived. The root cause usually sits in your software rather than on your packing bench. Build carton-level accuracy into fulfillment from day one: every carton gets an SSCC, every SSCC maps to exact contents, and the ASN is generated from the pack record, never typed.
Marketplaces and dropship as a channel
Two newer channels sit between wholesale and DTC, and they behave differently from both.
Dropship (sometimes "vendor direct"): the retailer lists your product on their website, but holds no inventory. When a customer buys, the retailer sends you an order and you ship it directly to the consumer, in your own box, usually with the retailer's packing slip. You still invoice the retailer at wholesale.
Marketplace: you are the seller of record — legally the seller in that transaction, responsible for the goods and for the customer — while the retailer merely provides the storefront.
Sales tax is the usual exception to that ownership: US states have marketplace facilitator laws that push the duty to collect and remit sales tax onto the platform rather than onto you, so read the platform's own tax terms instead of assuming the tax follows the title.
You set the retail price, you ship to the consumer, and the retailer takes a commission on the retail price rather than buying from you at wholesale. Several US department stores now run curated marketplaces alongside their traditional buying, generally built on third-party marketplace software rather than in-house, and admission is by invitation and application rather than open signup. That gatekeeping is the point: unlike an open marketplace, a curated one is still a wholesale relationship where a human decides whether your brand belongs.
| Traditional wholesale | Dropship | Marketplace | |
|---|---|---|---|
| Who holds stock | Retailer | You | You |
| Order size | Hundreds of units, seasonal | 1–2 units, continuous | 1–2 units, continuous |
| Who sets retail price | Retailer | Retailer | You |
| What you're paid | Wholesale price | Wholesale price (sometimes a slightly better "dropship cost") | Retail price minus commission |
| Returns | Rare, negotiated | You take them back, at consumer return rates | You take them back |
| Inventory data | You send an availability file occasionally | Continuous feed, hourly or better | Continuous feed, hourly or better |
| Fulfillment cost | Bulk cartons to one DC | Per-parcel, per-consumer | Per-parcel, per-consumer |
| Cash timing | Net 30–60 after shipping | Net 30–60 after shipping | Platform payout cycle, often faster |
The margin picture, worked
ONE JACKET, THREE CHANNELS. MSRP $365. COGS $71 landed.
ILLUSTRATIVE ONLY - every rate below is a placeholder for
a number you must measure in your own business.
"CONTRIBUTION" = what is left per unit after the costs
caused by selling it, before company overhead. The percentage
in brackets is contribution divided by that channel's own top
line ($142.00 wholesale in A and B, $365.00 retail in C).
(A) TRADITIONAL WHOLESALE
Wholesale price $142.00
Less rep commission @10% -14.20
Less chargebacks/allowances @3% -4.26
Less returns/damage allowance @1% -1.42
Less freight to DC (allocated) -2.50
Net to brand $119.62
Less COGS -71.00
CONTRIBUTION $48.62 (34.2%)
(B) DROPSHIP for the same retailer
Dropship cost (= wholesale) $142.00
Less rep commission @10% -14.20
Less pick/pack labour -3.25
Less outbound parcel to consumer -9.50
Less returns @ 25% of orders, cost of
return label + inspect + restock
(0.25 x $14.00) -3.50
Less units unsellable on return @4%
of gross (0.04 x $71 COGS) -2.84
Net to brand $108.71
Less COGS -71.00
CONTRIBUTION $37.71 (26.6%)
(C) MARKETPLACE at full MSRP
Retail price collected $365.00
Less platform commission @ ~15% -54.75
Less payment processing @ 2.5% -9.13
Less outbound parcel -9.50
Less pick/pack labour -3.25
Less returns @ 30% (0.30 x $16.00) -4.80
Less unsellable returns @5% x COGS -3.55
Less rep commission (usually none) 0.00
Net to brand $280.02
Less COGS -71.00
CONTRIBUTION $209.02 (57.3%)
BUT: (C) sells ONE unit. (A) sold 24 units in one
transaction, six months ahead, on a purchase order you
could show your factory and your factor.
Work through why those three numbers differ so much, remembering that the percentages are placeholders. Wholesale gives you the lowest contribution per unit but the highest certainty and the lowest operating cost per unit: one order, one carton run, one invoice, and the sale was agreed six months before you spent a dollar making it.
Dropship looks like wholesale on the revenue line but carries DTC's cost structure underneath: single-parcel shipping, the labor of picking and packing one unit at a time, and consumer return rates.
Online apparel returns run far higher than in-store returns because the shopper cannot try the garment on first, and they are higher again for fit-sensitive categories like trousers and tailoring than for scarves or tees. Nobody's published average will match yours. Instrument your own return rate by category before you model this channel, because in the arithmetic above it is the single most sensitive input.
Marketplace shows by far the best contribution per unit, because you keep the retail margin instead of handing it to the retailer. What you take on in exchange is real: you carry the inventory risk, you do the marketing, and you pay the platform's commission on every sale.
Most department-store marketplace rates are privately negotiated and unpublished. The one genuinely public schedule to anchor against is Amazon's, whose referral fee for clothing and accessories is tiered by the item's price: 5% at $15.00 or below, 10% from $15.01 to $20.00, and 17% above $20.00, with a $0.30 minimum per item sold, on top of a $39.99 monthly professional selling plan (rates as published in July 2026, so check them before you model with them). A $365 jacket sits firmly in the 17% tier.
Use that as a sanity check when a private marketplace quotes you a rate: if their number is far above it, ask what you are getting for the difference.
Feeding dropship and marketplace from ATS
The operational point for your ERP is blunt: dropship and marketplace require a real-time, accurate available-to-sell feed. Chapter 8 built the ATS cache. This is what it is for. If your feed says 4 units and you have 0, you get an order you cannot fill, a cancellation, and a seller-performance penalty. If it says 0 and you have 4, you lose the sale silently.
And the same physical units are being promised to a wholesale order book six months out and a dropship feed right now, so ATS must be net of allocated wholesale commitments, not just net of physical stock.
Distributors and international expansion
Exclusivity and territory
A distributor will ask for exclusivity, and you should expect to give some form of it. Nobody funds inventory and spends two years building a market for a brand that can be undercut next season by a parallel importer: someone who buys your goods legitimately in a cheaper country, ships them into the distributor's territory without permission, and sells them below the local price. The real negotiation is over the shape of that exclusivity, and each dimension below is a field somewhere in your system:
- Territory: one country, a region, or a list of countries. Define it by ISO country code, not by prose.
- Channel carve-outs: does exclusivity cover your own DTC website shipping into that country? Airport duty-free? Marketplaces? Get this in writing. It is the single most common source of later conflict.
- Category carve-outs: exclusive on apparel but not accessories, for instance.
- Term and renewal: usually 2–3 years with renewal conditional on performance.
- Minimum purchase commitment: per season or per year, in units or value. Failure converts exclusive to non-exclusive rather than terminating outright, in well-drafted agreements.
- Price list: the distributor buys off a different price list, in a different currency, with different terms.
- Marketing and sample obligations: who pays for the samples, the local showroom, the trade show booth.
The price escalation problem
WHY YOUR $365 JACKET COSTS EUR 436-493 IN MUNICH
(vs. EUR 338 at home - the same jacket, two routes in)
MODEL 1: DIRECT EXPORT (you invoice the German boutique)
Your wholesale price USD 142.00
Convert @ 1.08 USD/EUR EUR 131.48
Freight + insurance to DE (per unit) EUR 4.50
Customs value (CIF) EUR 135.98
EU duty on woven cotton outerwear
@ 12% (illustrative; check TARIC) EUR 16.32
Customs broker fee (per unit alloc.) EUR 1.20
Boutique's landed cost EUR 153.50
Boutique applies 2.7x markup EUR 414.45
Plus German VAT @ 19% (consumer price) EUR 493.20
vs. your US MSRP of $365 (= EUR 338) +46%
MODEL 2: VIA DISTRIBUTOR
Your distributor price (50% off whsl) USD 71.00
Convert @ 1.08 USD/EUR EUR 65.74
Freight + insurance to DE (per unit) EUR 4.50
Customs value (CIF) EUR 70.24
EU duty @ 12% (illustrative) EUR 8.43
Customs broker fee (per unit alloc.) EUR 1.20
Distributor's landed cost EUR 79.87
Distributor sells to boutique @ 1.7x EUR 135.78 (local whsl)
Boutique applies 2.7x markup EUR 366.61
Plus VAT @ 19% EUR 436.27
vs. your US MSRP of $365 (= EUR 338) +29%
... and the distributor made EUR 56 per unit while you made
USD 71 minus your COGS of USD 71 = ZERO on this unit.
You must set the distributor price above your true landed
COGS plus overhead, or international expansion loses money
on every single unit while looking like growth on the
revenue line.
Two mechanical notes before the lesson. "Convert @ 1.08 USD/EUR" means one euro buys 1.08 dollars, so you divide the dollar price by 1.08 to get euros. That rate moves daily and belongs in a dated rate table alongside your duty rates, never in a formula. And each markup multiplies whatever is beneath it, which is why a cost added early in the stack gets amplified twice on its way to the shelf.
This is the arithmetic that ambushes brands going abroad. In Model 1 the German consumer pays far more than the American one for the identical jacket, because freight, duty and VAT all stack on top of a full wholesale price, and the boutique then applies its markup to that inflated base.
In Model 2 the escalation is smaller — that is exactly what a distributor is for — but you gave away half your wholesale price to achieve it, and in this illustration that discounted price happens to equal your landed cost, meaning you shipped a unit for zero contribution while your revenue line showed growth.
Every number in both models is illustrative. The shape of the stack is the durable lesson, not the figures.
Why you must never hardcode a duty rate
The single most important thing to understand about apparel duty is that it is not one number and it does not hold still.
Start with the stable part. Every garment has an HTS code — a classification number in the Harmonized Tariff Schedule — and the code depends on fine distinctions: whether the garment is knitted or woven, whether it is for men or women, and what fiber it is made from. Two jackets that look identical to you can classify differently and carry different rates.
In the US schedule, the baseline rates for apparel vary widely across the chapter, and garments made from man-made fibers generally attract higher rates than cotton ones. There is no single "apparel duty rate" to memorize. There is only the rate on the line your product classifies to.
The 2025–2026 tariff layer on top of the baseline
Now the unstable part, which is why this section carries a warning rather than a table. Since 2025 the United States has layered several additional tariff programs on top of those baseline rates, and that layer has been repeatedly changed, challenged and revised.
In February 2026 the Supreme Court held that the International Emergency Economic Powers Act does not give the president authority to impose tariffs, which struck down the 2025 "reciprocal" tariffs built on that statute. The administration then rebuilt a global tariff on different legal footing, under a provision of the Trade Act of 1974 that caps such a measure at 150 days, alongside separate programs on specific metals and goods and a set of tariffs aimed at forced labor in named trading partners.
That is the position as of July 2026, and the previous three sentences have needed rewriting more than once. The specific programs in effect, and the extra percentage each adds, have changed several times within single seasons.
I am deliberately not printing a current rate here, because any number I print will be wrong by the time you read it, and a wrong duty rate quietly destroys a costing model. Look up the live rate for your own HTS code in the official schedule at the moment you cost the style, and look it up again before you commit to a purchase order.
Never write a duty percentage into your code, your costing spreadsheet formula, or a column default. Store an HTS code per style, store duty rates in a rate table with an effective date range and a source note, and recompute landed cost from that table. Then, when a rate changes mid-season — and through 2025 and 2026 US rates changed repeatedly, including once by Supreme Court order — you update one row and re-run costing, instead of hunting through spreadsheets for hardcoded numbers that nobody remembers writing.
The same discipline applies outside the US. The EU publishes its rates through TARIC, its own tariff database, and rates there are looked up per commodity code exactly as in the US schedule. VAT is a separate layer again: it is charged on top of the duty-inclusive value, at a rate set by each member state, and it hits the consumer price rather than your margin. Model duty and VAT as two distinct steps, because they behave differently and they are owed to different people.
Never quote a distributor as "50% off wholesale." Compute it as landed COGS × a target multiple that covers overhead and profit, then check what discount off wholesale that happens to be. If the answer is 35% off and they wanted 55% off, the honest conclusion is that this territory is not viable at your current cost structure, which is far better learned in a spreadsheet than after two seasons.
Channel conflict and pricing policy
What you can and cannot control about resale price
Nothing in this section is legal advice. Pricing policy is one of the few areas of running an apparel brand where you genuinely should pay a lawyer before you act, because the rules differ by country and by US state, and the penalties are severe.
What follows is the shape of the rules, so you can have an informed conversation with that lawyer.
Resale price maintenance (RPM) means a manufacturer and a reseller agreeing on the price at which the reseller will sell. For nearly a century this was per se illegal in the United States under Dr. Miles (1911). Per se illegal means automatically unlawful, with no argument about whether it happened to help competition.
In Leegin Creative Leather Products, Inc. v. PSKS, Inc., decided 28 June 2007, the Supreme Court overruled Dr. Miles and held that vertical minimum-price agreements are judged under the rule of reason: courts weigh the restraint's history, nature and effect rather than condemning it automatically.
RPM is still risky after Leegin: it is fact-dependent, expensive to litigate, and restricted under several state laws and other countries' competition regimes.
MAP (minimum advertised price) is the narrower, commonly used alternative. It restricts the price at which a retailer may advertise your product while leaving them free to sell at any price.
Legal commentary consistently describes MAP as safest when unilateral: you announce it, you do not negotiate it, resellers do not agree to it, and your only remedy is to stop selling to violators.
That leans on the Colgate doctrine, from United States v. Colgate & Co. (1919): a seller may announce in advance the circumstances in which it will refuse to sell, and then refuse, because a decision taken alone is not an agreement with anybody. "Unilateral" here simply means you decided it by yourself and nobody signed up to it.
Practical do's and don'ts drawn from published legal guidance:
- Do issue the policy in writing, identically, to every reseller.
- Do enforce it consistently. Selective enforcement looks like discrimination and undermines the unilateral characterization.
- Do keep documented, independent business reasons for the policy.
- Don't ask retailers to agree to it or sign it.
- Don't solicit retailer input on the MAP level.
- Don't police a competitor's pricing at another retailer's request. That turns a unilateral policy into a horizontal conspiracy, which is a much more serious problem.
- Be careful with cart pricing: recent commentary flags that "add to cart to see price" tactics can be treated as sale price rather than advertised price, pulling the arrangement toward RPM analysis.
For your ERP, the concrete implications are modest but real: store a MAP price per style-color with an effective date range, store the policy version each customer was sent and when, and log MAP violation observations and the enforcement action taken, with a timestamp. If you ever have to demonstrate consistent unilateral enforcement, that log is the evidence.
Off-price and brand damage
Off-price retailers purchase excess, canceled and end-of-season inventory at deep discounts and sell it below regular retail. They are the large chains such as TJX (T.J. Maxx, Marshalls), Ross and Burlington, plus a long tail of specialist closeout buyers. What you recover is negotiated deal by deal. There is no rate card.
It moves with how old the goods are, how seasonal they are, how much of one size is left, whether the labels can stay in, and above all how badly you need the cash this month.
A brand quietly clearing last season in April is in a very different position from one that must empty a warehouse before a loan covenant test, the date when a lender checks whether the business still meets the conditions attached to its borrowing. Expect a steep discount to your normal wholesale price and get more than one offer.
Off-price is the industry's release valve, and every brand of scale uses it. It becomes dangerous when it becomes predictable. If a boutique buyer knows your Spring jacket will be at T.J. Maxx by August, she buys less in February and marks it down sooner. If a consumer knows it, she waits.
The mitigations belong in your system:
- sell off-price only after a defined "protected window" measured from first ship date;
- strip or over-print labels where contractually permitted;
- use different style numbers for made-for-outlet product so it never contaminates sell-through analytics;
- sell into a different country or region from your main accounts where you can, so your own customers never see the discounted goods;
- and record every off-price disposal against the season it came from, which is the discipline nobody keeps, so you compute true seasonal margin rather than the flattering full-price-only version.
Your own DTC competing with your accounts
This is the sharpest conflict in modern wholesale. You want DTC because the margin is better and you own the customer. Your accounts hate it because you have the same product, at the same or lower price, with better availability, while bidding against them on the brand's own search terms.
The industry has swung twice in recent memory. Brands moved heavily into DTC through roughly 2019–2022, chasing the better margin and the customer relationship, then swung back toward wholesale as the cost of buying online customers rose and unsold inventory piled up. The most-cited example is Nike, which reduced its wholesale partners to prioritize its own channels and then publicly rebuilt those retail relationships in the years that followed.
Treat the specifics of any such case study as journalism rather than gospel, but take the pattern seriously: wholesale distribution is far easier to walk away from than to walk back into, because the shelf space you vacate is filled by someone else within a season.
Workable rules of engagement, all of which need enforcement somewhere in software:
- Never undercut on price. Your DTC site sells at full MSRP. This is the non-negotiable one.
- Sequence markdowns. Do not go on sale before your accounts do. Agree a markdown calendar and stick to it.
- Segment the assortment. Some styles are wholesale-only, some DTC-only, some everywhere. Model this as a per-style channel eligibility flag, and have the linesheet generator and the storefront feed both respect it.
- Give accounts exclusive windows. Let a key account have a style two weeks before your own site does.
- Share, don't hoard. Passing DTC demand signals ("this color is selling three to one") to your accounts makes you a partner rather than a competitor.
Sales operations and reporting
The pipeline, from appointment to booked order
SS27 MARKET FUNNEL - one brand, one season
(Illustrative numbers. The SHAPE is the point, not the values.)
Target account list 620 accounts
Contacted / outreach sent 580 (94%)
Appointment requested 410 (71% of contacted)
Appointment CONFIRMED 268 (65% of requested)
Appointment HELD 241 (90% of confirmed)
Order WRITTEN 163 (68% of held)
Order CONFIRMED by brand 158 (97% of written)
Credit APPROVED (full or partial) 141 (89% of confirmed)
-----------------------------------------------------------------
Booked order book 141 orders
Average order value $9,850
BOOKED WHOLESALE VALUE $1,388,850
Expected fill rate 88%
EXPECTED SHIPPED VALUE $1,222,188
Expected chargebacks/allowances @3% -$36,666
EXPECTED NET REVENUE $1,185,522
Prior season comparison
Booked $1,240,000 (+12.0%)
Reorder accounts (bought last season too) 98 of 141 (69.5%)
NEW accounts opened 43
LOST accounts (bought last season, not now) 31
That funnel is the single most useful report a wholesale brand can have, and almost none of them have it, because the top three rows live in someone's email and the bottom four live in accounting.
Notice the diagnostic power once it exists: a low confirmed-to-held rate means your appointment scheduling is broken. A low written-to-held rate means the product or the rep is the problem. A low credit-approved rate means you are selling to accounts you shouldn't be.
The three bottom rows (reorder rate, new accounts, lost accounts) are the honest health check. A brand whose bookings grew 12% while losing 31 accounts is buying growth from a shrinking base.
Forecasting from the order book
Once orders are confirmed and credit-approved, the order book becomes your demand forecast. Two views matter and they are different:
- By ship month drives production scheduling, factory bookings, inbound freight and cash-out planning. Group order lines by start-ship month, sum units by SKU, and compare against production commitments.
- By SKU across all orders drives the actual cut quantity. You add a percentage on top for reorders, damages and samples. That percentage is a judgment call, typically 5–15% for styles you believe in and 0% for styles you don't.
The dangerous report is the one that shows the order book as a single number. A $1.4m order book with 70% of it shipping in one month is a very different company from a $1.4m order book spread evenly across four.
Rep performance
Measure reps on more than bookings. The full set:
- booked value;
- shipped value (bookings that survive contact with reality);
- fill rate on their orders;
- number of accounts sold;
- new accounts opened;
- accounts lost;
- average order value;
- reorder rate;
- appointment conversion;
- days-sales-outstanding on their accounts (a rep who sells to slow payers is costing you money);
- and returns/chargeback rate.
A rep with the highest bookings and the worst DSO and the highest cancellation rate is not your best rep.
The weekly cadence
OFF-SEASON (production/shipping months)
Mon Order book review. New orders confirmed, credit
decisions cleared, cancellations logged.
Tue Delivery status vs. start-ship dates. Every order
group at risk gets an owner and a buyer call.
Wed Rep call. Reorders, sell-through feedback, at-risk
accounts, competitive intel.
Thu AR review. Past due, deductions, disputed items.
Fri Weekly numbers out: bookings this week and season
to date, units shipped this month to date, fill rate,
top 10 styles, top 10 accounts, at-risk list.
MARKET SEASON (selling months)
Daily during market week:
- orders synced from every rep device by 8pm local
- overnight: dedupe, validate, price-check, MOQ-check
- 8am: exception list to reps to fix before appointments
- running booked-value dashboard by rep, by day, by style
Weekly:
- style-level sell-in report: which styles are booking,
which are dead. Kill decisions get made from this, and
they get made BEFORE the fabric is committed.
The last line is the highest-value output of the entire sales operation, and it rests on two terms worth defining. Sell-in is how much the buyers ordered from you, the opposite of sell-through, which is how much shoppers later bought from them. Minimum cut quantity is the fewest units of a style your factory will produce economically.
Fabric is bought in whole rolls, and before cutting, the factory has to lay a marker: the printed jigsaw layout of every pattern piece across the width of the cloth, worked out so the least fabric is wasted. That setup work costs the same whether you make 60 units or 600, so tiny runs carry a punishing cost per garment.
Put those together and you have the decision. Roughly halfway through a selling season you must choose which styles to actually make. A style that has not booked enough units to reach its minimum cut quantity gets dropped, and the orders already written against it get canceled or swapped for something else.
That is an unpleasant phone call, and it gets worse the longer you wait, because the alternative is committing fabric to a style nobody bought. Making the call well requires a style-level sell-in report that is accurate within 24 hours of orders being written. That in turn requires reliable order capture, which brings us to the physically hostile environment where most of those orders are written.
Trade show logistics as an operational problem
A trade show is a small business you set up in a hall for four days. The engineering-relevant parts:
The booth. Space is sold by the square foot, usually in 10-foot-by-10-foot increments, and the space fee is only the beginning. The costs that catch first-timers are the ones nobody quotes upfront:
- freight both ways
- drayage (the fee the venue's contracted handlers charge to move your crates from the loading dock to your booth and back, since you are generally not allowed to carry them yourself)
- furniture and rack rental
- electrical hookup
- internet
- carpet
- badge fees
- travel and hotels during a week when the whole city has raised its rates
A realistic all-in figure for one show is several times the booth fee itself, and it varies enormously by show and city, so build the estimate line by line from the organizer's own exhibitor kit rather than trusting a round number. Custom-built stands run into six figures and are not where a new brand should start.
Samples. You must ship a complete, correct sample set to the venue, get it past the loading dock and the venue's labor rules (at many US convention centers only the hall's own unionized crew may move freight, plug in equipment or use power tools), merchandise it, and ship it back, often straight on to the next show or to a rep. Sample sets get lost, arrive late and come back short. Tracking them as physical assets with a location and a custodian is a genuine ERP requirement that most brands handle with a group chat.
Connectivity. Take this one seriously, because it is the requirement that shapes your architecture. Convention-center exhibitor internet is sold at prices that startle people, and paying for it does not buy reliability: shared venue Wi-Fi in a hall containing thousands of people and their phones degrades badly at peak times, and outages long enough to ruin an appointment do happen.
Cellular data inside a large metal-framed exhibition hall is usually worse than you expect, and worst in the middle of the floor where your booth is. Plan for the network to be absent, not slow. You cannot ask a buyer with four more appointments booked to sit and watch a loading spinner.
Order capture at a trade show must be fully functional with the network cable unplugged. Not "degraded mode." Not "read-only." The rep must be able to open an account, look up history, write a full order with ratios and prepacks, price it, apply discounts, capture a signature and print or email a confirmation, entirely offline, and have it sync cleanly when connectivity returns. This is the concrete business case behind Chapter 6.
What "sync cleanly" has to mean
In practice it means five things, and they lean on Chapter 6's offline-first design and Chapter 3's concurrency and idempotency work:
- Client-generated identifiers. Every order and order line gets its unique ID — a UUID, a long random identifier astronomically unlikely to collide — created on the tablet at the moment the rep starts writing, not assigned by the server later. That way, if the device uploads the same order twice because the first attempt timed out, the server sees the same ID and stores one order rather than two. This is the idempotency key idea from Chapter 3 (do the same operation twice, get the same result once) applied at the far edge of the system.
- Price snapshots travel with the order. The device records the price list version it used. If head office changed a price mid-show, the order still reflects what the buyer signed, and the discrepancy surfaces as an exception rather than a silent overwrite.
- Availability is advisory offline. The device shows the last-known ATS with a timestamp. The authoritative allocation happens server-side. Never let a device believe it has reserved inventory.
- Conflict surfaces as a task, not a merge. If two reps write the same account the same day, do not silently merge. Create a review task with both versions.
- Signature and evidence are attachments. Signature image, photo of the paper order pad and notes are captured locally and uploaded lazily, but the order is valid without them having uploaded.
Post-show order entry is the last operational trap. Even with good tooling, some orders arrive as paper, some as photos of paper, some as emailed spreadsheets, and some as "the buyer will send her PO next week." Budget one to two weeks after every major show for entry, validation and confirmation, and treat that backlog as a tracked queue with an age metric. Orders that sit unentered for three weeks turn into orders that cannot be produced in time, which turn into cancellations. Chapter 7's spreadsheet import machinery exists in large part to serve this exact window.
What this means for your ERP
Everything above resolves into a fairly specific set of tables, rules, screens and reports. Here is the translation.
Entities and fields you now need
-- Sales organisation ------------------------------------------
create table sales_rep (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
code text not null, -- 'TX-MARTIN'
display_name text not null,
rep_type text not null
check (rep_type in ('in_house','independent','showroom',
'agent','distributor_managed')),
showroom_id uuid references showroom(id),
status text not null default 'active',
starts_on date not null,
ends_on date,
unique (tenant_id, code)
);
-- A rep's claim on business, versioned in time. Commission is
-- assigned by TERRITORY RULE, not by who typed the order.
create table territory (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
sales_rep_id uuid not null references sales_rep(id),
name text not null,
is_exclusive boolean not null default true,
effective_from date not null,
effective_to date,
-- match rules, most specific wins
country_codes text[], -- ISO 3166-1 alpha-2
region_codes text[], -- e.g. ISO 3166-2
postal_prefixes text[],
account_ids uuid[], -- named-account override
channel text -- null = all channels
);
create table commission_plan (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
sales_rep_id uuid not null references sales_rep(id),
version int not null,
earn_trigger text not null
check (earn_trigger in ('order_confirmed','invoiced',
'cash_collected')),
basis text not null
check (basis in ('gross_wholesale','net_of_discounts',
'net_of_deductions','gross_margin')),
rate_bps int not null, -- 1000 = 10.00%
house_account_rate_bps int, -- often 0 or reduced
clawback_days int, -- reverse if unpaid
draw_monthly_cents bigint, -- recoverable draw
effective_from date not null,
effective_to date,
unique (tenant_id, sales_rep_id, version)
);
-- Product-side additions the linesheet needs ------------------
alter table style
add column style_number text not null, -- 'SS27-101'
add column season_id uuid references season(id),
add column hts_code text, -- duty, per Ch H
add column country_of_origin char(2),
add column fabric_content text,
add column channel_eligible text[] not null
default '{wholesale,dtc}';
create unique index style_number_uq
on style (tenant_id, style_number);
create table delivery_group (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
season_id uuid not null references season(id),
code text not null, -- 'G1'
name text not null, -- 'Early Spring'
start_ship_date date not null,
cancel_date date not null,
constraint dg_window check (cancel_date >= start_ship_date),
unique (tenant_id, season_id, code)
);
create table size_scale ( -- 'XS-S-M-L-XL'
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
code text not null,
size_codes text[] not null, -- ordered, smallest first
gs1_size_codes text[], -- GS1 US (ex-NRF) mapping
unique (tenant_id, code)
);
create table size_ratio ( -- '1-2-3-2-1'
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
size_scale_id uuid not null references size_scale(id),
code text not null,
quantities int[] not null, -- same length as size_codes
unique (tenant_id, size_scale_id, code)
);
-- Price lists: currency- and tier-scoped, versioned -----------
create table price_list (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
code text not null, -- 'US-WHSL','EU-DIST'
currency char(3) not null,
tier text, -- 'standard','key','dist'
effective_from date not null,
effective_to date,
unique (tenant_id, code, effective_from)
);
create table price_list_item (
price_list_id uuid not null references price_list(id),
style_colour_id uuid not null references style_colour(id),
wholesale_cents bigint not null,
msrp_cents bigint,
map_cents bigint, -- minimum advertised price
min_order_qty int not null default 0,
primary key (price_list_id, style_colour_id)
);
-- Selling events: shows, markets, showroom weeks -------------
-- Dates move every year, so they are DATA, not constants.
create table sales_event (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
code text not null, -- 'COTERIE-FEB26'
name text not null, -- 'Coterie New York'
venue text,
season_id uuid references season(id),
starts_on date not null,
ends_on date not null,
-- deadlines that hang off the show and get missed
booth_payment_due date,
samples_ship_by date,
linesheet_freeze date,
constraint ev_window check (ends_on >= starts_on),
unique (tenant_id, code)
);
-- Orders ------------------------------------------------------
create table sales_order (
id uuid primary key, -- CLIENT-GENERATED
tenant_id uuid not null references tenant(id),
order_number text not null,
account_id uuid not null references account(id),
sales_rep_id uuid not null references sales_rep(id),
territory_id uuid references territory(id),
season_id uuid not null references season(id),
channel text not null
check (channel in ('wholesale','dropship','marketplace',
'distributor','dtc')),
status text not null
check (status in ('draft','submitted','confirmed',
'credit_hold','credit_approved',
'credit_declined','open','partially_shipped',
'shipped','cancelled')),
price_list_id uuid not null references price_list(id),
currency char(3) not null,
terms_code text not null, -- 'NET30','2/10NET30'
freight_terms text, -- 'FOB_ORIGIN' etc.
booked_wholesale_value_cents bigint not null default 0,
written_at timestamptz not null,
sales_event_id uuid references sales_event(id),
buyer_signature_id uuid,
customer_po_number text,
device_id text, -- offline provenance
synced_at timestamptz,
unique (tenant_id, order_number)
);
create table sales_order_line (
id uuid primary key, -- CLIENT-GENERATED
order_id uuid not null references sales_order(id),
sku_id uuid not null references sku(id),
delivery_group_id uuid not null references delivery_group(id),
qty_ordered int not null check (qty_ordered > 0),
unit_price_cents bigint not null, -- SNAPSHOT, not a join
discount_bps int not null default 0,
-- ordering INTENT, preserved for confirmations and edits
entry_mode text not null
check (entry_mode in ('open','ratio','prepack')),
size_ratio_id uuid references size_ratio(id),
ratio_multiplier int,
prepack_id uuid references prepack(id),
prepack_qty int,
-- window override at line level (rare but real)
start_ship_date date not null,
cancel_date date not null,
constraint line_window check (cancel_date >= start_ship_date)
);
create index sales_order_line_shipmonth
on sales_order_line (date_trunc('month', start_ship_date));
-- Commission accrual: rows, not a computed column -------------
create table commission_entry (
id uuid primary key default gen_random_uuid(),
tenant_id uuid not null references tenant(id),
sales_rep_id uuid not null references sales_rep(id),
commission_plan_id uuid not null references commission_plan(id),
source_type text not null -- 'invoice_line','reversal'
,
source_id uuid not null,
basis_cents bigint not null,
rate_bps int not null,
amount_cents bigint not null, -- may be negative
earned_at timestamptz not null,
settled_at timestamptz,
statement_id uuid references commission_statement(id)
);
Two conventions in that schema before the walkthrough. Money is stored in cents as whole numbers (bigint), never as decimals, because decimal arithmetic on money rounds in ways that eventually make an invoice disagree with itself by a penny, and a penny is enough for a rep to lose faith in the whole statement. Percentages are stored in basis points (bps), where one basis point is one hundredth of one percent, so 10.00% is 1000. Same reasoning: whole numbers, exact arithmetic, no floating-point surprises when you multiply a rate by a large order.
Now read the schema against the chapter:
sales_rep.rep_typeexists because an in-house rep, a showroom and a distributor-managed territory are paid and reported on differently.territoryis versioned in time and carries match rules because commission attaches to where the order came from, not who keyed it. That single design decision prevents the most common commission dispute there is.commission_planis versioned with an explicitearn_triggerandbasis, because the worked example earlier showed a 15% swing depending on those two fields. Storing the plan version on everycommission_entrymeans you can always reconstruct why a number was what it was.sales_order.idandsales_order_line.idare client-generated so a tablet that syncs twice at a trade show creates one order.unit_price_centsis a snapshot on the line, not a join to the price list, because the price the buyer signed is the price you owe them even if head office changed the list an hour later.entry_modewithsize_ratio_id/ratio_multiplierpreserves the ordering intent, so a confirmation reads back the way the order was actually written.- And
sales_eventexists because show dates move every single year: put them in a table you maintain, hang the deadlines that everyone forgets off the same row, and stampsales_order.sales_event_idon every order so "how did Coterie September go?" is a query rather than an argument.
Rules the software must enforce
cancel_date >= start_ship_dateon every line, as a database constraint, not a form validation.- An order cannot leave
confirmedforopenwithout a credit decision recorded: either an approval amount from the factor or an explicit "ship at own risk" override with an approver and a reason. - Minimum opening order and per-style MOQ checked at submit time, with a documented override path (reps will need it, so make the override auditable rather than impossible).
- Style-level
channel_eligiblerespected by both the linesheet generator and the storefront/marketplace feed. A DTC-only style must never appear on a wholesale linesheet. - Distributor orders must price from a distributor price list. Block a distributor account from being priced on the standard wholesale list.
- Rep assignment derived from territory rules at order creation, with the resolved
territory_idstored on the order so later territory changes don't retroactively rewrite history. - Booked value recomputed from lines, never entered, and never exposed under a name containing "revenue."
- Cancel-date risk alerting: for every open order group, compute
cancel_date − transit_days − pack_daysand raise a warning when today crosses it. - Duplicate-order detection at sync: same account, same season, same day, similar line set → flag for human review rather than auto-merging.
- No duty rate, tax rate or exchange rate hardcoded anywhere. Each lives in a rate table with an effective date range and a note recording where the figure came from and when it was checked. Landed cost is always computed from those tables, never typed into a style record, so a rate change re-costs the whole range in one update.
Screens and workflows
- Appointment book. Per rep, per event, with account, time, status (requested/confirmed/held/no-show) and outcome. Feeds the funnel report.
- Appointment screen (offline-first tablet). Account header with last three seasons' bookings, sell-through, fill rate, open AR and credit status visible without scrolling. This is the four-second rule made concrete.
- Order writer. Grid by style-color × size, with one-tap ratio and prepack entry, running order total against the buyer's stated open-to-buy, delivery-group tabs, and a signature capture. Must work with airplane mode on.
- Linesheet generator. Select season, price list, delivery groups, style filter, audience; render to PDF and to a shareable link; stamp a version; store the artifact. Regeneration must be instant and free.
- Order confirmation workflow. Queue of submitted orders with automatic flags — price mismatch vs current list, MOQ violation, closed style, delivery group past cut-off, credit exposure over limit — and a bulk-confirm action for clean orders.
- Credit workflow. Submit account to factor, record approval amount and date, handle partial approvals by splitting or reducing the order, and re-check when an order is increased.
- Account onboarding checklist for majors: templated tasks (vendor packet, certificate of insurance, EDI 850/856/810/997 test, label approval, item setup) with owners, due dates and blocking, attached to the customer record.
- Chargeback register. Every deduction captured with retailer code, PO, amount, reason, disputed flag, evidence attachments and resolution, reconciled against remittance advice.
- Post-show entry queue. Paper and spreadsheet orders awaiting entry, with an age metric and an owner.
- Commission statement. Per rep, per period, drilling from the total down to individual invoice lines with rate and basis shown. Publish it. Do not email a PDF someone made by hand.
Reports people will demand within the first month
| Report | Who asks | Key grain |
|---|---|---|
| Order book by ship month | Production, finance | Ship month × SKU × units and value |
| Style sell-in (during market) | Design, production | Style × units booked vs minimum cut quantity |
| Bookings by rep vs last season | Sales lead | Rep × season × booked value, with variance |
| Account movement | Founder, sales lead | New / retained / lost accounts vs prior season |
| Fill rate | Everyone | Order line × ordered vs shipped units |
| Open orders at cancel-date risk | Operations | Order group × days until must-leave-by |
| Chargebacks by reason code | Operations, finance | Retailer × reason × amount × month |
| Commission liability accrued vs paid | Finance | Rep × period × earned, reversed, settled |
| Bookings vs revenue bridge | Board | Booked → canceled → shipped → deducted → net |
| Channel margin comparison | Founder | Channel × style × contribution per unit |
The last one deserves emphasis. Once you sell wholesale, dropship and marketplace simultaneously, the only way to make rational channel decisions is a report that computes contribution per unit per channel with the real costs loaded: commission, chargebacks, parcel shipping, returns and platform fees. Without it, marketplace looks like a gold mine (high revenue per unit) and wholesale looks weak, and you will make a strategic mistake worth more than the entire cost of building your ERP.
How this connects to the engineering chapters
- Chapter 1 (append-only inventory ledger): booked orders create commitments against future inventory. The same ledger discipline (never mutate, always append with a reason) applies to commission entries and to order status transitions.
- Chapter 3 (concurrency and idempotency): client-generated order IDs, sync-safe upserts, and duplicate detection at trade shows are the highest-stakes idempotency problem in the system.
- Chapter 4 (integrations): EDI 850 inbound creates orders that must land in exactly the same tables as rep-written orders, with
channeldistinguishing them. Only invoiced amounts flow to QuickBooks. Booked values never do. - Chapter 5 (multi-tenancy and row-level security): row-level security, or RLS, is the database feature that automatically hides rows a given user is not allowed to see. A showroom carrying twelve brands may need access scoped to one of them. An independent rep must see their own accounts and nobody else's. Territory-based row filtering falls out of the territory table above and makes a natural RLS policy.
- Chapter 6 (offline sync): the trade show booth is the design target. Everything in that chapter is justified by the four days a year when the network is gone and $400,000 of orders are being written.
- Chapter 7 (spreadsheet imports): post-show order entry, distributor order files and retailer-provided templates all arrive as spreadsheets. Column mapping, validation and a review queue are non-negotiable.
- Chapter 8 (ATS caching and reporting): dropship and marketplace feeds consume ATS continuously and must be net of wholesale allocations. The order book reports in this chapter are the heaviest read workload you will have.
- Chapter 9 (testing and ops): the order writer and the sync path deserve your best test coverage, because a bug discovered on day two of MAGIC cannot be fixed on day two of MAGIC.
- Chapter 11 (reference schema): the tables above should be reconciled with the canonical schema there. Treat this chapter's version as the business rationale for those columns.
Build the appointment and the order writer before you build anything else customer-facing. Every other module in a wholesale ERP consumes the order. If order capture is slow, wrong, or requires connectivity, nothing downstream can be correct, and no amount of careful inventory architecture will save you.
Field notes & further reading
- COTERIE / Fashion by Informa events calendar: the organizer's own dates and venues for COTERIE New York, which listed 24–26 February and 9–11 September 2026 at the Javits Center when checked in July 2026. The same organizer runs MAGIC, PROJECT, SOURCING and OFFPRICE, co-located in Las Vegas across two editions a year. Each has its own site, and dates move, so check there rather than relying on any printed calendar.
- Atlanta Apparel markets: a regional mart calendar published well over a year ahead. When checked in July 2026 it already carried the full 2027 schedule. It confirms five general apparel markets a year, which is the concrete evidence for this chapter's claim that a boutique-focused brand gets far more selling moments than a department-store brand. Dallas Market Center publishes its apparel and accessories dates on a similar horizon.
- Pitti Immagine Uomo: the menswear anchor, twice a year in January and June at the Fortezza da Basso in Florence. Useful as a worked example of how far ahead a European organizer publishes: in July 2026 the site already carried both 2027 editions.
- GS1 US Color and Size Codes: the standard formerly run by the NRF, defining thirteen color groupings and seven size category types. The vocabulary your product master must map to before a major will set up your items.
- Leegin Creative Leather Products v. PSKS (Cornell LII): the 28 June 2007 syllabus that overruled Dr. Miles and moved vertical minimum resale price agreements to rule-of-reason analysis. Read it before you talk to a lawyer about pricing policy.
- United States v. Colgate & Co. (1919), full text: the source of the Colgate doctrine your MAP policy rests on. The operative sentence is the Court's statement that a manufacturer may "announce in advance the circumstances under which he will refuse to sell." Short, readable, and worth reading in the original.
- Minimum Advertised Price policies (National Law Review): the practical distinction between a unilateral MAP policy and an RPM agreement, with enforcement do's and don'ts and a warning about cart pricing.
- Amazon selling fees: published clothing referral fees (5% at or below $15, 10% from $15.01–$20, 17% above $20, $0.30 minimum) plus the $39.99 monthly professional plan, as published in July 2026. The only genuinely public marketplace commission schedule. Use it to sanity-check the private ones you're quoted, and re-read it before you rely on the numbers.
- Retailer chargebacks and deductions in apparel wholesale (Uphance): practitioner analysis putting deduction rates at 2–5% of gross wholesale invoicing before cleanup, and about 1% for a brand running connected systems, with common reason codes broken out. It is one practitioner's experience rather than a survey, so read it as a plausible band to test your own remittances against.
- Harmonized Tariff Schedule of the United States (USITC): the official, searchable US duty schedule, and the only thing you should cost a style against. Look up your own garment's classification here rather than trusting any rate quoted in a book, including this one, and look again before each purchase order.
- TARIC, the EU customs tariff (European Commission): the European equivalent of the USITC schedule, with a link through to the searchable consultation database. It works the same way. Find the commodity code, then read the measures attached to it.
1. Build your real linesheet from data, not from a layout tool. Take your actual current season. Write a script that reads your styles, colors, sizes, price list and delivery groups out of Postgres and emits a linesheet in the structure shown earlier in this chapter: header block with terms and minimums, then delivery groups in date order, then style-color rows with wholesale, MSRP, size run, fabric, origin and MOQ, then a footer counting styles, style-colors and SKUs. Stamp it with a version and a generation timestamp. Then diff it against whatever linesheet you are currently sending buyers. Every discrepancy you find is a live data-quality bug that a buyer could have used to argue a price with you.
2. Model your own commission liability three ways. Pick your largest completed season. For every order, compute the commission your reps would have earned under each of the three triggers — on order written, on net invoiced, on cash collected — using your real fill rates, real chargebacks and real collections. Produce one table with the three totals and the spread as a percentage. Then write down, in one sentence, which trigger your rep agreements actually specify, and check whether your books agree.
When you are done you should have: a reproducible, versioned linesheet generator wired to your live product data; a written list of the data-quality defects it exposed; a three-way commission model with a real dollar spread; and a clear answer to the question "what does our rep agreement say, and does our system implement it?" If the last two disagree, you have found the highest-priority bug in your sales module.