High-altitude master view of the PO process — the vendor side of the transaction. POs originate in one of two ways: Path 1 connected to a Sales Order (drop ship vendor orders or customer-specific fulfillment), or Path 2 for inventory replenishment, assembly build components, packaging, or general purchasing. Master dispatches into one of two sub-contracts — Path 1 SO-connected (drop ship; carries customer PO# threading from the SO chain via PO.memo and VendBill.memo/tranid/initialtranid) or Path 2 inventory/build (no customer PO# threading; memo carries internal req# or vendor invoice#). After Item Receipt, the universal ★ automation alert fires to Finance — receiving happens at the dock but billing/payment is Finance-owned. Finance reviews PO + Item Receipt + supporting docs before processing the Vendor Bill. PO closes once items received + billed + paid + any shortages/damages/substitutions/pricing resolved. See path detail docs for field-level depth.
Tip: click a step number in the navigator above to highlight that node. Toggle HITL gates / Edge labels / Escalation paths with the layer buttons. Hover any node's "i" icon for plain-English popover.
items.dropship = true OR items.special_order = truevendors.status = 'active' · terms known · item purchasablememo + createdfrom = so.id.PurchOrdpurchase_orders · purchase_order_lines · transactions (PurchOrd)memo = customer_po_number · createdfrom = so.id · lineFields.links[].tranid = "<so.tranid> / <customer_po>"memo = internal req# / vendor invoice# · createdfrom = NULLcreatedfrom IS NOT NULL AND parent is a Sales Order → po_lifecycle_sales_order_connected_pathpo_lifecycle_inventory_or_build_pathPurchOrd · ItemRcpt · ItemFulfill · VendBill · VendPymtPO.memo = SO.otherrefnum · VendBill.memo/tranid/initialtranid carry customer PO#PurchOrd · ItemRcpt · VendBill · VendPymtinventory_balance.quantityavailable += received qty at location_idmemo carries internal req# or vendor invoice#ItemRcpt (createdfrom = po.id)item_receipts · inventory_balance (Path 2)events.po.finance_alert_firedVendBill · VendPymtmemo = customer_po · tranid = initialtranid = "<so.tranid> / <customer_po>"memo = internal req# / vendor invoice# (no customer PO#)PurchOrd → 'Closed'events.po.closed| kind | name | purpose |
|---|---|---|
| D1 table | purchase_orders | PO header mirror · createdfrom, memo, entity, status |
| D1 table | purchase_order_lines | PO line-level mirror · item, qty, rate, lineFields.links[].tranid |
| D1 table | item_receipts | vendor receipt closes PO line · createdfrom = po.id |
| D1 table | item_fulfillments | Path 1 sidecar · ships SO line to customer |
| D1 table | vendor_bills | VendBill mirror · Path 1 carries customer PO# on memo/tranid/initialtranid |
| D1 table | vendor_payments | VendPymt mirror · appliedto = vendor_bill.id |
| D1 table | inventory_balance | Path 2 credits qty at location_id on Item Receipt |
| D1 table | transactions | PurchOrd / ItemRcpt / VendBill / VendPymt rows |
| D1 table | events | po.transmitted · po.finance_alert_fired · po.closed |
| Workflow | purchase_order_lifecycle | master dispatcher (risk 2) |
| Workflow | po_lifecycle_sales_order_connected_path | Path 1 sub-contract (risk 3) |
| Workflow | po_lifecycle_inventory_or_build_path | Path 2 sub-contract (risk 2) |
| NS record | PurchOrd · ItemRcpt · VendBill · VendPymt | system-of-record across the 2 paths |
createdfrom. Stable but worth surfacing on intake.events.po.finance_alert_fired. NS workflow trigger config pending Mike's deploy.<so.tranid> / <customer_po>" combo, auto-match against originating PO without manual keying.
For PO Path 1 (SO-connected dropship) and any PO where GFS pays freight (vendor freight collect, prepay-and-add), freight_routing_check fires after PO save. It classifies the freight type and, when needed, routes the record to the logistics review queue. Path 1 dropships carry the customer PO# through to the BOL; Path 2 (inventory) POs typically don't trigger this check unless inbound freight is on GFS's account.
Side-step in the PO flow (runs alongside Item Receipt scheduling) · HITL-gated. See ns-freight-routing-check.html + ns-logistics-review-flow.html.