Path 1 covers the case where one or more items on a customer SO require assembly. A Work Order is created FROM the SO (workorder.createdfrom = so.id), preserving the SO ↔ WO link end-to-end. Components are reviewed against on-hand inventory at the correct location, production runs on the floor, the Assembly Build record is entered in NetSuite (Mike approves at /assembly-build.html), finished goods are added to inventory, then the SO is fulfilled to the customer. The Item Fulfillment fires the ★ automation alert to Finance, who reviews, invoices, monitors terms, and applies payment. If the FG is already on hand at the location, the shortcut is to fulfill the SO from inventory and close the WO marked unused. The customer PO# field on the Work Order body is TBD pending Mike's review (expected: bodyFields.memo threaded from SO.otherrefnum). Workflow: wo_lifecycle_from_sales_order_path.
| Step | NS record | Field | Sample value | Status |
|---|---|---|---|---|
| 1 | SalesOrd | bodyFields.tranid | "1217" | REAL |
| 1 | SalesOrd | bodyFields.otherrefnum (thread start) | "72622" | REAL |
| 3 | WorkOrd | bodyFields.tranid | "WO-4471" | REAL |
| 3 | WorkOrd | bodyFields.createdfrom | 1217 (SO id) | REAL |
| 3 | WorkOrd | bodyFields.assemblyitem | "MELT-MATES-KIT-A" | REAL |
| 3 | WorkOrd | bodyFields.quantity | 24 | REAL |
| 3 | WorkOrd | bodyFields.location | 3 (Heartland) | REAL |
| 3 | WorkOrd | bodyFields.memo — customer PO# field | (TBD) expected "72622" | TBD — Mike review pending |
| 6 | (WkOrdIss) | per component consume | CHED-2LB -24 · PRTZL-BAG -24 · TURKEY-PAK -24 · ... | REAL |
| 7 | (none) | inventory_balance.quantityavailable -= bom.qty * 24 | D1 UPDATE per component at location_id = 3 | REAL |
| 8 | AsmBuild | bodyFields.tranid | "AB-1881" | REAL |
| 8 | AsmBuild | bodyFields.createdfrom | 4471 (WO id) | REAL |
| 8 | AsmBuild | bodyFields.assemblyitem | "MELT-MATES-KIT-A" | REAL |
| 8 | AsmBuild | bodyFields.quantity_built | 24 | REAL |
| 8 | AsmBuild | bodyFields.waste | 0 | REAL |
| 8 | AsmBuild | bodyFields.location | 3 (Heartland) | REAL |
| 9 | (none) | inventory_balance.quantityavailable += 24 | D1 UPDATE for FG at location_id = 3 | REAL |
| 10 | WorkOrd | bodyFields.status | "Built" | REAL |
| 11 | ItemShip | bodyFields.tranid | "IF-2210" | REAL |
| 11 | ItemShip | bodyFields.createdfrom | 1217 (SO id, NOT WO id) | REAL |
| 11 | ItemShip | bodyFields.otherrefnum | "72622" | REAL |
| 12 | (event) | events.event_type | "wo.finance_alert_fired" | STUB |
| 14 | CustInvc | bodyFields.tranid | "CINV-9032" | REAL |
| 14 | CustInvc | bodyFields.otherrefnum | "72622" | REAL |
| 14 | CustInvc | bodyFields.amount | 18420.00 | REAL |
| 15 | CustPymt | bodyFields.appliedto | "CINV-9032" | REAL |
| 16 | SalesOrd | bodyFields.status | "Closed" | REAL |
The customer PO# ("72622" in the running example) threads through these Path 1 records:
bodyFields.otherrefnum = "72622" — thread originbodyFields.memo = (TBD — Mike review pending; expected pattern threads "72622" forward; also createdfrom = 1217 links the WO back to the SO id)createdfrom = 4471 (WO id) — ties to WO; WO ties back to SO → full chain traceablecreatedfrom = 1217 (SO id, NOT WO id) · otherrefnum = "72622" (inherits from SO)bodyFields.otherrefnum = "72622"Open question for Mike: confirm the WO body field that carries the customer PO# (expected: bodyFields.memo). Until confirmed, this is the only TBD field in the entire WO Path 1 chain. Every Schema reference for WO is flagged TBD.
wo_lifecycle_from_sales_order_path · risk 3 REAL WO PO# TBDorigin = from_sales_order. Preserves SO ↔ WO linkage via workorder.createdfrom = so.id. Customer PO# field on the WO is the only field-level TBD across the entire Path 1 chain. Path 1 ends with the Finance handoff after Item Fulfillment.work_orders · assembly_bom · assembly_builds · inventory_balance · item_fulfillments · customer_invoices · customer_payments · payment_applications · transactions · events · proposed_actions/assembly-build.html → proposed_actions → Mike approves · Finance review · invoice approvalWO.memo = customer PO#, then verify_check: WO.memo == SO.otherrefnum