Path 2 covers assembly build items needing production. For each assembly_line on the SO, a Work Order is created FROM the SO (workorder.createdfrom = so.id), preserving the SO ↔ WO link end-to-end. BOM components are consumed from inventory, the build runs on the production floor (HITL approved by Mike), finished goods are credited, then Item Fulfillment fires. If the finished assembly is already on hand, the shortcut path is to fulfill from inventory and close the WO marked unused. The customer PO# field on the Work Order is TBD pending Mike's review (expected pattern: bodyFields.memo). Workflow: so_lifecycle_assembly_path.
| Step | NS record | Field | Sample value | Status |
|---|---|---|---|---|
| 2 | SalesOrd | bodyFields.otherrefnum (thread start) | "72622" | REAL |
| 2 | SalesOrd | bodyFields.tranid | "1217" | REAL |
| 4 | WorkOrd | bodyFields.createdfrom | 1217 (SO id) | REAL |
| 4 | WorkOrd | bodyFields.assemblyitem | "MELT-MATES-KIT-A" | REAL |
| 4 | WorkOrd | bodyFields.quantity | 24 | REAL |
| 4 | WorkOrd | bodyFields.memo — customer PO# field | (TBD) expected "72622" | TBD — Mike review pending |
| 7 | (none) | inventory_balance.quantityavailable -= bom.qty | D1 UPDATE per component | REAL |
| 8 | AsmBuild | bodyFields.createdfrom | "WO-4471" | REAL |
| 8 | AsmBuild | bodyFields.quantity_built | 24 | REAL |
| 9 | (none) | inventory_balance.quantityavailable += 24 | D1 UPDATE for FG | REAL |
| 11 | ItemShip | bodyFields.createdfrom | 1217 (SO id) | REAL |
| 11 | ItemShip | bodyFields.otherrefnum | "72622" | REAL |
| 12 | (event) | events.event_type | "so.finance_alert_fired" | STUB |
| 13 | CustInvc | bodyFields.otherrefnum | "72622" | REAL |
| 17 | SalesOrd | bodyFields.status | "Closed" | REAL |
The customer PO# ("72622" in the running example) threads through these Path 2 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 = "WO-4471" — ties to WO; WO ties back to SO → full chain traceableotherrefnum = "72622" (inherits from SO, not WO)bodyFields.otherrefnum = "72622"Open question for Mike: confirm the WO field that carries the customer PO# (expected: bodyFields.memo). Until confirmed, this is the only TBD field in the entire SO chain.
so_lifecycle_assembly_path · risk 3 REAL WO PO# field TBDassembly_item. Preserves SO ↔ WO linkage via workorder.createdfrom = so.id. Customer PO# field on the WO is the only field-level TBD across the entire SO chain.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 approvesWO.memo = customer PO#, then verify_check: WO.memo == SO.otherrefnum