
The Cost Sheet tab on a style — the factory, customer, and internal audience tabs with the per-piece build-up alongside the per-sheet add-ons and the grand total.
What it is
A cost sheet is per-style, per-version, per-audience — a factory-vs.-customer per-piece build-up. One sheet says, for a single style at a single version, what each material costs the factory and what the customer is being charged for it. The cost sheet has two parallel cost columns:- Factory side — what it costs you to make or buy that piece (your input to margin and to negotiations with suppliers).
- Customer side — what you are quoting the customer for that piece (the price they will see in a quotation or proforma).
Why it exists
Apparel costing has to do two jobs at once. You need a clean, defensible build-up of what a piece costs you — fabric usage, trims, cut-and-make, miscellaneous — to negotiate with factories and to know your floor. And you need a separate view of what you are quoting the customer, which is rarely the factory number plus a flat margin. The two columns let the same sheet support both jobs without a second document drifting out of step. Versioning lets the build-up evolve — costs get renegotiated, a material gets swapped, a quote needs a different multiplier — while every earlier version stays intact for the order or quotation it was used on. Per-audience approval lets sales sign off the customer view while the factory side is still being negotiated, and vice versa.When it is used
- During development, to build up the factory cost as the takes shape.
- At quoting, to set the customer-side price the quotation and PI will carry.
- On a reorder or renegotiation, when the price basis changes — mint a new version, rebuild, approve.
- Before handing off to commercial, to capture sign-off from the factory, customer, and internal audiences that approve cost sheets in your tenant.
Dependencies
- A style — every cost sheet belongs to one. See the Styles module guide.
- A BOM, if you intend to use Copy from BOM to seed the cost-sheet lines from the style’s material list. The BOM does not have to be approved for the copy to run. See the BOM page.
- At least one approval audience enabled for your tenant — your administrator configures which of factory, customer, and internal are in use. A new cost-sheet version cannot be created if none are enabled.
What depends on it
- The style’s Margin analysis view — the per-line factory / customer / margin table and (when an order is selected) order-projected totals, computed from the current cost-sheet version. Internal audience only.
- Audience-tailored exports — the PDF/Excel export of the cost sheet for the factory, customer, or internal audience.
- The pricing decisions captured downstream on quotations, proforma invoices, and orders — these read the current cost-sheet version’s customer-side numbers as their price basis.
- The pin each order keeps onto the style — when an order’s cost-sheet version is created, marked current, or switched, the order’s pin advances in lockstep. See BOM, cost sheet, and artifact versions.
Fields
Group the cost sheet’s fields by purpose. The header carries identification, per-sheet add-ons, notes, and audit. Each line carries one material’s build-up. Each approval row carries one audience’s sign-off state.Header — identity
Version— the cost sheet’s version number for the style. Assigned by the platform when the version is created; starts at 1 on the first version and increases by one each time a new version is minted on the same style — and on the same order, when the version is tied to one.Style— the parent style. Set when the version is created and not edited afterwards.Order— the order the version is tied to, when the cost sheet was created in an order context. When set, marking this version current advances that order’s pin. Optional; a style-level cost sheet has none.
Header — per-sheet add-ons
These are per-piece amounts that apply to the whole sheet, not to any one line. They roll into the grand totals.CM (factory)— the factory cut-and-make charge per piece, on the factory side. Optional.CM (customer)— the cut-and-make amount per piece on the customer-quoted side. Optional.Misc (factory)— any other per-piece factory-side amount that is not a material line. Optional.Misc (customer)— the customer-side equivalent. Optional.
Header — notes and audit
Notes— free text. Optional.Created,Last updated— set by the system. Shown on the sheet for reference.
Lines — identity and display
Each line documents one material’s per-piece cost.Description— what the line is. Required, up to 500 characters.Type— the line’s grouping: fabric or accessory. Lines are displayed in fixed group order (fabrics first, then accessories). The per-sheetCMandMiscadd-ons sit at the header, not in the line list.Sort order— the line’s position within its group. Drag-and-drop reorder writes this; it stays within a single group.
Lines — sourcing
These identify the material and where it comes from. The customer view showsItem code and Position alongside the factory and internal views;
only Supplier stays factory- and internal-only. The customer export
omits the sourcing columns entirely (see “Effect of changes”).
Item code— the material’s code. Frozen on a Copy-from-BOM line; the source BOM line’s item number is captured here and is not re-read from the master afterwards.Position— where the material sits on the garment (e.g. body, collar).Supplier— the name. Frozen on copy, same asItem code— see Vendors for the directory the BOM picks this from.Unit— the report/quote unit of measure forUsage(e.g. yd, pc) — the unit you quote and report in.Purchase unit— the procurement unit, when it differs fromUnit— the unit you actually buy in. Optional and editable on the factory and internal audiences only. Not seeded by Copy from BOM; fill it after Copy when it applies.
Lines — per-piece quantities and prices
These are the math inputs. They are the same on every audience’s view; the customer-audience export simply hides the factory-side columns.Usage— the factory-side per-piece quantity of the material.Usage (customer)— the customer-side per-piece quantity. Defaults to the same value asUsagewhen the line is created by Copy-from-BOM.Waste %— the factory waste percentage applied toUsageto produce the adjusted usage used in the factory cost (see “Calculations”). Optional.Unit cost (factory)— the per-unit price on the factory side. Optional.Customer unit cost— the per-unit price on the customer side. In manual mode you enter it directly; it defaults to the factory unit cost on Copy. In multiplier mode the cell shows the factory unit cost times theCustomer multiplier— the post-multiplier value the Cost tab displays and the customer export quotes.Customer multiplier— the per-line OEM markup. When set, the customer-side line cost is computed as the factory-side line cost multiplied by this value, andCustomer unit costshows the post-multiplier value. When left blank, the line uses manual mode.Line notes— free text. Optional.
Approval rows
The cost sheet carries one approval row per enabled audience. Each row records:Audience— Factory, Customer, or Internal.Status— Pending, Approved, or Rejected. Defaults to Pending when the cost-sheet version is created.Approved by,Approved at— set when the audience approves; cleared when the audience later rejects.Rejected by,Rejected at,Rejection note— set when the audience rejects; cleared when the audience is subsequently re-approved.
Business rules
- One cost sheet per artifact version. A version of a style’s cost sheet is one cost sheet — they are the same object. To change a value once a sheet is approved, mint a new version; you cannot rewrite the old one.
- A cost-sheet version may be tied to an order or kept at style level. When the version is created in an context, the version is tied to that order, and the order’s pin onto the cost sheet advances when the version is created, marked current, or switched. Without that context, the version is style-level. The two coexist on the same style.
- Edits are restricted to Draft. Header edits (CM, Misc, notes), line add/edit/delete, line reorder, and Copy-from-BOM all require the sheet to be in Draft status. A request to write to a sheet that is Partially approved or Approved is refused with a “draft only” message.
- The header status is derived from per-audience approvals. You do
not set the cost sheet’s status directly. The system recomputes it on
every approve or reject:
- any audience Rejected → the sheet is Draft;
- all enabled audiences Approved → the sheet is Approved;
- at least one Approved and the others not Rejected → the sheet is Partially approved;
- otherwise (all Pending) → the sheet is Draft.
- Approval is per audience, not a single document approval. The customer audience can be approved while the factory audience is still pending — the sheet then shows Partially approved. Approving an audience that is already Approved is refused; the row has to be rejected first.
- Anyone with cost-sheet approval permission may approve any audience. The platform does not restrict the customer audience to sales users, or the internal audience to finance users — approval is gated by capability, not by which audience is being approved.
- Re-approval clears the rejection. Approving an audience whose row
is currently Rejected succeeds, clears the rejection’s
Rejected by,Rejected at, andRejection note, and replaces them with the newApproved byandApproved at. The user clearing the rejection does not have to be the user who recorded it. - At least one approval audience must be enabled in your tenant. Creating a new cost-sheet version is refused when no audience is enabled.
- Copy from BOM seeds only fabric and accessory lines. CM and miscellaneous amounts live on the header as per-sheet add-ons, not as copied lines. Copy from BOM does not touch them.
- Re-running Copy from BOM refreshes the cost lines without creating duplicates. A cost line already linked to a BOM line is skipped on a re-run, and a BOM line added since the previous run is seeded into a new cost line.
- Copy from BOM does not require an approved BOM. The cost sheet copies from the style’s current BOM regardless of its status. The copy is refused only when the style has no current BOM.
- Customer markup mode is per line. A line uses multiplier mode
when a
Customer multiplieris set and manual mode when it is blank. In multiplier mode the customer-side line cost derives from the factory-side line cost, and theCustomer unit costshown on screen and on the customer export is the factory unit cost times the multiplier. In manual mode you setCustomer unit costdirectly. The two modes cannot be active on the same line at once. - Margin analysis is internal-only and read-only. The style’s Margin analysis view, which shows the per-line factory / customer / margin table and the order projection, is computed at view time from the current cost-sheet version and is not stored. It is not part of any customer-facing document.
- Approval is not gated by content. The platform does not refuse approval of a sheet that has no lines, missing prices, or zero totals. Approve when the build-up is ready; the math handles missing pieces by leaving the affected totals empty.
- Write actions on the cost sheet are restricted. Users with cost-sheet write permission create versions, edit, run Copy from BOM, and approve or reject audiences. Reads and exports are open to authenticated users in your tenant.
Price-lock framing
The cost sheet’s “lock” works in three plain layers:- Values freeze on the cost line at Copy from BOM. When you run Copy, each eligible BOM line becomes a cost line, and the cost line takes its own copies of the item code, position, supplier, unit, usage, factory unit cost, and customer unit cost. From that moment on, changing the source BOM line — or the underlying or — does not alter the cost line. The cost sheet is the source of truth for that line going forward.
- Approved freezes the document from further edits. Once every enabled audience has approved, the header status derives to Approved, and every edit path is refused with a “draft only” message. To change a value after that, mint a new version.
- The version locks to an order via the per-order pin. A style is reused across orders; when a cost-sheet version is tied to an order, the order’s pin advances in lockstep when the version is created, marked current, or switched. That pin is what makes a specific version “this order’s costing.”
Validations
There are no save-time validations that the sheet has at least one
line before approval, that every line has both a factory and a customer
price, or that the grand totals are non-zero. The platform trusts you to
approve when the build-up is ready (see business rule 14).
Date logic
The cost sheet has no business dates of its own — no quote date, no effective-from, no expiry. The dates a quotation or proforma sets live on those documents, not on the cost sheet. The system records two kinds of timestamps:Approved at,Rejected aton each audience row — set when that audience approves or rejects, cleared when the row swaps state. The effect on what the sheet can do comes from the header status recomputation, not from the timestamp itself.Created,Last updatedon the header — set on create and on every write.
Status and transitions
A cost sheet’s status is derived from its per-audience approval rows (business rule 4). The visible states are:- Draft — the sheet is open for edit. Header changes, line edits, reorder, and Copy from BOM all work. New cost-sheet versions start here.
- Partially approved — at least one audience has approved and none has rejected; the others are still pending. The sheet is locked from edit (further edits require a new version).
- Approved — every enabled audience has approved. The sheet is locked from edit.
- (created) → Draft: a new cost-sheet version starts with one Pending row per enabled audience.
- Draft → Partially approved: one audience approves while at least one other remains pending.
- Draft → Approved: every enabled audience approves (or, when only one audience is enabled, that audience approves).
- Partially approved → Approved: the last pending audience approves.
- Partially approved or Approved → Draft: any audience rejects. The rejection resets the header to Draft regardless of how many other approvals stand.
- Draft → Draft (no-op): all audiences are pending.
- Draft — full edit access (header add-ons, line add/edit/delete, reorder, Copy from BOM). Export works on Draft, and the export’s header shows the Draft status so the recipient sees the sheet is not final.
- Partially approved, Approved — every edit path is refused. New work goes into a new version.
- On approve:
Approved byandApproved atare set on the audience row; any previousRejected by,Rejected at, andRejection noteon that row are cleared. - On reject:
Rejected by,Rejected at, andRejection noteare set on the audience row; any previousApproved byandApproved aton that row are cleared.
Calculations
All cost-sheet math is computed at view time from the lines and the header add-ons. Nothing is stored — there is no saved “grand total” on the sheet. Change an input, save, and the next view recomputes. Per line, factory side:- Adjusted usage =
Usage × (1 + Waste % / 100). When eitherUsageorWaste %is unset, the adjusted usage is empty. - Factory line cost =
Adjusted usage × Unit cost (factory). Empty when either input is unset.
- Multiplier mode (when
Customer multiplieris set): Customer line cost =Factory line cost × Customer multiplier. Empty when the factory line cost is empty. - Manual mode (when
Customer multiplieris blank): Customer line cost =Usage (customer) × Customer unit cost. Empty when either side is unset.
- Line margin =
Customer line cost − Factory line cost. Empty when either side is empty.
- Factory grand total = sum of factory line costs across all lines,
plus
CM (factory)andMisc (factory). Empty contributions count as zero when something else contributes; the grand total is empty only when nothing contributes. - Customer grand total = sum of customer line costs, plus
CM (customer)andMisc (customer). Same empty-value rule as the factory side. - Grand margin =
Customer grand total − Factory grand total. Empty when either grand total is empty.
- On the Cost tab, values display to 2 decimal places, half-up rounded.
- In the PDF and Excel exports, values print to up to 4 decimal
places, with trailing zeros stripped —
12.5000shows as12.5,12.3456shows as12.3456.
Margin analysis
The style’s Margin analysis tab is a read-only, internal-audience view computed from the current cost-sheet version. It is reached on the style detail; when you open it from an order context, the same tab also shows the projection for that order’s quantity (see below). The view does not appear on any customer-facing document. The body of the tab is a single per-line table — one row per cost-sheet line in the cost sheet’s own order (fabric lines first, then accessory lines) — with these columns:Type,Description,Item Code,Unit— identifying the line.Descriptionand the line’s other identity values read off the current cost-sheet version.Total Usage (F)— the factory-side per-piece usage after waste, same asAdjusted usageon the cost sheet.Unit Price (F),Amount (F)— the factory unit price and line cost, both from the cost-sheet version.Unit Price (C),Amount (C)— the customer unit price and line cost from the cost-sheet version.Margin— the per-line margin,Amount (C) − Amount (F).
CM (工繳) and Misc (雜項) header amounts (see
Fields → Header — per-sheet add-ons above). Each addend row shows the
factory side, the customer side, and the margin between them, so the
contribution of cut-and-make and the miscellaneous catch-all reads on
the same line as the materials.
A Total per piece — Factory / Customer / Margin row in the footer
sums the line costs and the two addends into the per-piece grand totals
— the same Factory grand total, Customer grand total, and Grand margin defined under Calculations.
When you open the tab in an order context — the style page reached
from an order’s Styles & SKUs line carries the order through to this
tab — a second footer row, Order total (×N pcs), projects the
per-piece factory total, customer total, and margin out to that order’s
ordered quantity for the style (the sum of Qty across that order’s
colorways and sizes on the style). The projection is the per-piece
totals multiplied by the order’s quantity for the style — nothing more
elaborate; it lets the team read what the order is worth and what the
margin is at the order’s own size. Without an order context, the order-
total row does not render.
A summary strip under the table repeats the per-piece Revenue
(Customer grand total), Cost (Factory grand total), Margin
(Grand margin), and Margin % (Margin / Revenue × 100, empty
when revenue is empty or zero) for an at-a-glance read. The tab carries
an explicit internal-only banner — the view is never put on a customer
document.
Margin analysis is computed at view time and is not stored. The order
total feeds straight off the order’s saved ordered quantity for the
style; it does not roll into the order’s non-production cost
allocation, which works downstream from
this projection.
The cost-sheet figures themselves are sized in the cost sheet’s own
currency. When an order’s margin analysis or reporting rollup converts
them into the workspace’s
,
the conversion uses the order’s saved
snapshot, not whatever rate is current on the FX Rates page today. See
Order: FX rate field.
Effect of changes
- Edit a header add-on (CM, Misc) or
Noteson a Draft sheet. The grand totals recompute on the next read. A write attempted outside Draft is refused. - Add, edit, delete, or reorder a line on a Draft sheet. The affected line costs and the grand totals recompute on the next read.
- Run Copy from BOM on a Draft sheet. New fabric and accessory lines are appended for each eligible BOM line that does not already have a cost-line counterpart. Existing cost lines linked to a BOM line are left as they are. CM and Misc header add-ons are not touched.
- Mark a different cost-sheet version current. The style’s Margin analysis switches to the new current version’s totals, the per-order pin (where the version carries one) advances with it, and the audience-tailored exports start serving the new current version. No stored values change — versions stay independent.
- Approve or reject one audience. The header status recomputes immediately (see “Status and transitions”). A single rejection on an otherwise approved sheet sends it back to Draft.
- Edit a source BOM line, a fabric master, or an accessory master
after a Copy. Does not change this cost sheet. Copy froze
Item code,Position,Supplier,Unit,Usage,Unit cost (factory), andCustomer unit coston the cost line; the cost sheet is the source of truth from that point. To pull updated source values, run Copy again on a Draft sheet — new lines are added for any newly added BOM lines; existing linked lines are left alone. - Mint a new cost-sheet version. A new Draft version is opened and becomes current; the previously current version is no longer the current one but stays readable. Old approvals stay on the prior version.
- Export the cost sheet (PDF or Excel). The export produces an
audience-tailored cut of the sheet — the factory and internal exports
include the sourcing columns; the customer export omits them,
even though
Item codeandPositionappear on the customer view in the Cost tab itself (onlySupplieris hidden from the customer view). The customer export is always in English, so the same file can go to any customer regardless of who generated it; the factory and internal exports can be downloaded with English or Chinese column labels — the labels switch, and each line’s description follows the same language by reading the linked fabric or accessory master’sName (English)orName (Chinese)(the customer export readsName (English)), with the stored line text used as a fallback when that side of the bilingual pair is blank; every other value stays as entered. See bilingual masters and Translate. The customer export’s footer also carries the customer’s own style number from the style record, so the recipient sees the code they use for the style on their side. Export works on any status, including Draft, and the export’s header carries the live status so a Draft export is visibly labeled as such. Exporting does not change the sheet.
Best practices
- Start from the BOM. Build the BOM first, then press Copy from BOM on a fresh cost-sheet version. You skip the retyping, the line identity stays consistent, and the cost sheet inherits the right sourcing data on day one.
- Set
Waste %on every fabric line that needs it. Copy from BOM leavesWaste %blank; the factory line cost is empty until you fill it (or until you accept zero waste deliberately). - Prefer the customer multiplier over typing customer unit costs. Multiplier mode keeps the customer side in step with the factory side automatically — a factory cost renegotiation flows straight through. Reach for manual mode only when the customer price is genuinely independent.
- Use the header CM and Misc add-ons rather than ad-hoc lines. They are the per-sheet, per-piece amounts the math expects, and they keep the line list focused on materials.
- Mint a new version for a renegotiation; do not try to edit an approved sheet. The platform refuses the edit, and the prior version is the audit trail for what an earlier order or quotation was built on.
- Approve per audience as each side is ready. Sales can approve the customer view while the factory side is still being negotiated; the sheet shows Partially approved until the last audience signs off.