NetSuite for light-manufacturing and WMS-heavy businesses.
Your BOM, your routings, and your cost of goods — correct from day one, and your team running the floor by handoff. Below: the four capabilities a light- manufacturing business actually runs against, and the project (WMS & Advanced Manufacturing configuration) they slot into.
Pain points · QB / Sage ceilings
QuickBooks and Sage stop where the BOM and the WMS start.
Four ceilings a light-manufacturing business hits on the way from QuickBooks or Sage 50 into NetSuite. Each one maps to a configured surface in the system — not to a hand-stitched spreadsheet at month-end.
Step 01
BOM ceiling
QuickBooks BOMs are single-level — a revision change silently overwrites the production BOM. Sage 50 caps component counts low and has no versioned routing. The engineer lives in a branched Excel workbook; production reads a stale one.
Step 02
Work-order gap
Work orders are released on a paper ticket, picks are made against a printed pick list, and WIP rolls up by spreadsheet at month-end. There is no native gate between released → started → completed, and no system roll-up of labor or overhead by routing step.
Step 03
Lot and serial in a flat file
QuickBooks has no native lot tracking. Sage 50 serial numbers live in a flat file with no inbound linkage to the receiving event — the recall drill starts at a printed receiving log and a hand-keyed Excel lookup.
Step 04
Landed cost in a side tab
Freight, duty, and brokerage are hand-keyed into an Excel side tab and reconciled into the item cost at quarter-end. Variant cost by lot or by supplier is a pivot table, not a saved search. Multi-entity roll-ups in OneWorld arrive with a parallel cost spreadsheet attached.
Each of these lands as a configured record in your NetSuite tenant — trained teams, not just built systems. Your floor leads and controllers own the records, run the workflows, and keep the close on the system without us.
Capability · Advanced Manufacturing
Advanced Manufacturing. Built for BOMs, routings, and shop-floor flow.
Versioned BOMs, work orders with routing checkpoints, and a WIP roll-up that doesn't rely on a hand-built cost spreadsheet. The Advanced Manufacturing module reads from the same source rows the controller reads at month-end.
Step 01
BOM as a versioned record
BOM revisions live in NetSuite as discrete records — engineering changes do not overwrite production, and a saved search answers "what was the BOM on shipment #18,302?" without a manual archive lookup.
Step 02
Work order with routing checkpoints
A work order carries routing steps with rate-based labor and machine overhead. Each step posts a WIP transaction; the assembly build consumes components against the parent output lot. Engineering, the floor, and the controller all read the same record.
Step 03
WIP and standard-cost roll-up
WIP rolls up by work order and by routing step; standard-cost variances post on close without a hand-built reconciliation. The cost-of-goods view the floor reads and the inventory value the controller reports come from the same source rows.
Capability · WMS
A native WMS, not a stack of paper.
Bin strategy, inbound receiving with lot and serial capture at the door, and wave and cycle counts that roll to the GL on save. NetSuite WMS replaces the printed pick list and the quarterly count adjustment — without bolting on a third-party WMS at the edge of the integration.
Step 01
Bin strategy & putaway rules
Bin strategy is configured by item class, velocity, and storage constraint — fast movers land closer to pack-out, hazmat goes to a controlled bin, and putaway rules drive the receiving scanner workflow on the floor.
Step 02
Inbound receiving at the door
An inbound receiving event captures the lot or serial at the loading dock. The vendor bill allocates to the receipt, the lot is born, and a single record connects the inbound shipment to the downstream assembly build.
Step 03
Wave / cycle / paper-floor sweep
Wave picks, cycle counts, and the paper-floor sweep are native to the WMS — no printed pick-list reconciliation at end-of-shift, no quarterly count adjustment passed through a journal entry. The count runs on the floor and rolls to the GL on save.
The bin strategy, the receiving scanner workflow, and the routing checkpoints are configured in your account by handoff — your floor leads run them on every shift, your controller reads them at month-end.
Capability · traceability
Component lot → assembly lot → serial. One record.
A recall drill that reads an assembled unit and pulls the BOM revision, the receiving event, the work order, and the bench-test result from a single lineage. The traceability handoff to the auditor is a printed view of one record, not a stitched report from three sources.
Step 01
Parent-lot issuance
On assembly build, the parent output lot is created and child components are issued against it by lot or by serial range. The issuance transaction carries both directions — the parent knows its children, the children know their parent — without a hand-keyed lookup table.
Step 02
Serial-range allocation with bench-test result
A serial range is allocated on the production step; the bench-test result posts to the serial record on the same transaction. A recall drill reads the assembled unit and pulls the bench data from a single custom record — no joined lookup across three systems.
Step 03
RMA and recall from one record
An RMA references the original assembly lot; a recall pulls the BOM revision, the receiving event, the work order, and the bench result from the same lineage. The audit handoff is a printed view of one record, not a stitched report from three sources.
Capability · landed cost
Landed cost on the item — not in a side tab.
Freight, duty, and brokerage accrue to the item cost on receipt under vendor-bill allocation rules. Variant cost views by lot, by supplier, and by routing step run from saved searches, not from a quarterly pivot table.
Step 01
Vendor-bill allocation rules
Freight, duty, and brokerage accrue to the item cost on receipt under vendor-bill allocation rules. The item receipt closes with the true landed cost on the record; the cost variance in standard-cost accounting flows from a configured workflow, not a side-tab reconciliation.
Step 02
Cost views by lot or by supplier
Saved searches return variant cost views by lot, by supplier, by shipment, and by routing step — without a pivot table. The purchasing manager reads the same source rows the auditor reads at field work.
Step 03
Per-entity roll-up in OneWorld
In OneWorld, the landed cost rolls up per entity at the intercompany step with the right FX lock, and the consolidated inventory view carries the true cost across subsidiaries without a parallel cost spreadsheet in sight.
Boldbard-fit
Shop-floor patterns, built as SuiteFlow + SuiteScript — not as a partner-locked add-on.
Below: a UserEvent on Work Order completion that posts the assembly build with component-to-parent lot linkages, paired with a SuiteFlow that re-classifies a lot when the receiving bin moves. From a recent light-manufacturing go-live, in your repo at handoff.
code · sample
suitescript · 2.1 · user-event
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*
* On Work Order completion: posts the assembly build and writes the
* component-to-parent lot linkages so a recall drill can walk the lineage
* from a bench-test serial back to the receiving event. Paired with a
* SuiteFlow that re-classifies the lot when its bin moves.
* Engagement 02 — delivery #3 of #7 (see SOW §2.1).
*/
define(['N/record', 'N/search', 'N/log', 'N/format'], (record, search, log, format) => {
const WO_REC = record.Type.WORK_ORDER;
const LOT_LINKAGE = 'customrecord_assembly_lot_linkage';
const beforeSubmit = (ctx) => {
if (ctx.type !== ctx.UserEventType.COMPLETE) return;
const wo = ctx.newRecord;
const woId = wo.id;
const parentLot = wo.getValue('custbody_wo_output_lot');
if (!parentLot) return;
const components = search.create({
type: 'workordercomponent',
filters: [['workorder', 'is', woId]],
columns: [
{ name: 'componentname' },
{ name: 'componentlot' },
{ name: 'quantity' },
],
}).run().each((row) => {
const childLot = row.getValue({ name: 'componentlot' });
if (!childLot) return true;
const linkage = record.create({ type: LOT_LINKAGE, isDynamic: true });
linkage.setValue('custrecord_link_parent_lot', parentLot);
linkage.setValue('custrecord_link_child_lot', childLot);
linkage.setValue('custrecord_link_wo', woId);
linkage.setValue('custrecord_link_quantity', row.getValue({ name: 'quantity' }));
linkage.setValue('custrecord_link_posted_at', format.formatValue({ value: new Date(), type: format.Type.DATETIME }));
linkage.save();
return true;
});
log.audit('wo:lot-linkage', { woId, parentLot });
};
return { beforeSubmit };
});scripts/mfg/wocomplete-lot-linkage.ts from a recent light-manufacturing go-live — peer-reviewed, deployable, in your repo at handoff. Paired with a SuiteFlow that re-classifies a lot on bin move (raw → WIP → finished → RMA), so the WMS lane and the GL lane read the same lineage. The recall drill is a saved-search query, not a hand-built SQL.
Next step
Book a 30-minute call.
Send four short fields — BOM count, work orders per month, lot and serial footprint, and your current finance system — and we'll send a 30-minute call link back inside an hour. If there is a fit, the next step is a clear plan with a defined finish line.
See also: NetSuite vs Sage 50/100/Intacct →