# PurchaseOrderLineInput

input type

One caller-supplied PurchaseOrder line (create + wholesale draft edit — lean 8: the receiving LF, unit cost and arrival are server-defaulted from the OrgVendor / OVI when omitted; a line whose LF or cost resolves to NOTHING refuses VALIDATION/INVALID naming the gap).

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `variantId` | [ID](/types/#scalars) `ID!` | yes | The variant to order — tenant-scoped + ACTIVE; OVI-gated when the OrgVendor sets requireCatalogItem (a missing live OVI refuses NAMED). |
| `logicalFacilityId` | [ID](/types/#scalars) | no | The receiving LF — OPTIONAL (defaults from the OrgVendor defaultShipToLogicalFacilityId); must belong to the buying org. |
| `quantity` | [String](/types/#scalars) | no | The ordered quantity (decimal string, strictly positive); below the OVI effective moq refuses NAMED. UNIT entry — exactly ONE of {quantity, the pack pair} per line. |
| `unitCost` | [MoneyEntryInput](/types/MoneyEntryInput/) | no | The merchandise unit cost — OPTIONAL (defaults from the OVI listCost; a pack-denominated OVI derives listCost / unitsPerPack, EXACT at 4 dp or the line refuses naming the cure — lean 7); REQUIRED effective after resolution; must match the PO snapshot currency. |
| `manufacturerId` | [ID](/types/#scalars) | no | Optional per-line manufacturer. |
| `expectedArrivalAt` | [String](/types/#scalars) | no | Optional expected-arrival instant (UTC ISO-8601; defaults from lead time when either level declares one). |
| `purchasePackId` | [ID](/types/#scalars) | no | PACK entry: the pack to enter in — tenant + ACTIVE + must package THIS line variant; the stored quantity derives as packQuantity x unitsPerPack. Comes as a pair with packQuantity. |
| `packQuantity` | [Int](/types/#scalars) | no | The pack count (1..999999) — present iff purchasePackId is. |
| `orderLineRef` | [SpecialOrderLineRefInput](/types/SpecialOrderLineRefInput/) | no | No further notes. |
