NS work order — Path 2 · inventory build for stock

Inventory / production need identified → WO entered in NetSuite (no parent SO) → item / qty / location / components confirmed → component review → production → Assembly Build → FG added to inventory at correct location → components consumed → WO closes naturally → FG available for future SOs

Path 2 covers the case where the company builds product into inventory for future sales / sell-through. No parent SO. No customer side. No Finance handoff on the WO itself. Build reasons include reorder_point breach, sales forecast, bid pre-build (e.g. B5875 ahead of QBL), USDA drawdown commit (e.g. barrel cheddar processing), or R&D pilot run. WO is entered standalone (workorder.createdfrom = NULL), item / quantity / location / component requirements are confirmed, production runs, the Assembly Build record is entered in NetSuite (Mike approves at /assembly-build.html), FG is added to inventory at the correct location, components are consumed through the build process, and the WO closes naturally. The finished goods remain available for future Sales Orders — Finance enters then. Workflow: wo_lifecycle_inventory_build_path.

PATH 2 REAL no parent SO · no Finance handoff WO PO# field N/A (no customer PO# on inventory build; field still TBD globally)

Pipeline — Path 2 deep view (standalone WO · field-level)

idle
Path 2 inventory build — standalone WO with field-level depth, no parent SO, no Finance handoff 01 / Inventory / production need identified (no parent SO) 02 / WO entered in NetSuite (createdfrom = NULL) 03 / Item, qty, location, component requirements confirmed 04 / Component review · production / assembly completed 05 / Assembly Build in NetSuite · FG added to inventory at correct location 06 / Components consumed · WO closes naturally 07 / FG remains available for future Sales Orders INVENTORY / PRODUCTION NEED IDENTIFIED. SAMPLE Right Start Foods burrito kit (RSF-BURR-KIT) on-hand = 0 reorder_point = 240 bid B5875 QBL approaches; pre-build qty 480 for stock at Heartland location REASONS reorder_point breach · forecast · bid pre-build · USDA drawdown · R&D pilot STATUS: REAL inventory / production need identified RSF-BURR-KIT on-hand = 0 · reorder = 240 build_reason = bid_pre_build (B5875 QBL upcoming) target build qty = 480 at location_id = 3 EXTERNAL · no parent SO i CLASSIFY ORIGIN — operator identifies WO source. LOGIC: origin = inventory_build (no parent SO) ACTION: dispatch wo_lifecycle_inventory_build_path STATUS: REAL (operator) · STUB (auto-classify) classify origin = inventory_build no parent SO (createdfrom NULL) dispatch wo_lifecycle_inventory_build_path build_reason = bid_pre_build SECURITY · classifier i WORK ORDER ENTERED IN NETSUITE — standalone (no parent SO). NS RECORD: WorkOrd FIELDS WRITTEN bodyFields.tranid = "WO-4499" (NS-assigned) bodyFields.createdfrom = NULL (no parent SO — distinguishes Path 2 from Path 1) bodyFields.assemblyitem = "RSF-BURR-KIT" bodyFields.quantity = 480 bodyFields.location = 3 (Heartland) bodyFields.trandate = 2026-05-26 bodyFields.memo = "bid B5875 pre-build for QBL" (operator note, NOT customer PO# — no parent SO) bodyFields.custbody_build_reason = "bid_pre_build" (Path 2 only) THREADING NOTE No customer PO# threading on Path 2 — no parent SO means no SO.otherrefnum to inherit. Mike's TBD on WO.memo (Path 1 PO# threading) does not apply here; memo is freeform operator note. STATUS: REAL Work Order entered in NetSuite (standalone) tranid = "WO-4499" · createdfrom = NULL (no parent SO) assemblyitem = "RSF-BURR-KIT" · quantity = 480 · location = 3 memo = "bid B5875 pre-build for QBL" (operator note, not customer PO#) custbody_build_reason = "bid_pre_build" MESSAGEBUS · NS WorkOrd · STANDALONE i CONFIRM REQUIREMENTS — Mike's exact step. CHECKS item: RSF-BURR-KIT confirmed assembly_item quantity: 480 confirmed against build_reason capacity location: location_id = 3 (Heartland) confirmed component requirements: derived from assembly_bom STATUS: REAL confirm item / qty / location / component requirements item = "RSF-BURR-KIT" · qty = 480 · location = 3 component requirements derived from assembly_bom CLOUD · operator confirm i BOM LOOKUP. TABLES READ assembly_bom WHERE assembly_item = "RSF-BURR-KIT" SAMPLE COMPONENTS TORTILLA-LG qty 1 per kit; BEAN-1LB qty 1 per kit; SAUCE-PAC qty 1 total component consume for qty 480 = 1,440+ unit debits across components STATUS: REAL BOM lookup for RSF-BURR-KIT assembly_bom rows: ~3-5 components total consume for qty 480 = 1,440+ unit debits DATABASE · assembly_bom i COMPONENT AVAILABILITY REVIEWED. TABLES READ inventory_balance WHERE item_code IN (components) AND location_id = 3 DECISION if any component qty insufficient → stage purchase order request first (Path 2 can stage PO; no backorder customer pressure since no SO) STATUS: REAL component availability reviewed inventory_balance at location_id = 3 TORTILLA-LG on-hand = 600 (OK for 480) BEAN-1LB on-hand = 510 (OK) SAUCE-PAC on-hand = 720 (OK) DATABASE · component check i PRODUCTION / ASSEMBLY COMPLETED ON FLOOR. ACTION crew executes build for qty 480 components debited per BOM during build yield + waste captured (waste = 8 expected) NS RECORDS INTERIM: WkOrdIss per component D1 WRITES UPDATE inventory_balance SET quantityavailable -= bom.qty * 480 WHERE item_code IN (components) AND location_id = 3 SAMPLE DEBITS TORTILLA-LG -480 · BEAN-1LB -480 · SAUCE-PAC -480 STATUS: REAL production / assembly completed on floor crew executes build for qty 480 · waste = 8 UPDATE inventory_balance SET quantityavailable -= bom.qty * 480 TORTILLA-LG -480 · BEAN-1LB -480 · SAUCE-PAC -480 at location_id = 3 · WkOrdIss posted per component MESSAGEBUS · floor i ASSEMBLY BUILD COMPLETED IN NETSUITE — Mike approves via HITL. NS RECORD: AsmBuild FIELDS WRITTEN bodyFields.tranid = "AB-1902" bodyFields.createdfrom = 4499 (WO id) bodyFields.assemblyitem = "RSF-BURR-KIT" bodyFields.quantity_built = 472 (480 target − 8 waste) bodyFields.waste = 8 bodyFields.location = 3 (Heartland) bodyFields.trandate = 2026-05-26 HITL: /assembly-build.html → proposed_actions → Mike approves STATUS: REAL Assembly Build entered in NetSuite NS AsmBuild record · tranid "AB-1902" createdfrom = 4499 (WO id) · quantity_built = 472 waste = 8 · location = 3 (Heartland) HITL: Mike approves at /assembly-build.html BACKEND · NS AsmBuild · HITL gate i FG ADDED TO INVENTORY AT CORRECT LOCATION — Mike's exact phrasing. SQL UPDATE inventory_balance SET quantityavailable = quantityavailable + 472 WHERE item_code = "RSF-BURR-KIT" AND location_id = 3 STATUS: REAL FG added to inventory at correct location UPDATE inventory_balance SET quantityavailable += 472 item_code = "RSF-BURR-KIT" · location_id = 3 RSF-BURR-KIT on-hand: 0 → 472 DATABASE · FG ++ i COMPONENTS CONSUMED THROUGH BUILD PROCESS — Mike's exact phrasing. ACTION formal component consumption posted (WkOrdIss) per component net inventory effect: -components, +FG TABLES write: transactions (WkOrdIss) · inventory_balance STATUS: REAL components consumed through build WkOrdIss posted per component net inventory: -components, +FG at location_id = 3 BACKEND · consume i WO CLOSES NATURALLY — Mike's exact phrasing. SQL UPDATE work_orders SET status = 'Built' WHERE id = 4499 EVENT: workorder.built NO customer side — no Item Fulfillment, no Finance handoff. STATUS: REAL WO closes naturally once Assembly Build completed UPDATE work_orders SET status = 'Built' WHERE id = 4499 event: workorder.built · no Finance handoff BACKEND · WO close natural i FINISHED GOODS REMAIN AVAILABLE FOR FUTURE SALES ORDERS — Mike's exact phrasing. NOTE Finance enters when FG is eventually sold via a future SO (not on the WO itself). Path 2 has no customer side; the WO close is the terminus. TABLES read: inventory_balance (allocatable to future SOs) SURFACES bid-command-center · item entity page · get_assembly_inventory chat tool EVENTS inventory.fg_credited (RSF-BURR-KIT, location 3, +472) STATUS: REAL FG remains available for future Sales Orders inventory_balance: RSF-BURR-KIT @ location_id=3 · on-hand 472 allocatable to future SOs (e.g. B5875 release order) Finance enters later when a customer SO sells this FG event: inventory.fg_credited · surfaces: bid-command-center, item entity DATABASE · PATH 2 TERMINUS i LEGEND Path 2 inventory-build lanes no parent SO · no customer side · no Finance handoff on the WO

NS records created / updated · field-level detail (Path 2)

StepNS recordFieldSample valueStatus
3WorkOrdbodyFields.tranid"WO-4499"REAL
3WorkOrdbodyFields.createdfromNULL (distinguishes Path 2 from Path 1)REAL
3WorkOrdbodyFields.assemblyitem"RSF-BURR-KIT"REAL
3WorkOrdbodyFields.quantity480REAL
3WorkOrdbodyFields.location3 (Heartland)REAL
3WorkOrdbodyFields.memo — operator note (NOT customer PO# — no parent SO)"bid B5875 pre-build for QBL" · field still TBD globally pending Mike reviewTBD — Mike review pending (semantic: memo carries operator note on Path 2; on Path 1 expected to carry customer PO#)
3WorkOrdbodyFields.custbody_build_reason"bid_pre_build"REAL
7(WkOrdIss)per component consumeTORTILLA-LG -480 · BEAN-1LB -480 · SAUCE-PAC -480REAL
8AsmBuildbodyFields.tranid"AB-1902"REAL
8AsmBuildbodyFields.createdfrom4499 (WO id)REAL
8AsmBuildbodyFields.assemblyitem"RSF-BURR-KIT"REAL
8AsmBuildbodyFields.quantity_built472REAL
8AsmBuildbodyFields.waste8REAL
8AsmBuildbodyFields.location3 (Heartland)REAL
9(none)inventory_balance.quantityavailable += 472D1 UPDATE for FG at location_id = 3REAL
10(WkOrdIss)formal component consumption postedper componentREAL
11WorkOrdbodyFields.status"Built"REAL
11(event)events.event_type"workorder.built"REAL
12(none)FG allocatable to future SOsinventory_balance row remains until consumed by future SOREAL

Customer PO# threading on Path 2 (none — no parent SO)

Path 2 has no customer PO# threading because there is no parent SO. The WO is standalone (workorder.createdfrom = NULL). Mike's notes confirm PO# threading on SO/PO/Invoice/Vendor Bill chains — Path 2 is the only chain where this does not apply.

Schema-layer TBD reminder: The WO.memo field is still TBD globally pending Mike's review of the Path 1 customer PO# threading. On Path 2 the field is freeform (no PO# semantic), so the TBD does not block this path's flow — but every WO Schema reference is marked TBD until confirmed.

Sub-contract structured detail

CTR wo_lifecycle_inventory_build_path · risk 2 REAL

Sub-contract dispatched from the WO master when origin = inventory_build. Standalone WO — no parent SO, no Item Fulfillment, no Finance handoff on the WO itself. Finance enters later when the FG is sold via a future SO. Path 2 terminates at WO close; FG remains available for future Sales Orders.
Fan-out targets
create_wo · confirm_requirements · review_components · bom_consume · assembly_build · finished_goods_credit · close_wo
Tables touched
work_orders · assembly_bom · assembly_builds · inventory_balance · transactions · events · proposed_actions
HITL gates
/assembly-build.htmlproposed_actions → Mike approves
Verify checks
wo_standalone (createdfrom IS NULL) · assembly_build_posted · fg_credited · components_debited · wo_closed · fg_available_for_future_so
No customer side
no Item Fulfillment · no Finance alert · no invoice · no payment · no order.closed event
Build reasons
reorder_point · forecast · bid_pre_build · usda_drawdown · rd_pilot · other
Retry policy
max_attempts=3 · exponential backoff (1.5s base, 45s cap) · alert_on_final_failure