Lessons · Lesson 1 of 5
What the buy list subtracts
How MerchandiserOS turns a bill of materials into a shortage, what it takes off before it calls anything short, and where the date it tells you to buy by comes from.
Lesson 1 of 5 · 20 min
The room this course happens in
Booking materials is three decisions at once. What to buy. How much. And the date the order has to be placed. This lesson is about the screen that answers all three. It is also about the two subtractions that screen makes before it calls anything short. Get those wrong and you buy cloth you already own. Or you find out in the cutting room that you bought none.
Qumtepa Apparel is a woven-bottoms factory in Chirchiq, Uzbekistan. It runs four sewing lines, employs 430 people, and makes chinos and cargo trousers for European retailers. Everything in this course happens inside its MerchandiserOS workspace.
Four people appear.
- Bekzod Ergashev owns the business and is the workspace Owner. He approves every purchase order above the threshold.
- Nilufar Rakhimova is the merchandiser. She owns the orders and raises the requests.
- Jahongir Yuldashev is the sourcing officer. He owns suppliers, materials and every purchase order.
- Feruza Nazarova keeps the store and books the goods in.
Say the basis once. All money in this course is US dollars. That is the currency Qumtepa prices its purchase orders in. All dates are written the way the app writes them. Where the app does not do something yet, the lesson says so plainly instead of promising it.
The two orders on the books
Sourcing lives at /sourcing. The buying screen is its second tab, What to buy. It opens with one sentence about itself, and that sentence is the whole engine. It takes what every order needs from each style's bill of materials, subtracts what is in stock and what is already on a purchase order, and groups what is short by supplier.
Qumtepa has two live orders for the same style, STY-142, a cotton-twill cargo trouser for Vandersteen Kleding.
| Order | Quantity | Colours | Line feed |
|---|---|---|---|
| ORD-1178 | 12,000 pcs | Sand 7,200 · Olive 4,800 | 18 Jan 2027 |
| ORD-1181 | 4,000 pcs | Sand 4,000 | 8 Mar 2027 |
Only orders that are Confirmed or In production, and are not archived, reach this screen. A Draft order needs nothing yet. A closed one needs nothing any more.
Where the need comes from
There is one formula for how much of a material an order needs, and every screen that answers the question uses it. Consumption per garment, grossed up for cutting wastage, times the quantity.
consumption × (1 + wastage / 100) × order quantityA bill line scoped to one colourway uses only that colour's ordered quantity. A line marked for all colours uses the whole order. So the sand twill is worked out against the 7,200 sand pieces on ORD-1178, not against all twelve thousand.
| Material | Unit | Per garment | Wastage | Applies to | Gross need |
|---|---|---|---|---|---|
| MAT-318 Cotton twill, sand | m | 1.42 | 6% | Sand only | 16,858.24 |
| MAT-319 Cotton twill, olive | m | 1.42 | 6% | Olive only | 7,224.96 |
| MAT-327 Pocketing | m | 0.24 | 4% | All colours | 3,993.6 |
| MAT-336 Herringbone tape | m | 0.35 | 2% | All colours | 5,712 |
| MAT-341 Zip, 16 cm | pc | 1 | 2% | All colours | 16,320 |
| MAT-344 Shank button | pc | 7 | 3% | All colours | 115,360 |
There is a seventh line on the bill, a woven care label. There is also a free-text line for the swing ticket, which is not linked to any material record at all. The free-text one never reaches this screen. Only bill lines that link to a material can be netted honestly, because only those have a supplier, a unit, a stock figure and a minimum order quantity.
The two subtractions
Gross need is not a buy list. Two things come off it.
Stock on hand is every receipt of that material minus every issue of it. It counts the whole factory, not one order. That matters: fabric received for a different buyer counts as stock here.
On order is the outstanding quantity on every open purchase order for that material. Open means Issued, Acknowledged or Dispatched. A Draft purchase order is not supply. Nobody has told the supplier about it.
The second subtraction has a rule inside it that is easy to miss and expensive to learn the hard way. On-order supply is time-phased. If a purchase order is due after the row needs the goods, it is not coverage, so it is left out of the netting. The row still shows short, and it names the late purchase order. You are not left wondering why the app wants you to buy something you can see on order.
| Material | Gross | In stock | On order | Short | To buy |
|---|---|---|---|---|---|
| MAT-318 Cotton twill, sand | 16,858.24 | 0 | 0 | 16,858.24 | 16,858.24 |
| MAT-319 Cotton twill, olive | 7,224.96 | 1,900 | 0 | 5,324.96 | 5,324.96 |
| MAT-327 Pocketing | 3,993.6 | 400 | 0 | 3,593.6 | 3,593.6 |
| MAT-336 Herringbone tape | 5,712 | 0 | 0 | 5,712 | 5,712 |
| MAT-341 Zip, 16 cm | 16,320 | 0 | 16,500 | — | — |
| MAT-344 Shank button | 115,360 | 78,000 | 0 | 37,360 | 50,000 |
Three of those rows are worth reading slowly.
The zip is not there. Its net is below zero, so the row is dropped before the screen is drawn. A covered material has no row at all. On this screen, absence is the covered state. If you go looking for a material you believe you are short of and cannot find it, the plan believes you are covered. The next question is whether the purchase order it is counting will really land in time.
The pocketing shows nothing on order, and Qumtepa has 3,000 metres on order. PO-1046 is due on 2 Feb 2027, and the pocketing is needed by 18 Jan 2027. Goods that arrive after the need do not cover it. So the quantity is left out of the subtraction, and the row carries a plain-words note instead.
On order but too late: PO-1046 (3000 m) due 2 Feb 2027 — after the 18 Jan 2027 needThe button asks for more than it is short of. MAT-344 is short 37,360 pieces, and the To buy column says 50,000, with a small MOQ tag beside it. MOQ is the supplier's minimum order quantity. It is a floor, not a multiple: a shortage below it is raised to it, and a shortage above it is left exactly as it is. So the plan is buying 12,640 pieces more than the factory needs. That is deliberate and visible, and the tag is the app admitting it.
Order by, not needed by
The Order by column is the one that changes behaviour, and it is the one people misread.
Order by is not when you need the goods. It is when you have to place the order for the goods to land on time. It is the needed-by date minus the supplier's lead time in calendar days. Calendar days, not working days, and that is deliberate. A mill quotes forty-five days ex-mill, and that quote already contains the mill's own weekends. Running your factory's working calendar over somebody else's lead time would invent a buffer that does not exist.
| Material | Supplier | Lead time | Needed by | Order by | Reads as |
|---|---|---|---|---|---|
| MAT-318 Cotton twill, sand | Sahiwal Weaving Mills | 45 days | 18 Jan 2027 | 4 Dec 2026 | order now — late |
| MAT-319 Cotton twill, olive | Sahiwal Weaving Mills | 45 days | 18 Jan 2027 | 4 Dec 2026 | order now — late |
| MAT-327 Pocketing | Sahiwal Weaving Mills | 45 days | 18 Jan 2027 | 4 Dec 2026 | order now — late |
| MAT-336 Herringbone tape | Baixiang Trims | 30 days | 18 Jan 2027 | 19 Dec 2026 | order soon |
| MAT-344 Shank button | Baixiang Trims | 30 days | 18 Jan 2027 | 19 Dec 2026 | order soon |
| MAT-352 Woven care label | Unassigned | not set | 18 Jan 2027 | 18 Jan 2027 | needed by |
Every date in that table is computed except one. The care label has no supplier, so it has no lead time, so the app has nothing to subtract. Rather than invent a buffer, it shows the needed-by date and tags it needed by in small letters. Hover the tag and the tooltip says it in full: no supplier lead time is set, this is the needed-by date and not a computed order-by, set the supplier's lead time to plan the buy date.
That row also never reads as calm. A row with no lead time is never given the reassuring plan ahead wording. The suppliers you know least about are exactly the ones you should not feel relaxed about. It reads late if the date has already passed, and unknown otherwise.
The row with no supplier
MAT-352 sits in its own group at the bottom, headed Unassigned, and that group is always last. Its rows can be planned but never requested, because a request needs a supplier to be addressed to. The screen offers an inline supplier picker on those rows for anyone whose role may edit materials. That is the sourcing officer or the Owner, not the merchandiser.
That split is worth naming now, because it runs through the whole course. On one screen, the merchandiser can raise the requests and cannot assign the supplier, and the sourcing officer can assign the supplier and cannot raise a request from the order. Booking materials at Qumtepa is a relay, not a job.
The panel that is not there
Beneath the supplier groups there is a second view of the same shortages, called Consolidate by yarn. It collapses several knitted fabrics that come from one yarn into a single yarn buy. It divides the fabric kilos by the factory's yarn yield to get yarn kilos. The yield is a factory setting, bounded between fifty and one hundred, and it falls back to 93% when nobody has set it.
Qumtepa never sees that panel. Its twill is bought as cloth, and neither fabric record points at a yarn. Knowing this saves you looking for a feature your factory has no use for. The reverse is worth knowing too: if you knit your own fabric and the panel is empty, the missing link is on the fabric record.
Two rules to take away
Read the Short column and the To buy column as two different facts. Short is what the arithmetic says. To buy is what the arithmetic says once the supplier's minimum has had its way with it. The gap between them is money you are spending to satisfy a minimum. It should be a decision, not a surprise.
An empty row is a claim, not a silence. A material missing from the buy list is the app telling you it believes you are covered. Twice a season, pick the two materials that would hurt most and check what is covering them.
Check yourselfThe Order by column on your biggest fabric shows the needed-by date with a small needed-by tag beside it. You filled in that material's lead time last week. What happened?Show the answer
You filled in the wrong record. The Order by column subtracts the lead time held on the material's SUPPLIER, not the one on the material's own ERP mapping tab. A supplier with no lead time means every material it sells shows a needed-by date instead of a computed order-by. Open the supplier, fill in its lead time, and the column recomputes. Until then the plan is telling you the truth, which is that it does not know when you have to buy.
Prompt · Read my buy list back to me as decisions
Before you turn a materials plan into requests, and any time a shortage looks smaller than you expected.
Help me read a materials buy list as a set of decisions rather than as a table. I will paste, or describe: each row's material, unit, gross need, stock on hand, quantity already on open purchase orders with each of those orders' due dates, minimum order quantity, the date the goods are needed, and the supplier's quoted lead time in calendar days. First, redo the netting for every row and tell me where your answer differs from mine. For each row, say plainly whether any of the on-order quantity is due AFTER the need date, and if it is, exclude it and tell me by how much the shortage grows. Name the purchase order you excluded. Second, for every row where the quantity to buy is larger than the shortage, tell me the size of the over-buy, what it is worth at the material's price, and how many days of that material's demand it represents. Ask me whether the minimum is contractual or just a habit. Third, compute an order-by date for each row as the need date minus the supplier's lead time in CALENDAR days, and sort the rows by it. Mark any row whose order-by date has already passed. For any row with no lead time on file, do NOT estimate one: write unknown, and tell me which supplier to call. Four rules. Never invent a lead time, a price or a minimum. Never treat a blank as a zero. Never tell me a material is covered without naming what covers it and when it lands. And where a row is short because a purchase order is late rather than because nothing was bought, say so in those words, because the fix is a phone call and not a purchase order.
AI can make mistakes — check anything you act on.