Part 1 — The Business of Fashion Wholesale
G Sourcing, Production and the Supply Chain
Selling a garment is one problem. Getting it physically made (to spec, on time, at a price that leaves a margin, from a factory that will not get your shipment seized at the border) is a different problem, and it is the one that kills more apparel brands than any other. This chapter walks the whole path from "which country" to "the boxes are on the dock," and ends by translating every step into tables, fields, screens and rules your ERP has to carry.
In this chapter
- What you need to know first
- The sourcing decision: where you make it
- The tech pack: the single most common cause of production disaster
- The sampling cycle, in order
- Minimums: the constraint that writes your line plan
- The time and action calendar
- The purchase order lifecycle, from the brand's side
- Quality control: AQL, plainly
- Compliance and ethical sourcing
- Capacity, allocation and relationships
- When it is late: partials, air freight and cancel dates
- The inbound handoff: ASN and carton content accuracy
- What this means for your ERP
What you need to know first
Before anything else, understand the shape of the thing. Making a garment works nothing like building software. A garment is assembled from physical inputs that each have their own lead time, their own minimum purchase quantity, and their own failure modes. Nothing in the process is instant, and almost nothing is reversible.
Mills, factories, greige and dye lots
Start with vocabulary. A mill makes fabric. It takes fiber (cotton, wool, polyester), spins it into yarn, and then weaves or knits that yarn into cloth. A factory (in apparel usually called a cut-and-sew factory or just "the vendor") takes finished fabric and turns it into garments. These are almost always different companies in different buildings, often in different countries. When someone says "my factory is late," the cause is usually the mill.
Greige (pronounced "gray," sometimes spelled gray goods) is fabric that has been woven or knitted but not yet dyed or finished. Mills often hold greige in stock and dye it to order, because holding undyed cloth is cheap and flexible while holding 40 colors of the same cloth ties up money in guesses.
A dye lot is one batch of fabric run through one dye bath at one time. Two dye lots of the same color will not match exactly. That comes from chemistry and machine variation rather than carelessness, and it is why a garment must be cut from a single lot wherever panels sit next to each other.
Tech packs, samples and MOQs
A tech pack is the specification document you send the factory. It is the contract in practical terms: sketches, measurements, materials, construction, labels, packing. A sample is a physical garment made before bulk production so both sides can check that the tech pack means what you think it means. Bulk is the real production run.
MOQ means minimum order quantity, the smallest quantity a supplier will accept. Mills and factories both have them, they are different numbers, and they are the single biggest constraint on what a small brand can put in its line.
The three prices you will be quoted
You will hear three prices:
- FOB (free on board) is the price of the goods loaded onto the ship at the origin port. You pay freight, insurance and duty from there.
- CIF adds ocean freight and insurance to the destination port.
- LDP or DDP (landed duty paid / delivered duty paid) means the vendor delivers to your warehouse with duty already paid.
These three-letter codes are Incoterms, a standard published set of trade terms that says exactly where the seller's responsibility ends and yours begins. Most brands buy FOB, because it keeps the freight and customs decisions in their own hands, and with them the tariff risk. Whichever you use, the number that matters for margin is landed cost: FOB plus freight plus duty plus fees, divided by units.
Ex-factory, delivery and lead time
Two dates govern everything. Ex-factory is the date goods physically leave the factory. Delivery or in-DC is the date they arrive at a warehouse. "DC" is short for distribution center, the building where stock is received, stored and picked. Between ex-factory and in-DC sits roughly four to six weeks of ocean transit from Asia, or a few days to a week and a half from Mexico and Central America.
Your wholesale customers do not care about ex-factory. They care about the window between their start ship date (the earliest they will accept goods) and their cancel date (the date after which the order is void and they owe you nothing). That window is often two to three weeks wide.
Lead time is the total elapsed time from placing a production order to having goods in your warehouse. For a first-time style from an Asian factory, plan on roughly five to seven months from purchase order to receipt, of which only four to eight weeks is actual sewing. The rest is fabric, samples, approvals and transit. Those figures vary a lot by product: a simple knit tee moves faster than a lined wool coat, and a repeat order moves faster than a new one.
Audits, inspections and traceability
Finally, three compliance words:
- A social compliance audit is an inspection of a factory's labor conditions (hours, wages, safety, freedom of association) carried out by a third party.
- A quality inspection is a check of the garments themselves against your spec.
- And traceability is your ability to prove, on paper, where every input in the garment came from: which farm grew the cotton, which mill spun it, which dye house finished it.
Ten years ago traceability was a marketing nicety. Under current US law it is the difference between clearing customs and losing a shipment.
The rest of the vocabulary, in one place
These words appear throughout the chapter. None of them are hard. They are just unfamiliar. Read the table once and refer back as needed.
| Term | Plain-language meaning |
|---|---|
| Colorway | One specific color version of a style. The same shirt in navy and in white is two colorways, and each one is a separate dye run, a separate barcode and a separate row in your buy plan. |
| Lab dip | A small swatch of your actual fabric, dyed by the mill to match your color standard, sent to you for approval before the mill dyes the bulk. You approve or reject it, and each rejection costs another dyeing round. |
| Strike-off | The printed equivalent of a lab dip: a test print of your artwork on your actual fabric, submitted for approval before bulk printing. |
| Marker | The cutting layout: a plan showing how all the pattern pieces for all the sizes are arranged on the fabric to waste as little cloth as possible. Making the marker is the last step before the fabric is cut. |
| Trim | Everything on the garment that is not the main fabric: buttons, zips, thread, elastic, labels, hangtags, drawcords. |
| Interlining | A hidden layer fused or sewn inside collars, cuffs and plackets to give them body. Invisible, cheap, and a common source of "why does this collar look wrong." |
| Hangtag / polybag | The printed card attached to the garment at retail, and the clear plastic bag each garment is folded into for shipping. |
| gsm | Grams per square meter, or how heavy a fabric is. A 120gsm shirting is light. A 320gsm fleece is heavy. |
| Hand-feel (or "hand") | How a fabric feels to the touch: soft, crisp, dry, slick. Not measurable by any single number, which is why buyers argue about it. |
| Ratio pack | A carton packed with a fixed mix of sizes (for example 1 small, 2 medium, 2 large, 1 extra-large) instead of one size per carton. Retailers often require a specific ratio. |
| Linesheet | The sales document showing every style you are offering, with photo, colors, sizes, wholesale price and delivery window. It is what a buyer orders from. |
| Sell-in / sell-through | Sell-in is what your wholesale customers order from you. Sell-through is what shoppers then buy from those customers. Strong sell-in with weak sell-through means next season's orders will shrink. |
| Chargeback | A deduction a retailer takes off your invoice when you break one of their rules: late delivery, wrong carton label, missing shipping notice, wrong color. It is a fine, taken automatically, and it comes out of your margin. |
| Chase | Placing an extra production order mid-season on a style that is selling well. You can only chase if fabric and factory capacity are still available, which is why nearshore production is valuable. |
| Replenishment basic | A style you sell every season with no design change, such as a plain white tee or a five-pocket jean. Forecasts for these are reliable, so they are safe to make offshore in volume. |
| Available-to-sell (ATS) | The quantity you can promise a customer right now: stock on hand minus what is already committed to other orders. Chapter 8 covers how to compute and cache it. |
| HTS code | Harmonized Tariff Schedule code, the number that classifies your product for customs. The code plus the country of origin determines the duty rate you pay. |
| Bonded warehouse | A customs-supervised warehouse where imported goods can sit before duty is paid. If your labels are wrong on arrival, this is where you re-label them. |
| Freight forwarder / customs broker | The forwarder books the ship or plane and moves the boxes. The broker files the customs paperwork and gets the goods released. Often the same company, always two separate jobs. |
| Man-day | How inspection firms price their work: one inspector, one site, one day. A single final inspection is normally one man-day. |
| GS1 | The non-profit standards body behind retail barcodes. If your product has a scannable barcode, GS1 defines its format. |
| RN number | Registered Identification Number, a number the US Federal Trade Commission issues to a company so it can be identified on a garment label instead of printing its full legal name and address. |
Production is a chain of commitments with different reversibility. Approving a sketch costs nothing. Booking fabric commits real money and cannot be undone. Cutting fabric destroys optionality permanently. Your ERP's job is to make the point of no return visible before someone crosses it, so the decision is deliberate instead of being discovered afterward in a report.
The sourcing decision: where you make it
Every brand eventually asks: domestic, nearshore, or offshore? These are three operating models with different working-capital profiles, and cost per unit is only one of the things that separates them. Most established brands run more than one of the three at once.
The real trade-offs
Domestic (for a US brand: Los Angeles, New York, the Carolinas) means the shortest lead times, the smallest minimums, and the ability to drive to the factory when something goes wrong. It also means the highest unit cost by a wide margin, a shrinking supplier base, and a shortage of domestically produced fabric, so you often import the cloth anyway and lose most of the speed advantage on the fabric leg. In the 2025 US Fashion Industry Association (USFIA) survey, about 40% of respondents sourced something in the United States, and every one of those companies sourced less than 10% of their products domestically.
Nearshore means Mexico and the CAFTA-DR countries (Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, the Dominican Republic). AlixPartners estimates the average annual labor cost for a garment factory worker in Mexico at about US$13,600, nearly double Vietnam's $7,200 and more than five times Bangladesh's $2,600.
That gap used to end the conversation. Two things changed it. Tariffs: AlixPartners' 2025 cost model, using rates as of 1 August 2025, showed Mexico at 0% duty under the US–Mexico–Canada Agreement (USMCA) against 54% for China and 36.5% for Vietnam and Bangladesh, closing most of the labor gap on landed cost. And speed: they put the nearshoring lead-time saving at three to six weeks, which improves forecast accuracy and reduces markdowns, the price cuts you take to clear stock that did not sell at full price.
The tariff advantage is still live in 2026, and it is written into the rules themselves. The 10% across-the-board import surcharge in force from 24 February 2026 (Proclamation 11012, issued under section 122 of the Trade Act of 1974) explicitly does not apply to goods entering duty-free as originating goods of Canada or Mexico under USMCA, nor to textile and apparel articles entering duty-free under CAFTA-DR from Costa Rica, the Dominican Republic, El Salvador, Guatemala, Honduras or Nicaragua. If you can meet the origin rules, the surcharge is not yours to pay.
Why the nearshore share has not grown
The catch is structural. AlixPartners notes that since 2010 Central America has held a steady share of roughly 15% of US apparel imports, with Mexico the primary contributor, and has not broken out beyond it. The region lacks raw-material capacity, especially polyester, so fabric still comes from Asia, and land freight within the Americas can cost more than ocean freight from Asia because shipment sizes are small.
Official trade data point the same way: USFIA reports Western Hemisphere countries at 14.7% of US apparel imports from January to April 2025, down from 15.8% in 2024 and 17% in 2023. And in the middle of the tariff shock, fewer USFIA respondents sourced from Mexico and Canada in 2025 (50%, down from 60%) and from CAFTA-DR (64%, down from 75%). Respondents named the most urgent regional gaps as textile raw materials such as spandex plus accessories such as zippers, threads and buttons.
Offshore: where the capacity actually is
Offshore means Asia: for a new brand, usually Vietnam, Bangladesh, India, Indonesia, Cambodia or China. The capacity, the vertical mills, the trim suppliers and the technical know-how are concentrated there. USFIA respondents reported sourcing from 46 countries in 2025, and 100% sourced from Vietnam.
Every respondent still sourced something from China, and China was still rated as highly competitive on vertical manufacturing capability, low minimum order quantities, flexibility, cost and speed — and yet a record 60% of respondents put fewer than 10% of their products there, up from 40% in 2024, and over 80% planned to cut China further through 2027. Political risk and forced-labor risk explain that gap between "economically competitive" and "actively being exited." Capability has nothing to do with it.
| Dimension | Domestic (US) | Nearshore (MX / CAFTA-DR) | Offshore (Asia) |
|---|---|---|---|
| Unit cost (cut & sew) | Highest | Middle | Lowest |
| Annual labor cost per worker (AlixPartners, 2025) | Highest | ~$13.6K (Mexico) | ~$7.2K Vietnam, ~$2.6K Bangladesh |
| Speed-to-market score (USFIA 2025, 1 = very long lead time, 5 = very short) | 4.5 | 4.0 (Mexico and CAFTA-DR) | 3.5 China, 3.0 Vietnam, 2.5 Bangladesh / India / Cambodia |
| Transit time to US DC | 1–5 days truck | 3–10 days | 25–45 days ocean |
| Typical garment MOQ per colorway | 50–300 | 300–1,000 | 500–3,000 |
| Fabric availability locally | Very limited | Limited (esp. synthetics) | Deep, vertical |
| Reorder / chase ability | Excellent | Good | Poor |
| Working capital tied up in transit | Days | ~1–2 weeks | ~6 weeks |
| Duty exposure (July 2026) | None | 0% on the 10% surcharge if USMCA / CAFTA-DR origin rules are met | High and politically volatile |
Building a portfolio, not picking a winner
The MOQ and transit ranges in that table are what practitioners report. They move with the factory, the product and your relationship, so treat them as a starting point for questions rather than as quotes.
Read the table as a portfolio to assemble rather than a league table to top. A realistic build for a growing brand is:
- core replenishment basics offshore, where cost per unit matters most and the forecast is reliable;
- seasonal fashion nearshore, where you need to chase or cancel late;
- tiny capsule runs domestic.
An April 2026 analysis by Sheng Lu of the University of Delaware, drawing on earnings-call transcripts from about 30 leading publicly traded US fashion companies recorded between February and April 2026, found Abercrombie & Fitch sourcing from "over 16 different countries" and calling that network a core enabler, while Oxford Industries took China from about 40% of expected purchases early in fiscal 2025 to slightly under 30% by year end and an annualized run rate near 15% entering fiscal 2026.
Every tariff number in this chapter carries a date because they move constantly. These were checked in July 2026. A 10% across-the-board import surcharge took effect on 24 February 2026 under section 122 of the Trade Act of 1974, which caps such a surcharge at 15% and at 150 days unless Congress extends it, so by its own terms it ran only through 24 July 2026. Behind it, the US Trade Representative opened 60 investigations on 12 March 2026 into trading partners that fail to impose and enforce their own bans on forced-labor imports, and on 5 June 2026 proposed additional duties of 10% on economies that already have such a ban (Canada, Ecuador, the European Union, Indonesia, Mexico and Pakistan), that committed to one in a reciprocal-trade agreement (Argentina, Bangladesh, Cambodia, Ecuador, El Salvador, Guatemala, Indonesia, Malaysia and Taiwan) or that run a partial regime (the United Kingdom), and 12.5% on everyone else, Vietnam included. USTR also proposed a "textile mechanism" letting a volume of apparel imports enter at a reduced rate in proportion to the US-grown cotton and US-made fiber that partner buys. That is exactly the rule Kontoor Brands described to investors: a Bangladesh agreement implying a reciprocal tariff of 0% to 19% depending on the US-grown cotton content of the product. Never hard-code a duty rate. Store it as a dated, versioned attribute keyed to HTS code and country of origin, and store the rule inputs (fiber content, origin of the cotton, origin certification status) alongside it.
Agent, direct-to-factory, or vertical supplier
Sourcing agent. An intermediary who finds factories, manages samples, chases production and handles the language and time-zone problem. Agents charge a commission quoted as a percentage of order value, negotiated case by case. The percentage generally falls as order value rises, and many agents blend a retainer with the commission. Ask two or three for their terms before you assume any figure is standard.
A good agent is worth it when you have no production staff. The danger is the agent quietly taking a second commission from the factory as well, a normal practice in some markets. Always ask whether the quoted FOB is the factory's price or the agent's, ask for open-book costing, and get the answer in writing.
Direct-to-factory. You hold the relationship yourself. It is cheaper per unit and gives far better information, because you see the factory's real capacity conversations rather than a filtered version. It costs headcount, travel, and the risk of being ignored as a small account. A common trigger for going direct is a single vendor growing into a large share of your volume. Once a factory is a quarter of what you make, the agent's fee is buying you less than an in-house merchandiser would.
Vertical supplier. A company that owns the chain: they spin, knit or weave, dye, cut and sew under one corporate roof. Verticals give the shortest internal lead times and the cleanest traceability story, a real advantage under forced-labor rules, since they can produce the whole paper trail from one system. The trade-off is that verticals are large, so their minimums are large, and you lose the ability to shop fabric separately.
How brands actually find and vet factories
Nobody finds a good factory by searching a directory. The real sequence is:
- trade shows (Magic, Kingpins and Première Vision are the ones people name; there are regional sourcing shows too) to meet mills and vendors face to face;
- introductions from your fabric mill, who knows which cut-and-sew houses handle their cloth well;
- introductions from non-competing brands your size;
- and only then cold outreach.
Vetting then has four layers, and skipping any of them is how brands end up with a detained shipment.
- Capability. Do they make your product? A factory that is excellent at knit basics will be bad at tailored outerwear. Ask what they run all day, not what they can run.
- Commercial fit. What are their real minimums, their payment terms, their current lead times, and what percentage of their capacity would your order represent? If you are a tiny fraction of a sewing line's output you will be deprioritized whenever a bigger customer pushes.
- Social compliance. Ask for a current third-party audit report (SMETA, WRAP, amfori BSCI or an SLCP verified assessment, all covered under compliance below) and read the corrective action plan, which lists what the auditor found wrong and what the factory promised to do about it. The certificate alone tells you very little. A factory with findings that were closed is a better bet than a factory with a clean report and no history.
- Traceability. Ask them to name their fabric mill, their yarn spinner and their dye house, in writing, for a specific style. If they cannot or will not, you have learned something important. US Customs and Border Protection's own importer guidance walks through exactly this exercise as its worked example of due diligence, following a hypothetical buyer from cotton ginning through spinning, weaving, dyeing, garment assembly and the distribution warehouse.
The tech pack: the single most common cause of production disaster
A tech pack is a specification document that tells a factory exactly what to make. It is the closest thing apparel has to source code. An incomplete tech pack is a leading cause of production failure for one blunt reason: a factory will not stop and ask. When your tech pack does not specify something, the factory fills the gap with whatever they normally do, and you find out four months later when 3,000 units arrive with the wrong stitch, the wrong interlining, or the label sewn in the wrong seam.
TECH PACK — STYLE W-4102 "HARLOW SHIRT" — v4 (2026-03-11)
1. COVER / STYLE SUMMARY
style no, season, category, fit block, base size,
size range, target FOB, designer, tech designer
2. FLAT SKETCHES
front / back / side, plus detail callouts
(collar, placket, cuff, hem, artwork placement)
3. COLOURWAYS
colour name, Pantone TCX ref, part-by-part
(body / trim / thread / button / label)
4. POINTS OF MEASURE (POM) + GRADED SPEC
every measured point, base size value,
grade rule per size, tolerance +/- per point
5. BILL OF MATERIALS (BOM)
main fabric, lining, interlining, thread, buttons,
zips, elastic, labels, hangtags, polybag, carton
-> supplier, ref, colour, placement, consumption
6. CONSTRUCTION DETAILS
seam type per seam, stitch class, SPI, thread
count, topstitch margin, bartack positions,
pressing and finishing notes
7. LABELLING
brand label, size label, care/content label,
country of origin, RN number, placement diagrams
8. PACKING & CARTON
fold method, polybag spec, hangtag placement,
carton dimensions, ratio pack, carton label
artwork, GS1 barcode placement
9. TESTING REQUIREMENTS
fabric performance tests, colourfastness,
shrinkage, garment performance tests
10. APPROVAL LOG
which sample stage approved what, and when
What each tech pack section does
That is the anatomy. Sections 1–3 tell the factory what it is and what color. A fit block is the master pattern shape your brand builds a category on, so "uses the Harlow block" tells a factory a great deal in three words. Pantone TCX is the color reference system for textiles: instead of writing "navy," you write a code that a dye house anywhere can match.
Section 4 is the measurement contract: a numeric chart of every measurement across every size, plus a tolerance, which is the allowable variance in production. Section 5, the bill of materials, is the shopping list: every physical component with its supplier, reference number, color and per-garment consumption. Section 6 tells the sewing operator how to join the pieces. SPI is stitches per inch (more stitches means a stronger, slower, more expensive seam) and a bartack is a dense cluster of stitches used to reinforce a stress point such as a pocket corner.
Section 7 covers the legally required labels, including the RN number. Section 8 tells the factory how to fold, bag and box, which is what your warehouse will actually receive. Section 9 lists the lab tests that must pass. Section 10 is the audit trail of who approved what.
Grading, tolerance and the BOM
Two parts deserve special attention, because they are where beginners lose the most money.
Grading and tolerance. Grading is scaling the measurements across the size range from a base size, usually the middle of the run. Tolerance is how far a produced garment may deviate from spec and still pass. Set it too tight and you reject good production. Set it too loose and your sizes overlap, which is the fastest way to generate returns.
GRADED SPEC EXTRACT — HARLOW SHIRT, HALF CHEST (inches)
POM Point of measure TOL XS S M L XL
---- ------------------ ----- --- --- --- --- ---
A Half chest @ 1" bel +/-.50 17.5 19.0 20.5 22.0 23.5
armhole (grade rule: 1.5" per size)
WHY THE TOLERANCE MUST BE +/- 0.50 AND NOT +/- 1.00
---------------------------------------------------
Size S spec = 19.0 -> passing range 18.50 .. 19.50
Size M spec = 20.5 -> passing range 20.00 .. 21.00
Gap between top of S and bottom of M = 0.50" OK
If tolerance were +/- 1.00:
Size S range = 18.00 .. 20.00
Size M range = 19.50 .. 21.50
OVERLAP of 0.50" -> a passing "S" can be larger than
a passing "M". Customer buys both, one fits, both get
returned. The spec caused this. The factory obeyed it.
The block above shows the arithmetic that turns a sloppy tolerance into a returns problem. The grade rule adds 1.5 inches of half chest per size. With a half-inch tolerance, the widest acceptable small (19.5) is still narrower than the narrowest acceptable medium (20.0), so sizes stay ordered. Double the tolerance and the ranges overlap by half an inch, so a garment labeled S can legitimately be bigger than one labeled M, and both passed inspection. Customer service will report this as "inconsistent sizing" and nobody will find the cause, because the cause is a spreadsheet cell from eighteen months earlier.
The BOM is also your compliance document. Under US forced-labor enforcement, you may be asked to trace every fiber in the garment, and the BOM is where that starts. "Main fabric: cotton jersey 180gsm" gives you no traceability. "Main fabric: cotton jersey 180gsm, mill ref XYZ-180, mill: [name and address], yarn supplier: [name], fiber origin: [country]" is the beginning of a defensible file. Build that discipline in from day one, because retrofitting it across 400 styles is brutal.
Tech packs change constantly during development. The single highest-value discipline is that every sample request, every purchase order and every inspection references a specific tech pack version, and that version is immutable once referenced. "Make it like the tech pack" is meaningless when the tech pack has changed three times since the pre-production sample was approved.
The sampling cycle, in order
Sampling is how you find out whether the tech pack works before you spend real money. Each stage answers a different question, and each approval means something specific. Approving the wrong thing at the wrong stage is how brands end up paying for 5,000 units they cannot sell.
| Stage | Question it answers | Materials used | Typical duration | What approval means |
|---|---|---|---|---|
| Proto (prototype, 1st sample) | Can this be made at all? Is the construction sane? | Substitutes allowed: any similar fabric, generic trims, one size, one color | 1–2 weeks per round. Expect 1–2 rounds | The design is buildable. It does not mean the fit, color or fabric is approved. |
| Fit (and fit sessions) | Does it fit the body, in the real fabric, and does the grade work? | Final or near-final fabric, base size | 1–2 weeks per round. Expect 2–4 rounds | The pattern and the graded spec are locked. Measurement changes after this are expensive. |
| Size set | Does the grade hold across every size in the range, or only in the base size? | Production fabric, one of every size | 1–2 weeks | The grade rules are correct. Cutting can be planned. |
| Salesman sample (SMS, sales or salesman sample) | What do we show buyers to sell the season? | Production-intent fabric, best-guess colors | 3–5 weeks for a full set | Nothing technical. These exist to take orders, and they are sold from before bulk fabric exists. |
| PP (pre-production) | Is everything (actual bulk fabric, actual trims, actual labels, actual packing) correct? | Bulk materials only. No substitutions. | 1–2 weeks after bulk fabric lands | The gate. Bulk cutting may begin. This becomes the sealed sample: the signed, physically stored reference garment every produced unit is judged against. |
| TOP (top of production) | Does what is actually coming off the line match the PP sample? | Pulled from the first units of real production | Pulled within the first 5–10% of output | Production may continue and ship. A failed TOP means stopping the line, which is why it must be checked fast. |
Total elapsed time from first proto to approved PP, for a new style at a new factory, is commonly three to five months, and most of that is not sewing. It is couriering samples back and forth, waiting for the brand to comment, and waiting for bulk fabric to arrive before PP can be made at all.
A repeat style at a known factory with a carry-over fabric compresses to roughly four to six weeks because proto and fit are skipped entirely. Those spans vary with product complexity and how fast your own team responds. The courier legs and your own review time are usually the biggest single blocks.
Fit sessions and the PP gate
Two stages are routinely misunderstood. The fit session is a scheduled meeting where a live fit model wears the sample and a technical designer records changes point by point. One person eyeballing a garment on a hanger will miss almost everything a real fit session catches. Budget around an hour per style, and use a model whose measurements match your base size every season or your fit will drift.
And the PP sample is the real gate. Everything before it is development. Once PP is approved, bulk fabric has been bought, the marker is planned and the cutting table is booked. A change requested after PP approval is either refused or charged for. A change requested after cutting is impossible.
Salesman samples are made months before bulk fabric exists, often in a substitute quality and an approximated color. Buyers write orders against them. When bulk arrives in a slightly different hand-feel or shade, that is a chargeback conversation: the retailer deducts money from your invoice. Protect yourself by photographing and archiving the exact sample shown at market, recording the lab dip reference approved for each color, and being explicit in your terms about acceptable shade variance.
Minimums: the constraint that writes your line plan
Minimums are where merchandising theory meets physics. There are three distinct kinds, they stack, and a beginner who plans a line without modeling them will build an assortment that cannot actually be bought.
Fabric, per-color and garment minimums
Fabric MOQ is set by the mill and driven by machinery. Dye vats process a certain volume. Go far below it and the dye chemistry changes and quality drops. The shorthand practitioners actually use is "3000/1000": 3,000 yards of a fabric quality, split across up to three colors at 1,000 yards each. That is a "mill run," the cheapest fabric you will ever buy.
Below it you are in surcharge territory: mills will often go under their stated minimum for a flat fee (a figure like $500) or a percentage uplift (a figure like 20%), which on $3/yard fabric is $0.60/yard and frequently worth paying. The first question to ask any mill after they quote a minimum is: "can you do less with surcharges?"
Per-color minimum is the one that destroys line plans. The 1,000 yards is per color, because each color is a separate dye run. A fourth colorway adds a whole extra dye lot at the full per-color minimum, so the fabric commitment jumps by a third rather than creeping up a little.
Garment MOQ is set by the factory and driven by line setup. Changing a sewing line over to a new style costs hours of lost output regardless of whether you sew 300 units or 3,000, so factories set a floor, commonly 300–1,000 units per style per color offshore, lower nearshore and domestic.
| Fabric type | Reported mill MOQ range | Notes |
|---|---|---|
| Cotton, solid dyed | 300–500 m | Reactive dye bath minimums drive the floor |
| Cotton, digital print | 50–100 m | Short runs possible, at higher cost per meter |
| Polyester | 500–1,000 m | Cheapest per meter, highest minimum |
| Denim (12–14 oz) | 500–1,000 m | Indigo dye minimums apply on top |
| Stretch knits (cotton) | 300–500 kg | Sold by weight, not length |
| Silk, digital print | 20–100 m | High flexibility, very high cost |
| Wool suiting | 50–100 m | Often sold as cuts per pattern |
Those are reported ranges to sanity-check a quote against. Treat any real number as coming only from the mill itself, because these vary enormously by mill, region and relationship. Region matters as much as fabric type: mills in Italy or Türkiye, which are built around shorter designer runs, are generally far more flexible on small quantities than large Chinese, Indian or Taiwanese mills built around volume. The point of the table is the shape: knits are bought by weight, prints have lower minimums than dyed solids, and everything with a dye bath has a floor in the hundreds of units of measure.
Working it through: why you can only have three colors
LINE PLAN CHECK — HARLOW SHIRT, SS27
Fabric: cotton poplin, 145 cm wide
Mill MOQ: 3,000 m per quality / 1,000 m per colour
(mills say this as "3000/1000" and often mean
YARDS - always confirm the unit before planning)
Consumption: 1.85 m per garment (incl. 5% cutting
waste)
Units producible per colour at mill minimum:
1,000 m / 1.85 m = 540 units
Factory garment MOQ: 500 units per style per colour
(540 >= 500, so one dye lot just clears the sewing
floor)
DESIGNER WANTS 6 COLOURS:
6 x 1,000 m = 6,000 m fabric commitment
6 x 540 = 3,240 units minimum production
At $8.90 FOB -> $28,836 committed before a sale
MERCH FORECAST for this style: 1,900 units
-> overbuy of 1,340 units = $11,926 of dead stock
-> at 30% liquidation recovery, a $8,348 loss
DECISION: cut to 3 colours.
3 x 540 = 1,620 units minimum
Forecast 1,900 -> buy 1,900 (above minimum, fine)
Fabric needed: 1,900 x 1.85 = 3,515 m
-> clears the 3,000 m quality minimum
-> ~1,172 m per colour, above the 1,000 m floor
RESULT: the mill minimum determined the colour
count. The design brief did not.
Read that from the top. Consumption per garment (1.85 m, including cutting waste) converts a fabric minimum into a unit minimum: one dye lot of 1,000 m yields about 540 shirts. Six colors therefore forces at least 3,240 units into existence against a forecast of 1,900, or roughly $12,000 of inventory you will liquidate at a loss. "Liquidate" means dumping it to an off-price buyer for a fraction of its wholesale value.
Cutting to three colors brings the minimum below the forecast, so the forecast drives the buy instead of the mill. This is the concrete link back to merchandising: the line plan is not finished until every style has been checked against its own fabric and factory minimums, and the color count is usually the variable that gives.
Minimums convert design decisions into cash commitments at a fixed exchange rate. When a brand adds colorways without recomputing the fabric commitment, it has authorized a purchase without anyone reviewing it as one. Your ERP should refuse to publish a line plan that has not passed an MOQ feasibility check.
The time and action calendar
A time and action (T&A) calendar, also called a production calendar or critical path, is a backward plan. You start from the date the goods must be in the warehouse and work backward through every milestone, assigning each one an owner and a planned date. It is the single control document that links design, sampling, sourcing, production and shipping.
The critical path is the chain of milestones where any slip pushes the final date. In apparel, the critical path almost always runs through fabric, because fabric is the longest-lead, least-controllable input and because nothing downstream can start without it.
Here is a realistic month-by-month T&A for one wholesale season: Spring/Summer 2027, sold at market in early 2026, delivered to retail customers in January 2027.
| Month | Milestone | Owner | Depends on | If it slips |
|---|---|---|---|---|
| 2025-08 | Season concept, color palette, line plan skeleton | Design + Merch | Prior-season sell-through data | Everything, but recoverable |
| 2025-09 | Line plan locked; MOQ feasibility check; fabric development briefs to mills | Merch + Sourcing | Concept | Fabric development compresses |
| 2025-10 | Tech packs v1 issued; proto samples requested | Tech Design | Line plan | Proto rounds get cut |
| 2025-10 | Lab dips submitted (10–15 working days per attempt) | Sourcing + Mill | Color palette | Color approval slips into fit |
| 2025-11 | Proto samples received and reviewed | Design + Tech Design | Tech pack v1 | Fit round 1 slips |
| 2025-11 | Fit session 1; comments issued | Tech Design | Proto | Grade lock slips |
| 2025-12 | Fit session 2; fabric performance tests (FPT, lab tests for shrinkage, colorfastness, strength) approved | Tech Design + QA | Fit 1, lab dips | Cannot release SMS fabric |
| 2026-01 | Salesman sample (SMS) fabric released; SMS production | Sourcing | FPT approval | Miss market, season at risk |
| 2026-02 | SMS delivered; linesheets and pricing published | Sales + Merch | SMS | Miss market |
| 2026-02 → 04 | Market / sell-in; wholesale orders written | Sales | SMS, linesheets | Order book incomplete at cut-off |
| 2026-05 | Order book cut-off; final buy quantities computed per style/color/size | Merch + Planning | Sell-in | Buy becomes a guess |
| 2026-05 | Production purchase orders (POs) issued to factories; capacity booked | Sourcing | Buy quantities | Capacity lost to another brand |
| 2026-06 | Fabric booked with mill; greige reserved; dye lots assigned | Sourcing | Production PO | Critical path breaks here |
| 2026-06 | Trims and labels ordered (allow ~25 working days) | Sourcing | Tech pack final | Sewing starts and stalls |
| 2026-07 | Size set samples approved | Tech Design | Fit lock | Marker planning delayed |
| 2026-08 | Bulk fabric in house at factory; fabric inspection (4-point system) | Factory + QA | Fabric booking | PCD slips day for day |
| 2026-08 | PP sample submitted and approved | Tech Design | Bulk fabric + trims | Cutting cannot start |
| 2026-09 | PCD (planned cut date); marker made, bulk cutting begins | Factory | PP approval | Ex-factory slips day for day |
| 2026-09 | Pilot run (1 day); TOP sample pulled and approved | Factory + QA | Cutting | Line stops |
| 2026-09 → 10 | Sewing; during-production (DUPRO) inspection at ~20–30% output | Factory + 3rd party | PCD | Defects propagate to full lot |
| 2026-10 | Finishing, pressing, labeling, polybagging, cartoning | Factory | Sewing | Ex-factory slips |
| 2026-10 | Final random inspection (FRI) at 100% sewn, ≥80% packed | 3rd party | Packing | No shipping authorization |
| 2026-11 | Ex-factory; freight booked; ASN (advance ship notice) transmitted | Sourcing + Logistics | FRI pass | Missed sailing = +7–14 days |
| 2026-11 → 12 | Ocean transit (25–45 days), customs clearance | Forwarder + Broker | Ex-factory | Cancel date risk |
| 2026-12 | Goods received at DC; QC on receipt; put away | Warehouse | Clearance | Cannot allocate |
| 2027-01 | Pick, pack, ship to wholesale customers within start-ship / cancel window | Warehouse + Sales Ops | Receipt | Order canceled |
Notice the structure. Concept to customer delivery is about seventeen months, of which only six to eight weeks is sewing. The largest blocks are development (five months of protos, fits and lab dips) and sell-in (three months at market). The two hardest deadlines are SMS delivery (miss it and you have nothing to sell from) and PCD, where every day lost moves ex-factory day for day.
What actually slips, and what it does
CRITICAL PATH: A 3-WEEK FABRIC APPROVAL DELAY
PLANNED ACTUAL
------- ------
Lab dip submitted Jun 01 Jun 01
Lab dip approved Jun 15 Jul 06 (+3 wks:
first shade
rejected, one
full resubmit
at 15 working
days)
Fabric released Jun 16 Jul 07 (+3 wks)
Dye lot run Jul 07 Jul 28 (+3 wks)
Fabric in house Aug 03 Aug 24 (+3 wks)
PP sample approved Aug 14 Sep 04 (+3 wks)
PCD (cut) Sep 01 Sep 22 (+3 wks)
Sewing complete Oct 16 Nov 06 (+3 wks)
Final inspection Oct 21 Nov 11 (+3 wks)
Ex-factory Nov 02 Nov 23 (+3 wks)
...BUT THE FACTORY'S CAPACITY WAS BOOKED FOR SEP 01.
Another brand now holds that line for late September.
Next available slot: Oct 12 -> +6 wks, not +3.
Ex-factory becomes Dec 14 (+6 wks)
+ 32 days ocean -> arrives US Jan 15
+ 5 days clear/receive/pick -> ships to cust Jan 20
CUSTOMER PO: start ship Dec 26 / CANCEL DATE Jan 10
-> ORDER IS CANCELLABLE. 3 weeks became a lost season.
This is the mechanism that turns a small slip into a catastrophe. One rejected lab dip and a resubmission at fifteen working days (entirely normal, since a single attempt takes ten to fifteen working days) pushes every downstream milestone by three weeks, which alone would still land inside the customer's window.
What kills the order is the capacity re-queue: the factory sold your September line slot the moment you missed it, and the next opening is six weeks out, not three. Delay compounds because sewing capacity is scarce and cannot be stored: an hour of line time nobody used is gone.
By the time goods clear customs it is 20 January, ten days past a 10 January cancel date, and the customer may walk away from the entire purchase order — leaving you holding goods bought against an order that no longer exists.
What fixes it is recognizing that lab dip approval, which feels like a low-stakes aesthetic decision made by one person in ten minutes, sits directly on the critical path. Your ERP must show, on the approval screen itself, that this approval gates fabric release, PCD, ex-factory and a customer cancel date, and how many days of buffer remain. Approvals that carry downstream dates must display those dates.
The purchase order lifecycle, from the brand's side
Here is the whole flow, with what changes state at each step. Note that the "purchase order" here is your PO to a factory, the buying side, which is a different document from the customer's PO to you.
PRODUCTION PO LIFECYCLE
[1] PO ISSUED
Brand -> Factory. Locks: style, tech pack version,
qty by colour/size, FOB price, ex-factory date,
Incoterm, payment terms, AQL level, packing spec.
Money committed: deposit (often 30%) if terms
require.
|
[2] FABRIC BOOKED
Factory (or brand) -> Mill. Reserves greige and
books dye capacity. THIS IS THE POINT OF NO RETURN
for colour count and quantity.
|
[3] LAB DIP / STRIKE-OFF APPROVAL
Brand approves shade (or print) against the
Pantone standard. Reject -> mill re-dyes ->
10-15 working days lost per attempt.
|
[4] DYE LOT RUN + FABRIC INSPECTION
Mill dyes to lot. Fabric inspected on arrival at
factory (4-point system, ASTM D5430: penalty
points per defect per 100 sq yd, against a
buyer-set acceptance threshold).
Lot numbers recorded HERE and must survive to
the carton.
|
[5] TRIMS IN HOUSE
Labels, buttons, zips, polybags, hangtags, cartons.
Frequently the actual cause of a late shipment.
|
[6] PP SAMPLE APPROVED <-- HARD GATE
|
[7] PCD: MARKER + CUTTING
Marker = the cutting layout. Cutting converts
fabric into panels. Irreversible.
|
[8] SEWING + DURING-PRODUCTION (DUPRO) INSPECTION
Inspector attends at ~20-30% of output.
Findings can still be corrected on the rest.
|
[9] TOP SAMPLE APPROVED
|
[10] FINISHING, PACKING, CARTONISATION
|
[11] FINAL RANDOM INSPECTION (FRI)
100% sewn, at least 80% packed. Pass -> shipping
authorisation issued. Fail -> see below.
|
[12] FREIGHT BOOKED + ASN SENT
Booking with forwarder; carton data transmitted
BEFORE the container sails.
|
[13] BALANCE PAYMENT / DOCUMENTS
Commercial invoice, packing list, bill of lading,
certificate of origin, test reports.
Reading the lifecycle step by step
Take those steps one at a time. Step 1 is a commitment document, and everything it locks, especially the tech pack version and the AQL level, is what you will argue over later if things go wrong. Step 2 is the true point of no return, because dyed fabric in your color has no other buyer. Steps 3 and 4 are where dye lots are born. Capture the lot identifiers here, because if you cannot tie a carton back to a dye lot you cannot answer a shade complaint or a fiber-origin question six months later.
The 4-point system at step 4 is the standard way to grade fabric quality: an inspector unrolls the cloth, scores each defect one to four penalty points by size, and totals the points per 100 square yards. The standard defines how to score. The threshold above which a roll is rejected is a contract term you negotiate, and buyers commonly set it somewhere between 20 and 40 points per 100 square yards.
Step 5 is the quiet killer: trims are low-value, so nobody watches them, and then 4,000 shirts sit sewn and unlabeled waiting for care labels. Step 6 is the gate. Steps 8 and 11 are the two inspections, and the difference is everything: findings during production can still be fixed on units not yet sewn, final findings cannot.
Step 12 decides whether your warehouse can receive accurately. The bill of lading at step 13 is the carrier's receipt and title document for the cargo. The certificate of origin is the document stating which country the goods were made in, which is what determines your duty rate.
Quality control: AQL, plainly
You cannot inspect 5,000 garments one by one, because it would cost more than the goods. So the industry uses acceptance sampling: inspect a statistically chosen subset, count defects, and accept or reject the whole lot on that basis. The standard is ISO 2859-1, published in the US as ANSI/ASQ Z1.4 and descended from the US military standard MIL-STD-105E. Every third-party inspection firm uses the same tables.
AQL stands for acceptance quality limit. "AQL 2.5" does not mean "2.5% of your garments will be defective." It means the sampling plan is calibrated so that a lot genuinely running at 2.5% defective has a high probability of being accepted. AQL is an input to a decision procedure. It promises nothing about the goods in your boxes.
Three inputs produce the plan:
- Lot size. How many units are in the shipment.
- Inspection level. General Level II is the worldwide default for consumer goods. Level I draws smaller samples (use for a proven supplier). Level III draws larger ones (use for a new or troubled supplier).
- AQL value. Set separately per defect class.
Critical, major and minor defects
Apparel conventionally runs three defect classes with three different AQLs:
- critical at zero (a safety or legal violation, such as a broken needle in the garment or an incorrect fiber content label, where any one finding fails the lot),
- major at 2.5 (a defect a customer would reject the garment for: a hole, a non-functional zip, measurements outside tolerance), and
- minor at 4.0 (a defect most customers would accept: a loose thread, a slightly crooked care label).
Brands with tighter standards run major at 1.5. "AQL 0" is a buyer convention, not a value in the standard: ISO 2859-1's strictest published AQL is 0.010, and the lowest in everyday use is 0.065. A zero-tolerance critical rule is therefore something your own contract states and your own software enforces. The tables will not hand it to you.
| Lot size (units) | Code letter (Level II) | Units inspected | AQL 1.5 accept / reject | AQL 2.5 accept / reject | AQL 4.0 accept / reject |
|---|---|---|---|---|---|
| 91 – 150 | F | 20 | 1 / 2 | 1 / 2 | 2 / 3 |
| 151 – 280 | G | 32 | 1 / 2 | 2 / 3 | 3 / 4 |
| 281 – 500 | H | 50 | 2 / 3 | 3 / 4 | 5 / 6 |
| 501 – 1,200 | J | 80 | 3 / 4 | 5 / 6 | 7 / 8 |
| 1,201 – 3,200 | K | 125 | 5 / 6 | 7 / 8 | 10 / 11 |
| 3,201 – 10,000 | L | 200 | 7 / 8 | 10 / 11 | 14 / 15 |
| 10,001 – 35,000 | M | 315 | 10 / 11 | 14 / 15 | 21 / 22 |
| 35,001 – 150,000 | N | 500 | 14 / 15 | 21 / 22 | arrow: use code M, 315 units, 21 / 22 |
Reading the sampling table
Three things surprise people. The reject number is always exactly the accept number plus one, so there is no gray zone. Sample size grows far more slowly than lot size: a 5,000-unit lot at Level II needs 200 units inspected (4%), while a 100,000-unit lot needs 500 (0.5%). That is how statistical sampling works: the confidence of the decision comes from the absolute size of the sample, and the fraction of the lot that sample represents barely moves it.
And a few cells of the published table hold an arrow instead of a plan, because the combination falls off the end of the printed grid. The rule is to follow the arrow to the first available plan and use that plan's sample size too, which is why a 50,000-unit lot at AQL 4.0 sends you back up to code M and 315 units inspected, fewer than the 500 the lot size alone would suggest. Encode that rule. Do not leave it to the inspector's memory.
WORKED FINAL RANDOM INSPECTION
Lot: 4,000 units, Harlow Shirt, 3 colours
Level: General II
AQLs: critical 0 / major 2.5 / minor 4.0
Table A: lot 3,201-10,000 at Level II -> code letter L
Table B: code L -> sample size 200 units
Inspector pulls 200 units at random across cartons
and colours, then counts DEFECTIVE UNITS by class:
Critical found: 0 accept 0 / reject 1 PASS
Major found: 8 accept 10 / reject 11 PASS
Minor found: 12 accept 14 / reject 15 PASS
RESULT: lot ACCEPTED. Shipping authorisation issued.
IF major had been 11: lot REJECTED. Same goods, three
more defective units in the sample, opposite outcome.
AND NOTE: 10 majors PASSES a plan labelled "AQL 2.5",
although 10/200 = 5%. The accept number comes from
the table. It is never the AQL multiplied by the
sample size.
That example shows why beginners misread AQL. Ten defective units in a 200-unit sample passes an AQL 2.5 plan even though 10/200 is 5%, and eleven fails it. The accept number 10 comes from the operating characteristic curve of the plan: it is set so a lot running at 2.5% defective passes most of the time and a much worse lot fails most of the time.
The same logic makes small lots look lenient: at 20 units inspected, a single major defect still passes. Never reason from the AQL percentage directly to a count. Read the table, and record which table row was used, because inspection level, code letter and sample size are all negotiable, and six months later the only proof of what was agreed is your own record.
In-line versus final, and who does the inspecting
During-production (DUPRO or in-line) inspection happens at roughly 20–30% sewn. Its value is that findings can still be corrected on the units not yet made. Final random inspection (FRI) happens at 100% sewn and at least 80% packed, and its value is a go/no-go on shipping. Running only FRI is a false economy, because by the time you find a systemic problem, every unit has it.
Most brands use a third-party inspection firm rather than the factory's own QC, for obvious incentive reasons. Pricing is per inspector-day. As published in July 2026, QIMA lists product inspections from US$419 per man-day and supplier audits from US$669 in its "Zone A," which covers China, Bangladesh, India, Vietnam, Thailand, Cambodia, Africa and Latin America. Other firms quote in the same broad band. A single FRI is usually one man-day. Against a $40,000 shipment, spending a few hundred dollars to avoid receiving 4,000 unsellable shirts is easy arithmetic.
What to do with a failed lot
A failed inspection opens a negotiation with the factory, and you have five realistic options going into it:
- 100% sort and re-inspect. The factory inspects every unit, pulls defectives and pays for re-inspection. The default and usually right answer. It costs several days and another inspection fee.
- Rework. If the defect is repairable (a restitched seam, a replaced button), the factory fixes and re-presents. Same time cost.
- Accept with a discount. If defects are cosmetic and the season is on the line, take the goods at a negotiated price reduction. Document the agreed rate per unit.
- Partial acceptance. Take the passing colors or sizes now, hold the rest. Useful when one dye lot went wrong.
- Reject outright. Rare, because the factory usually cannot resell branded goods and you still need product. Reserve for critical defects and safety failures.
Whichever you choose, record the decision, reason, cost and authorizer against the PO. Repeat failures at the same vendor are the strongest signal in your supplier scorecard.
Compliance and ethical sourcing
Read this section carefully even if compliance sounds like someone else's job. Under current US law, goods can be detained at the border and effectively lost on the basis of where a fiber was grown, several tiers upstream of anyone you have a contract with.
Social compliance audits and certifications
A social compliance audit checks a factory against a labor standard: working hours, wages, child labor, forced labor, health and safety, freedom of association, discrimination. The main schemes you will meet:
| Scheme | What it is | Scale / notes |
|---|---|---|
| SMETA (Sedex Members Ethical Trade Audit) | An audit methodology. It produces a report plus a corrective action plan, shareable with multiple buyers via the Sedex platform, and it issues no certificate. | Sedex reports over 60,000 SMETA audits on its platform in 2023 and 115,000 sites visited in 2024. Conducted only by approved audit companies. SMETA 7 is the current version. |
| WRAP (Worldwide Responsible Accredited Production) | A facility certification against 12 Principles, issued after a third-party audit reviewed by WRAP's independent board. | 4,000+ certified facilities, 3.9m+ workers. Certificates valid one year. Random unannounced post-certification assessments run during the term. Zero-tolerance issues can trigger decertification. Registration fees $650 (≤100 workers), $950 (101–200), $1,350 (201–1,000), $1,550 (1,001+). |
| amfori BSCI | A buyer-membership program with a shared code of conduct and a shared pool of audit data, aligned to OECD Guidelines, the UN Guiding Principles and ILO conventions. | One audit report serves multiple member brands, reducing duplication. |
| SLCP (Social & Labor Convergence Program) | A converged assessment framework, which sits alongside audits and certifications as a third kind of thing. The facility self-assesses, a verifier checks the data, and the verified data is shared to many buyers. | Available in 122 countries and regions. Covered 7.5 million workers in 2025. Over 100 organizations accept the data. Designed explicitly to cut audit fatigue. |
The practical policy for a small brand: require a valid audit or verified assessment under twelve months old before a first order, store the report and its corrective action plan, put the expiry date on a calendar, and block PO issuance against a lapsed factory. That last rule is the one your ERP enforces.
Forced labor: UFLPA and the rebuttable presumption
The Uyghur Forced Labor Prevention Act (Public Law 117-78) is the most consequential compliance rule in apparel today. Its enforcement mechanism is a rebuttable presumption, effective 21 June 2022: US Customs and Border Protection presumes that any goods mined, produced or manufactured wholly or in part in the Xinjiang Uyghur Autonomous Region of China, or by any entity on the UFLPA Entity List, are made with forced labor and are prohibited from entry under 19 U.S.C. § 1307.
Read "rebuttable presumption" carefully, because it inverts what most people assume about how enforcement works. CBP does not have to prove your goods involved forced labor. You have to prove they did not, and the standard is clear and convincing evidence, which is a higher bar than the ordinary civil standard. The presumption also reaches goods made in or shipped through third countries if they contain Xinjiang inputs. A shirt sewn in Vietnam from yarn spun in Xinjiang is squarely in scope.
The UFLPA Entity List, maintained by the Department of Homeland Security as chair of the Forced Labor Enforcement Task Force, is the operational artifact. As of July 2026 it carries about 160 listings across the statute's sections, covering roughly 145 distinct companies (several appear in more than one section), and the most recent and largest tranche took effect on 15 January 2025.
Textile-relevant names include Xinjiang Junggar Cotton and Linen, Nanjing Synergy Textiles, Aksu Huafu Color Spinning, Xinjiang Tianshan Wool Textile, Hetian Taida Apparel and, for anyone who assumes this reaches only obscure suppliers, the Esquel Group together with its Changji, Guangdong and Turpan textile subsidiaries, all added 1 November 2024. The Xinjiang Production and Construction Corps is listed together with all its subordinate and affiliated entities, an enormous conglomerate.
What happens when a shipment is detained
Operationally, if you are caught: CBP issues a detention notice and you have 30 days to respond. You pay all storage costs for the review regardless of outcome, and CBP may require a single-transaction bond of three times the value of the goods. You may export or destroy them at your cost. Or you file one of two things: an applicability review (the goods are not in scope at all: no Xinjiang inputs, no listed entity) or an exception review (accepting scope but proving by clear and convincing evidence that no forced labor was involved).
What traceability documentation actually requires
CBP's Forced Labor Enforcement Operational Guidance for Importers (Publication 5560-0526, June 2026, which replaced the 2022 guidance) sets out apparel-specific expectations, and they are more demanding than most brands realize.
CBP APPAREL SUPPLY-CHAIN TRACING EXPECTATIONS
(CBP Publication 5560-0526, June 2026, Appendices A-C)
Trace the ENTIRE chain, with documents at every step:
raw fibre (cotton / wool / synthetic)
-> yarn spinning
-> fabric manufacture (weaving or knitting)
-> dyeing and finishing
-> garment production (cutting, sewing, assembly)
-> final export
For each stage you must be able to supply:
* geographic location of the facility, and its role
* a flow chart of the production process, numbered
step by step, ideally with regional maps
* identity of EVERY entity involved, direct or via
an intermediary
* business records validating each entity's role:
purchase orders, contracts, invoices, payment
records, certifications, facility audits
* citations naming which business record identifies
each upstream entity you did NOT transact with
For cotton specifically:
* trace "from the origin of the cotton at the BALE
LEVEL to the final production of the finished
product"
Evidence CBP lists for review submissions:
purchase orders; invoices for all suppliers AND
sub-suppliers; packing lists; BILL OF MATERIALS;
certificates of origin; payment records; seller's
inventory records incl. dock/warehouse receipts;
shipping records incl. manifests and bills of
lading; buyer's inventory records; import/export
records; production orders; factory production
capacity reports; evidence that the VOLUME OF INPUT
of component materials MATCHES THE VOLUME OF OUTPUT
produced; affidavits from each entity involved.
On audits, CBP states:
* all audits should be UNANNOUNCED and conducted by
independent or third-party auditors able to review
the ILO's 11 indicators of forced labour
* CBP "generally does not consider financial audits,
environmental audits, or audits that do not
specifically look at the ILO indicators of forced
labor to be sufficient"
How to package a submission:
* number every document; supply a numbered exhibit
list and an index explaining each one's relevance
* group files by component or production stage
* make scanned image-only PDF pages searchable (OCR)
* supply the original non-English document AND an
English translation
* mark Business Confidential Information in double
brackets: [[BCI]]
Take that list seriously as a data-model specification, because that is what it is. Three items have direct software consequences:
- "Bill of materials" appears in CBP's own evidence list, which means your BOM is a customs document.
- "Evidence that the volume of input of component materials matches the volume of output" means proving that the meters of fabric bought could plausibly produce the units shipped, which requires storing consumption per garment and reconciling it against dye lot quantities.
- And citing which business record identifies each upstream entity you did not transact with means you need a supplier graph with provenance on every edge: each link records both "mill X supplied factory Y" and "we know this because of document Z."
Field evidence is more encouraging than the paperwork suggests. USFIA's 2025 study found early fears about cotton have largely subsided, with only about 10% of respondents planning to source less apparel made with cotton fiber because of UFLPA. Companies are investing instead. Over 80% planned to make more effort to map their supply chains including fiber and yarn sources, and 53% named investment in traceability technology or isotopic testing as a priority area.
Isotopic testing analyzes the isotope ratios a fiber picked up from the soil, water and climate where it grew, then compares that "fingerprint" against a reference library. CBP publishes a guide to it, encourages building it into due diligence early, and treats a result as showing the material is consistent with a claimed origin. It counts as supporting evidence alongside your documents, it does not stand alone as proof, and CBP warns it is unavailable for some products.
Traceability is a data-capture discipline. Treating it as a document-retrieval exercise fails, because you cannot reconstruct a bale-level cotton chain after a detention notice arrives. The mills will not have kept it and nobody has an incentive to help you retroactively. Capture the chain at PO time, when the factory needs your business. Store fiber origin, spinner, mill, dye house and their addresses as first-class rows, not as PDF attachments.
The EU is doing the same thing differently
Regulation (EU) 2024/3015, adopted 27 November 2024 and published in the Official Journal on 12 December 2024, prohibits products made with forced labor on the Union market. It applies from 14 December 2027, with some institutional provisions already live and Member States required to notify their penalty rules by 14 December 2026.
The mechanism differs from UFLPA in a way that matters for planning: there is no rebuttable presumption against the importer. Authorities follow a risk-based approach and must establish a substantiated concern before opening an investigation. The regulation defines that as a reasonable indication, based on objective, factual and verifiable information, that a product was likely made with forced labor.
When they prioritize, they weigh the share of the suspect part in the final product, the quantity and volume involved, the scale and severity of the suspected forced labor, and the size and resources of the operator, with explicit support measures and contact points for small and medium-sized enterprises.
So the US puts the burden on you at the border, and the EU puts it on the regulator but will still investigate. The documentation you build for UFLPA answers an EU inquiry too, so build it once.
Labeling: the compliance nobody budgets for
US labeling is enforced by the Federal Trade Commission and applies to every garment you sell. Textile products must carry:
- the fiber content: generic fiber names with percentages by weight, listed in descending order of predominance, with fibers under 5% shown as "other fiber" unless they are wool or have a definite functional significance at that amount, such as spandex for stretch;
- the country of origin; and
- the identity of the manufacturer or responsible party, which is usually done with an FTC-issued RN number rather than a full name and address.
Separately, the Care Labeling Rule requires care instructions on a permanent label, and you must have a "reasonable basis" (reliable evidence) for every instruction and warning. You cannot write "Dry Clean Only" as a hedge. The FTC's own guidance says you need proof that washing would harm the garment. Where a garment has several components, you need evidence that the whole garment survives the instructed treatment, since each part surviving on its own proves nothing about the assembled item.
Placement matters too: when a garment has a neck, the country of origin must appear on a label at or near the inside center of the neck, either midway between the shoulder seams or next to another label in that position. Fiber content and manufacturer identity can go elsewhere as long as they are conspicuous and accessible. That neck rule gets missed on first production runs, and the remedy is relabeling 4,000 units in a bonded warehouse.
Capacity, allocation and relationships
Being small costs you here, and it is worth being blunt about why. A purchase order sent to a factory buys a slot on a sewing line before it buys any garments, and that slot is a scarce resource allocated by a planner who is weighing your order against everyone else's.
A mid-sized factory might run something like 8–20 sewing lines, each producing on the order of a thousand or two simple units per day, with a planner allocating lines a season ahead. Exact numbers vary enormously by product and country, but the shape holds: if your 4,000-unit order is two days on one line while a competing brand's 200,000-unit program is four months across six lines, you lose every scheduling conflict.
There is no malice in it: the planner is trying to keep every line full, and the big account keeps the factory solvent. What actually works:
- Book capacity ahead of the PO. Send a seasonal capacity forecast (style count, unit range, target PCD window) three to six months before you can issue firm orders. It is non-binding on both sides but it changes your position in the queue enormously.
- Be the easy customer. Complete tech packs, fast approvals, payments on time, no last-minute changes. Factories allocate to accounts that do not create rework, the cheapest competitive advantage available to a small brand.
- Be reliably repeat. Four orders a year of similar size and construction is worth more to a planner than one big unpredictable order, because the line stays warm on the same skill set.
- Concentrate, then diversify deliberately. Spreading eight styles across six factories makes you insignificant everywhere. Consolidate to two or three vendors to build weight, then add a second source for your highest-risk categories.
Dual sourcing and switching costs
Dual sourcing means qualifying a second factory for the same product. It costs real money (a full sampling cycle, a fresh audit, new fit rounds, probably a worse first price) and buys continuity when your primary vendor has a fire, a labor dispute, a compliance problem or just a better customer.
The usual rule of thumb is to dual-source anything that represents a large enough slice of revenue that losing it would be an emergency, plus anything carrying political risk you cannot control. Pick that threshold deliberately and write it down, because otherwise it never happens.
Switching costs are why brands stay in bad relationships. Moving a style means re-doing protos, fits, PP and TOP; re-qualifying the mill; absorbing a learning-curve quality dip; and re-entering someone else's capacity queue. Sheng Lu's April 2026 analysis captured the honest number straight from earnings calls: a full sourcing realignment takes 12–18 months or more. That is the real price of switching, which is why the decision to move should be made a year before you need the outcome.
When it is late: partials, air freight and cancel dates
Something will be late. The question is what you do in the fourteen days between "the factory tells you" and "the customer's cancel date."
Air freight rescue economics
Air freight costs several times what ocean costs per unit and gets there in days rather than weeks: roughly five to seven days door to door against thirty to forty-five. The multiple between the two swings widely, because ocean spot rates move week to week while air rates follow a different cycle, so recompute it from live quotes rather than trusting a rule of thumb. In the worked example below air lands at about seven times the ocean cost per unit. The decision is arithmetic, and it is usually more favorable than people expect.
AIR RESCUE DECISION — HARLOW SHIRT
Order: 8,000 units, FOB $9.20 = $73,600
Wholesale value @ $24.00 = $192,000
Packed weight: 0.26 kg/unit = 2,080 kg total
OCEAN (planned)
Shanghai-LA spot, Drewry World Container Index,
23 Jul 2026: $5,878 / 40ft
Assume the box ships full: a 40ft holds roughly
20,000 polybagged shirts of this size
Allocated freight: 5,878 / 20,000 = $0.29/unit
Transit: ~30 days + 5 days clear/receive
AIR (rescue)
ASSUMED forwarder quote, China to US west coast:
$6.50 / kg
(a planning figure - always get a live quote;
this lane can move 30% in a month)
2,080 kg x 6.50 = $13,520
Per unit = $1.69/unit
Plus origin handling, air waybill fees, customs,
trucking -> budget another $0.15-$0.40/unit;
call it $2.00 all in
Transit: ~5 days door to door
DELTA: $2.00 - $0.29 = $1.71/unit = $13,680 total
COMPARE THAT TO THE ALTERNATIVE
Order cancelled at the cancel date:
Lost revenue = $192,000
Goods still cost you (FOB+duty+frt) ~ $88,000
Liquidate off-price at ~30% of wholesale
8,000 x $7.20 = $57,600
Net loss vs. plan ~ $30,400 of cost
+ the entire $104,000 gross margin foregone
DECISION: air is obviously correct here.
WHEN IT IS NOT
Same maths on a $6.00 FOB basic tee sold at $11:
gross margin ~ $3.50/unit
air delta of $1.71 eats 49% of the margin
-> air only a partial quantity, or negotiate a
delivery extension, or take the cancel.
The walkthrough: allocated ocean freight is trivial, under thirty cents a unit, because a full container carries so many shirts. Air costs about $1.69 a unit in pure freight, roughly two dollars all in once the air waybill (the air equivalent of a bill of lading), handling and customs are included. Against a canceled order that vaporizes $192,000 of revenue and leaves you liquidating at 30 cents on the wholesale dollar, spending $13,680 is not a difficult call.
Flip the price architecture and it inverts: on a cheap basic with three and a half dollars of gross margin, a $1.71 air delta consumes half the margin, so look at partial airing or a negotiated extension instead. Gross margin per unit drives the air decision. Order value on its own tells you nothing.
Three inputs in that block need checking against your own numbers:
- that the ocean container ships full (a half-empty box doubles the per-unit ocean cost),
- that the ocean rate still holds (the Drewry reading is dated for exactly that reason),
- and above all the air rate, which is an assumption here rather than a quote and is the figure most likely to be wrong when you need it.
Partial shipments
A partial (or "split") shipment means airing the part that matters and shipping the rest by sea. Done well it is the cheapest rescue available: air the sizes and colors that drive the order (often core M and L in the lead color, perhaps 40% of units) and let the tail follow.
Two cautions. Check the customer's purchase order terms first: many retailers refuse partials outright, or accept them but treat each as a separate shipment for chargeback purposes, so you incur two sets of compliance penalties. And your ERP must represent one production PO fulfilling one customer order across two inbound receipts with different arrival dates, or your available-to-sell will be wrong for a month.
Cancel dates
The cancel date is a hard contractual right. Brands that treat it as a target they can drift past lose orders. After it passes, the customer may refuse the goods with no liability. In practice most buyers will grant an extension if you ask early, honestly, with a specific new date and a reason, and most will refuse if you tell them the week of.
The operational rule is simple and worth encoding: the moment an ex-factory date moves, recompute every affected customer's delivery date and flag any that now land past the cancel date. That calculation should be automatic, because a human will not do it across 300 open order lines.
One habit prevents most of this. Plan to an ex-factory date, but promise customers a delivery date with two to three weeks of buffer already inside it. The buffer absorbs a missed sailing, a customs hold or a re-inspection without touching the customer relationship. Brands that publish their optimistic date spend every season apologizing.
The inbound handoff: ASN and carton content accuracy
The last mile of production is a data problem. Physical goods will arrive at your warehouse in cartons. What determines whether receiving takes four hours or four days is whether the warehouse knew what was in each carton before the truck backed in.
The instrument is the ASN, or advance ship notice, a data file transmitted by the factory when the shipment leaves. (Chapter 4 covers the mechanics of the EDI 856 message, EDI being electronic data interchange. What matters here is content and timing.) A useful ASN answers four questions per carton: which shipment it belongs to, which PO lines it fulfills, exactly which SKUs (stock-keeping units) and quantities are inside, and what unique identifier is on the outside.
That identifier is normally an SSCC, a Serial Shipping Container Code. It is an 18-digit GS1 identification key that uniquely identifies a logistic unit such as a carton or pallet, printed as a barcode on the carton label. Its value is that scanning one barcode retrieves the entire declared contents from the ASN, so a receiver confirms a carton in one scan instead of opening and counting it.
CARTON ACCURACY: WHY THE DATA MUST LAND FIRST
GOOD PATH
Factory packs cartons, records contents per carton
-> ASN transmitted at ex-factory (T-30 days)
-> Warehouse pre-builds receipt in WMS
-> Container arrives, cartons scanned by SSCC
-> System confirms expected vs scanned
-> Discrepancies flagged per carton, not per lot
-> Put away same day; available-to-sell updated
same day
BAD PATH (no ASN, or ASN sent on arrival)
Container arrives with a paper packing list
-> Warehouse opens and counts every carton
-> 300 cartons x ~6 min = 30 labour hours
-> Counting errors introduced at receiving
-> Goods unavailable to sell for 2-5 days
-> Customer orders that were waiting on this
receipt miss their cancel dates
WORSE PATH (ASN sent, but inaccurate)
Warehouse trusts the ASN and does not verify
-> Wrong quantities enter the inventory ledger
-> Available-to-sell is overstated
-> Orders are promised against stock that
does not exist
-> Oversells discovered at pick time, weeks later
-> Root cause is untraceable because the receipt
was never reconciled
RULE: an ASN states what the factory INTENDED to ship.
Receive against it, verify by scan, and post the
VARIANCE as its own ledger event.
The three paths above are the whole argument. With an accurate, early ASN, receiving is a confirmation exercise and inventory becomes sellable the day the container lands. Without one, receiving is a counting exercise measured in labor-days, and every day of delay is a day of unsellable stock that customers are already waiting on.
The third path is the dangerous one: an ASN that is trusted but wrong silently corrupts your inventory ledger, and because nothing was reconciled at receipt the error surfaces weeks later at pick time with no way to trace it. Hence the rule at the bottom: treat the ASN as a claim, verify by scan, and record the difference as an explicit, auditable event rather than quietly overwriting the number.
Getting factories to send accurate ASNs
Getting factories to send accurate ASNs is a vendor-management problem that no amount of software will solve on its own. It takes four things:
- carton label artwork and SSCC allocation rules in the tech pack from day one;
- a test transmission before the first real shipment;
- a rule that no shipping authorization is issued until the ASN validates against the PO;
- and a vendor scorecard that tracks ASN accuracy next to on-time delivery and inspection pass rate.
What this means for your ERP
Everything above becomes tables, constraints, screens and reports.
Entities you must model
Chapter B gave the core entity map and chapter 11 the full reference schema. Production adds a distinct cluster most starter ERPs omit, and that omission is why brands run production out of spreadsheets forever.
-- Supply base. A supplier is a legal entity you transact
-- with; a facility is a physical site. They are NOT the
-- same thing and UFLPA cares about the facility.
create table supplier (
id uuid primary key,
tenant_id uuid not null references tenant(id),
name text not null,
supplier_type text not null
check (supplier_type in
('agent','factory','mill','dye_house',
'spinner','trim','laundry','printer')),
country_code char(2) not null,
is_active boolean not null default true,
unique (tenant_id, name)
);
create table facility (
id uuid primary key,
tenant_id uuid not null references tenant(id),
supplier_id uuid not null references supplier(id),
name text not null,
address_line1 text not null,
city text not null,
country_code char(2) not null,
-- coordinates matter: CBP asks for geographic
-- information for each facility and its role
latitude numeric(9,6),
longitude numeric(9,6),
process_roles text[] not null, -- {'knitting','dyeing'}
uflpa_screened_at timestamptz,
uflpa_screen_result text
check (uflpa_screen_result in
('clear','entity_list_match','review'))
);
-- Compliance documents with hard expiry. The expiry is
-- what the PO gate reads.
create table facility_certification (
id uuid primary key,
tenant_id uuid not null references tenant(id),
facility_id uuid not null references facility(id),
scheme text not null
check (scheme in
('SMETA','WRAP','BSCI','SLCP','OTHER')),
reference text,
audit_date date not null,
valid_until date not null,
was_unannounced boolean not null default false,
covers_ilo_11 boolean not null default false,
report_uri text,
cap_open_count int not null default 0,
check (valid_until > audit_date)
);
The design decisions worth calling out: supplier and facility are separate because you transact with a company but forced-labor rules attach to a site, and one supplier may run four factories with different audit statuses. process_roles is an array because a vertical supplier does several stages at one address and CBP wants each role stated. latitude/longitude exist because CBP's apparel guidance asks for geographic information and maps.
cap_open_count tracks how many corrective actions from the audit are still open. And covers_ilo_11 earns its place: CBP says it generally does not accept audits that skip the ILO's eleven indicators of forced labor, so an audit failing this flag is worth less than nothing, because it creates false comfort.
Tech pack, POM and BOM tables
-- Tech packs are versioned and immutable once referenced.
create table tech_pack (
id uuid primary key,
tenant_id uuid not null references tenant(id),
style_id uuid not null references style(id),
version int not null,
status text not null
check (status in ('draft','issued','superseded')),
issued_at timestamptz,
base_size text not null,
unique (tenant_id, style_id, version)
);
-- Points of measure with grade rules and tolerances.
create table tech_pack_pom (
id uuid primary key,
tech_pack_id uuid not null references tech_pack(id),
pom_code text not null, -- 'A', 'B', ...
description text not null,
size_code text not null,
spec_value numeric(6,3) not null,
tolerance_plus numeric(5,3) not null,
tolerance_minus numeric(5,3) not null,
uom text not null default 'in',
unique (tech_pack_id, pom_code, size_code)
);
-- Bill of materials. This IS a customs document.
create table tech_pack_bom (
id uuid primary key,
tech_pack_id uuid not null references tech_pack(id),
line_no int not null,
component_type text not null, -- 'main_fabric','thread'...
material_id uuid references material(id),
colourway_id uuid references colourway(id),
consumption numeric(10,4) not null,
consumption_uom text not null, -- 'm','kg','pc'
waste_pct numeric(5,2) not null default 0,
supplier_id uuid references supplier(id),
facility_id uuid references facility(id),
fibre_origin_country char(2),
unique (tech_pack_id, line_no)
);
Three points. Tech packs carry an integer version and a superseded status rather than being edited in place, because every sample request, PO and inspection must reference an exact version. The POM table stores tolerance_plus and tolerance_minus separately, since asymmetric tolerances are common. And tech_pack_bom carries facility_id and fibre_origin_country per line, the schema decision on this page that pays for itself fastest, because it makes a traceability report a query instead of three weeks of email archaeology.
Sample, production order and dye lot tables
-- Samples: one row per requested sample, per stage.
create table sample_request (
id uuid primary key,
tenant_id uuid not null references tenant(id),
style_id uuid not null references style(id),
tech_pack_id uuid not null references tech_pack(id),
supplier_id uuid not null references supplier(id),
stage text not null
check (stage in
('proto','fit','size_set','sms','pp','top')),
round_no int not null default 1,
requested_at date not null,
due_at date not null,
received_at date,
decision text
check (decision in
('approved','approved_with_comments',
'rejected','cancelled')),
decided_at date,
decided_by uuid references app_user(id),
comments_uri text,
unique (tenant_id, style_id, supplier_id, stage, round_no)
);
-- Production PO to a factory (distinct from a customer PO).
create table production_order (
id uuid primary key,
tenant_id uuid not null references tenant(id),
po_number text not null,
supplier_id uuid not null references supplier(id),
facility_id uuid not null references facility(id),
tech_pack_id uuid not null references tech_pack(id),
incoterm text not null, -- 'FOB','CIF','DDP'
currency char(3) not null,
status text not null
check (status in
('draft','issued','fabric_booked',
'pp_approved','in_production',
'inspected','shipped','received',
'closed','cancelled')),
planned_cut_date date,
ex_factory_date date,
ex_factory_actual date,
aql_critical numeric(4,3) not null default 0,
aql_major numeric(4,3) not null default 2.5,
aql_minor numeric(4,3) not null default 4.0,
inspection_level text not null default 'II',
unique (tenant_id, po_number)
);
create table production_order_line (
id uuid primary key,
production_order_id uuid not null references production_order(id),
variant_id uuid not null references variant(id),
qty_ordered int not null check (qty_ordered > 0),
unit_cost numeric(12,4) not null,
unique (production_order_id, variant_id)
);
-- Materials commitment and dye lots.
create table material_booking (
id uuid primary key,
tenant_id uuid not null references tenant(id),
production_order_id uuid not null references production_order(id),
material_id uuid not null references material(id),
colourway_id uuid references colourway(id),
supplier_id uuid not null references supplier(id),
qty_booked numeric(12,3) not null,
uom text not null,
booked_at date not null,
is_committed boolean not null default false,
lab_dip_approved_at date
);
create table dye_lot (
id uuid primary key,
tenant_id uuid not null references tenant(id),
material_booking_id uuid not null references material_booking(id),
lot_code text not null,
qty numeric(12,3) not null,
dyed_at date,
facility_id uuid references facility(id),
unique (tenant_id, lot_code)
);
The production order carries AQL and inspection level as columns rather than a company-wide setting, because they are negotiated per order and you need to know later which plan was agreed. material_booking.is_committed is the point-of-no-return flag: flip it and the money is spent. And dye_lot is its own table with a unique lot_code so a lot identifier can travel from mill to carton, which is what lets you answer both "why do these two shirts not match" and "which farms fed this lot."
Milestone and inspection tables
-- Time and action calendar: milestones with owners.
create table ta_milestone (
id uuid primary key,
tenant_id uuid not null references tenant(id),
production_order_id uuid references production_order(id),
season_id uuid references season(id),
milestone_code text not null, -- 'LAB_DIP_APPROVED'
owner_user_id uuid references app_user(id),
owner_role text,
planned_date date not null,
actual_date date,
is_critical_path boolean not null default false,
blocks_codes text[] not null default '{}',
unique (tenant_id, production_order_id, milestone_code)
);
-- Inspections, with the plan actually used.
create table inspection (
id uuid primary key,
tenant_id uuid not null references tenant(id),
production_order_id uuid not null references production_order(id),
inspection_type text not null
check (inspection_type in
('fabric','dupro','final','loading')),
inspector_org text,
inspected_at date not null,
lot_size int not null,
sample_size int not null,
code_letter char(1),
critical_found int not null default 0,
major_found int not null default 0,
minor_found int not null default 0,
accept_major int,
accept_minor int,
result text not null
check (result in ('pass','fail','pending')),
disposition text
check (disposition in
('ship','sort_100','rework','discount',
'partial','reject')),
report_uri text
);
The milestone table is the T&A calendar made queryable: each row has a planned date, an actual date, an owner and blocks_codes, the list of downstream milestones this one gates. That last array does the real work, because it powers the "if you approve this three days late, ex-factory moves to X and customer Y's order becomes cancelable" warning.
The inspection table stores sample_size, code_letter and the accept numbers actually used alongside the pass/fail, so that a disputed lot can be re-adjudicated from the record. Vendors do contest failed inspections, and the argument is always about which plan was applied.
Duty is data: model it, do not hard-code it
The tariff callout earlier said never to hard-code a rate. In practice that plays out three ways. Rates change by proclamation on a few days' notice, several programs stack on top of each other, and preference programs such as USMCA and CAFTA-DR turn a rate off entirely if you can document origin. So store rates as dated rows and compute landed cost as a query.
-- One row per (classification, origin, programme, period).
-- Never UPDATE a rate; insert a new dated row.
create table duty_rate (
id uuid primary key,
tenant_id uuid not null references tenant(id),
hts_code text not null, -- e.g. '6205.20.2050'
origin_country char(2) not null,
programme text not null, -- 'MFN','SEC122',
-- 'SEC301','USMCA',
-- 'CAFTA_DR'
rate_pct numeric(6,3) not null,
effective_from date not null,
effective_to date, -- null = open ended
authority_uri text, -- link to the notice
notes text,
check (effective_to is null or effective_to > effective_from)
);
-- What a style must prove to claim a preference rate.
create table style_origin_claim (
id uuid primary key,
tenant_id uuid not null references tenant(id),
style_id uuid not null references style(id),
programme text not null,
yarn_forward_ok boolean not null default false,
us_cotton_pct numeric(5,2), -- drives some 2026
-- textile mechanisms
evidence_uri text,
verified_at date,
verified_by uuid references app_user(id)
);
Two things make this work. First, duty_rate is append-only and dated, so the landed cost you quoted in March can still be reproduced in November even after three rate changes, and authority_uri points at the notice that created the row, so nobody has to remember why.
Second, style_origin_claim stores the inputs to a preference claim as well as its outcome. A CAFTA-DR claim usually turns on "yarn forward," meaning the yarn, the fabric and the garment must all be made in the region, and the 2026 US textile proposals turn partly on US-grown cotton content. If you store only the final rate, you cannot answer a customs question or re-run the calculation when the rule changes. If you store the inputs, you can do both.
Rules the software must enforce
- No PO to an uncertified facility. Block
production_order.statusreachingissuedif the facility has nofacility_certificationwithvalid_until >= ex_factory_date. Warn, do not block, ifcovers_ilo_11is false, but surface it. - No PO to a screened-red facility. Hard block if
uflpa_screen_result = 'entity_list_match', and force re-screening ifuflpa_screened_atpredates the last Entity List update. - No cutting before PP. Block the transition to
in_productionunless an approvedsample_requestwithstage = 'pp'exists against the PO'stech_pack_id. - Tech pack immutability. Once a
tech_packrow is referenced by an issued PO or approved sample it cannot be edited, only superseded. That is the same append-only instinct as chapter 1's ledger, applied to specifications. - MOQ feasibility on line plan publish. Per style and colorway, compute required material as
consumption × (1 + waste_pct / 100) × planned_unitsand compare against the mill's per-color minimum and the factory's per-style minimum. Refuse to publish with unresolved shortfalls. Allow an explicit override with a reason. - Ex-factory change cascades. When
ex_factory_dateorex_factory_actualchanges, recompute projected delivery for every customer order line linked to that PO and alert on any now past the cancel date. - Landed cost is computed, never typed. Resolve the applicable
duty_raterows by HTS code, origin and the date the goods will enter, plus any preference the style has a verifiedstyle_origin_claimfor, and sum them. Store the resolved rate on the costing record so the quote is reproducible. - No shipping authorization without a passing final inspection and a validated ASN whose carton contents sum to the PO line quantities.
- Receive against the ASN, never from it. Post expected quantities as a receipt plan, scanned quantities as the ledger event, and the difference as an explicit variance with a reason code.
Screens people will actually use
- Style development board. Every style in the season as a card showing sample stage, round number, days in stage, and whether it is behind its T&A date. The screen the product team lives in.
- Approval screen with downstream impact. When approving a lab dip, PP or TOP, show the milestone this gates, the buffer in days, and the customer orders at risk. Blind approvals are how three weeks becomes a lost season.
- T&A grid. Rows = styles or POs, columns = milestones, cells color-coded planned/actual/slipped, filterable by owner, because the only useful version of this view is "what is late and whose fault is it."
- PO detail with material commitment. Quantities by variant, booked material with committed flag, dye lots, inspection history, and a visible landed-cost build-up (FOB + freight + each duty line + fees) showing which rate row produced each number.
- Inspection entry. Enter lot size and level. The system computes code letter, sample size and accept numbers from the ISO 2859-1 tables, resolves any arrow cell to the plan it points at (including that plan's sample size), then captures defects by class and forces a disposition on failure.
- Traceability view. Given a PO or carton, render the chain: garment facility → dye house → fabric mill → spinner → fiber origin, with a supporting document reference on each edge. Build it before you need it.
- ASN reconciliation. Expected vs scanned side by side, per carton, with variance reasons.
Reports people will demand
- On-time-in-full by vendor. Share of PO lines delivered by ex-factory date at full quantity, trailing four seasons.
- Inspection pass rate at first presentation, by vendor and style category. Repeat first-pass failures are the strongest vendor signal you have.
- Critical path exception report. Every milestone past its planned date, ranked by days of downstream impact rather than days late.
- Open material commitment. Value of fabric booked and committed against styles with no confirmed customer orders. This predicts next season's markdowns.
- Landed cost variance. Planned vs actual per style, split into FOB, freight, duty and expedite. Air rescues must be attributable to the style that caused them, or nobody learns.
- Duty exposure by expiry. Value of open POs whose landed cost depends on a
duty_raterow with aneffective_toinside the next 90 days. In a year when a surcharge can lapse on a fixed date, this is the report the finance team will ask for first. - Compliance expiry calendar. Facility certifications expiring in the next 120 days, with the POs that would be blocked.
- Traceability completeness. Share of BOM lines with populated
facility_idandfibre_origin_country, by style and season. Aim for 100% on anything containing cotton.
How this connects to the engineering chapters
- Chapter 1 (append-only inventory ledger) is where goods-in from a production order becomes a movement, and where ASN variance must be posted as its own event rather than an edit.
- Chapter 2 (Postgres) gives you the array columns, check constraints and partial indexes this schema leans on.
- Chapter 3 (concurrency and idempotency, or making an operation safe to run twice) matters because ASN files get retransmitted and inspection webhooks get replayed. Receipt posting must produce the same result on a repeat delivery of the same shipment-plus-carton key.
- Chapter 4 (integrations) carries the EDI 856 mechanics for the ASN and the accounting postings for deposits and balance payments.
- Chapter 5 (multi-tenancy and row-level security) governs the
tenant_idon every table above. - Chapter 7 (spreadsheet imports) is unavoidable here, because factories will send you carton contents as Excel for years before they send you EDI, and your importer needs to validate that file against PO lines rather than trusting it.
- Chapter 8 (available-to-sell caching) is affected directly: an inbound production order with an ex-factory date is future supply, and whether you include it in available-to-sell is a policy decision your calculation must make explicit.
- And chapter 12's decision log is where you record why you chose, say, to block POs on expired audits rather than merely warn, because that is exactly the rule someone will ask you to relax at 6pm on a Friday.
Production data has a long half-life. A dye lot code captured badly in 2026 is the reason you cannot answer a customs question in 2028. Capture identifiers (tech pack version, dye lot, facility, carton SSCC, the duty rate row you actually applied) at the moment they are created, when capture is cheap, and carry them forward unbroken. Every gap you leave becomes a manual investigation later, and manual investigations do not scale.
Field notes & further reading
- CBP — Forced Labor Enforcement Operational Guidance for Importers (Publication 5560-0526, June 2026). The current guidance, replacing the 2022 edition. Contains the apparel and cotton tracing appendices, the evidence lists for applicability and exception reviews, the unannounced-audit and ILO-11 expectations, submission packaging rules, and an appendix on isotopic testing. Read it alongside the hub below.
- CBP — Uyghur Forced Labor Prevention Act hub. The live landing page for the rebuttable presumption, the detention and review procedure, the entity-list link and CBP's published enforcement statistics. Start here before you place a first order in Asia, and check it again whenever your sourcing map changes.
- DHS — UFLPA Entity List. The actual list, organized by the statute's four sections with an effective date against every entry. Screen every new facility against it and re-screen after each Federal Register update. Several large textile groups have been added since 2024.
- USTR — Section 301 forced-labor determinations for 60 economies (Federal Register, 5 June 2026). The notice proposing 10% and 12.5% additional duties and the apparel "textile mechanism" tied to US fiber and cotton exports. Read the country lists carefully: which bucket your sourcing country lands in is worth several points of margin.
- Proclamation 11012 — temporary 10% import surcharge under section 122 (February 2026). Worth reading once even if the surcharge itself has lapsed, because it shows the anatomy of a tariff action: the rate, the exclusion annexes, the USMCA and CAFTA-DR carve-outs, the statutory 150-day cap and an exact expiry timestamp. That is the shape of document your duty table has to model.
- Sheng Lu — US fashion companies' evolving sourcing practices (April 2026). Quotations pulled from about 30 publicly traded companies' earnings calls between February and April 2026, covering country mix, the pace of the China exit and how long a realignment takes. Rare public evidence of what executives say when they are legally obliged to be accurate.
- QIMA — Acceptable Quality Limit (AQL) explained. A practitioner walkthrough of ISO 2859-1 / ANSI-ASQ Z1.4 with both lookup tables and a sampling simulator. Check your implementation against its worked example, which is the same one used above: 4,000 units at General Level II gives code letter L, 200 units inspected, and at AQL 2.5 ten or fewer failures pass while eleven or more reject. Be wary of the many free AQL charts online whose columns are misaligned by a row or two. If a chart tells you a 200-unit sample may carry 21 major defects at AQL 2.5, it is wrong.
- QIMA — quality control pricing. Published per-man-day rates for inspections and audits by country zone, useful for the QC line of a landed-cost model. Re-check before you budget, because these rates change.
- USFIA 2025 Fashion Industry Benchmarking Study. An annual survey of US fashion executives on sourcing countries, cost pressure, speed-to-market and MOQ scores by region, forced-labor risk management and traceability investment. The best free snapshot of what large brands are actually doing, and the source of most of the survey figures in this chapter.
- AlixPartners — Nearshoring in apparel: the pendulum is swinging back (2025). A t-shirt cost model comparing Asia and Mexico with labor rates, tariff-adjusted landed cost indices and the lead-time saving from nearshoring. Useful as a template for building your own comparison rather than as a set of fixed answers.
- Drewry World Container Index. Free weekly spot rates per 40ft container on the major lanes, including Shanghai–Los Angeles and Shanghai–New York, published each Thursday with commentary. Use it to sanity-check forwarder quotes and to build the ocean side of an air-rescue calculation.
- FTC — Threading Your Way Through the Labeling Requirements Under the Textile and Wool Acts. Fiber content rules, the 5% "other fiber" threshold, country-of-origin placement including the inside-neck rule, and how RN numbers work. Pair it with the companion guide below.
- FTC — Clothes Captioning: Complying with the Care Labeling Rule. What a care label must say, what counts as a "reasonable basis" for each instruction, which products are exempt, and where the label must be attached. The section on why you cannot write "Dryclean Only" as a hedge is the one people learn the hard way.
- GS1 — Serial Shipping Container Code (SSCC). The identifier you print on every carton: what it is, how it is structured and where it sits on a logistics label. Read it next to your largest customer's carton-label specification, because that is what your factory has to produce.
1. Build the MOQ feasibility check for one real style. Take a style you actually intend to make. Get a real fabric quote with the mill's stated MOQ per quality and per color, and a real factory quote with its garment MOQ per style and color. Write a short script or spreadsheet that takes planned units per colorway, fabric consumption per garment and waste percentage, and outputs: required meters per color, whether each color clears the mill minimum, whether each color clears the factory minimum, the total material commitment in currency, and the overbuy against your forecast. Run it at three, four and six colorways and see where it breaks. Confirm with the mill whether their minimum is quoted in yards or meters before you trust the answer.
2. Build the critical-path cascade for one production order. Write out a T&A calendar for one style with at least twelve milestones, each with an owner and a planned date, working backward from a real customer cancel date. Mark which milestones are on the critical path and which downstream milestones each one blocks. Then simulate a three-week delay on lab dip approval and compute, explicitly, the new ex-factory date, the new delivery date including transit and receiving, and whether the customer order is now cancelable. Include the capacity re-queue effect: assume the factory's next open slot is three weeks after the one you missed.
3. Model one duty rate as data. Pick one style, find its HTS code, and write out every duty line that would apply to it today from one offshore country and one nearshore country, each with the notice that created it and the date it expires. Then write the query that resolves the applicable rate for an entry date, and run it for a date before and after a rate change. If the same query gives the right answer on both dates, your landed cost is reproducible.
When you are done you should have three things: a feasibility calculator that tells you the maximum number of colorways your forecast can support before you commit fabric; a dated milestone list where every gating approval displays the customer-facing date it protects; and a duty table that survives the next proclamation. Those three artifacts are the minimum viable production module, and everything else in this chapter is elaboration on them.