Path 2 is the PO process when triggered by an internal purchasing need — inventory replenishment, assembly build components, packaging supply, or general purchasing. No Sales Order link; no customer PO# threading. Product arrives at the GFS facility, loading dock receives it, Item Receipt is completed in NetSuite, and inventory is credited at the correct location (inventory_balance.quantityavailable += received qty). The universal ★ automation alert then fires to Finance because receiving happens at the dock but billing/payment is Finance-owned. Finance reviews the PO + Item Receipt + supporting docs (packing slip, vendor invoice), processes the Vendor Bill, and pays per vendor terms. PO closes once all items received + billed + paid + any shortages/damages/substitutions/pricing issues resolved. Workflow contract: po_lifecycle_inventory_or_build_path (risk 2). No customer-side cycle on this path — the memo field carries an internal req# or vendor invoice# instead of a customer PO#.
| Step | NS record | Field | Sample value | Status |
|---|---|---|---|---|
| 5 | PurchOrd | bodyFields.tranid | "PO-7910" | REAL |
| 5 | PurchOrd | bodyFields.entity (vendor) | 412 (Bongards Creameries) | REAL |
| 5 | PurchOrd | bodyFields.memo — internal req# / vendor invoice# | "REQ-04472" | REAL |
| 5 | PurchOrd | bodyFields.location | NJ Heartland | REAL |
| 5 | PurchOrd | bodyFields.createdfrom | NULL (no SO link) | REAL |
| 5 | PurchOrd | bodyFields.expected_delivery | datetime | REAL |
| 12 | ItemRcpt | bodyFields.createdfrom | "PO-7910" | REAL |
| 12 | ItemRcpt | bodyFields.status | "Received" | REAL |
| 12 | ItemRcpt | bodyFields.location | NJ Heartland | REAL |
| 13 | inventory_balance | quantityavailable (D1) | += received qty at location | REAL |
| 14 | (event) | events.event_type | "po.finance_alert_fired" | STUB |
| 16 | VendBill | bodyFields.tranid | "VB-2310" | REAL |
| 16 | VendBill | bodyFields.createdfrom | "PO-7910" | REAL |
| 16 | VendBill | bodyFields.memo — internal req# / vendor invoice# | "REQ-04472" (no customer PO#) | REAL |
| 16 | VendBill | bodyFields.amount | vendor invoice amount | REAL |
| 17 | VendPymt | bodyFields.appliedto | "VB-2310" | REAL |
| 20 | PurchOrd | bodyFields.status | "Closed" | REAL |
Path 2 POs have no Sales Order origin, so the customer PO# threading invariant from R592 does not apply. The memo field on PurchOrd and VendBill carries an internal req# or vendor invoice# instead.
bodyFields.createdfrom = NULL · bodyFields.memo = "REQ-04472" (internal req#)bodyFields.createdfrom = po.id · no customer PO# inheritancebodyFields.memo = "REQ-04472" · no tranid/initialtranid combo threadAudit recipe to confirm a PO is correctly classified as Path 2: SELECT id, memo, createdfrom FROM purchase_orders WHERE id=? AND createdfrom IS NULL — if createdfrom points at a row in transactions with type='SalesOrd', this should be Path 1 instead.
po_lifecycle_inventory_or_build_path · risk 2 REALpurchase_orders · purchase_order_lines · item_receipts · inventory_balance · vendor_bills · vendor_payments · transactions · events · proposed_actionsinventory_balance.quantityavailable += received qty at location_id on Item Receiptpurchase_orders.createdfrom IS NULL OR the parent is not a SalesOrd. If parent is an SO, classify as Path 1 instead.