Path 1 is the PO process when triggered by a Sales Order — drop ship vendor orders or customer-specific fulfillment. For each dropship_line on the SO, a Purchase Order is created FROM the SO (purchaseorder.createdfrom = so.id), preserving the SO ↔ PO link. The customer PO# threads via PO.bodyFields.memo = SO.otherrefnum (e.g. "72622") and PO.lineFields.links[].tranid = "<so.tranid> / <customer_po>" (e.g. "1217 / 72622"). Vendor ships product (direct to customer for true drop ship, or to GFS for crossdock). Item Receipt closes the PO line (skipped when direct dropship truly bypasses warehouse). After Item Fulfillment ships the SO to the customer, the universal ★ automation alert fires to Finance. Vendor Bill carries the customer PO# thread on three fields: memo, tranid, and initialtranid. Workflow contract: po_lifecycle_sales_order_connected_path (risk 3). The customer-side invoice / dunning / payment cycle runs in parallel on the SO chain — see SO Path 3 dropship for that side.
| Step | NS record | Field | Sample value | Status |
|---|---|---|---|---|
| 1 | SalesOrd | bodyFields.otherrefnum (thread start) | "72622" | REAL |
| 1 | SalesOrd | bodyFields.tranid | "1217" | REAL |
| 4 | PurchOrd | bodyFields.tranid | "PO-7833" | REAL |
| 4 | PurchOrd | bodyFields.createdfrom | 1217 (SO id) | REAL |
| 4 | PurchOrd | bodyFields.memo — customer PO# threading | "72622" | REAL |
| 4 | PurchOrd | lineFields.links[].tranid — SO+PO# combo | "1217 / 72622" | REAL |
| 4 | PurchOrd | bodyFields.entity — vendor | 891 (Cardinal Foods) | REAL |
| 4 | PurchOrd | bodyFields.expected_delivery | datetime | REAL |
| 9 | ItemRcpt | bodyFields.createdfrom | "PO-7833" | REAL |
| 9 | ItemRcpt | (inherits) memo via NS std linkage from PO | "72622" | REAL |
| 11 | ItemShip | bodyFields.createdfrom | 1217 (SO id) | REAL |
| 11 | ItemShip | bodyFields.otherrefnum | "72622" | REAL |
| 12 | (event) | events.event_type | "po.finance_alert_fired" | STUB |
| 13 | VendBill | bodyFields.memo — customer PO# threading | "72622" | REAL |
| 13 | VendBill | bodyFields.tranid | "1217 / 72622" | REAL |
| 13 | VendBill | bodyFields.initialtranid | "1217 / 72622" | REAL |
| 13 | VendBill | bodyFields.createdfrom | "PO-7833" | REAL |
| 14 | VendPymt | bodyFields.appliedto | "VB-2244" | REAL |
| 17 | PurchOrd | bodyFields.status | "Closed" | REAL |
Path 1 carries the customer PO# ("72622") through the PO chain into the vendor bill. The thread appears in 6+ field positions across 4 NS records on the vendor side alone (and threads into the SO sidecar for customer-side records):
bodyFields.otherrefnum = "72622"bodyFields.memo = "72622" + lineFields.links[].tranid = "1217 / 72622"memo from PO via NS std linkage (when applicable)otherrefnum = "72622" (inherits from SO; runs on SO chain)memo = "72622" + tranid = "1217 / 72622" + initialtranid = "1217 / 72622"Single-grep recipe across the Path 1 PO chain: grep "72622" across purchase_orders.memo + vendor_bills.memo + vendor_bills.tranid + vendor_bills.initialtranid lights up every record on the vendor side. Combine with transactions.otherrefnum + customer_invoices.otherrefnum for the full end-to-end trace.
po_lifecycle_sales_order_connected_path · risk 3 REALpurchase_orders · purchase_order_lines · item_receipts · item_fulfillments · customer_invoices · customer_payments · payment_applications · vendor_bills · vendor_payments · transactions · eventsPO.memo == SO.otherrefnum AND VendBill.memo == PO.memo AND VendBill.tranid LIKE '%' || customer_po_number — enforces customer PO# threading invariant end-to-end