- One polo order, and where each step can live in ERPNext
- The same order as CMT and as full package
- Output of the merchandising workshop
- Five fit-gap rows, scored for the polo factory
- Bill of materials for one style: men's piqué polo, style P-2041
- Item groups, units and valuation for the polo
- The polo template, its variants, and a jean for comparison
- Four rolls of the same "180 GSM" jersey
- Cutting 3,000 navy polos from three dye-lot batches
- One template BOM or five variant BOMs
- Operations, workstation cost and the job-card count
- The polo order's approval calendar, worked back from ex-factory
- Chest embroidery as an outward subcontract, document by document
- A quotation cost build for the polo (illustrative figures, USD per piece)
- One Landed Cost Voucher, three ways to split it
- The final inspection sample for 3,000 polos
- Packing 3,000 polos into cartons with Packing Slips
- Advance, letter of credit and exchange difference
- A chargeback on an open-account shipment
- Data Import rows for the open polo order
- Test script: the polo order from Sales Order to cash
- Test script: shade split at cutting
- A training plan by role
- A cut-over plan, day by day
- One purchase request, from MerchandiserOS to ERPNext and back
- The same polo order from the brand's side, with the agent's commission
- The polo order with operations on top
Part 1Before you start
1Who ERPNext fits
ERPNext is a practical choice for small and mid-size apparel businesses that want an open-source ERP covering sales, purchasing, stock, manufacturing and accounts, and that have a Frappe developer in-house or a partner they trust. It handles colour and size through item templates and variants, has an outward subcontracting flow and, from version 16, an inward one for customer-supplied material. Its licence costs nothing, because ERPNext is published under the GPL-3.0 licence.
ERPNext is an open-source ERP built on the Frappe Framework, a Python and JavaScript web framework that also provides its database layer, user authentication and REST API. Everything in ERPNext is a DocType: a document type with fields, permissions and a list view, such as Item, Purchase Order or Job Card. Custom fields, custom DocTypes and whole custom apps extend it in the same way.
It suits a factory that has people who can own the system technically and wants to avoid licence fees. It suits a factory less well if nobody can maintain custom code through upgrades, or if the owner expects the ERP to replace the merchandisers' tracking sheets, the IE department's minute studies and the quality team's inspection reports in one move. Those are the parts of this guide where ERPNext needs the most design work, custom code or a separate system.
Signs ERPNext is a good choice
ERPNext tends to work when the factory wants one ledger, values an open licence and has the technical people to look after it.
- The business wants one ledger, one stock value and one set of purchase and sales documents, and today it has several.
- At least one person, in-house or at a partner, can build and maintain Frappe apps and carry them through each upgrade.
- Style counts per season are in the hundreds, not the thousands, so the BOM-per-variant question in section 14 stays manageable.
- A country compliance app exists for local tax and e-invoicing, or the partner has a plan for it (section 22).
Signs to slow down
Slow down when the expectations placed on ERPNext belong to a planning, floor or development system, or when nobody owns the code.
- The factory expects ERPNext to plan sewing lines hour by hour. Work orders and job cards record operations; they do not balance a line (section 15).
- An open GitHub feature request describes a shirt in 2 colours and 4 sizes needing 8 work orders, 8 BOMs and 24 job cards. If your order book looks like that, read Example 11 before signing.
- Buyers require EDI, compliance labels and portal uploads, and nobody has scoped them.
- The plan is to host on a shared Frappe Cloud site and still run custom apps. Custom apps and Server Scripts need a private bench (section 8).
- The go-live date falls inside peak season.
2Why no ERP fits apparel on its own
No general ERP fits apparel out of the box, because an ERP is built around a known item with one bill of materials, while a garment order starts as a style that is quoted, sampled and approved before any item exists. This is not an ERPNext weakness. SAP, NetSuite, Dynamics 365, Odoo and every general ERP meet the same wall, which is why fashion add-ons and fashion-specific systems exist, and why even they leave much of the work outside. In ERPNext the wall has a precise shape: an Item must exist before it can be sold, bought or made, and a submitted BOM cannot be edited, only cancelled and replaced. The same wall stands in front of brands, buying agents and own-label retailers who never sew a garment: their styles, samples and factory follow-up also come before any Item exists (section 35).
An ERP is built around the transaction: a known item, a fixed bill of materials, a price, a receipt, an invoice. It is right to be strict about that, because strictness keeps the books correct. A garment order does not start there.
Forcing an ERP to do all of this means heavy customisation in the one system that most needs to stay standard. Every upgrade gets harder, the ledger fills with data finance never reads, and the merchandisers keep their spreadsheets anyway. ERPNext makes customisation easy to start, which makes the trap easier to fall into. The durable answer is to give the ERP the books and give the operations to a system built for them. Section 3 summarises that model and section 36 shows it in full. The ERP-agnostic reasoning is in the methodology chapter.
One polo order, and where each step can live in ERPNext
A buyer sends a tech pack for 3,000 men's piqué polos in navy, five sizes, ex-factory 15 December. Follow the order and ask, at each step, whether ERPNext has a natural DocType for it.
| Step | What happens | Natural home in ERPNext? |
|---|---|---|
| Tech pack arrives | Measurements by size, construction, artwork, trims list | No. There is no Item yet |
| Costing and quote | Fabric use from a marker, CM from operation minutes, quote at USD 4.26 FOB | No. A Quotation prices an Item that already exists |
| Lab dips, strike-off, fit sample | Three lab dip rounds before navy is approved | No. These are approvals of the product |
| Order confirmed | Size breakdown 300 / 750 / 900 / 750 / 300 | Yes: the Sales Order |
| Fabric and trims bought | 925 kg of jersey, rib, buttons, labels, polybags | Yes: Material Request and Purchase Order |
| Fabric received | Three dye lots, rolls of different width and weight | Partly. Batches yes, shade and roll width as custom fields |
| PP sample, cutting, sewing | Cut by dye lot, 18 minutes per polo, output by line by hour | Partly. Work Order and Job Card yes, the line no |
| Embroidery at a subcontractor | Panels out, 1% loss, panels back | Partly. One step works, a chain is hard |
| Final AQL inspection | General level II, AQL 2.5, sample of 125 pieces | Partly. Quality Inspection holds a sample size, not the ISO tables |
| Shipping and invoice | Cartons, packing list, commercial invoice | Yes: Delivery Note, Packing Slip, Sales Invoice |
Three of ten steps have a clean home and four have a partial one. The other three, and the partial halves, are where the order is actually won or lost.
3The recommended architecture, in short
Before discovery starts, agree which system owns which part of the business. Our recommendation is a split along the line in Example 1: ERPNext keeps the books, and an operations system built for apparel runs everything from the style to the shipment.
| Area | Owned by | Why there |
|---|---|---|
| Style, tech pack, samples and approvals, quotation costing | Operations layer | This work happens before an ERPNext Item exists, and it changes daily |
| Buyer orders, procurement planning, production planning, shop floor, quality, logistics | Operations layer | It needs sizes, dye lots, minutes, inspections and dates in one place |
| Shop-floor capture | The operations layer's floor screens, or a floor system such as Garment.io connected to it | Operators need a simple screen, not an office form |
| Accounts, payables and receivables, invoicing, payments, stock value, tax and e-invoicing | ERPNext | This is the legal and financial record, and ERPNext does it well as standard |
With this split, the ERPNext project stays close to standard: fewer custom apps, cleaner upgrades between major versions and a shorter project. The rest of this guide still explains how to bend ERPNext toward garment production, because some factories choose to do that, and because a consultant needs to know what each choice costs. Where an area moves out of ERPNext under the recommended model, the section ends with a short note. Section 35 describes the model in full, department by department.
4Business types, and what each needs from ERPNext
"Apparel manufacturer" covers very different businesses, and the business type decides who owns the material, what is invoiced, and which parts of ERPNext carry weight. Settle it in the first discovery meeting, because a factory often runs two types at once, for example full package for one buyer and CMT for another.
| Type | What it does | What it needs from ERPNext | Where it struggles |
|---|---|---|---|
| CMT (cut, make, trim) | Sews buyer-supplied fabric and often trims; sells labour | Customer-provided material at zero value, reconciliation per order, service invoicing, labour cost from minutes. Version 16 adds Subcontracting Inward for exactly this | Disputes over fabric loss; on v15 the zero-value flow is older and thinner |
| Full-package (FOB) factory | Buys all materials, makes, ships; sells the garment | Everything: variants, BOMs per variant, purchasing, batches, Landed Cost Voucher, subcontracting, advances, multi-currency | The largest scope and the most custom work; the riskiest type to implement |
| Textile mill (knitting, weaving, dyeing) | Turns yarn into fabric | Process manufacturing: yarn count and blend, dye recipes, batch genealogy, weight units, GSM and width per batch, by-products | Recipe logic goes beyond a BOM; the v16 batch traceability report helps with genealogy |
| Hosiery and knit-to-shape | Knits socks, tights or sweaters directly from yarn | Yarn BOM by weight, singles to pairs to packs, pairing, toe closing and boarding as operations, few broad sizes | The unit design (singles, pairs, packs) is the main trap |
| Brand or wholesaler | Designs and sells; buys finished goods from factories | Purchase Orders to factories, Landed Cost Voucher, supplier payments, wholesale Sales Orders, returns, possibly EDI | Development and factory follow-up usually sit in PLM or an operations tool (section 35) |
| Buying agent or buying house | Places and follows orders across factories for buyers; earns commission | Commission invoices on a non-stock service Item; multi-currency; little or no stock | The real work (T&A, samples, inspections, documents) is not transactional |
| Own-label retailer | Develops its own-label ranges and buys them from factories | Purchase Orders to factories, landed cost, supplier payments; the store side usually runs in retail systems | Development, sampling and factory follow-up, as for a brand |
The list above is general implementation practice. Treat it as a starting point for the discovery questions in section 6, not as a scope.
The same order as CMT and as full package
Suppose the buyer offers the polo order two ways. As full package, the factory buys everything and sells at USD 4.26 FOB. As CMT, the buyer ships the fabric (the same three dye lots, 2,880 m in total) and the factory charges for making only, at an illustrative USD 1.60 a piece.
| Question | Full package | CMT on ERPNext v16 |
|---|---|---|
| Who buys the fabric | The factory, on a Purchase Order | The buyer; no Purchase Order |
| How the fabric enters ERPNext | A Purchase Receipt that raises stock value and a payable | A Stock Entry from the Subcontracting Inward Order ("Receive ‣ Raw Material from Customer") into the customer's own warehouse, posted at zero value |
| Sales document | Sales Order for the polo variants | Sales Order with "Is Subcontracted" ticked, for a service item linked to the polo through a Subcontracting BOM |
| Invoice to the buyer | 3,000 × 4.26 = USD 12,780.00 | 3,000 × 1.60 = USD 4,800.00 |
| Material reconciliation | Internal: fabric used against the BOM | External: 2,880 m received, 2,856 m used, 24 m sent back with "Return ‣ Raw Materials to Customer" or accounted for |
| Main risk | Under-buying fabric (Example 10) | Being charged for fabric the factory cannot account for |
The 2,856 m used and the 24 m left come from the cut plan in Example 9. Frappe's Subcontracting Inward documentation says the customer's material is received "purely for taxation purposes" with no accounting impact on stock value, and that the finished good's BOM must hold at least one customer-provided item. On version 15, the older route is an item marked as customer-provided and a Material Request of type Customer Provided; test the zero-value behaviour on your version before committing to it.
Part 2Discovery
5Who should be on an ERPNext apparel project team?
An apparel ERPNext project needs one decision owner for every design question, and most of those owners sit in the factory, not in IT. The Frappe developer or partner configures and builds; the factory decides how styles, units, batches, costs and inspections work.
The table lists the roles we see on projects that go well. One person can hold several roles in a small factory. What matters is that every question in the fit-gap has a named person who can say yes. ERPNext projects add one role that licensed-ERP projects often leave to the vendor: someone who owns the custom apps, the bench and the upgrade path.
| Role | Usually | Decides |
|---|---|---|
| Sponsor | Owner or managing director | Scope, budget, go-live window, what stays outside ERPNext, disputes between departments |
| Factory project lead | A senior manager with time freed for the project | Day-to-day priorities, test sign-off, readiness for cut-over |
| Merchandising head | Head of merchandising | Style and variant model, size scales, season rules, order entry, T&A ownership |
| Development and sampling lead | Sampling room head or technical manager | Sample types, approval rounds, where tech packs and revisions live |
| Production manager | Factory or production manager | Work Order level, routings, workstations, subcontract steps, floor capture |
| Industrial engineer | IE manager | Operation minutes (SMV), line capacity, efficiency assumptions |
| CAD and marker lead | CAD room head | Consumption per size, marker efficiency, cutting loss |
| Stores head | Fabric and trims store manager | Units of purchase and issue, batch and roll rules, warehouses, receiving checks |
| Quality manager | QA manager | Inspection types and templates, sampling plans, who may override a failed inspection |
| Shipping and commercial lead | Shipping or commercial manager | Packing rules, carton labels, export documents, LC document requirements |
| Finance head | CFO or chief accountant | Chart of accounts, valuation method, landed cost, currencies, advances, chargebacks, tax |
| Key users | One or two per department | Test scripts, training of colleagues, first-line support after go-live |
| Functional consultant | Partner or in-house | How a decision is configured in ERPNext; flags what needs custom code |
| Frappe developer | Partner or in-house | Custom apps, Server Scripts, integrations, migration scripts |
| Platform owner | Partner, in-house IT or the hosting provider | Hosting, backups, the bench, which ERPNext release goes live, when to upgrade |
Rules that keep decisions moving
Most delays in apparel projects come from decisions nobody owns. Four rules prevent them.
- One owner per decision. "Merchandising and finance will agree" produces no decision. Write one name against each fit-gap line.
- Decide in writing. Keep a decision log with the date, the owner, the option chosen and the options rejected. Discovery findings, design choices and change requests all go in it.
- The sponsor settles scope, not configuration. The sponsor decides whether T&A lives in ERPNext or elsewhere. The merchandising head decides how it works.
- Key users are released from part of their day. A key user who is also running peak-season orders will not test properly.
6What should discovery workshops for an apparel factory cover?
Discovery for an apparel factory is one workshop per department, each walking a real, recent order from start to finish and asking where the data comes from, who changes it and what goes wrong. Use the factory's own orders, not a demo site. The polo order in this guide is the kind of order to bring.
Each workshop produces three things: the current flow as it really runs (including the spreadsheets), a list of findings mapped to the fit-gap lines in section 7, and a list of decisions with an owner. The question lists below are a starting set; add the factory's own.
Merchandising
Merchandising questions establish how orders arrive, change and are tracked.
- How does an order arrive: buyer PO by email, portal, EDI? What fields does it carry, and how often is it amended after confirmation?
- How are sizes and colours broken down, and do buyers order in ratio packs?
- What quantity tolerance do buyers allow, and how is a short or over shipment agreed?
- Is one buyer order split into several deliveries, each with its own date and destination?
- Where is the T&A calendar kept, who updates it, and who looks at it each morning?
- Which season and style numbering does each buyer use, and does the factory keep its own?
Development and sampling
Development questions establish what happens before an order exists.
- Which sample types does each buyer require, and in what order?
- How are sample rounds recorded: sent date, courier, comments, verdict?
- Where do tech packs live, and how is a revision after PP approval handled?
- Who prepares the quotation cost, from what inputs, and how many versions does a quote go through?
Purchasing and stores
Stores questions establish units, batches and what is measured at receipt.
- In which unit is each material bought, stocked and issued? Which suppliers invoice in a different unit from the one they deliver in?
- What is checked at receipt: weight, width, GSM, shade, shrinkage, four-point inspection? Who records it and where?
- How are dye lots and rolls labelled, and can the store find every roll of one lot today?
- Which materials are nominated by the buyer or supplied by the buyer?
- What happens to leftover fabric and trims after an order ships?
Cutting, production and subcontracting
Production questions establish the level of control and how output is counted.
- At what level is production controlled: per order, per style-colour, per size, per delivery, per cut?
- How is the cut plan made per dye lot, and who checks that lots are not mixed?
- How is output counted today: per line per hour, per operator, at end of line?
- Which processes go outside (print, embroidery, wash, CMT) and how are pieces counted out and back?
- How are rejects, repairs and second-quality pieces recorded?
Industrial engineering and planning
IE questions establish where minutes and capacity come from.
- Are operation minutes (SMV) studied per style, taken from a library, or estimated?
- How is line capacity planned across the season, including subcontractors?
- What efficiency figure is used for planning, and how is actual efficiency measured?
Quality
Quality questions establish inspections, buyer standards and who may release a failed lot.
- Which inspections run: incoming fabric, cutting, inline, end of line, pre-final, final, measurement?
- Which buyers set their own AQL levels, and where are their quality manuals kept?
- Who may release a lot that failed inspection, and is that decision logged?
- Which lab tests and certificates are required per order?
Shipping
Shipping questions establish packing rules and documents per buyer.
- How are cartons packed: solid size, assorted, ratio? What carton labels does each buyer require?
- Which export documents are prepared per shipment, and who checks them against the letter of credit?
- Does any buyer require an advance shipping notice?
Finance
Finance questions establish currencies, payment terms, import costing and tax.
- Which currencies are used for sales, purchases and wages? How are exchange differences booked today?
- How are buyers paid: letter of credit, advance, open account? Which buyers deduct chargebacks?
- How is imported material costed: are freight, duty and clearing added to the material cost, and by what key?
- Is the factory in a free zone or under a temporary-admission regime, and what reports does that require?
- Which e-invoicing and tax reporting rules apply, and is there an ERPNext app for them?
Technology (ERPNext-specific)
Technology questions establish who will own the platform once the partner leaves.
- Who writes and reviews Frappe code today, and who will port custom apps to the next major version?
- Frappe Cloud, a hosting partner or the factory's own server? Who takes and tests backups?
- Which systems must connect: buyer portals, a shop-floor system, banks, the tax authority?
Output of the merchandising workshop
The team walked the polo order from the buyer's PO to the booking of the shipment. The findings sheet looked like this.
| # | Finding | Fit-gap line | Decision needed | Owner |
|---|---|---|---|---|
| M1 | The buyer PO arrives as a PDF; sizes are keyed by hand into a spreadsheet, then again into the costing sheet | 41 | Where the order is entered once, and who enters it | Merchandising head |
| M2 | The buyer allows ±3% quantity; nobody records it, so shipping asks each time | 43 | Where the tolerance is held and who checks it before shipment | Merchandising head |
| M3 | Three lab dip rounds were tracked in one merchandiser's email | 10 | Where approval rounds are recorded | Development lead |
| M4 | The spec changed after the fit sample; production cut from the earlier sheet on a previous order | 8 | How the approved spec version is fixed for an order | Development lead |
| M5 | Fabric was ordered on the base-size consumption on a previous order and ran short | 12 | Where size-dependent consumption is calculated | CAD lead |
| M6 | The T&A lives in a shared spreadsheet with no dependencies | 36 | Where T&A lives: in ERPNext, a custom app, or an operations system | Sponsor |
Four of the six findings (M3, M4, M5, M6) sit on fit-gap lines where ERPNext has no standard answer. That is the moment to decide the architecture question in section 3, before anyone creates a custom DocType.
7The apparel fit-gap checklist for ERPNext: 52 lines
A fit-gap checklist lists every requirement an apparel business has and records, line by line, whether ERPNext meets it as standard, meets it with configuration, needs custom code, or is better handled outside ERPNext. The 52 lines below cover product, BOM and costing, materials, production, quality, sales and shipping, and finance.
The answers are our assessment of ERPNext v15 and v16 for a typical full-package garment factory. Where a line depends on version 16, it says so. "Configure" includes custom fields added with Customize Form, which need no code. Confirm each line against your release and your partner's apps before you sign a scope.
Key: Standard works as delivered · Configure settings, custom fields or Customize Form · Custom build a Frappe app, Server Script or third-party app · Operations layer better run in an apparel operations system and passed to ERPNext
| # | Requirement | ERPNext answer | Notes |
|---|---|---|---|
| Product | |||
| 1 | Style master with a colour-size variant matrix | Standard | Item template with "Has Variants" and Item Attributes (section 11) |
| 2 | Size scales per product category | Configure | One Item Attribute per scale (alpha, numeric, waist, inseam), assigned per template |
| 3 | Season or collection, and style reuse across seasons | Configure | A custom field or Item Group level; rules for reusing a style number with a new cost need design |
| 4 | Carry-over styles with a new price or BOM | Configure | A submitted BOM cannot be edited; duplicate it, submit the new one and make it default |
| 5 | Prepacks and ratio packs | Custom build | A Product Bundle can sell a pack as one item; assorted cartons and pack-level packing lists need custom work |
| 6 | Pairs and multi-packs (hosiery, gloves) | Configure | A pair UOM with item conversion factors; knitting in singles and pairing as a stage need design |
| 7 | Buyer's own style and colour codes | Configure | Custom fields per Item or per Sales Order line |
| 8 | Tech-pack revision linked to the order | Operations layer | No tech-pack object; BOM versions are not spec versions |
| 9 | Points of measure with tolerance per size | Operations layer | No native measurement-spec object |
| 10 | Sample types and rounds with buyer approval | Operations layer | No native object; custom DocTypes or tasks (section 16) |
| BOM and costing | |||
| 11 | BOM lines that apply by colour or size | Configure | A template raw material on a template BOM lets the variant be chosen at the Work Order; quantity still does not vary by size |
| 12 | Size-graded fabric consumption | Custom build | A BOM per variant, generated from a consumption table (section 14) |
| 13 | Wastage and shrinkage held separately | Custom build | The BOM holds a scrap percentage per line and a process loss; two separate factors need fields and logic |
| 14 | Trims that change by colourway | Configure | Template raw materials resolved to variants, or variant BOMs |
| 15 | Pre-costing with many elements and currencies | Operations layer | Happens before the Item exists |
| 16 | Standard against actual cost per order | Configure | ERPNext values stock by FIFO, moving average or LIFO; BOM cost against Work Order actuals needs reporting |
| 17 | Labour cost from operation minutes | Standard | Operation time on the BOM × the workstation's hour rate (section 15) |
| 18 | Landed cost on receipts | Standard | Landed Cost Voucher, split by quantity or amount; a split by weight needs a workaround (section 18) |
| 19 | Quote versions and approval | Operations layer | ERPNext Quotations price existing Items; the cost build comes first |
| Materials | |||
| 20 | Purchase, stock and issue units with per-lot conversion | Custom build | Conversion factors are held per Item, not per Batch (section 12) |
| 21 | GSM and width per lot or roll | Configure | Custom fields on Batch; using them in a calculation is custom code |
| 22 | Roll tracking | Configure | One Batch per roll with the dye lot as a field, or Batch as dye lot and rolls outside |
| 23 | Dye lot and shade | Configure | Batch as dye lot; shade group as a custom field |
| 24 | Four-point fabric inspection | Custom build | A Quality Inspection Template holds readings; defect points per roll and per metre need design |
| 25 | Quality hold and quarantine | Configure | "Inspection Required before Purchase" on the Item, and a rejected warehouse |
| 26 | Buyer-supplied (consigned) stock | Standard | Version 16 Subcontracting Inward posts customer material at zero value; on v15, test the older customer-provided flow |
| 27 | Reserved against free stock | Standard | Stock reservation; version 16 extends it to Work Orders, Production Plans and Subcontracting Orders |
| 28 | Leftovers and stock-lot disposal | Configure | A leftover Item Group and a sales flow |
| Production | |||
| 29 | Work orders per style-colour or delivery | Configure | A Work Order is per Item, so per variant; grouping by delivery is a design choice |
| 30 | Cut orders, lay plans, marker efficiency | Custom build | Usually a CAD system plus a custom cut-order DocType |
| 31 | Bundles and bundle tickets | Custom build | A shop-floor system or a custom app |
| 32 | WIP by stage and line | Operations layer | Job Cards show the operation and workstation, not the bundle |
| 33 | Graded output (first quality, seconds, rejects) | Operations layer | Produced is not the same as shippable |
| 34 | Subcontract out and back with loss | Standard | One step as standard; chained processors need intermediate items or custom work (section 17) |
| 35 | Capacity by line from minutes | Operations layer | Workstations have working hours and production capacity; seasonal line loading does not exist |
| 36 | T&A with a critical path | Operations layer | No native T&A object |
| Quality | |||
| 37 | Inline and end-of-line capture | Configure | Quality Inspection of type In Process against a Job Card; operator-level capture is limited |
| 38 | Final AQL to ISO 2859-1 at the buyer's level | Custom build | Quality Inspection has a sample size field, not the ISO tables (section 19) |
| 39 | Logged override of a failed inspection | Custom build | Design who may release and how it is recorded; a Workflow can help |
| 40 | Lab tests and certificates per order | Configure | Attachments on the Sales Order or a custom DocType |
| Sales and shipping | |||
| 41 | Grid order entry by colour and size | Custom build | Not documented as a core Sales Order feature; one line per variant as standard |
| 42 | Several deliveries per order | Configure | A delivery date per line, or an order per drop; decide before migration |
| 43 | Over and under-shipment tolerance | Configure | An over-delivery allowance is a setting; closing a short order needs a named decision |
| 44 | Carton packing and labels (SSCC) | Configure | Packing Slips with case numbers are standard; buyer label formats and SSCC numbers are custom |
| 45 | EDI 850, 855, 856, 810 | Custom build | Connector or EDI provider |
| 46 | Buyer label and ASN rules | Custom build | Per buyer |
| Finance | |||
| 47 | Multi-currency and exchange differences | Standard | Including Exchange Rate Revaluation of open foreign balances |
| 48 | Letter of credit terms and document checking | Custom build | No native LC DocType |
| 49 | Advances and down payments | Standard | Payment Entry linked to the Sales Order, allocated to the invoice |
| 50 | Reason-coded chargebacks | Configure | Deduction accounts per reason; a reason field may be custom |
| 51 | Profitability per order | Configure | A Project or an accounting dimension per order; design it with finance |
| 52 | E-invoicing per country | Configure | Through country apps (India Compliance is one); check your country (section 22) |
Counted from this table, 8 of the 52 lines are standard, 22 need configuration, 13 need custom code and 9 are better run outside ERPNext. That count is our assessment for a typical full-package factory, not a survey. A CMT factory drops most of the costing and material lines; a mill adds process lines this list does not cover.
Five fit-gap rows, scored for the polo factory
A fit-gap row is only useful with evidence, a decision and an owner. These five rows come from the workshops in Example 3.
| # | Requirement | Evidence from the factory | Decision | Owner |
|---|---|---|---|---|
| 12 | Size-graded consumption | Fabric under-bought on the base size (Example 10) | Consumption per size calculated outside ERPNext; purchase quantity passed in | CAD lead |
| 21 | GSM and width per roll | Four rolls of "180 GSM" held 1.9 m less than the fixed factor said (Example 8) | Measured at receipt per roll; ERPNext holds the Batch | Stores head |
| 23 | Dye lot and shade | Shade complaint on a previous order | Batch as dye lot, "Has Batch No" on every fabric, batch mandatory on every receipt and issue | Stores head |
| 38 | Final AQL | Buyer manual requires general level II, AQL 2.5 major | Inspection run outside ERPNext; pass or fail gates the Delivery Note | QA manager |
| 49 | Advances | Buyer pays 30% in advance on this programme | Standard Payment Entry against the Sales Order | Finance head |
8Frappe Cloud vs self-hosted ERPNext, and what it costs
ERPNext has no paid edition: the whole product is open source under GPL-3.0, so the choice to make is where it runs and who looks after it. The ERPNext README lists three ways to run it: Frappe Cloud (managed hosting by Frappe), self-hosting with Docker, and a manual install with the bench tool for development. For an apparel project, the deciding question is whether the site can run custom apps.
| Hosting | What Frappe's documentation says | For apparel |
|---|---|---|
| Frappe Cloud, shared site | Only featured apps from the Frappe Cloud Marketplace can be installed; Server Scripts are not available on public shared benches | Viable only if ERPNext stays standard, for example under the recommended model with an API connection |
| Frappe Cloud, private bench group | Marketplace apps and custom apps from GitHub; Frappe Cloud updates sites as the custom app is updated | The usual choice for a partner-led project with custom apps and no in-house server team |
| Self-hosted (Docker or bench) | Docker, Docker Compose and git, per the Frappe Docker repository | Full control, and full responsibility for servers, backups, security patches and upgrades |
| A hosting partner | Not a Frappe product; many partners host ERPNext | Judge on backups, upgrade policy and who owns the code |
From practice: the licence being free moves the cost into people. Budget for the developer time to keep custom apps working across major versions, and for someone to own backups if you self-host.
How much does ERPNext cost for a garment factory?
ERPNext itself costs nothing to license; the cost of an apparel implementation is hosting, partner work, custom apps and their upkeep through upgrades. We do not quote hosting prices here, because they change; Frappe Cloud publishes its plans on its own site.
| Cost driver | What decides it |
|---|---|
| Licence | None: GPL-3.0. Note that GPL obligations apply if you distribute modified code; take legal advice before selling a customised version to others |
| Hosting | Shared site, private bench or own servers; private benches are what custom apps require on Frappe Cloud |
| Users | No per-user licence; hosting size and support still grow with users and data |
| Partner implementation | Discovery, configuration, migration, testing, training and hypercare; scales with the custom-build lines in the fit-gap |
| Custom apps | Build once, then port at every major version; the recurring cost most budgets miss |
| Country apps | Tax and e-invoicing apps, some open source, some paid on the Marketplace |
| Integrations | EDI, shop floor, banks, e-invoicing; each needs build and upkeep |
The fastest way to lower the total is to shrink the custom-build column. Every line moved to standard ERPNext or to an operations system is code nobody has to port.
Questions to settle with the partner
Settle these before signing, because each changes the cost and the upgrade path.
- Which ERPNext major version goes live (15 or 16), and when is the next major upgrade due?
- Which custom apps are planned, which Git repository holds them, and who owns that code?
- Is there a staging site for testing each release against real data?
- Shared site, private bench, or own servers, and who restores a backup if something goes wrong?
9ERPNext vs Odoo for garment manufacturing
ERPNext and Odoo both model a style as a template with colour and size variants, both support subcontracting, batches or lots and landed cost, and neither covers sampling, T&A, size-graded consumption or AQL for apparel out of the box. The main differences are the licence, where manufacturing depth sits, and how each handles BOMs for variants. ERPNext is open source in full; Odoo puts Quality, PLM, Barcode and Shop Floor in its paid Enterprise edition.
| Aspect | ERPNext (v15, v16) | Odoo (17, 18, 19) |
|---|---|---|
| Licence | Open source under GPL-3.0; no paid edition | Community open source; Enterprise a licensed subscription |
| Variants | Item template with "Has Variants"; attributes, including numeric ranges; variants created singly or in combinations | Product template with attributes; Instantly, Dynamically or Never creation per attribute |
| Order entry by grid | Not documented as a core Sales Order feature | Variant grid on quotations and sales orders |
| BOM for variants | A template BOM serves variants on Work Orders; variant BOMs can be made from it. Subcontracting needed variant BOMs until a change merged on 24 Sep 2026 (issue #54715) | One BoM per template, with "Apply on Variants" per component and operation |
| Manufacturing depth | BOM, Work Order, Job Card, Routing, Production Plan; v16 adds MRP views, stock reservation for Work Orders and material per operation on Job Cards | BoMs incl. multilevel, work centers, work orders; Quality, PLM and Shop Floor in Enterprise |
| Subcontracting | Outward (Subcontracting Order and Receipt); inward for customer material from v16 | Basic, resupply and dropship workflows |
| Batches and lots | Batches and serials through the Serial and Batch Bundle (v15 onward) | Lots and serials; operation types control lot creation and reuse |
| Landed cost | Landed Cost Voucher split by quantity or amount | Five split methods including weight and volume |
| Quality | Quality Inspection in every install, with templates and a sample size field | Quality app in Enterprise |
| Units | Conversion factors per Item; any two units can convert on an Item | 17 and 18 convert only inside a unit category; 19 reworked units |
| API | REST generated per DocType; token authentication; webhooks per DocType | XML-RPC and JSON-RPC (deprecated in 19); JSON-2 API from 19 |
| Customisation | Customize Form, custom DocTypes, Server Scripts, custom apps | Studio (Enterprise), custom modules |
Which should a garment factory choose?
Choose on the fit-gap, the people who will maintain the system and local compliance, not on the product name. From practice, ERPNext tends to suit a factory with in-house or closely held Frappe developers that wants a complete open-source stack, including quality inspection, without licence fees. Odoo tends to suit a factory that wants Enterprise apps for quality and shop floor, grid entry on sales orders and a large partner network. In both, the lines of the fit-gap marked custom build remain custom build, and in both, customisations must be carried through each upgrade. The Odoo chapter covers the other side in the same structure, and the comparison page sets all the ERPs in this series side by side.
Odoo facts are from Odoo's documentation as cited in the Odoo chapter; ERPNext facts from Frappe's documentation and GitHub (see sources).
Part 3Design, area by area
10How should Item Groups and materials be set up in ERPNext for apparel?
Set up ERPNext Item Groups by how each material is bought, stocked, valued and tracked: fabrics, yarns, trims, packaging, subcontract services and finished garments each get their own group, and each Item carries its own stock unit, batch setting and valuation method. An Item Group is ERPNext's tree of product categories; it groups Items for reports, defaults and price rules. Apparel is not one product type, and the garment category decides the size system, the main material, the unit it is bought in and the processes it goes through.
| Category | Main material | Size system | What changes the setup |
|---|---|---|---|
| Woven tops and bottoms | Woven fabric, m or yd | Alpha (S–XXL) or numeric | Fabric width drives the marker; collars and cuffs need interlining |
| Knit tops, polos, fleece | Knit fabric, bought in kg | Alpha | GSM and width per roll; rib and collar trims sized per garment size |
| Denim | Woven denim, weight in oz/yd² | Waist × inseam, two axes | Washing changes shade and size, so shrinkage and wash are part of the spec; washing is usually subcontracted |
| Knitwear and sweaters | Yarn, in kg | Alpha | No fabric stage; consumption is yarn weight per size and machine gauge |
| Hosiery and socks | Yarn, in kg | Few broad sizes, e.g. 39–42 | Knitted in singles, sold in pairs and multi-packs; pairing and boarding are stages of their own |
| Intimates | Knit and lace, many small components | Band × cup | Wires, hooks, elastics and moulded cups make long bills of materials |
| Outerwear | Woven shell, lining, padding by weight | Alpha | Many trims per garment; padding bought by weight |
| Home textiles | Woven or knit, by m | Flat dimensions in cm | No garment sizes; products sold as sets, such as a duvet cover with pillowcases |
Materials, and how each is bought and used
Each material has its own purchase unit, usage unit and receipt checks, and the ERPNext Item must follow them.
| Material | Bought in | Used in | Track at receipt |
|---|---|---|---|
| Woven fabric | m or yd | m | Composition, width, weight, shade and dye lot, shrinkage |
| Knit fabric | kg | m | GSM, open or tubular width, composition, shade and dye lot, shrinkage |
| Yarn | kg, on cones | kg or g | Count and system (Ne, Nm, denier), ply, composition, shade |
| Sewing thread | Cones | Metres per garment | Ticket number, colour matched to each shade |
| Trims: zips, buttons, labels, hangtags | Pieces, dozens, gross (144) | Pieces | Size and colour per colourway; often from a supplier the buyer nominates |
| Packaging: polybags, tissue, cartons | Pieces | Pieces | Carton dimensions, buyer-specific printing |
| Buyer-supplied material (CMT) | Received, not bought | As above | Owned by the buyer: hold it in the customer's warehouse at zero value and reconcile what was used |
Bill of materials for one style: men's piqué polo, style P-2041
| Component | Material | Bought in | Per piece (size L) | Varies by |
|---|---|---|---|---|
| Body | Cotton piqué 180 GSM, 1.80 m open width | kg | 0.95 m | Size, colour |
| Collar and cuffs | Flat-knit rib collar and cuffs | sets | 1 set | Size, colour |
| Buttons | 4-hole polyester, 15 mm | gross (144) | 3 pcs | Colour |
| Sewing thread | Polyester core-spun, tkt 120 | cones | 165 m | Colour |
| Main label | Woven, buyer-nominated supplier | pieces | 1 pc | None |
| Size and care label | Printed satin | pieces | 1 pc | Size |
| Embroidery | Chest logo, subcontracted | service | 1 pc | Colour |
| Polybag | Recycled LDPE, with warning print | pieces | 1 pc | None |
Eight lines, five units of purchase plus a service, and six lines that change with size or colour. In ERPNext, the body fabric sits in a Fabric Item Group with "Has Batch No" ticked; buttons and labels in Trims without batches; embroidery as a non-stock service Item; the polo variants in Finished garments.
What each Item carries in ERPNext
In ERPNext, most of the setup that other ERPs put on the category sits on the Item itself, with defaults from the Item Group and Stock Settings. Three rules shape the design for apparel.
- Valuation method is per Item and cannot be changed once the Item is saved. Frappe's documentation lists FIFO, LIFO and Moving Average, with FIFO as the default, and says the method cannot be changed after the Item is saved. ERPNext has no standard-cost valuation method, so a finished garment is valued from the materials and operating cost of its manufacture. Decide the method for fabric, trims and garments before the first import.
- Units convert per Item. Each Item has a stock UOM and a table of other UOMs with their conversion factor to the stock UOM, plus a default purchase and sales UOM. Buying buttons by the gross and issuing them by the piece is a row in that table. The same mechanism lets a fabric carry a kilogram-to-metre factor, but only one per Item (section 12).
- Batch tracking is a tick on the Item. "Has Batch No" turns it on; "Automatically Create New Batch" creates a batch on each receipt. Put it on fabric and yarn; most trims do not need it.
Item groups, units and valuation for the polo
One setup that follows the rules above.
| Item Group | Valuation method | Maintain Stock | Has Batch No | Stock UOM | Purchase UOM |
|---|---|---|---|---|---|
| Fabric / Knit | FIFO | Yes | Yes (batch = dye lot) | Kg | Kg |
| Fabric / Woven | FIFO | Yes | Yes | Meter | Meter |
| Trims / Rib collars and cuffs | FIFO | Yes | Yes, to match the body dye lot | Set | Set |
| Trims / Buttons | Moving Average | Yes | No | Nos | Gross (144 Nos) |
| Trims / Labels and thread | Moving Average | Yes | No | Nos, Cone | Nos, Cone |
| Packaging | Moving Average | Yes | No | Nos | Nos |
| Subcontract services | Non-stock service Items ("Maintain Stock" off) | Nos | Nos | ||
| Finished garments | FIFO | Yes | No, or one batch per production run | Nos | n/a |
| Customer-provided material | Held in the customer's warehouse at zero value (v16 Subcontracting Inward) | as received | n/a | ||
Buttons: the order needs 3 per piece, 9,000 in all. With a 5% allowance the factory buys 9,450 pieces, which is 9,450 ÷ 144 = 65.6 gross, so the Purchase Order says 66 gross (9,504 pieces). With "Must be Whole Number" ticked on the Gross UOM, ERPNext refuses 65.6 and the buyer rounds up. The unit names are whatever your site's UOM list holds; check the spelling before import.
With operations on top: the style, its bill of materials by category and its consumption are built in the operations layer. ERPNext still needs the Item Groups, units and valuation methods above, because it holds stock value and the payables.
11How do you set up size and colour variants in ERPNext?
Make the style an Item template by ticking "Has Variants", list its Item Attributes (colour, size and, where it applies, fit or inseam), and create the variants as the combinations you actually make. Only variants can be used in transactions such as Sales Orders and Purchase Invoices; the template is the blueprint. This is how Frappe's item-variants documentation describes it.
- Variants Based On is either Item Attribute or Manufacturer. Garments use Item Attribute.
- Attributes hold a list of values, each with an abbreviation, or a numeric range with an increment. A waist attribute from 28 to 40 in steps of 2 is a numeric attribute; S to XXL is a list.
- Creating variants. From the template you can make one variant, or select several attribute values and create every combination at once. Frappe's example: two colours and three sizes give six variants.
- Item Variant Settings (Home ‣ Stock ‣ Items and Pricing ‣ Item Variant Settings) decides which fields copy from the template to its variants.
- Variant codes are built from the template code and the abbreviations of the attribute values, which is why abbreviations must be agreed before the first variant exists.
ERPNext creates variants only when you ask it to, so the "every combination exists at once" flood that other ERPs produce is a choice here, not a default. The limit lies elsewhere. Every variant is a full Item, and every variant that is made needs a BOM, a Work Order and its Job Cards (section 14). Count those before choosing the template level.
Grid order entry, a colour by size quantity matrix on the Sales Order, is not documented as a core feature. Each variant is a line. Factories that enter many grids either build a small entry screen or enter the order in an operations system and pass the lines in.
Naming and codes
Agree a code pattern before the first import, for example template P2041-NVY with size abbreviations giving P2041-NVY-L, and hold the buyer's own style number in a custom field. Keep one size attribute per size scale, so an "S" on a polo and an "S" on a bra band never share a value by accident. Integrations should store the Item's name, which is the Item Code, and never a description (section 34).
The polo template, its variants, and a jean for comparison
For the polo, the style-colour is the template and size is the only attribute: P2041-NVY with Size = S, M, L, XL, XXL gives five variants, P2041-NVY-S to P2041-NVY-XXL. For a five-pocket jean in three washes, waist 28 to 40 in even sizes (7 values) and inseam 30, 32 and 34 (3 values), the counts look like this.
| Design | Variants per template | Across 40 styles | Effect in ERPNext |
|---|---|---|---|
| Style as template; wash, waist and inseam as attributes, all combinations created | 63 | 2,520 | 2,520 Items, each needing a BOM before it can be made |
| Same template, only combinations the buyer ordered created | only those ordered | typically far fewer | Fewer Items; planning before the first order sees nothing |
| Style-wash as template; waist and inseam as attributes | 21 | 2,520 across 120 templates | Each wash has its own template BOM, cost and price |
The third design gives the same variant count but splits it where the business already splits it: each wash has its own fabric treatment, cost and often its own buyer price, so a template BOM per wash is meaningful. Choose the template level from how the factory costs and sells, then decide which combinations to create.
With operations on top: styles, colourways and size breakdowns live in the operations layer, and ERPNext only needs the finished-goods Items that are actually sold and invoiced. The variant count in ERPNext drops to what ships.
12How do you convert kilograms to metres for fabric in ERPNext?
ERPNext can convert kilograms to metres on a fabric Item, because each Item holds its own table of UOMs and conversion factors; the limit is that the factor is fixed per Item, while the true factor changes with every roll. Knitted fabric is usually bought by weight and cut by length. The conversion depends on the fabric's weight per square metre (GSM) and its width.
GSM means grams per square metre: the weight of one square metre of the fabric. A 180 GSM jersey weighs 180 g per square metre.
180 GSM jersey, 1.80 m open width → 1000 ÷ (180 × 1.80) = 3.086 m per kg
so 1 m = 1 ÷ 3.086 = 0.324 kg
220 GSM fleece, 1.60 m open width → 1000 ÷ (220 × 1.60) = 2.84 m per kg
In ERPNext the conversion factor is written from the other unit into the stock unit. If the jersey's stock UOM is Kg and you add Meter to its UOMs table, the factor is 0.324: one metre is 0.324 kg. A separate UOM Conversion Factor list holds general conversions such as kilograms to pounds. The UOM record also has "Must be Whole Number", which should be on for pieces, sets, cones and gross, and off for kilograms and metres.
Three workable designs
There are three workable ways to hold knit fabric in ERPNext, each with a trade-off.
| Design | How it works | Trade-off |
|---|---|---|
| Buy, stock and issue in Kg | Cutting receives kilograms; metres are worked out on the cutting floor | Simple and accurate in stock value; the BOM is in Kg, so size consumption must be converted to Kg per size |
| Stock in Kg, Meter as a second UOM with a fixed factor per Item | The UOMs table holds 0.324 Kg per Meter for this fabric | No code; wrong whenever a roll differs from the nominal GSM and width |
| Stock in Kg, record GSM and width per Batch, convert per Batch | Custom fields on Batch and a Server Script or app that converts at issue | Accurate; needs custom code and discipline at receipt |
Never set one factor for "all jersey". A fabric Item per quality and width at least, and a measured factor per batch if the cutting room works in metres.
Four rolls of the same "180 GSM" jersey
The Purchase Order says 180 GSM, 1.80 m. The rolls that arrive are close, not equal.
| Roll | kg | Measured GSM | Width (m) | m per kg | Metres |
|---|---|---|---|---|---|
| R-101 | 25.0 | 176 | 1.82 | 3.122 | 78.0 |
| R-102 | 24.6 | 184 | 1.78 | 3.053 | 75.1 |
| R-103 | 25.3 | 181 | 1.80 | 3.069 | 77.7 |
| R-104 | 24.8 | 188 | 1.76 | 3.022 | 75.0 |
| Total | 99.7 | 305.8 |
The Item's fixed factor of 0.324 Kg per Meter (3.086 m per kg) says these rolls hold 99.7 × 3.086 = 307.7 m. They hold 305.8 m. On the full polo order of 925 kg the gap is about 17 m, which is 18 size-L polos that the stock report says you can cut and the cutting table says you cannot. Record measured GSM and width per roll at receipt, as custom fields on the Batch, and convert per roll.
With operations on top: the operations layer records a measured lot record per receipt (GSM, width, shrinkage) and works consumption in the unit the cutting room uses. ERPNext can stay in the purchase unit, kilograms, for stock value and payables.
13How do you track dye lots and fabric rolls in ERPNext?
Track fabric with ERPNext Batches and treat each Batch as one dye lot (or one roll carrying its dye lot), then require the batch on every receipt and every issue to cutting. A dye lot is a batch of fabric dyed together; fabric from two dye lots can differ slightly in shade, so pieces cut from two lots show a colour difference once sewn into one garment. Cutting must stay within one lot.
Batch tracking needs "Enable Serial and Batch No for Item" in Stock Settings and "Has Batch No" on the Item. A Batch record has a Batch ID, the Item, manufacturing and expiry dates, a reference, a description and its quantity. Custom fields added with Customize Form hold what apparel needs: shade group, measured GSM, measured width, shrinkage and roll length.
Since version 15, ERPNext links batches and serial numbers to stock transactions through the Serial and Batch Bundle, a separate record created for each stock transaction that lists the batches and quantities it moves. Frappe's documentation says a bundle cannot be reused across transactions, that outward batches can be picked by FIFO, LIFO or expiry through "Pick Serial / Batch Based On" in Stock Settings, and that from version 15 batched items cannot go into negative stock even when negative stock is allowed. Version 16 adds a Serial No and Batch Traceability report that follows a batch backward to its source and forward to its customer.
Automatic FIFO picking is exactly what apparel must avoid at cutting: it takes the oldest batch, not the right shade. Turn automatic picking off for fabric issues, or add a validation that refuses a Work Order issue whose batches differ in dye lot.
Batch per dye lot, or batch per roll?
The choice decides how much the store can see. Both are workable.
| Design | What you gain | What it costs |
|---|---|---|
| One Batch per dye lot | Few records; lot-level stock and traceability | Roll width, weight and defects live outside ERPNext |
| One Batch per roll, dye lot as a custom field | Roll-level issue and return; measured values per roll | Many batches; the cut rule must compare the dye-lot field, not the Batch ID |
| Serial number per roll | Unique rolls | A serial number is one unit, so a 25 kg roll does not fit the model; not recommended for fabric |
A shade band is a set of approved shade references for one fabric colour, used to judge whether a new lot is close enough to the standard. Buyers often allow shade groups within the band (for example A, B and C), and a garment must stay within one group. ERPNext has no shade band object; it is a custom field on the Batch or a record in another system.
Cutting 3,000 navy polos from three dye-lot batches
The order needs 2,856 m. The mill ships 933 kg, 8 kg over the 925 kg ordered and within its delivery tolerance, as 2,880 m in three dye lots, received as batches JER-NVY-A 1,210 m, JER-NVY-B 1,030 m and JER-NVY-C 640 m. Rule: every garment's panels come from one lot, and bundles from different lots never meet on a line.
| Batch | Cut from it | Metres used | Left |
|---|---|---|---|
| A (1,210 m) | XXL 300 · XL 750 · M 23 · S 87 | 1,186.6 | 23.4 |
| B (1,030 m) | L 900 · S 213 | 1,029.7 | 0.3 |
| C (640 m) | M 727 | 639.8 | 0.2 |
| Total | 3,000 pieces | 2,856 | 24 |
Check lot A: 300 × 1.10 + 750 × 1.02 + 23 × 0.88 + 87 × 0.82 = 330 + 765 + 20.24 + 71.34 = 1,186.58 m. Sizes M and S span two lots, which is fine as long as the bundles stay apart and each carton is packed from one lot. In ERPNext, each Work Order's "Material Transfer for Manufacture" must carry a bundle with one batch only; with FIFO picking on, the system would have offered batch A for every Work Order until it ran out.
With operations on top: shade bands per fabric, the measured lot record and the incoming inspection that carries the dye lot sit in the operations layer. ERPNext still holds the Batch on receipts and issues, so stock value and traceability stay correct.
14How do you handle size-dependent fabric consumption in ERPNext BOMs?
ERPNext holds one quantity per BOM line, so fabric that grows with size needs a BOM per variant, generated from a consumption table rather than typed. A single template BOM can serve every variant on a Work Order, and ERPNext can make a variant BOM from it, but a template BOM gives every size the same fabric quantity. A bill of materials (BOM) is the list of components and quantities, and optionally operations, needed to make one quantity of an Item.
Frappe's BOM documentation describes a BOM Template: a BOM made for a template Item can be used as the default BOM when making Work Orders for its variants, the user can make a BOM for a variant from the template BOM, and when a raw material in the BOM is itself a template Item, ERPNext lets the user pick the matching variant. That last point handles trims that change by colourway, such as navy thread for the navy polo.
Other BOM fields matter for apparel. "With Operations" adds the Operations table; each raw-material line has a scrap percentage and the BOM a process loss; "Transfer Material Against" decides whether material moves against the Work Order or the Job Card; the BOM's "Quantity" can be 100 pieces instead of one, which keeps small per-piece fabric quantities precise. "Inspection Required" with a Quality Inspection Template ties an inspection to the BOM. A submitted BOM cannot be edited: you cancel it or duplicate it, submit the new one and make it the default.
Subcontracting and the template BOM
Work Orders fall back to the template's BOM when a variant has none; subcontracting did not. GitHub issue #54715, opened on ERPNext v15.77.0, reported that a Subcontracting Order would not use the template BOM, which forced a BOM per variant for every subcontracted garment. A change that adds the fallback to subcontracting documents was merged into the develop branch on 24 September 2026 (pull request #59373). At the time of checking it had not appeared in a v15 or v16 release note. Until your release carries it, plan on variant BOMs for anything you subcontract.
Marker efficiency is the share of the fabric in a cutting marker that ends up in garment pieces; the rest is waste between the pieces. Shrinkage is the fabric the garment loses in washing or finishing, planned into the pattern. Keep the two apart: they come from different people (CAD and lab), change for different reasons, and are argued about with different suppliers. ERPNext's scrap percentage holds one number, so the two factors need custom fields if the factory wants both on record.
One template BOM or five variant BOMs
Body fabric per polo, from the marker: S 0.82 m, M 0.88 m, L 0.95 m, XL 1.02 m, XXL 1.10 m. The fabric is stocked in kilograms, so each quantity is divided by 3.086 m per kg.
| Size | Pieces | m per piece | kg per piece | Metres | kg |
|---|---|---|---|---|---|
| S | 300 | 0.82 | 0.2657 | 246 | 79.70 |
| M | 750 | 0.88 | 0.2851 | 660 | 213.84 |
| L | 900 | 0.95 | 0.3078 | 855 | 277.02 |
| XL | 750 | 1.02 | 0.3305 | 765 | 247.86 |
| XXL | 300 | 1.10 | 0.3564 | 330 | 106.92 |
| Five variant BOMs | 3,000 | 2,856 | 925.34 | ||
| One template BOM on size M | 3,000 | 0.88 | 0.2851 | 2,640 | 855.36 |
The template BOM under-buys by 216 m, or 70 kg: 7.6% of the fabric. That is roughly 227 size-L polos with no fabric, found out on the cutting table three weeks before shipment, with a mill lead time longer than that. The five variant BOMs give 925.34 kg, which is where the 925 kg on the Purchase Order comes from. Set each variant BOM's quantity to 100 pieces (26.57 kg for S, 28.51 kg for M, and so on) so the rounding stays inside a gram per piece. Five BOMs per colourway are manageable; forty styles in six colours are 1,200 BOMs, which is why projects generate them from a consumption table with a script.
With operations on top: the consumption engine (marker efficiency, shrinkage, woven construction) and the net-to-buy across the order book run in the operations layer, which passes the purchase quantity to ERPNext. ERPNext does not need size-graded BOMs at all.
15How do you model cutting, sewing and finishing with ERPNext workstations, operations and job cards?
Model cutting, sewing, finishing and packing as ERPNext Workstations, list the garment's operations with their minutes on the BOM (or on a Routing), and let each Work Order create one Job Card per operation to record time and quantity; this gives a labour cost and a record of each step, but it does not balance a sewing line. A Workstation is the place where an operation runs, with its working hours, holiday list, production capacity and an hour rate built from electricity, consumables, rent and wages. An Operation is the work itself; a Routing is a reusable sequence of operations and workstations.
A Job Card, in Frappe's words, stores actual production information about a particular Operation performed on a particular Workstation. ERPNext creates Job Cards when a Work Order with operations is submitted. Operators record time with "Start Job" and "Complete Job" or in a time-log table, against an employee, with the completed quantity; a Material Request can be raised from a Job Card, and a Quality Inspection can be made against it. Version 16 lets Job Cards record the raw materials consumed and the semi-finished goods produced at each operation, create subcontracting purchase orders directly, and adds a "Pending Qty" field so partial completion is not booked as process loss.
The Work Order itself carries source, work-in-progress, target and scrap warehouses, the required items with transferred and consumed quantities, and the operations with planned and actual times. Material moves by a "Material Transfer for Manufacture" Stock Entry and finished goods come in by a "Manufacture" Stock Entry. A Production Plan pulls Sales Orders or Material Requests, creates Work Orders and Material Requests, and handles sub-assemblies in-house or by subcontracting; its documentation does not describe capacity planning.
What an operation time means in a garment factory
SMV (standard minute value) is the time a trained operator needs for one operation at a normal pace, including allowances. A polo has 15 to 25 sewing operations. You can list each one as an ERPNext Operation, or group them into a few operations per department. Every operation on the BOM becomes a Job Card on every Work Order, so the grouping decision is also a decision about how many records the floor must close.
| Question | What ERPNext gives | What stays outside |
|---|---|---|
| How much labour is in one polo? | Operation time × workstation hour rate | The minute study itself |
| How many polos can line 3 sew this week? | Working hours and production capacity on the Workstation | Line balancing across 25 operators, absenteeism, learning curves |
| Where is bundle 214? | The Job Card's status | Bundle tracking and operator output |
| Which line takes which order in week 47? | Planned start dates on Work Orders | Seasonal line loading across lines and subcontractors |
Operations, workstation cost and the job-card count
The 18 minutes in Example 1 are the sum of these operations, grouped into three ERPNext Operations on three Workstations.
| Workstation | Operation detail | Minutes |
|---|---|---|
| Cutting | Spread, cut, number and bundle | 1.20 |
| Sewing line | Shoulder join 0.90 · placket 3.10 · collar attach 2.20 · sleeve attach 1.80 · side seam and sleeve close 1.60 · cuff attach 1.40 · bottom hem 1.00 · buttonholes and buttons 1.50 | 13.50 |
| Finishing | Thread trim and inspection 1.20 · press 1.00 · fold, tag and bag 1.10 | 3.30 |
| Total | 18.00 |
Operating cost per polo = 18 ÷ 60 × 4.20 = USD 1.26
Order: 3,000 × 18 = 54,000 min = 900 h × 4.20 = USD 3,780.00
Line capacity: 25 operators × 480 min × 60% efficiency = 7,200 min a day
7,200 ÷ 13.50 sewing minutes = 533 polos a day → 3,000 ÷ 533.3 = 5.6 line-days
Now count the records. One Work Order per size variant and three operations give 5 × 3 = 15 Job Cards. Split the Work Orders by dye lot as well, following Example 9 (seven size-lot groups), and it is 7 × 3 = 21. List all twelve operations separately and it is 5 × 12 = 60 per order, or 84 split by lot. GitHub issue #41950 describes the same arithmetic for a shirt in 2 colours and 4 sizes with 3 operations: 8 Work Orders, 8 BOMs and 24 Job Cards. It is an open feature request. Group operations per department, or capture floor output somewhere built for it.
With operations on top: the planning heat-map (lines and subcontractors, 52 weeks), production orders with job cards per department and the WIP board run in the operations layer. ERPNext receives material issues for stock value and does not need Work Orders or Job Cards at all.
16Where do sampling, approvals and the T&A calendar live in an ERPNext project?
ERPNext has no DocType for garment samples, buyer approvals or a T&A calendar, so an ERPNext project must build them as custom DocTypes, borrow Projects and Tasks, or keep them in an operations system. Before a single bulk garment is cut, the buyer approves the product in stages. Each stage can take several rounds, and each approval unlocks the next step of the order. Miss one, and the factory is ordering fabric or cutting on a spec the buyer has not agreed.
A PP (pre-production) sample is a garment made in the actual bulk fabric and trims, which the buyer approves as the reference that bulk production must match. A T&A (time and action) calendar is the list of an order's milestones, each with a planned date worked back from the ex-factory date, an actual date and an owner.
| Sample or approval | What it decides | What waits for it |
|---|---|---|
| Proto / development sample | The look and the construction | Costing and the quote |
| Lab dip | The shade, within tolerance under the buyer's light source | Bulk fabric dyeing |
| Strike-off | Print or embroidery artwork, colours and placement | Bulk printing or embroidery |
| Trims approval | Buttons, zips, labels and hangtags | The bulk trims order |
| Fit sample | Measurements and fit on the buyer's model | Pattern correction |
| Size set | Grading across every size | The production marker |
| PP (pre-production) sample | The reference bulk must match | Cutting |
| TOP (top of production) | That the first bulk pieces match the PP sample | The rest of the run |
| Shipment sample | The reference for any claim after delivery | Shipping |
Every round has a sent date, a courier and tracking number, the pieces sent, the buyer's comments and a verdict: approved, approved with comments, or rejected. The T&A calendar hangs on these dates.
Frappe makes custom DocTypes cheap to create, which is both the attraction and the risk. A "Sample Request" DocType with a child table of rounds takes an afternoon; the links that make it useful (the approved round fixing the spec version, cutting blocked until the PP sample is approved, T&A dates filled from the rounds) are real development work, and they must be carried through every upgrade.
What a custom sampling app must hold
If the project builds sampling inside ERPNext, the app needs a small set of records that link to the style and the order. The list below is the minimum we would design.
- A sample request per style and colourway, with its type (lab dip, strike-off, fit, size set, PP, TOP, shipment).
- Rounds under each request: sent date, courier, tracking number, pieces sent, buyer comments, verdict, verdict date, who recorded it.
- A link from the approved round to the spec version it approved, so a later revision cannot silently replace it.
- A block on the next step: bulk dyeing waits for the lab dip, cutting waits for the PP sample.
- T&A milestones that take their actual dates from the rounds instead of from someone typing them.
The polo order's approval calendar, worked back from ex-factory
| Date | Milestone | If it slips |
|---|---|---|
| 1 Oct | Order confirmed | |
| 8 Oct | Lab dip round 1 sent; round 2 on 13 Oct | Bulk dyeing cannot start |
| 17 Oct | Lab dip round 3 approved | Each extra round costs about 5 days |
| 20 Oct | Bulk fabric dyeing starts | |
| 24 Oct | Embroidery strike-off approved | Embroidery cannot be booked |
| 7 Nov | PP sample sent in bulk fabric | |
| 10 Nov | Bulk fabric in-house | Cutting waits |
| 14 Nov | PP sample approved, with comments | Cutting cannot start |
| 17 Nov | Cutting starts | |
| 20 Nov to 10 Dec | Sewing; TOP sample from the first bulk pieces | |
| 12 Dec | Final AQL inspection | Shipment held |
| 15 Dec | Ex-factory |
Three lab dip rounds instead of two pushed dyeing back five days, and the order absorbed it only because cutting had slack before the PP approval. In ERPNext Projects this is a project per order with tasks and dependencies, but the tasks do not know that a lab dip round was rejected. That is the kind of question a merchandiser answers every morning, and it needs approvals, dates and dependencies in one place.
With operations on top: dev approvals (lab dip, strike-off, sample, shipping mark) with rounds, courier details and the buyer's verdict, the T&A calendar with its critical path, and the PP approval that locks the style version for the order all live in the operations layer. ERPNext needs none of it.
17How does ERPNext subcontracting work for CMT, washing, printing and embroidery?
ERPNext has two subcontracting flows: outward, where the factory sends its own material to a processor and buys the service (Purchase Order, Subcontracting Order, Subcontracting Receipt), and from version 16 inward, where a buyer sends its material and the factory makes goods for it (Subcontracted Sales Order, Subcontracting Inward Order). Both fit one outside step well and a chain of processors less well.
CMT (cut, make, trim) means the factory sews garments from fabric the buyer supplies and charges only for the labour; in subcontracting, the same term describes a factory that sends cut panels to another unit to be sewn. Job work is the South Asian term for the same arrangement.
Outward subcontracting, step by step
Frappe describes the outward flow from version 14 onward as follows.
- Create the raw-material Items, the finished good the processor returns, and a non-stock service Item for the processor's charge. Items the processor buys itself are marked as sourced by the supplier.
- Make a BOM for the finished good that lists what you send; add no operations, because the processor does the work.
- Raise a Purchase Order for the service Item with "Is Subcontracted" ticked, the finished good selected and a supplier warehouse set. The rate is the service price.
- Create a Subcontracting Order from the submitted Purchase Order. It tracks what you supply and what is consumed.
- Send the materials with a Stock Entry of type "Send to Subcontractor", created from the Subcontracting Order.
- Receive the finished goods with a Subcontracting Receipt, which can carry additional costs and backflushes the materials sent.
- Close the Purchase Order with a Purchase Receipt (no stock or accounting effect) and book the processor's Purchase Invoice.
Version 16 adds stock reservation on Subcontracting Orders, lets a Landed Cost Voucher add freight and handling to a Subcontracting Receipt, and lets a Job Card create a subcontracting Purchase Order for one operation. The template-BOM gap for subcontracted variants is covered in section 14.
Inward subcontracting: the CMT factory's flow (version 16)
Version 16's Subcontracting Inward is the closest ERPNext comes to a native CMT flow. Per Frappe's documentation: each customer has its own warehouse, linked to the customer; customer-provided Items have the customer set and "Allow Purchase" off; the finished good's BOM must contain at least one customer-provided Item and a Subcontracting BOM links the service Item to it. The flow runs from a Sales Order with "Is Subcontracted", to a Subcontracting Inward Order, to receiving the customer's material ("Receive ‣ Raw Material from Customer"), to Work Orders, to "Create ‣ Subcontracting Delivery", with returns of unused material and a Sales Invoice for the service. The material is received at zero value; stock reservation is always used; batches move through the Serial and Batch Bundle. The documentation lists what it does not support: alternative items in Work Orders, inventory dimensions, continuous raw-material consumption and disassembly orders.
Garments often visit several processors: cut panels to a printer, then to a sewing unit, then to a wash. Each step becomes its own intermediate Item, BOM and Subcontracting Order, or custom work. Modelled as one step, the factory loses sight of where its goods are between processors.
Chest embroidery as an outward subcontract, document by document
The polo's chest logo is embroidered outside. The factory sends cut fronts with a 1% allowance; the embroiderer supplies its own thread. The service price is illustrative.
| Step | ERPNext document | Content |
|---|---|---|
| 1 | Items | P2041-FRONT-NVY (cut front, stock), P2041-FRONT-EMB-NVY (embroidered front, stock), SVC-EMB-CHEST (service, non-stock) |
| 2 | BOM for the embroidered front | 1 cut front per piece; no operations |
| 3 | Purchase Order, "Is Subcontracted" | 3,000 × SVC-EMB-CHEST at USD 0.18 = USD 540.00; finished good P2041-FRONT-EMB-NVY |
| 4 | Subcontracting Order | Supplied item: 3,000 cut fronts required |
| 5 | Stock Entry, Send to Subcontractor | 3,030 cut fronts to the embroiderer's warehouse |
| 6 | Subcontracting Receipt | 3,000 good embroidered fronts accepted; 26 rejects recorded with a reason |
| 7 | Return entry | 4 unused cut fronts back from the embroiderer |
| 8 | Purchase Receipt, then Purchase Invoice | Closes the PO; invoice USD 540.00 for 3,000 good pieces |
Allowance 1% of 3,000 = 30; rejects 26 ≤ 30, inside the allowance
Whether you can send 30 more than the BOM requires, and how the 26 rejects are held (rejected quantity and warehouse on the receipt, or scrap), depends on your version and settings; test both. If the embroiderer returned 3,004 good fronts instead, receiving 4 over the order needs an over-receipt allowance. Printed-then-washed garments would need two such chains with an intermediate Item between them.
Subcontractor tracking a factory expects
A factory expects to see, per processor, what went out, what came back, what was lost and whether the loss is inside the agreed allowance. The Subcontracting Order shows supplied and consumed quantities; the allowance, the reject reasons and the balance per buyer order are design work or a report to build.
With operations on top: subcontract steps sit on the production order in the operations layer, and subcontractors appear on the planning heat-map beside the factory's own lines. ERPNext receives the subcontractor's Purchase Order and the payable.
18How do you cost a garment in ERPNext, and where does the garment costing sheet live?
ERPNext values stock by FIFO, moving average or LIFO per Item, costs a manufactured garment from the materials and operating cost of its Work Order, and adds freight and duty to receipts with a Landed Cost Voucher; the garment costing sheet used to quote a buyer is built before any Item exists and usually lives outside ERPNext. A garment costing sheet lists fabric, trims, making, washing, testing, freight, finance cost and margin per piece, and adds up to the price quoted to the buyer.
- Valuation is FIFO, Moving Average or LIFO per Item, fixed once the Item is saved. There is no standard-cost method; the BOM's cost can be refreshed with "Update Cost" and compared with the Work Order's actuals in reports.
- Operating cost comes from operation times and workstation hour rates, as in Example 11.
- Landed cost is added to Purchase Receipts and to Purchase Invoices that update stock with a Landed Cost Voucher; version 16 adds Manufacture stock entries and Subcontracting Receipts.
- Multi-currency, advances and exchange revaluation are native (section 21).
Pre-costing a style for a quote (fabric, trims, CM, washing, testing, freight, finance cost, commission, margin) is done before an ERPNext Item exists, so it tends to live outside ERPNext.
A quotation cost build for the polo (illustrative figures, USD per piece)
| Line | How it is worked out | USD |
|---|---|---|
| Body fabric | 0.31 kg at 4.20 per kg, plus 6% cutting loss | 1.38 |
| Collar and cuffs | 1 set | 0.25 |
| Trims | Buttons, thread, labels, polybag | 0.32 |
| Embroidery | Subcontractor price per logo | 0.18 |
| CM (cut and make) | 18 minutes at 0.07 per minute | 1.26 |
| Testing | Buyer's lab tests spread over the order | 0.10 |
| Factory overhead | 12% of CM | 0.15 |
| Freight to port and export documents | 0.12 | |
| Finance cost | 3% while waiting for payment | 0.11 |
| Margin | 10% | 0.39 |
| FOB price | 4.26 |
Fabric: 0.31 × 4.20 × 1.06 = 1.380 · overhead: 1.26 × 12% = 0.151
Every line except the last is an estimate made before the order exists. After production, the same lines come back as actuals: the real fabric used, the real minutes from the floor, the real embroidery rejects. The factory learns whether the order made money only if the quote and the actuals sit side by side.
How do you set up a Landed Cost Voucher for imported fabric and customs duties?
Create a Landed Cost Voucher (Home ‣ Stock ‣ Tools ‣ Landed Cost Voucher), select the fabric's Purchase Receipts or stock-updating Purchase Invoices, fetch their items, enter each charge with its expense account in the Taxes and Charges table, and choose how to distribute: by Quantity or by Amount. A landed cost is any cost of bringing goods to the factory beyond the supplier's price: freight, insurance, customs duty, clearing and bank charges. The charges flow into the items' valuation rate.
Frappe's documentation lists two distribution keys, Quantity and Amount; it does not list weight or volume. You can delete items from the voucher when a charge does not apply to them, and you can link the vendor invoices so the landed cost must match their total. Those two facts give the workaround for freight by weight: split the freight by weight yourself and post it on one voucher per item.
For a factory in a free zone or under temporary admission, duty may be zero or suspended, and the rules for what must be reported are local. Agree them with the customs broker and finance before configuring.
One Landed Cost Voucher, three ways to split it
The polo's navy jersey and its rib collars and cuffs arrive on one Purchase Receipt. Duty is zero because the factory imports under temporary admission. All prices are illustrative.
| Receipt line | Quantity | Weight (kg) | Amount (USD) |
|---|---|---|---|
| Navy jersey 180 GSM | 925 Kg | 925.0 | 3,885.00 |
| Rib collar and cuff sets | 3,060 Set | 76.5 | 765.00 |
| Total | 1,001.5 | 4,650.00 |
Charges: sea freight 420.00, clearing and port 180.00, LC bank charges 95.00, total 695.00.
| Method | To jersey | To rib sets | Jersey per kg | Rib per set |
|---|---|---|---|---|
| A. One voucher, distributed by Quantity | 161.32 | 533.68 | 4.37 | 0.42 |
| B. One voucher, distributed by Amount | 580.66 | 114.34 | 4.83 | 0.29 |
| C. Freight by weight on two vouchers, the rest by Amount | 617.68 | 77.32 | 4.87 | 0.28 |
jersey (3,885.00 + 161.32) ÷ 925 = 4.37 · rib (765.00 + 533.68) ÷ 3,060 = 0.42
B: jersey share = 3,885 ÷ 4,650 = 83.55% → 695 × 0.8355 = 580.66
jersey 4,465.66 ÷ 925 = 4.83 · rib 879.34 ÷ 3,060 = 0.29
C: freight to jersey = 420 × 925 ÷ 1,001.5 = 387.92 (voucher 1, jersey row only) · to rib = 32.08 (voucher 2, rib row only)
clearing 180 × 0.8355 = 150.39 · bank 95 × 0.8355 = 79.37 (voucher 3, by Amount)
jersey 3,885.00 + 387.92 + 150.39 + 79.37 = 4,502.68 → 4.87 per kg · rib 765.00 + 77.32 = 842.32 → 0.28 per set
Method A is the trap: "Quantity" adds kilograms to sets as if they were the same unit, so the rib sets carry three quarters of the charges. Method B is acceptable for value-based charges. Method C matches how freight is actually billed. The fabric line in Example 14 was priced at the mill price of USD 4.20 a kg; at the landed USD 4.87 the same line becomes 0.31 × 4.87 × 1.06 = USD 1.60, which is 0.22 more per polo and USD 660 on the order. The 10% margin of 0.39 would shrink to 0.17. Quote on landed material cost, not on the supplier's price.
With operations on top: the cost engine (fabric, trims, decoration, CMT, overhead, margin to FOB, with landed cost and dated exchange rates), the standard cost sheet and quotations with approval thresholds run in the operations layer. ERPNext holds the landed cost that actually hit the receipts, for stock value.
19Can ERPNext run quality control and AQL inspection for garments?
ERPNext's Quality Inspection, included in every install, records Incoming, Outgoing and In Process inspections against receipts, deliveries, stock entries and Job Cards, with templates, readings and a sample size field, but it does not contain ISO 2859-1 sampling tables, so AQL inspection needs custom work or a separate system. AQL (acceptance quality limit) inspection checks a random sample drawn from a lot and accepts or rejects the whole lot according to how many defects the sample contains.
Per Frappe's documentation, a Quality Inspection names its type, its reference document (Purchase Receipt, Purchase Invoice, Delivery Note, Sales Invoice, Stock Entry or Job Card, and Subcontracting Receipt), the Item and the sample size. A Quality Inspection Template predefines the parameters. Each reading is judged against a minimum and maximum value, an acceptance-criteria value for non-numeric checks, or a formula such as (reading_1 + reading_2) < 10, and the status is set to Accepted or Rejected from it. Ticking "Inspection Required before Purchase" or "before Delivery" on an Item means the receipt or delivery can be submitted only after an inspection exists. A BOM can also require an inspection and name a template.
Quality control at cutting, stitching, dyeing and printing
A garment factory inspects at each stage where a defect is cheaper to catch than at the end. Dyeing and printing usually happen at a dye house or printer outside the factory, so those checks land on the receipt of the goods coming back.
| Inspection | When | What it checks | ERPNext fit |
|---|---|---|---|
| Incoming fabric | At receipt from the mill or dye house | Shade against the shade band, GSM, width, shrinkage, four-point defects | Incoming inspection on the Purchase Receipt; numeric readings for GSM and width; four-point scoring needs design |
| Incoming trims | At receipt | Colour, size, count against the approved trims card | Incoming inspection with an acceptance-criteria template |
| Printed or embroidered panels | On return from the processor | Placement, registration, colour against the strike-off | Inspection on the Subcontracting Receipt |
| Cutting | After cutting, before bundling | Pattern accuracy, notches, shade within the bundle | In Process inspection against the cutting Job Card |
| Inline (stitching) | During sewing | Operation-level defects, found early | In Process inspection against the sewing Job Card; operator-level capture is limited |
| End of line | As garments leave the line | Every garment, graded pass, repair or reject | Limited; grading is custom |
| Measurement | End of line and final | Points of measure against tolerance per size | Min and max readings per parameter; one template per size, or custom |
| DUPRO | Once a share of the order is packed | Early warning before final | Custom |
| Final AQL | When the order is packed | Sample per ISO 2859-1 at the buyer's level | Outgoing inspection on the Delivery Note; the sample size and acceptance numbers must come from custom logic |
The sample size field is a number a person types. Under ISO 2859-1 the sample size comes from the lot-size band and the inspection level, and the lot is accepted or rejected against fixed acceptance numbers per AQL. A small custom app or Server Script can fill both from a table; without it, the field holds whatever the inspector remembers.
The final inspection sample for 3,000 polos
The buyer's quality manual asks for ISO 2859-1, single sampling, normal inspection, general inspection level II, AQL 2.5 for major defects and 4.0 for minor defects.
| Step | Lookup | Result |
|---|---|---|
| Lot size | 3,000 pieces falls in the band 1,201 to 3,200 | Band 1,201–3,200 |
| Code letter | That band at general level II | K |
| Sample size | Code letter K | 125 pieces |
| Major defects, AQL 2.5 | Sample of 125 | Accept at 7 or fewer, reject at 8 |
| Minor defects, AQL 4.0 | Sample of 125 | Accept at 10 or fewer, reject at 11 |
In ERPNext, the Outgoing Quality Inspection on the Delivery Note would carry Sample Size 125 and two readings, major and minor defect counts, with a formula such as reading_1 <= 7 for majors. If the inspector finds 8 major defects, the lot fails even if minor defects are well inside their limit. What happens next (re-inspection after 100% checking, or a release decided by the buyer) must be recorded with the person who decided. Many buyers also accept zero critical defects; take that from the buyer's manual.
Acceptance numbers as published in ISO 2859-1 Table II-A, reproduced in common AQL references (see sources). The reading and formula names above follow Frappe's documented pattern; check field names on your version.
With operations on top: typed inspections (incoming, cutting, PP, DUPRO, final AQL, pre-shipment, measurement), the AQL engine on ISO 2859-1 at the buyer's level, CAPA, needle and metal control and quality grades (only first-quality pieces count as shippable) run in the operations layer. ERPNext sees the delivery only once it is cleared.
20How do you handle cartons, packing lists and shipping documents in ERPNext?
ERPNext records cartons with Packing Slips made from a draft Delivery Note, each covering a range of case numbers with the items, quantities, batches and weights inside, but assorted cartons, buyer carton labels and SSCC numbers usually need custom work. A Packing Slip, per Frappe's documentation, lists the items in a shipment; several can be made from one Delivery Note, with From and To package numbers, net and gross weight, and a batch selected for batched items (Home ‣ Stock ‣ Tools ‣ Packing Slip).
Documents a garment shipment needs
An export shipment of garments carries a standard set of documents, and a letter of credit may require each to match exactly.
| Document | Built from | ERPNext fit |
|---|---|---|
| Packing list by carton | Carton number, size and colour content, lot, weights, dimensions | Packing Slips give the content; the buyer's layout is a custom print format |
| Carton labels | Buyer's label rules, often with an SSCC barcode | Custom print format and numbering |
| Commercial invoice | The Sales Invoice with incoterm, marks and numbers | Sales Invoice with a custom export print format |
| Certificate of origin | Issued by a chamber or authority | Outside ERPNext; attach the copy |
| Advance shipping notice (ASN) | Carton-level content sent to the buyer before arrival | EDI connector or portal upload |
| Bill of lading or air waybill | Issued by the carrier or forwarder | Outside ERPNext; attach the copy |
Packing 3,000 polos into cartons with Packing Slips
The buyer wants solid-size cartons of 10 pieces. Following the cut plan in Example 9, each carton must hold a single dye lot, so each size-lot group gets its own case range, and a part carton gets its own Packing Slip because its quantity differs.
| Size and batch | Pieces | Full cartons | Part carton | Case numbers | Packing Slips |
|---|---|---|---|---|---|
| S, lot A | 87 | 8 | 1 of 7 | 1–9 | 2 |
| S, lot B | 213 | 21 | 1 of 3 | 10–31 | 2 |
| M, lot A | 23 | 2 | 1 of 3 | 32–34 | 2 |
| M, lot C | 727 | 72 | 1 of 7 | 35–107 | 2 |
| L, lot B | 900 | 90 | none | 108–197 | 1 |
| XL, lot A | 750 | 75 | none | 198–272 | 1 |
| XXL, lot A | 300 | 30 | none | 273–302 | 1 |
| Total | 3,000 | 298 | 4 (20 pieces) | 1–302 | 11 |
298 full cartons hold 2,980 pieces and four part cartons hold the other 20, so the shipment is 302 cartons instead of the 300 a size-only plan predicts. The buyer must accept part cartons, or accept mixing lots in them. Agree it before packing starts, and make sure the packing list shows the batch per carton range.
With operations on top: shipments per delivery, packing and cartonisation, and ship clearance against the buyer's terms run in the operations layer. ERPNext receives the dispatch as a Delivery Note and raises the Sales Invoice.
21How does ERPNext handle multi-currency, letters of credit, advances and chargebacks?
ERPNext Accounting handles foreign currencies, exchange gains and losses, period-end revaluation and advances as standard; letters of credit and reason-coded chargebacks need design, because ERPNext has no letter-of-credit DocType. Garment exporters usually sell in USD or EUR, buy some materials abroad and pay wages locally, so every order touches at least two currencies.
Multi-currency and exchange differences
Parties and accounts can carry their own currency, and a payment that settles an invoice at a different rate produces an exchange gain or loss. For balances still open at period end, Exchange Rate Revaluation (Accounting ‣ Multi Currency ‣ Exchange Rate Revaluation) recalculates the company-currency value of foreign-currency balance-sheet accounts and creates the journal entries for the unrealised gain or loss.
Advances
An advance in ERPNext is a Payment Entry received from the customer and linked to the Sales Order; it is later allocated to the Sales Invoice through the invoice's payment workflow or Payment Reconciliation. Your version may also offer booking advances in a separate party account; check it with finance.
Letters of credit
A letter of credit is a bank's promise to pay the exporter when documents that match the credit's terms are presented. Under ICC's UCP 600 rules, which most credits follow, documents must be presented within 21 calendar days after the shipment date unless the credit says otherwise, and never after the credit expires. ERPNext has no LC DocType: the credit number, amount, latest shipment date, expiry, presentation period and required documents need a custom DocType, and a check before shipment that the documents will match.
Advance, letter of credit and exchange difference
The polo order is worth 3,000 × USD 4.26 = USD 12,780.00. The buyer pays 30% in advance by transfer and the balance under a sight letter of credit. The factory's books are in EGP. Exchange rates are illustrative.
| Step | In ERPNext | USD | EGP |
|---|---|---|---|
| Order confirmed, 1 Oct | Sales Order, 5 variant lines, 3,000 polos at 4.26 | 12,780.00 | |
| Advance received | Payment Entry (Receive) linked to the Sales Order, 30% | 3,834.00 | |
| Shipment, 15 Dec | Sales Invoice for 12,780.00; the advance is allocated | 8,946.00 outstanding | at 48.80 = 436,564.80 |
| LC documents presented | Custom LC record: presentation within 21 days of shipment | ||
| LC paid | Payment Entry against the Sales Invoice | 8,946.00 | at 49.10 = 439,248.60 |
| Exchange difference | Posted to the company's exchange gain/loss account | 2,683.80 |
Balance = 12,780.00 − 3,834.00 = 8,946.00
Gain = 8,946.00 × (49.10 − 48.80) = 8,946.00 × 0.30 = EGP 2,683.80
The advance carries its own rate difference between 1 October and the invoice date; it is left out here to keep the arithmetic readable. If the balance were still unpaid at 31 December, Exchange Rate Revaluation would restate it at the month-end rate. The bank's negotiation charges are a separate expense entry. What ERPNext does not do as standard is warn the shipping team that the credit expires or that the latest shipment date is close; that is the custom part.
Chargebacks
A chargeback is an amount a buyer deducts from a payment for a claimed failure: a late shipment, a wrong carton label, a missing or wrong advance shipping notice. It arrives as a short payment. Record the shortfall on the Payment Entry's deductions against a chargeback account per reason, and keep the buyer's deduction notice attached. Without reason codes, nobody can tell whether the factory loses money to labels or to lateness.
A chargeback on an open-account shipment
Suppose the same balance of USD 8,946.00 were shipped to a retailer on open account instead of against a letter of credit. The retailer pays short.
| Deduction | Reason given | USD |
|---|---|---|
| Carton label error | 2 cartons with wrong size label, 50 per carton | 100.00 |
| Late ASN | 1% of the invoice | 89.46 |
| Total deducted | 189.46 |
Received = 8,946.00 − 189.46 = 8,756.54
In ERPNext, the Payment Entry records 8,756.54 received and allocates 8,946.00 to the invoice, with two deduction rows: "Chargebacks: labelling" 100.00 and "Chargebacks: ASN" 89.46. If the factory disputes the label claim with carton photos, leave 100.00 outstanding on the invoice instead, under dispute, rather than deducting it.
With operations on top: finance stays in ERPNext in full. The operations layer sends the orders, deliveries and purchase requests that the invoices and payables are built on; no money amounts travel through its ERP API.
22Does ERPNext support e-invoicing and localisation for garment exporting countries?
ERPNext handles localisation through country apps installed beside it, some built by Frappe's community or partners and some sold on the Frappe Cloud Marketplace; check which app covers your country, who maintains it and whether it supports your ERPNext version before assuming compliance. E-invoicing rules change often, so treat any statement older than the current tax year with care.
India
The India Compliance app, maintained by Resilient Tech on GitHub, builds on ERPNext and Frappe and covers GST, e-invoice and e-waybill integration with the government portal (IRP), GSTIN validation and GST returns reporting. Its issue tracker already discusses version 16 flows such as e-waybills for Subcontracting Inward. Confirm the app's version against your ERPNext release.
Egypt
We found no Frappe-maintained integration with the Egyptian Tax Authority (ETA) e-invoicing system. Several ERPNext GitHub issues request one. Third-party apps for ETA e-invoicing and e-receipts are listed on the Frappe Cloud Marketplace; we have not evaluated them. Test any of them end to end, with the ETA's own SDK documentation, before relying on it.
Other garment-exporting countries
Turkey, Pakistan, Bangladesh, Vietnam, Morocco, Tunisia and others each have their own invoicing, VAT and export-incentive rules. We have not verified ERPNext's coverage for them in this guide. Search the Frappe Cloud Marketplace and GitHub for a maintained app, ask the partner which statutory reports they have delivered before, and test an e-invoice end to end in staging before go-live.
Factories in free zones or under temporary admission often report the import and re-export of materials to customs. ERPNext's stock ledger carries the quantities, and the batch traceability report in version 16 helps, but the report format is local and usually custom.
Part 4Build
23In what order should you configure ERPNext for a garment factory?
Configure ERPNext for a garment factory from the ledger outward: company, chart of accounts, currencies and taxes first, then units, attributes and batch settings, then Item Groups and warehouses, then manufacturing, subcontracting and quality settings, and only then the Items, BOMs and open documents. Each step depends on the one before it; loading Items before units, attributes and valuation methods are final means reloading them, and an Item's valuation method cannot be changed once it is saved.
The table names the ERPNext record or settings page for each step. Full menu paths are given only where Frappe's documentation states them; the desk's search bar opens any settings page by name.
| # | Configure | Where | Why at this point |
|---|---|---|---|
| 1 | Site, ERPNext version and the apps to install (country compliance app, custom apps) | Frappe Cloud dashboard or bench | Apps add DocTypes and fields that later steps use |
| 2 | Company, chart of accounts, fiscal year, taxes | Setup wizard, Company, Chart of Accounts | Every later document posts to these accounts |
| 3 | Currencies, exchange rates, exchange gain/loss and unrealised accounts on the Company | Currency Exchange, Company | Foreign-currency suppliers and buyers need them before the first document |
| 4 | Units of measure and "Must be Whole Number"; UOM Conversion Factors | UOM, UOM Conversion Factor | Items carry their units from creation |
| 5 | Item Attributes and their values and abbreviations | Item Attribute | Variant codes are built from the abbreviations |
| 6 | Fields copied from templates to variants | Home ‣ Stock ‣ Items and Pricing ‣ Item Variant Settings | Before the first variant exists |
| 7 | Batch and serial settings, default valuation method, batch picking | Stock Settings ("Enable Serial and Batch No for Item", "Pick Serial / Batch Based On") | Fabric Items must be created with batches on |
| 8 | Custom fields on Batch, Item and Sales Order (shade group, GSM, width, buyer style number) | Home ‣ Customization ‣ Form Customization ‣ Customize Form | Before data is imported into them |
| 9 | Item Groups | Item Group tree | Defaults and reports hang on the group |
| 10 | Warehouses: stores, cutting WIP, sewing WIP, finished goods, rejected, one per subcontractor and one per CMT customer | Warehouse tree | Work Orders, subcontracting and inward CMT all name warehouses |
| 11 | Buying and Selling settings, over-delivery and over-receipt allowances | Buying Settings, Selling Settings, Stock Settings | They decide what a receipt or delivery may exceed |
| 12 | Workstations, Operations and Routings | Workstation, Operation, Routing | BOMs with operations need them |
| 13 | Manufacturing settings: overproduction, backflush basis, material transfer | Manufacturing Settings | Before the first Work Order |
| 14 | Quality Inspection Templates; inspection flags on Items and BOMs | Quality Inspection Template | Templates reference parameters that must exist |
| 15 | Webhooks and the integration user with API keys | Integrations ‣ Webhook ‣ Webhook; User ‣ Settings ‣ API Access | Before any system starts reading or writing |
| 16 | Master data: suppliers, customers, materials, style templates and variants, BOMs | Data Import | Last, so every record lands on final settings |
Two Item-level switches complete the setup. A fabric needs "Has Batch No" and the right valuation method at creation; a subcontracted finished good needs the setting that lets it be supplied through a subcontracting Purchase Order. Both are easier to set in the import file than by hand.
24Which custom apps does an ERPNext apparel implementation usually need?
An apparel ERPNext implementation that keeps operations inside ERPNext usually needs one custom Frappe app holding between a handful and a dozen features: fabric units per batch, cut control, BOM generation per variant, grid order entry, ratio packs, sampling, AQL, letters of credit and buyer documents. The list below is from implementation practice; the names are descriptive, not real packages. Search the Frappe Cloud Marketplace and GitHub for maintained apps before writing your own, and check each one against your version.
A Frappe app is a Python package, created with the bench tool, that adds DocTypes, fields, scripts, reports and print formats to a site and is installed per site. Keeping every customisation in one app in Git, instead of in the database through the desk, is what makes an upgrade repeatable.
| Feature | Purpose | Fit-gap lines | Needed with operations on top? |
|---|---|---|---|
| Fabric units per batch | kg-to-metre conversion from measured GSM and width on the Batch | 20, 21 | No; the conversion happens in the operations layer |
| Variant BOM generator | Creates and submits a BOM per variant from a consumption table | 12, 13 | No |
| Cut control | Refuses mixed dye lots on one Work Order issue; cut orders and bundles | 23, 30, 31 | No |
| Grid order entry | A colour by size entry screen that writes Sales Order lines | 41 | No; orders are entered in the operations layer |
| Ratio packs and cartons | Assorted cartons, pack-level packing lists, carton labels | 5, 44, 46 | No for packing; buyer label printing may still sit in ERPNext if the dispatch is printed there |
| Sampling and approvals | Sample requests, rounds, verdicts, T&A links | 10, 36 | No |
| Chained subcontracting | Balance per processor, loss allowance, reject reasons | 34 | No |
| AQL inspection | ISO 2859-1 sample sizes and acceptance numbers filled into Quality Inspection, logged overrides | 38, 39 | No |
| Quantity tolerance | Under-shipment check and a named approval before closing a short order | 43 | No; ship clearance happens in the operations layer |
| Letters of credit | LC terms, dates, document checklist, expiry warnings | 48 | Yes; LC is a finance record |
| Chargeback reasons | Reason codes on deductions, dispute status | 50 | Yes |
| EDI connector | 850, 855, 856, 810 with each retailer | 45 | Depends on which system the buyer's EDI must reach |
| Export documents | Commercial invoice and packing-list print formats per buyer | 44 | Yes for the invoice |
| Local statutory reports | Free-zone or temporary-admission reports, local tax | 52 | Yes |
Every feature in the table is code someone must port at each major ERPNext version. That is the real cost of keeping operations inside ERPNext, and it recurs.
25Should you use Customize Form, Server Scripts or a custom app for apparel changes?
Use Customize Form for fields and layout, Server Scripts only for small rules on a private bench, and a version-controlled custom app for business logic such as unit conversion, BOM generation, cut control and AQL. Customize Form (Home ‣ Customization ‣ Form Customization ‣ Customize Form) changes a DocType's form from the desk and adds Custom Fields without code. A Server Script runs Python on document events or as an API method, under RestrictedPython, and must be switched on with server_script_enabled; Frappe's documentation says Server Scripts are not available on public shared benches on Frappe Cloud.
| Change | Customize Form | Server Script | Custom app |
|---|---|---|---|
| Add "buyer style number" to Item and Sales Order | Yes | No | Either |
| Add GSM, width and shade group to Batch | Yes | No | Either |
| Convert kg to metres per batch at issue | No | Possible for a simple rule | Yes |
| Generate variant BOMs from a table | No | No | Yes |
| Refuse mixed dye lots on a Work Order issue | No | Yes, as a validation | Yes, to keep it in Git |
| Send an event when a Purchase Order is submitted | No | Possible | Either; a Webhook record needs no code |
| AQL sample size and verdict | No | Possible | Yes |
From practice: customisations made through the desk live in the database, not in code review. Export them into the custom app (Frappe apps can carry them as fixtures), keep a register of every change with its owner and reason, and move anything that holds logic out of Server Scripts once it grows past a few lines.
26Which systems does an ERPNext apparel implementation integrate with?
An ERPNext apparel implementation typically connects to a PLM or tech-pack system, a shop-floor system, EDI with retailers, banks, a tax authority through a country app, and an operations layer; each connection needs one owner per field and links stored on permanent identifiers. The table shows the usual source of truth for each kind of record, based on general practice.
| Record | Source of truth | Goes to ERPNext as |
|---|---|---|
| Style, spec, points of measure, revisions | PLM or operations layer | The finished-goods Item, once released |
| Pre-cost and quote | Operations layer | Nothing, or a price once the order is confirmed |
| Buyer order | Operations layer, or EDI into the ERP | The Sales Order |
| Material requirements | Operations layer | Purchase requests that become ERPNext Purchase Orders |
| Receipts, stock, batches | ERPNext, with measurements from the operations layer | Purchase Receipts and Stock Entries |
| Cut, bundle, WIP, operator output | Shop-floor system or operations layer | Material issues, summarised |
| Quality results | Operations layer or quality system | Only the clearance to ship |
| Shipment, invoice | ERPNext for the invoice; operations layer for the shipment | Delivery Note and Sales Invoice |
| Payments, LC, chargebacks | ERPNext | Native |
Rules for every connection
Four rules prevent most integration faults. They apply whether the other side is a PLM, a floor system or an operations layer.
- Link on the document's
name, ERPNext's primary key, and watch for amendments, which create a new name (section 34). Never link on a description or a title a user can edit. - One writer per field. If two systems can change the same quantity, one of them is wrong without knowing it.
- Show disagreements to a person. When the other system says something different, put it on a review list; never overwrite silently.
- Make receivers safe to call twice, so a retried message does not create a second Purchase Order.
ERPNext exposes every DocType through its REST API with no extra licence, so an API integration needs only a user with the right roles and an API key. Section 34 covers the details.
Part 5Data migration
27How do you migrate apparel data into ERPNext?
Migrate only open and active apparel data into ERPNext (active styles and their variants, open orders, open purchase orders and stock by batch), load it in dependency order with the Data Import tool, and have each department head sign off the loaded figures. History stays in the old system or an archive. Data Import (Home ‣ Data, or Menu ‣ Import on any list) inserts new records or updates existing ones from CSV or Excel templates, or from a public Google Sheet, validates every row before import, can submit documents after import, and keeps an import log.
Per Frappe's documentation, updating existing records needs the exported ID column left untouched, child tables are separate rows under their parent, and large loads should go in batches of a few thousand records. The ID column is the name of each record; keep the file you imported, because it is your map from old codes to ERPNext names.
Load order
Each object depends on the ones above it. Load and check each level before starting the next.
| # | Object | Scope | Signed off by |
|---|---|---|---|
| 1 | Chart of accounts, taxes, opening balances plan | Current | Finance head |
| 2 | UOMs, Item Attributes and values | Final design | Merchandising head, stores head |
| 3 | Item Groups and warehouses | Final design | Finance head, stores head |
| 4 | Customers and suppliers | Active in the last two seasons | Merchandising head, purchasing |
| 5 | Materials (fabrics, yarns, trims, packaging) | Used in active styles or in stock | Stores head |
| 6 | Style templates, then variants | Active and carry-over only | Merchandising head |
| 7 | Workstations, Operations, BOMs (submitted) | Styles with open orders | Production manager, CAD lead |
| 8 | Opening stock by batch and warehouse | Counted at cut-off | Stores head, finance head |
| 9 | Open Purchase Orders | Undelivered quantities only | Purchasing |
| 10 | Open Sales Orders | Undelivered quantities only | Merchandising head |
| 11 | Open Work Orders or WIP | Decide: reload, or finish in the old way | Production manager |
| 12 | Open receivables and payables | Per invoice, at cut-off | Finance head |
The cut-off rule
A cut-off rule states the exact moment after which every transaction is entered in ERPNext and not in the old system. Write it as a date and time, name what happens to documents in flight (a truck at the gate, an inspection half done), and stop receiving into the old system at that moment. Stock is counted at the cut-off and loaded as it was counted, batch by batch, not as the old system said. Because batched items cannot go negative from version 15, every batch that will be issued after go-live must be in the opening stock.
Cleansing
Clean data before it is loaded, never after. The usual work in an apparel migration is listed below.
- Merge duplicate suppliers and materials ("Navy Jersey 180", "Jersey 180 NVY").
- Retire styles with no order in two seasons.
- Give every fabric one stock UOM, and every roll in stock its batch.
- Map old size labels to the new attribute values and abbreviations, one scale at a time.
- Split any "open" order line that is already partly delivered into delivered and open quantities.
Data Import rows for the open polo order
The cut-off is 18:00 on 31 October and ERPNext goes live on 1 November. The polo order is confirmed, the fabric is ordered but not yet received, and the buttons are in stock.
Variants (Item, Insert New Records; the template P2041-NVY is loaded first with "Has Variants"):
Item Code,Item Name,Variant Of,Item Group,Stock UOM,Attribute,Attribute Value P2041-NVY-S,Men's piqué polo P-2041 Navy S,P2041-NVY,Finished garments,Nos,Size,S P2041-NVY-M,Men's piqué polo P-2041 Navy M,P2041-NVY,Finished garments,Nos,Size,M P2041-NVY-L,Men's piqué polo P-2041 Navy L,P2041-NVY,Finished garments,Nos,Size,L P2041-NVY-XL,Men's piqué polo P-2041 Navy XL,P2041-NVY,Finished garments,Nos,Size,XL P2041-NVY-XXL,Men's piqué polo P-2041 Navy XXL,P2041-NVY,Finished garments,Nos,Size,XXL
Open Sales Order (one parent row, then child rows; "Submit After Import" ticked):
Customer,Delivery Date,Currency,Item Code (Items),Quantity (Items),Rate (Items) Buyer A,2026-12-15,USD,P2041-NVY-S,300,4.26 ,,,P2041-NVY-M,750,4.26 ,,,P2041-NVY-L,900,4.26 ,,,P2041-NVY-XL,750,4.26 ,,,P2041-NVY-XXL,300,4.26
Open Purchase Order and opening stock:
Open PO: navy jersey 180 GSM, 925 Kg ordered, 0 Kg received Stock: buttons 15 mm navy, 9,504 Nos, warehouse Stores, no batch
= 1,278.00 + 3,195.00 + 3,834.00 + 3,195.00 + 1,278.00 = 12,780.00 = 3,000 × 4.26
Column names here are illustrative; download the template for your version from Data Import and use its exact headers. The order total must match the confirmed buyer order to the cent, and the merchandising head signs that it does.
Sign-off
Each owner signs a one-page check of their data: record counts against the old system, totals (stock value, open order value, open payables) and five records picked at random and checked on screen. A migration with no signatures is a migration nobody owns when the first figure is wrong.
Part 6Testing
28How should you test an ERPNext apparel implementation end to end?
Test an ERPNext apparel implementation with end-to-end scenarios that follow one real order from the buyer's PO to cash, run by the factory's key users on a staging site with migrated data, each step with an expected result written down before the test starts. Testing screens one by one proves the configuration works; only end-to-end scenarios prove the business works.
The 13 scenarios below cover the flows where apparel projects usually break. Run each at least twice: once by the developer or partner to find faults, once by the key users to accept the result. Run them again on the staging site after every ERPNext upgrade, because custom apps break there first.
| # | Scenario | What it proves | Expected result, in short |
|---|---|---|---|
| T1 | FOB order to payment | The whole chain works | Sales Order, purchase, receipt, Work Orders, delivery, invoice and payment all reconcile to the order value (Example 21) |
| T2 | CMT order with buyer fabric | Consigned stock stays out of stock value | Customer fabric received and consumed with no change in stock value; the Sales Invoice carries only the service |
| T3 | Prepack order | Packs, pieces and cartons agree | Buyer orders packs, production makes pieces, the packing list shows packs per carton |
| T4 | Shade split in cutting | Dye lots are never mixed | An issue mixing two dye-lot batches is refused; leftover per batch matches the cut plan (Example 22) |
| T5 | Subcontract embroidery with loss | Out, back and loss reconcile | Fronts out, good fronts back, rejects recorded with a reason, balance zero |
| T6 | Short shipment within tolerance | Tolerance is applied and invoicing follows the shipped quantity | Shipment accepted, Sales Order closed, invoice on shipped pieces |
| T7 | Over-shipment | The upper limit is enforced | Above the over-delivery allowance, the Delivery Note is refused or needs a named approval |
| T8 | Seconds sale | Second-quality pieces are valued and sold apart | Seconds move to their own Item or warehouse and sell at their own price |
| T9 | LC discrepancy | Document checks catch a mismatch | A late shipment date against the LC is flagged before documents are presented |
| T10 | Chargeback | Deductions are coded | A short payment is split by reason on the Payment Entry (Example 19) |
| T11 | Mid-season spec revision | The approved version is protected | A new BOM becomes default for new Work Orders only; the open Work Order keeps its BOM |
| T12 | Cancelled order with committed materials | Committed stock is visible | Reserved fabric is released with its cost visible; open Purchase Orders are listed for decision |
| T13 | FX at month-end | Currency figures close correctly | Realised differences posted; Exchange Rate Revaluation run on open balances as the finance head decided |
Test script: the polo order from Sales Order to cash
Scenario T1, run on the staging site with migrated master data. Figures are the ones used throughout this guide.
| Step | Action | Expected result |
|---|---|---|
| 1 | Enter the Sales Order: S 300, M 750, L 900, XL 750, XXL 300 at 4.26 | 5 lines, 3,000 pieces, USD 12,780.00 |
| 2 | Record a 30% advance with a Payment Entry linked to the Sales Order | USD 3,834.00 received as an advance |
| 3 | Raise a Material Request and the Purchase Order for 925 Kg navy jersey | Purchase Order submitted for 925 Kg |
| 4 | Receive the jersey in three batches A, B, C | Purchase Receipt refused without a batch on every line; three batches in stock |
| 5 | Submit the Landed Cost Voucher from Example 15, method C | Jersey valued at USD 4,502.68 (4.87 per kg) |
| 6 | Create Work Orders per variant from the variant BOMs and transfer fabric by batch | Transfer refused when a Work Order's bundle holds two dye lots |
| 7 | Close the Job Cards and post the Manufacture entries for 3,000 pieces | Finished stock 3,000 across five variants, valued from materials and operating cost |
| 8 | Make the Delivery Note and its Packing Slips | 302 cases on 11 Packing Slips; delivery for 3,000 |
| 9 | Create the Sales Invoice and allocate the advance | USD 12,780.00 less the 3,834.00 advance = 8,946.00 outstanding |
| 10 | Receive the payment at a different exchange rate | Invoice paid; exchange gain or loss posted |
| 11 | Run the order's profitability report | Revenue, material and operating cost appear against the order's Project or accounting dimension |
Step 6 needs the cut-control validation from section 24; standard ERPNext lets a user pick any batch in stock. Step 11 depends on how finance designed the dimension.
Test script: shade split at cutting
Scenario T4, using the three dye-lot batches and the cut plan from Example 9, with Work Orders split by size and lot.
| Step | Action | Expected result |
|---|---|---|
| 1 | Transfer batch A to the Work Orders for XXL 300, XL 750, M 23 and S 87 | Accepted; batch A shown in each Serial and Batch Bundle |
| 2 | Try to add fabric from batch B to the XL Work Order | Refused, with a message naming both dye lots |
| 3 | Transfer batch B to the Work Orders for L 900 and S 213 | Accepted |
| 4 | Transfer batch C to the Work Order for M 727 | Accepted |
| 5 | Return the remaining fabric per batch | Leftover matches the cut plan: A 23.4 m, B 0.3 m, C 0.2 m, each converted with its own batch's factor |
| 6 | Pack size S | Two case ranges (batch A 87, batch B 213); no Packing Slip mixes the batches |
With "Pick Serial / Batch Based On" set to FIFO and no validation, step 2 would succeed, and step 1 might pick the wrong batch on its own. That is the fault this test exists to catch.
Test script: subcontract embroidery with loss
Scenario T5 proves that fronts sent out, fronts returned and fronts lost add up, using Example 13.
| Step | Action | Expected result |
|---|---|---|
| 1 | Submit the subcontracting Purchase Order for 3,000 embroidered fronts and create the Subcontracting Order | 3,000 cut fronts listed as supplied items |
| 2 | Send 3,030 fronts with a Send to Subcontractor entry | 3,030 fronts in the embroiderer's warehouse |
| 3 | Submit the Subcontracting Receipt: 3,000 accepted, 26 rejected with reasons "thread break" or "misplacement" | 3,000 embroidered fronts in stock; 26 rejects on record |
| 4 | Return the 4 unused fronts | 0 fronts left at the embroiderer; 26 rejects inside the allowance of 30 |
| 5 | Book the embroiderer's Purchase Invoice | Billed for 3,000 good pieces, USD 540.00 |
Test script: short shipment within tolerance
Scenario T6 proves that a short shipment inside the buyer's tolerance is invoiced on what shipped. The buyer allows ±3%; the factory ships 2,940 pieces, 30 short in M and 30 short in L.
| Step | Action | Expected result |
|---|---|---|
| 1 | Submit the Delivery Note for 2,940 of 3,000 | Short by 60 pieces, which is 2.0%; inside the 3% tolerance |
| 2 | Close the Sales Order | No open quantity remains for the 60 pieces |
| 3 | Create the Sales Invoice | 2,940 × 4.26 = USD 12,524.40, less the 3,834.00 advance = 8,690.40 outstanding |
| 4 | Repeat with 2,900 pieces | Short by 3.3%; closing the order needs a named approval |
Step 4 of T6 needs the tolerance check from section 24; standard ERPNext lets a user close a Sales Order at any quantity.
Part 7Training, go-live and hypercare
29How should you train a garment factory's staff on ERPNext?
Train each role only on the DocTypes and scenarios it will use, in the local language, on the factory's own styles and orders, and have key users teach their colleagues. A merchandiser does not need the accounting workspace, and a floor supervisor needs one screen that works, not an introduction to ERPNext. ERPNext's role permissions and workspaces can hide what a role does not use; set them before training, so people learn the screens they will actually see.
Train close to go-live, so that what people learn is still fresh, but not so close that there is no time to repeat a session. Keep each session short and practical: people learn by entering an order they recognise.
A training plan by role
An example plan for the polo factory. Hours are practice, not a standard; adjust them to the team and the scope.
| Role | What they learn | Hours | Pass when they can |
|---|---|---|---|
| Merchandisers | Sales Orders by variant, order changes, delivery status | 6 | Enter the polo order from the buyer PO without help |
| Purchasing | Material Requests, Purchase Orders, units, Purchase Invoices, Landed Cost Vouchers | 6 | Buy 925 Kg of jersey and apply the import charges by method C |
| Stores | Purchase Receipts with batches, transfers to Work Orders, returns, stock reconciliation | 8 | Receive three dye-lot batches and transfer each to its Work Orders |
| Production planners | Work Orders, Job Cards, subcontracting | 6 | Run the embroidery Subcontracting Order and Receipt |
| Quality | Quality Inspections and templates | 4 | Record an incoming fabric inspection and a rejected reading |
| Shipping | Delivery Notes, Packing Slips, print formats | 4 | Pack by batch and print the packing list |
| Finance | Sales Invoices, advances, Payment Entries, exchange differences, revaluation, reports | 10 | Take the polo order from advance to closed |
| Key users | All of the above for their area, plus first-line support | 16 | Teach their team and log issues correctly |
Floor operators and supervisors are trained on whatever captures floor output. If that is a kiosk or scanner screen, the training is minutes, not hours; if it is Job Cards on an office form, expect the data never to arrive.
30What does an ERPNext cut-over plan look like for a garment factory?
An ERPNext cut-over plan is a day-by-day list of the steps that move the factory from the old system to ERPNext: freeze, final imports, stock count, opening balances, checks and the first live transactions, each with an owner and a go or no-go point. Rehearse it once in full on a copy of the production site before the real weekend, and take a backup that you have restored at least once.
A cut-over plan, day by day
The polo factory goes live on 1 November, before the polo fabric arrives on 10 November and cutting starts on 17 November. A template, to adapt.
| Day | Date | Steps | Owner |
|---|---|---|---|
| T−10 | 22 Oct | Rehearsal import complete on a copy of the site; open issues reviewed; go or no-go for the plan | Factory project lead |
| T−7 | 25 Oct | Master data frozen in the old system; final import of parties, materials, templates, variants and BOMs | Merchandising head, stores head |
| T−3 | 29 Oct | Open purchase and sales orders extracted and checked against source documents | Purchasing, merchandising |
| T−1 | 31 Oct | Cut-off at 18:00: no more receipts or issues in the old system; physical count of fabric by batch and roll, trims and finished goods; site backup taken | Stores head, platform owner |
| T0 | 1 Nov, morning | Import counted stock by batch, open orders and open receivables and payables; owners sign totals | All owners, finance head |
| T0 | 1 Nov, noon | Go or no-go by the sponsor on the signed checks | Sponsor |
| T0 | 1 Nov, afternoon | First live transactions: one receipt, one transfer, one Sales Order, one Sales Invoice | Key users |
| T+1 | 2 Nov | Daily issue meeting starts; developer on call | Factory project lead |
| T+9 | 10 Nov | Polo fabric received in ERPNext with batches: the first real test of the batch rules | Stores head |
The fall-back decision belongs at the noon go or no-go: if the counted stock and the open orders do not reconcile, the factory keeps working in the old system for another week rather than going live on figures nobody trusts.
31When should a garment factory go live on ERPNext, and how long is hypercare?
Go live between seasons, in the lowest-volume weeks and before a new wave of cutting starts, and keep the developer or partner in close support until at least the first month-end close is done in ERPNext. Hypercare is the period right after go-live when the project team stays on hand to fix issues daily.
- Timing. Avoid the weeks before a main shipment window, the month-end of the financial year, any audit and any planned ERPNext major upgrade. A go-live in peak season turns every small fault into a missed shipment.
- Parallel running. A short, bounded parallel run of the books can help finance compare figures. Running the whole factory in two systems rarely works, because people keep using the one they trust.
- Duration. Practitioners commonly plan hypercare of four to eight weeks. That range is judgement, not a measured standard; the rule that matters is that nobody leaves before the first month-end close in ERPNext is complete.
- Issue log. Keep one list: date, who, what happened, severity, owner, status. Review it daily in the first two weeks.
- Exit criteria. Hypercare ends when the month-end closes on time, no issue blocks shipping or invoicing, and key users handle first-line questions without the developer.
Part 8Risks
32What are the most common mistakes when implementing ERPNext for apparel?
The most common mistakes in apparel ERPNext projects are one template BOM for every size, automatic FIFO batch picking at cutting, one kg-to-metre factor per fabric, every sewing operation as its own Job Card, customisation done in the desk with no code owner, and custom apps planned for a shared Frappe Cloud site. The list below comes from implementation practice, not from Frappe's documentation.
- One template BOM for every size.Work Orders happily use it for all variants, so large sizes run short without any error (Example 10).
- Automatic batch picking at cutting.FIFO picking chooses the oldest batch, not the right shade; shade differences are found at final inspection.
- One conversion factor per fabric.Stock value looks right while the cutting room runs short (Example 8).
- Every operation a Job Card.Twelve operations on five variants make 60 Job Cards per order, which nobody closes (Example 11).
- Subcontracting on template BOMs.Until your release carries the change from issue #54715, subcontracted variants need their own BOMs.
- Distributing landed cost by Quantity across different units.Kilograms and sets are added together, and the wrong item carries the freight (Example 15).
- Customisation in the desk with no code owner.Custom fields, scripts and print formats live only in the database, and nobody knows what the next upgrade breaks.
- Custom apps planned for a shared Frappe Cloud site.Custom apps and Server Scripts need a private bench or your own server.
- The Work Order used as the production plan.Line balancing, operation times and bundle flow need their own place.
- Ratio cartons and buyer packing lists underestimated.Packing Slips record case ranges; assorted cartons and SSCC labels are custom.
- Valuation method chosen late.It cannot be changed once an Item is saved, so a wrong choice means new Items.
- A major upgrade in the same quarter as go-live.Custom apps are ported and tested twice, under pressure.
The 15 general failure modes, and how each shows up in ERPNext
Apparel ERP projects fail in the same fifteen ways whatever the ERP. The table maps each one to where it appears in an ERPNext project and how to prevent it.
| # | Symptom | Root cause | How it shows in ERPNext | Prevention |
|---|---|---|---|---|
| 1 | SKU swamp | Every variant created as an independent item | Every combination created up front; each variant a full Item | Style-colour templates; create only the combinations ordered (section 11) |
| 2 | Large sizes short of fabric | Average consumption | One template BOM serving all sizes | Variant BOMs generated from a consumption table (section 14) |
| 3 | kg and m never reconcile | Fixed conversion | One UOM factor per Item | Per-batch conversion from GSM and width (section 12) |
| 4 | Shade mixing | No shade rule at issue | FIFO batch picking on material transfer | Batch as dye lot and a validation at transfer (section 13) |
| 5 | Costing illusion | Quote, standard and actual not linked | No standard-cost method; no quote to compare | Keep the quote beside the actuals per order (section 18) |
| 6 | Buyer fabric counted as owned | CMT fabric received like a purchase | Customer fabric on a Purchase Receipt | Subcontracting Inward on v16, or a tested customer-provided flow (section 17) |
| 7 | Goods lost at subcontractors | Out and back not linked | One Subcontracting Order for a chain of processors | Intermediate Items per step (section 17) |
| 8 | Produced is not shippable | No output grading | Every manufactured piece counts as finished stock | Grade output; ship on first quality only (section 19) |
| 9 | Spec drift | Revision not linked to the order | A new default BOM picked up by a re-created Work Order | Fix the BOM per Work Order; the approved version per order |
| 10 | Excel shadow system | No T&A or order view | Merchandisers keep their sheets | Provide the view, in ERPNext or an operations layer (section 16) |
| 11 | Chargeback leakage | No reason codes | Short payments posted to one deduction account | Deduction accounts per reason (section 21) |
| 12 | LC discrepancies | LC terms not linked to the shipment | No LC DocType | LC record and a document check before presenting |
| 13 | Floor data never arrives | Office screens on the floor | Supervisors asked to close Job Cards | Kiosk, scanner or a floor system (section 15) |
| 14 | Big-bang in peak season | A plan-driven date | Go-live during a shipment window | Go live between seasons, with a rehearsed cut-over (section 30) |
| 15 | Migrated garbage | Legacy loaded as it was | Duplicates in parties and materials | Cleanse first; owners sign off (section 27) |
33What must be decided before an ERPNext apparel go-live?
Decide the template level and attribute abbreviations, the BOM-per-variant approach, the unit design for every fabric, the batch design and picking rule, the valuation method per Item, the hosting, and which system owns sampling, T&A and floor capture before go-live, because each is expensive to change once transactions exist. The full list:
- The ERPNext major version to go live on, and the date of the next major upgrade.
- Style or style-colour as the template; attributes per Item Group; abbreviations and code pattern.
- Template BOMs, variant BOMs or generated variant BOMs; who owns the consumption table.
- The unit design for every fabric and yarn, and how kg-to-metre is converted.
- Batch per dye lot or batch per roll; which Batch fields are mandatory at receipt.
- The batch picking rule for material transfers, and the validation that refuses mixed lots.
- Valuation method per Item (FIFO, Moving Average or LIFO), since it cannot be changed after saving.
- The landed-cost distribution per charge, including the workaround for freight by weight.
- Operations grouped per department or listed individually, and the resulting Job Card count.
- Hosting: shared Frappe Cloud site, private bench or own servers, given the custom apps planned.
- What lives in Customize Form, in Server Scripts and in the custom app, and who owns the code.
- Which system owns sampling, T&A, planning, floor capture and quality: ERPNext, a custom app or an operations layer.
- How buyer-supplied fabric is received so it never enters stock value.
- The quantity tolerance rule and who may close an order outside it.
- How profitability per order is tagged: Project or accounting dimension.
- The country compliance app, its maintainer and its supported versions.
Part 9Integration and API
34Which ERPNext API should an apparel integration use?
Use the Frappe REST API, which exposes every DocType at /api/resource/<DocType> and server methods at /api/method/<dotted.path>, authenticate a dedicated integration user with an API key and secret, and combine webhooks per DocType with polling on the modified timestamp. The REST API is generated from the DocTypes, so a custom field or custom DocType is available through it without extra work.
| Need | Frappe REST API |
|---|---|
| List records | GET /api/resource/Purchase Order with fields, filters, or_filters, order_by, limit_start, limit_page_length; the default page is 20 records |
| Read one | GET /api/resource/Purchase Order/<name> |
| Create, update, delete | POST, PUT, DELETE on the same paths |
| Call server code | GET or POST /api/method/<dotted.path>, including methods a custom app whitelists |
| Authenticate | Authorization: token <api_key>:<api_secret>; also Basic with the same pair, a password login with a session cookie, or an OAuth bearer token |
| Push events | Webhook per DocType and document event, with conditions, JSON built with Jinja, custom headers, and an optional secret that adds an X-Frappe-Webhook-Signature header (base64 HMAC-SHA256 of the payload) |
- Log in as a dedicated integration user. API keys are generated on the User record (Settings tab, API Access); the secret is shown once. Every call runs as that user with its roles, so give it only the roles it needs.
- Link records by
name. In Frappe, a document'snameis its primary key, usually from a naming series such asPUR-ORD-2026-00457, and it is also what users read. A submitted document cannot be edited; it is cancelled and amended, and the amendment gets a new name with a suffix, such asPUR-ORD-2026-00457-1. Treat an amendment as a new document that replaces the old one, and show the change to a person. - Watch
docstatus. 0 is draft, 1 submitted, 2 cancelled. Only submitted documents are commitments. - Push and pull. Frappe documents a Webhook Request Log for successful requests, and does not document retries. Keep polling on
modifiedas the dependable baseline, and make the receiving side safe to call twice. - Rate limits. Frappe's REST documentation does not publish request limits. Check with your host, especially on a shared Frappe Cloud site, and page through lists instead of asking for everything at once.
Core DocTypes an operations system reads and writes: Item, Item Attribute, Customer, Supplier, Material Request, Purchase Order, Purchase Receipt, Batch, Stock Entry, Sales Order, Delivery Note, Sales Invoice, Payment Entry. Custom fields appear on them with the custom_ prefix on recent versions; confirm the field names on your site.
One purchase request, from MerchandiserOS to ERPNext and back
- In MerchandiserOS, request
PR-1042for 925 kg of navy jersey is approved. - A scheduled job in ERPNext's custom app (or a small middleware) collects it:
GET /api/v1/erp/documentsreturns the request with quantities, units and the supplier code, and no prices. - The job creates the Purchase Order through ERPNext's own API and submits it. ERPNext fills the rate from its own price list or supplier quotation, so the money never leaves ERPNext:
POST /api/resource/Purchase Order
Authorization: token <api_key>:<api_secret>
{"supplier": "Mill A", "custom_mos_request_ref": "PR-1042",
"items": [{"item_code": "FAB-JER-180-NVY", "qty": 925, "uom": "Kg",
"schedule_date": "2026-10-28"}]}
- ERPNext names it
PUR-ORD-2026-00457, and the job sends the answer back to MerchandiserOS with its integration login:
POST /api/v1/erp/po-status
Authorization: Bearer <token>
Idempotency-Key: erpnext-PUR-ORD-2026-00457-submit
{"rows": [{"request_ref": "PR-1042",
"erp_po_id": "PUR-ORD-2026-00457",
"erp_po_number": "PUR-ORD-2026-00457",
"status": "open",
"date": "2026-10-21"}]}
- A person in MerchandiserOS approves it on the ERP review list. The request now shows "ERPNext PO PUR-ORD-2026-00457, open".
- The job reads the decision back from
GET /api/v1/erp/proposals/{id}.
In ERPNext the permanent id and the number people read are the same field, name, so both carry the same value. If the PO is later amended to PUR-ORD-2026-00457-1, the job sends a new row and a person sees the change. Map ERPNext's status words before sending: "To Receive and Bill" and "To Receive" → open; "To Bill" (goods in, bill left) → received; "Completed" or "Closed" → closed; a cancelled document → cancelled. The MerchandiserOS API shows any status word it cannot read to a person and does not record it. The Idempotency-Key makes a retry harmless. custom_mos_request_ref is an illustrative custom field.
The no-code option is a file exchange: ERPNext's Data Import and report exports on one side, and MerchandiserOS's file import on the other, with the same person-approves-every-change rule. It suits a factory with no developer, at the cost of a daily or hourly rhythm instead of events. The ERP API guide documents both.
Part 10If you don't manufacture: brands, buying agents and own-label retailers
35Is ERPNext a good ERP for fashion brands, buying houses and own-label retailers?
ERPNext can serve as the books for a clothing brand, a buying house or an own-label retailer that does not manufacture, using its purchasing, landed cost, selling, drop shipping, multi-currency and service invoicing; such a business should leave the manufacturing modules switched off and keep development, factory follow-up and inspections in a system built for sourcing. Everything earlier in this chapter about Work Orders and Job Cards can be skipped by these readers.
Who they are
Three kinds of apparel business sell garments they do not sew, and each needs something different from an ERP.
| Business | What it does | What it owns | How it earns |
|---|---|---|---|
| Brand or wholesaler | Designs, develops and sells; factories make for it on FOB or CMT terms | The finished goods from the moment it takes title; sometimes the fabric it supplies to CMT factories | Margin on wholesale or direct sales |
| Buying agent or buying house | Sources and follows orders across factories for buyers; places the orders in the buyer's name | Usually no stock at all | Commission, typically a percentage of FOB, invoiced to the buyer or the factory |
| Own-label retailer | Develops its own-label ranges for its stores and buys them from factories (private label sourcing) | Finished goods from the moment it takes title | Retail margin; the ranges compete with bought-in brands |
What they need from ERPNext, and what to skip
These businesses need the buying, landing, selling and paying half of ERPNext, and none of its manufacturing half. The table maps each need to the ERPNext feature that covers it.
| Need | ERPNext feature | Who uses it |
|---|---|---|
| Purchase orders to factories on FOB terms | Purchase Order for the finished-goods variants, Purchase Receipt when the goods arrive | Brand, own-label retailer |
| CMT with the brand's own fabric | Outward subcontracting: the brand sends fabric on a Subcontracting Order and buys the making as a service (section 17) | Brand |
| Freight, insurance and duty in the landed cost | Landed Cost Voucher on the Purchase Receipt, with vendor invoices linked | Brand, own-label retailer |
| Vendor payments and letters of credit | Purchase Invoice and Payment Entry; the LC itself is a custom DocType, as for a factory | Brand, own-label retailer |
| Wholesale orders to retailers | Sales Order, Delivery Note, Sales Invoice; Packing Slips for cartons | Brand |
| Factory ships straight to the retailer | Drop shipping: "Deliver to Customer" on the Sales Order line, and a Purchase Order made from it; the goods never enter the brand's warehouse | Brand |
| EDI 850, 856 and 810 with retailers, and chargebacks | An EDI connector or provider (custom build); chargebacks as reason-coded deductions on the Payment Entry | Brand |
| Commission income | A non-stock service Item ("Maintain Stock" off) invoiced on a Sales Invoice; no Purchase Receipts, no stock | Buying agent |
| Several currencies | Multi-currency parties and accounts, exchange gains and losses, Exchange Rate Revaluation | All three |
What to skip: Workstations, Operations, Routings, Work Orders, Job Cards, Production Plans and production BOMs. A brand needs a BOM only for goods it sends out for CMT. Hide the manufacturing workspace from every role, so nobody starts using it by accident.
One trap catches agents. ERPNext's Sales Partner is for commission the business pays to a reseller or agent. Frappe's documentation says the commission it calculates is operational data that does not create an expense, payable or payment. A buying agent earns commission, so its income is a Sales Invoice for a service Item, not a Sales Partner record. A brand that pays a buying agent can use Sales Partner to calculate what it owes on sales, or simply book the agent's Purchase Invoice.
What ERPNext handles poorly for brands and buying agents
The work that decides whether a sourced order ships on time happens outside the buyer's own building, and ERPNext has no objects for it. These are the gaps sourcing agent software and buying house ERP products exist to fill.
- Development and sampling with many factories. One style is sampled at two or three factories before it is placed; the rounds, courier details and buyer comments have no DocType (section 16).
- T&A across factories. A brand follows dozens of orders at dozens of factories; ERPNext Projects can hold tasks but not a critical path fed by real approvals and receipts.
- Following production that happens outside. A Purchase Order to a factory says what was bought and when it is due; it says nothing about whether cutting has started, which is what the brand needs to know in week three.
- Inspections at the vendor. Final AQL is done at the factory before the goods ship; ERPNext's Quality Inspection sits on the brand's own receipt, weeks later and on the wrong side of the sea.
- One status per order across many factories and buyers. An agent's day starts with "which of my 140 orders are late?", across buyers and factories that are not in any single ERPNext document.
The MerchandiserOS model for brands and buying agents
MerchandiserOS runs development, samples and approvals, T&A, the orders placed with factories, sourcing, the planning view across subcontracted factories, quality inspections and shipping follow-up; ERPNext keeps the books. Its workspace set-ups include "Brand" and "Buying agent", so a brand or buying house starts with the screens for that job rather than a factory's. Retail back-office work (stores, POS, allocation, open-to-buy) is out of MerchandiserOS's scope; an own-label retailer keeps that in its retail systems.
| Work | Runs in MerchandiserOS | Recorded in ERPNext |
|---|---|---|
| Development and samples | Styles, tech packs, lab dips, strike-offs and samples with rounds and buyer verdicts, across factories | Nothing |
| Orders with factories | Buyer POs, the orders placed with factories, size by colour, deliveries, T&A | Purchase Orders for the finished goods (brand); nothing for an agent |
| Sourcing and planning | Suppliers with qualification, the planning view across subcontracted factories | Suppliers, as payees |
| Quality | Inspections at the vendor, including final AQL on ISO 2859-1 at the buyer's level | Nothing; the shipment is cleared or held |
| Shipping follow-up | Shipments per delivery, packing, ship clearance against the buyer's terms | Purchase Receipt, landed cost, the payable |
| Money | No money amounts | Payments, commission invoices, currencies, tax |
The same polo order from the brand's side, with the agent's commission
The brand places the 3,000 polos with the factory at USD 4.26 FOB, through a buying agent paid 5% of FOB. The freight, insurance, duty rate and clearing charge are illustrative; the duty base and rate depend on the country of import, so check yours.
| Line | How it is worked out | USD |
|---|---|---|
| Purchase Order to the factory | 3,000 × 4.26, five variant lines | 12,780.00 |
| Sea freight | Forwarder's invoice | 540.00 |
| Insurance | 0.5% of FOB: 12,780.00 × 0.5% | 63.90 |
| Import duty | 10% of 12,780.00 + 540.00 + 63.90 = 13,383.90 | 1,338.39 |
| Clearing and delivery to the warehouse | Broker's invoice | 210.00 |
| Landed cost of the order | 12,780.00 + 2,152.29 of charges | 14,932.29 |
| Buying agent's commission | 3,000 × 4.26 × 5% | 639.00 |
| Landed cost with commission | 14,932.29 + 639.00 | 15,571.29 |
Landed per polo = 14,932.29 ÷ 3,000 = 4.977 → USD 4.98
With commission = 15,571.29 ÷ 3,000 = 5.190 → USD 5.19, of which commission 639.00 ÷ 3,000 = 0.213
In the brand's ERPNext: a Purchase Order and Purchase Receipt for the five variants; one Landed Cost Voucher on the receipt carrying the four charges with the forwarder's, insurer's and broker's invoices linked; the factory's Purchase Invoice paid by Payment Entry or against an LC. All five lines share one price, so distributing by Amount or by Quantity gives the same USD 0.72 a polo (2,152.29 ÷ 3,000 = 0.717); a mixed receipt of different styles should use Amount for duty. Whether the agent's commission belongs in the landed cost is a decision for finance and the customs broker; if it does, the agent's Purchase Invoice goes on the voucher too.
In the agent's ERPNext: no Purchase Order, no receipt, no stock. One Sales Invoice to the brand for a non-stock service Item "Buying commission P-2041", USD 639.00. If the agent keeps its books in EGP at an illustrative 48.80, that is 639.00 × 48.80 = EGP 31,183.20, and the exchange difference on payment is booked as in Example 18.
Neither side of this example needed a Work Order, a BOM or a Job Card. For more on the brand-side ERPs often weighed against ERPNext, see the chapters on Zoho and apparel-specific ERPs.
Part 11The recommended model
36The operations layer: what runs on top of ERPNext
The simplest way to run a garment factory on ERPNext is to let ERPNext keep the books and run operations, from style to shipment, in a system built for apparel. Parts 3 to 7 of this guide show what it takes to bend ERPNext toward garment production instead: variant BOMs, batch validations, grid entry, sampling DocTypes and AQL logic, all in custom apps that must be ported at every major version. This is the model we recommend: let ERPNext do what it does best, the books, and give the factory's operations to a system built for them.
The polo order with operations on top
| Step | In MerchandiserOS | What ERPNext sees |
|---|---|---|
| Tech pack and quote | Style P-2041, graded measurements, cost build at 4.26 FOB | Nothing yet |
| Samples | Three lab dip rounds, strike-off, PP approved 14 Nov and locked to spec version 3 | Nothing |
| Order | 3,000 pieces by size, T&A calendar to 15 Dec | Sales Order for invoicing |
| Procurement | 925 kg jersey from the size-graded consumption, trims, embroidery; receipts measured per roll and dye lot | Purchase Orders, Purchase Receipts with batches, payables |
| Planning and production | Line booked, cut by dye lot, job cards by department | Material issued, for stock value |
| Shop floor | Output per line per hour, on MerchandiserOS floor screens or from Garment.io | Nothing |
| Quality | Final AQL at level II, 2.5: 125 pieces inspected; only first-quality pieces ready to ship | Nothing |
| Logistics | Cartons packed by lot, ship clearance against the buyer's terms | Delivery Note and Sales Invoice |
| After shipment | Quote against actuals for fabric, minutes and rejects | Payment received, reported back |
Who does what
Each area has one home. MerchandiserOS runs the work; ERPNext records the financial result.
| Area | Runs in MerchandiserOS | Recorded in ERPNext |
|---|---|---|
| Style | Styles with versions and frozen snapshots, tech pack sections, graded points of measure with tolerances, colourways and lab dips, a classified two-level bill of materials (fabric and trims, with yarn linked to fabric), consumption from marker efficiency, shrinkage and woven construction; woven, knit and knit-to-shape, with pairs for socks | The finished-goods Item, once released |
| Samples and approvals | Lab dips, strike-offs, samples and shipping marks, round by round with parcel and courier details and the buyer's verdict, wired to the T&A; an approved order-level PP round locks the style version the order is built to | Nothing |
| Quotation | Cost engine from fabric, trims and decoration through CMT, overhead and margin to FOB, with landed cost and dated exchange rates; standard cost sheet; quotations; approval gates with thresholds | Nothing until an order exists |
| Orders | Buyer POs as parent records, orders with size-by-colour breakdown, tolerance band, provisional-to-confirmed quantity and per-shipment deliveries, ratio packs, T&A with critical path | The Sales Order, for invoicing |
| Procurement | Suppliers with qualification, materials master, MRP net-to-buy across the order book, purchase requests, purchase orders, GRN receiving, material issue and return; shade bands per fabric and a measured lot record (GSM, width, shrinkage) per receipt, judged against the shade band; incoming inspection carrying the dye lot | The financial Purchase Order, the payable, stock value |
| Planning | Planning heat-map across lines and subcontractors, 52 weeks; production orders | Nothing |
| Production | Production orders with job cards per department, material issue and return, WIP board, subcontract steps | Material movements, for stock value |
| Shop floor | MerchandiserOS floor screens, or Garment.io feeding output and actual minutes in | Nothing |
| Quality | Typed inspections (incoming, cutting, PP, DUPRO, final AQL, pre-shipment, measurement), AQL engine on ISO 2859-1 with the buyer's level honoured, CAPA, needle and metal control, quality grades so produced is not taken as shippable | Nothing |
| Logistics | Shipments per delivery, packing and cartonisation, ship clearance against the buyer's terms | The Delivery Note and the Sales Invoice |
A day in the life, department by department
With operations on top, each department works in the tool built for its job, and finance works in ERPNext. This is what a normal day looks like on the polo order.
| Department | What they do in MerchandiserOS | What reaches ERPNext |
|---|---|---|
| Merchandising | Records the buyer PO as the parent record, the order with its size-by-colour breakdown and tolerance band, moves the quantity from provisional to confirmed, splits deliveries per shipment and watches the T&A critical path | The Sales Order, once confirmed |
| Development | Keeps style P-2041 with its versions, tech pack sections and graded points of measure; logs each lab dip and strike-off round with courier details and the buyer's verdict; the approved PP round locks the style version for the order | Nothing |
| Costing | Builds the cost from fabric to FOB with landed cost and dated exchange rates, keeps the standard cost sheet, sends the quotation through approval gates with thresholds | Nothing until the order exists |
| Purchasing and stores | Runs net-to-buy across the order book, raises purchase requests, receives against the purchase order, records the measured lot (GSM, width, shrinkage) and judges it against the shade band, issues and returns material; suppliers carry their qualification | Purchase requests become ERPNext Purchase Orders; receipts and issues for stock value |
| Planning | Loads lines and subcontractors on the 52-week heat-map, opens production orders with job cards per department | Nothing |
| Production floor | Captures output on floor screens and follows the WIP board; or reads output and actual minutes from Garment.io | Nothing |
| Quality | Runs incoming, cutting, PP, DUPRO, measurement and final AQL inspections on ISO 2859-1 at the buyer's level, raises CAPA, keeps needle and metal control, grades output so only first quality ships | Nothing; the shipment is cleared or held |
| Shipping | Packs and cartonises per delivery, clears the shipment against the buyer's terms | The dispatch, from which the Sales Invoice is raised |
| Finance | Works in ERPNext: invoices, payables, payments, stock value, tax and e-invoicing | ERPNext is the record; PO numbers, payment dates and invoice status go back |
What changes in the ERPNext project
With operations on top, the hard parts of this chapter mostly move out of ERPNext. You no longer need variant BOMs per size, batch validations at cutting, Job Cards for every operation or chained subcontracting inside ERPNext. ERPNext keeps accounting, purchasing as the financial record, invoicing, payments, stock value and local tax. The project is smaller, the custom app shrinks to finance features, the upgrade path between major versions stays clean, and a shared Frappe Cloud site may even be enough if the connection runs over the API from outside.
Measured against the custom features in section 24, the ERPNext project no longer needs to build:
- Fabric units per batch and batch measurement logic.
- Variant BOM generators.
- Cut control, cut orders and bundles.
- Grid order entry.
- Ratio packs, cartonisation and quantity-tolerance checks.
- Sampling, approvals and T&A.
- Chained subcontracting with loss allowances.
- AQL inspection and logged overrides.
What stays in the ERPNext project: finance design, letters of credit, chargeback reasons, local statutory reports, the country compliance app and the connection to the operations layer.
How they connect
ERPNext and MerchandiserOS connect through the MerchandiserOS ERP API or a file exchange, and the shop floor connects through MerchandiserOS.
- ERPNext ↔ MerchandiserOS. ERPNext collects purchase requests and sales orders from MerchandiserOS and sends back its Purchase Order names, payment dates and invoice status through the MerchandiserOS ERP API, signed in with an integration login. Every change from ERPNext lands on a review list and is approved by a person, with an approver set per kind of change; a "what changed" feed tells ERPNext what moved on the MerchandiserOS side. No money amounts travel through the API; they stay in ERPNext. A file exchange does the same job with no programming.
- Shop floor. Factories without a floor system use MerchandiserOS's own floor screens. Factories running Garment.io keep it: MerchandiserOS integrates with Garment.io, sending orders and styles to the floor and reading output and actual minutes back.
·Frequently asked questions about ERPNext for garment manufacturing
These are the questions consultants, developers and factory managers ask most often about ERPNext for apparel. Each answer stands on its own.
How do I manage sizes and colours in ERPNext?
Make each style, or each style-colour, an Item template by ticking "Has Variants", add Item Attributes such as Colour and Size with an abbreviation for each value, and create the variants you actually make, one at a time or as a set of combinations. Only variants can be used on Sales Orders, Purchase Orders and invoices. Use one size attribute per size scale, agree the abbreviations before the first variant exists because they build the variant codes, and set Item Variant Settings to decide which fields copy from the template.
Is ERPNext good for garment manufacturing?
ERPNext is a good fit for small and mid-size garment manufacturers that have a Frappe developer or a trusted partner and want an open-source ERP with no licence fees. It handles item templates and variants, batches, outward subcontracting, customer-supplied material from version 16, landed cost, advances, multi-currency and quality inspections as standard. Tech packs, sampling approvals, T&A calendars, size-graded fabric consumption, dye-lot control at cutting, line planning and AQL tables need custom apps or a separate operations system.
ERPNext vs Odoo: which is better for garment manufacturing?
Neither is better for every factory. ERPNext is open source in full under GPL-3.0 and includes quality inspection in every install, while Odoo puts Quality, PLM, Barcode and Shop Floor in its paid Enterprise edition and offers grid order entry on sales orders. Both model styles as templates with variants and support subcontracting, lots or batches and landed cost, and neither covers sampling, T&A, size-graded consumption or AQL out of the box, so choose on the fit-gap, the people who will maintain the code and local compliance.
Does ERPNext need a separate BOM for every variant?
For Work Orders, no: a BOM made on the template Item can serve as the default BOM for its variants, and ERPNext can make a variant BOM from it. But a template BOM gives every size the same fabric quantity, so garments whose consumption grows with size need a BOM per variant, generated from a consumption table. For subcontracting, GitHub issue #54715 reported that Subcontracting Orders did not fall back to the template BOM; a fix was merged into the develop branch on 24 September 2026, so check whether your release carries it.
How does subcontracting (job work) work in ERPNext?
In outward subcontracting, you raise a Purchase Order for a non-stock service Item with "Is Subcontracted" ticked and the finished good selected, create a Subcontracting Order from it, send your materials with a "Send to Subcontractor" Stock Entry, and receive the finished goods with a Subcontracting Receipt, which consumes the materials sent. A Purchase Receipt then closes the Purchase Order with no stock or accounting effect, and the processor's Purchase Invoice is booked. Each outside step, such as printing or washing, is its own Subcontracting Order.
Can ERPNext handle CMT with customer-provided fabric?
Yes, from version 16, with Subcontracting Inward. You create a Sales Order with "Is Subcontracted", make a Subcontracting Inward Order from it, receive the customer's fabric into the customer's own warehouse at zero value, create Work Orders, deliver the finished goods with a Subcontracting Delivery, return unused fabric to the customer and invoice the service. The finished good's BOM must contain at least one customer-provided Item. On version 15, the older customer-provided item flow exists; test its stock-value behaviour before relying on it.
How do I track fabric dye lots and rolls in ERPNext?
Turn on "Enable Serial and Batch No for Item" in Stock Settings, tick "Has Batch No" on each fabric, and treat each Batch as one dye lot, or as one roll with the dye lot in a custom field. Add custom fields to Batch for shade group, measured GSM, width and roll length. Since version 15, batches move through a Serial and Batch Bundle on each stock transaction; switch off automatic FIFO batch picking for fabric issues, or add a validation that refuses mixed dye lots, because FIFO picks the oldest batch, not the right shade.
How do I convert kilograms to metres for fabric in ERPNext?
Add Meter to the fabric Item's UOMs table with a conversion factor into its stock UOM, Kg; for a 180 GSM jersey at 1.80 m width, 1 m = 1 ÷ (1000 ÷ (180 × 1.80)) = 0.324 kg. ERPNext holds that factor per Item, not per batch, while real rolls differ in weight and width, so the fixed factor drifts from what the cutting room measures. For accuracy, record measured GSM and width on each Batch and convert per batch with custom code, or keep fabric in kilograms throughout.
How do I set up landed cost in ERPNext for imported fabric?
Create a Landed Cost Voucher (Home ‣ Stock ‣ Tools ‣ Landed Cost Voucher), select the Purchase Receipts or stock-updating Purchase Invoices, fetch their items, enter freight, clearing, duty and bank charges with their expense accounts, and distribute them by Quantity or by Amount. Do not distribute by Quantity across items in different units, such as kilograms of fabric and sets of rib, and split freight by weight yourself onto one voucher per item if it is billed by weight. In this guide's example, USD 695 of charges raised navy jersey from USD 4.20 to USD 4.87 per kg.
Can ERPNext do AQL inspection for garments?
Partly. ERPNext's Quality Inspection records Incoming, Outgoing and In Process inspections against receipts, deliveries, stock entries and Job Cards, with templates, readings judged by minimum and maximum values or formulas, and a sample size field. It does not contain the ISO 2859-1 sampling tables, so the sample size and acceptance numbers, such as 125 pieces with accept at 7 major defects for a lot of 3,000 at level II and AQL 2.5, must be filled by custom logic or come from a separate system.
Is ERPNext free, and what does it cost to implement for a garment factory?
ERPNext has no licence fee: it is open source under GPL-3.0. The cost of an apparel implementation is hosting, whether on Frappe Cloud, a hosting partner or your own servers, plus partner or developer time for configuration, migration, testing, training and custom apps, and the recurring work of carrying custom apps through each major version. The more of the fit-gap that stays standard or moves to an operations system, the lower that recurring cost.
Can I install custom apps on Frappe Cloud?
Yes, on a private bench group, where you add the custom app from GitHub to the bench and install it on your site; Frappe Cloud then updates the site as the app is updated. Sites on public shared benches can install only featured apps from the Frappe Cloud Marketplace, and Server Scripts are not available there either. If an apparel project plans custom apps, budget for a private bench or your own servers.
How do I connect ERPNext to other systems through its API?
Use the Frappe REST API: every DocType is available at /api/resource/<DocType> for listing, reading, creating, updating and deleting, and server methods at /api/method/<path>. Authenticate a dedicated integration user with the header "Authorization: token api_key:api_secret", link records by their name, and combine webhooks per DocType, which can be signed with a secret, with polling on the modified timestamp. Treat an amended document, which gets a new name with a suffix, as a replacement that a person should see.
Is ERPNext good for a clothing brand that outsources production?
ERPNext works well as the books of a clothing brand that outsources production: Purchase Orders to factories, Landed Cost Vouchers for freight and duty, supplier payments, wholesale Sales Orders, drop shipping from the factory to the retailer and multi-currency are all standard, and the manufacturing modules can stay switched off. What it handles poorly is the work outside the brand's building: sampling with many factories, T&A across them, following production at the vendor and inspections before shipment. That work belongs in a sourcing or operations system connected to ERPNext.
Can ERPNext handle a buying agent's commission?
Yes. A buying agent invoices its commission with a Sales Invoice for a non-stock service Item, with "Maintain Stock" off, so no stock, receipts or goods payables are involved; for 3,000 polos at USD 4.26 FOB and an illustrative 5% commission, that is one invoice for USD 639.00. ERPNext's Sales Partner feature is for commission a business pays to others, and its calculated commission creates no accounting entry, so it is not the tool for an agent's income.
·Glossary of apparel and ERPNext terms
Short definitions of the apparel and ERPNext terms used in this guide.
- AQL
- Acceptance quality limit: an inspection method that checks a random sample from a lot and accepts or rejects the lot on the number of defects found, using ISO 2859-1 tables.
- Batch
- In ERPNext, a quantity of an Item tracked under one Batch ID; for fabric, usually one dye lot or one roll.
- Bench
- The command-line tool and folder structure that install and run Frappe sites and apps; on Frappe Cloud, a private bench group is the environment that can run custom apps.
- BOM
- Bill of materials: the list of components and quantities, and optionally operations, to make one quantity of an Item. A submitted BOM cannot be edited.
- BOM Template
- A BOM made for a template Item, usable as the default BOM on Work Orders for its variants.
- CM, CMT
- Cut and make, or cut, make and trim: the labour charge for making a garment, and a factory model where the buyer supplies the fabric and the factory charges only for making.
- Colourway
- One colour version of a style, with its own fabric shade and trims.
- Customize Form
- The ERPNext tool that adds Custom Fields and changes a DocType's form without code.
- Cut-over
- The planned switch from the old system to ERPNext, around a fixed cut-off moment.
- DocType
- A Frappe document type, such as Item or Purchase Order, with its fields, permissions and REST endpoint.
- docstatus
- A document's state in Frappe: 0 draft, 1 submitted, 2 cancelled.
- DUPRO
- During-production inspection, done once part of the order is packed.
- Dye lot
- A batch of fabric dyed together; pieces from different dye lots can differ in shade and must not be mixed in one garment.
- Ex-factory
- The date goods leave the factory for shipment.
- FOB
- Free on board: the price of goods loaded at the port of shipment; in garment trade, the usual quoted price per piece.
- Frappe Cloud
- Frappe's managed hosting for Frappe apps, including ERPNext.
- Frappe Framework
- The Python and JavaScript web framework ERPNext is built on, providing its database layer, authentication and REST API.
- GSM
- Grams per square metre: the weight of fabric.
- Hypercare
- The period after go-live when the project team fixes issues daily.
- Item template, variant
- In ERPNext, the template is the style with "Has Variants" ticked; each variant is a full Item for one combination of attribute values, such as navy, size L.
- Job Card
- ERPNext's record of the actual work on one operation of a Work Order at one Workstation: time, employee and completed quantity.
- Lab dip
- A small dyed fabric sample sent to the buyer to approve a shade before bulk dyeing.
- Landed cost
- Every cost of bringing goods to the factory beyond the supplier's price: freight, insurance, duty, clearing, bank charges.
- Landed Cost Voucher
- The ERPNext document that adds landed costs to the valuation of received items, distributed by quantity or amount.
- Letter of credit (LC)
- A bank's promise to pay an exporter when documents matching the credit's terms are presented.
- Marker efficiency
- The share of fabric in a cutting marker that ends up in garment pieces.
- POM
- Points of measure: the garment measurements in a tech pack, with a tolerance per size.
- PP sample
- Pre-production sample: a garment in bulk fabric and trims that the buyer approves as the reference for production.
- Ratio pack
- A pack or carton holding sizes in a fixed ratio, for example 1 S, 2 M, 2 L, 1 XL.
- Serial and Batch Bundle
- Since ERPNext v15, the record attached to each stock transaction that lists the batches or serial numbers it moves.
- Server Script
- Python run by Frappe on document events or as an API method, in a restricted sandbox; not available on public shared Frappe Cloud benches.
- Shade band
- A set of approved shade references for a fabric colour, used to judge each new lot.
- SMV
- Standard minute value: the time a trained operator needs for one operation at a normal pace.
- Size/colour matrix
- A grid of colours by sizes used to enter or show order quantities for each combination.
- Strike-off
- A sample of a print or embroidery on the actual fabric, approved before bulk.
- Subcontracting Order
- ERPNext's record of materials supplied to a processor against a subcontracting Purchase Order; the Subcontracting Receipt brings the finished goods back.
- Subcontracting Inward Order
- ERPNext v16's record for making goods from a customer's material: receipts from the customer, Work Orders and deliveries back.
- T&A calendar
- Time and action calendar: an order's milestones with planned dates worked back from ex-factory, actual dates and owners.
- TOP sample
- Top of production: the first bulk pieces, checked against the PP sample.
- UCP 600
- The ICC's rules for documentary credits, which most letters of credit follow.
- Work Order
- ERPNext's order to make a quantity of one Item from its BOM, moving material from source to work-in-progress to target warehouses.
- Workstation
- In ERPNext, a place where operations run, with working hours, production capacity and an hour rate.
·Checklists: an ERPNext apparel implementation on one page
The checklists below repeat the decisions and checks from each part of this guide, in project order.
Discovery
Discovery is complete when every item below is ticked.
- Business type settled for each buyer: CMT, full package, both, or a non-manufacturing brand or agent.
- One decision owner named for each area, including a platform owner for code and hosting.
- One workshop per department, walking a real recent order.
- All 52 fit-gap lines answered with evidence, decision and owner.
- Architecture decided: what ERPNext owns, what runs in an operations layer.
- ERPNext version, hosting and the need for a private bench confirmed against the fit-gap.
Design
Design is complete when every item below is decided and written down.
- Item Groups, valuation method per Item, units and "Must be Whole Number".
- Template level, attributes and abbreviations locked; code pattern agreed.
- BOM approach: template, variant, or generated variant BOMs; subcontracted variants covered.
- Unit design per fabric and yarn; kg-to-metre conversion decided.
- Batch as dye lot or as roll; custom Batch fields; batch picking rule and mixed-lot validation.
- Workstations, operations and minutes; Job Card count checked on a real order.
- Subcontract chains modelled step by step; inward CMT flow on v16 or a tested v15 flow.
- Landed Cost Voucher distribution per charge.
- Inspection templates, AQL source and override rights.
- Packing Slip rules and buyer documents per buyer.
- Currencies, advances, revaluation, LC records, chargeback reasons, country app.
Build, data and testing
Build, migration and testing are complete when every item below is proven on the go-live version.
- Configuration done in dependency order, on the go-live version.
- One custom app in Git holds every customisation; desk changes exported and registered.
- Integrations link on document names, handle amendments, and have one writer per field.
- Migration loaded in order with Data Import, with a cut-off rule and signed totals.
- All 13 end-to-end scenarios passed by key users on staging.
Go-live
Go-live is ready when every item below is in place.
- Training done per role, on the factory's own orders, with workspaces set per role.
- Cut-over rehearsed once in full, and a backup restored at least once.
- Go-live date between seasons, away from year-end, audits and major upgrades.
- Go or no-go point and fall-back defined.
- Hypercare runs at least until the first month-end close in ERPNext.
·Sources
Frappe and ERPNext documentation, release notes and GitHub pages were checked on 26 September 2026. Frappe's documentation pages mostly do not name a version; where a feature belongs to version 15 or 16, the source says so.
- ERPNext repository, licence (GPL-3.0) and hosting options · github.com
- ERPNext version 16 features · frappe.io · release notes v16.0.0 · github.com
- ERPNext documentation, Item variants · docs.frappe.io
- ERPNext v13 documentation, Item Attribute (abbreviations) · docs.erpnext.com
- ERPNext documentation, Unit of Measure · docs.frappe.io
- ERPNext documentation, FIFO and Moving Average valuation · docs.frappe.io · Stock Settings · docs.erpnext.com
- ERPNext documentation, Batch · docs.frappe.io
- ERPNext documentation, Serial and Batch Bundle · docs.frappe.io
- ERPNext documentation, Bill of Materials · docs.frappe.io
- ERPNext documentation, Work Order · docs.frappe.io · Job Card · docs.frappe.io · Workstation · docs.frappe.io · Production Plan · docs.frappe.io
- ERPNext GitHub issue #54715, template BOM not picked for subcontracting orders · github.com · pull request #59373, merged into develop 24 Sep 2026 · github.com
- ERPNext GitHub issue #41950, manufacturing for a large number of variants · github.com
- Frappe blog, subcontracting with version 14 · frappe.io · Subcontracting in ERPNext · docs.frappe.io
- ERPNext documentation, Subcontracting Inward (v16) · docs.frappe.io · Customer Provided Items (v12) · docs.frappe.io
- ERPNext documentation, Landed Cost Voucher · docs.frappe.io · docs.frappe.io
- ERPNext documentation, Quality Inspection · docs.frappe.io
- ERPNext documentation, Packing Slip · docs.frappe.io
- ERPNext documentation, Material Request · docs.frappe.io · Purchase Order · docs.frappe.io
- ERPNext documentation, Drop shipping · docs.frappe.io · Sales Partner · docs.frappe.io
- ERPNext documentation, Exchange Rate Revaluation · docs.frappe.io · Advance payment entry · docs.frappe.io
- ERPNext documentation, Data Import · docs.frappe.io · Customize Form · docs.frappe.io · Server Script · docs.frappe.io
- Frappe Framework documentation, REST API · docs.frappe.io · token-based authentication · docs.frappe.io · webhooks · docs.frappe.io
- Frappe Cloud documentation, installing an app · docs.frappe.io · custom apps · docs.frappe.io
- ERPNext GitHub issue #38816, amended document naming · github.com
- India Compliance app · github.com
- Egypt e-invoicing requests on GitHub · #32227 · #35634 · #43565 · Marketplace listings · cloud.frappe.io · cloud.frappe.io
- ISO 2859-1, Sampling procedures for inspection by attributes · iso.org
- AQL tables and acceptance numbers · qima.com · tetrainspection.com · inspection levels · qualityinspection.org
- UCP 600, documentary credits · uscib.org · tradefinanceglobal.com
- EDI transaction sets · 1edisource.com · celigo.com
- Odoo facts in the comparison · see the Odoo chapter and its sources
Corrections. ERPNext changes between major versions, and a feature boundary can move in a single release; the subcontracting BOM change in section 14 is an example that moved while this chapter was being written. If you find a statement here that your version contradicts, report a correction with the version and the page you checked; we correct the guide and note the change and its date at the top of this section. We re-check the ERPNext facts in this chapter at least once a year and after each major ERPNext release.
ERPNext and Frappe are trademarks of their owners, used here only to name the products. This guide is not endorsed by Frappe. Odoo is a trademark of Odoo S.A. India Compliance is named as a third-party app. Garment.io is named because MerchandiserOS integrates with it; this guide is not endorsed by Garment.io.