Inventory
ION tracks parts by serial number or lot number. You can also leave a part untracked and record only its quantity. Part inventory holds information about a part and sets it up so you can track it in runs and aBOM construction.Inventory tracking types
Query part inventories
List part inventory with a filter:Create part inventories
When you specify no quantity, the inventory object has a quantity of 0. You can also autogenerate the serial number or lot number. Create the inventory with this mutation:Update inventory items
You can change almost all the fields on an inventory object except its relation to the part it is an instance of. All the quantity and tracking-type validations enforced on creation are also enforced on update. Update the inventory with this mutation:Delete part inventories
Delete the inventory with this mutation:Issue parts to runs
Part kits
Part kits let you allocate specific parts and quantities for a run. To create a part kit, you must already have a run. See the Runs example for how to create one. To remove parts from inventory and attach them to the run that consumes them, use a part kit object.
Create a kit with this mutation:
Issue inventory to kits
To move parts from inventory into the part kit, use theissueItemToKit mutation. Whether a part is serial-tracked, lot-tracked, or untracked, you reference its partInventoryId and, when the item is not serial-tracked, the quantity you want to issue to that kit:
Issue an item to the kit with this mutation:
issueItemToKit mutation. When you issue parts to a kit, the kit shows the quantity of that required part fulfilled as issuedQuantity. The quantity is decremented from the original inventory object.
When your organization enforces pickable locations, issueItemToKit refuses inventory that sits at a location not marked pickable, with a VALIDATION_ERROR:
Kitting WIP inventory for outside processing
When the organization settingallowWipOspKitting is on, WIP inventory can be issued to a kit if it’s linked to a purchase order line through an outside processing (OSP) run step. PartInventory.isLinkedToOspPoLine reports that, and you can filter on it.
Move parts back to inventory
Once a serial-tracked part is built, move it back to inventory for use on a higher-level assembly. Move an item back to inventory with this mutation:Query part kits
List part kits with a filter:Update several kits in one request
updatePartKits applies the same update path as updatePartKit to each item in the list, so every item carries its own etag:
Plan kit picks
ThepartKitPickList query returns the inventory to pull to fulfill one or more kits. pickStrategy takes a single value, FIFO.
FIFO ranks candidate inventory site first, then receipt date. A kit’s site is the top-level ancestor of the kit’s own location (locationId). Stock at that site ranks ahead of stock anywhere else, whatever its age, and within each site the oldest receivedOrCreatedDate goes first. Off-site stock is drawn on only once stock at the kit’s site can’t cover the line. A kit with no locationId has no site, so its candidates rank by receipt date alone.
Eligible inventory is available stock of any part that can fulfill the kit item, net of what is already kitted. Depending on your settings, stock at locations that aren’t marked pickable is excluded.
Generate a pick list
PasspartKitIds to plan a pick across a batch of kits. The response groups inventory into location stops in walk order, and splits each row’s quantity per kit:
quantityToPull is the total to pull from that inventory row across every kit in the request, which is the sum of its kitAllocations. It isn’t the row’s on-hand quantity. No inventory is allocated twice across the kits in one request.
Pass partKitId instead to plan a pick for a single kit. That form returns the flat partInventories list, already in walk order, and locations is null. Each entry is the whole inventory record, so read the quantity to pull from the kit item rather than from quantity:
partKitId or partKitIds. Supplying both, or neither, is a validation error. partKitIds accepts at most 2,000 kits per request by default, and an empty list returns an empty pick list. Add the optional locationId argument to restrict the pick to one location and its sub-locations.
Rows are item-major: each row is one inventory record, and kitAllocations splits it across the kits that draw on it, rather than one row per kit.
Stops are ordered by the pickSequence on each location, which you set through updateLocation. Locations that carry a sequence come first, in ascending order, followed by locations with no sequence in natural name order, so C-S-Bulk-2 precedes C-S-Bulk-10. Inventory with no location trails every real stop. stopNumber counts from 0.
Check whether a kit can be filled
fillabilityPercent on a part kit is the share of the kit’s remaining need, from 0 to 100, that a pick list can allocate right now. isFullyFillable is true when that share is the whole remaining need. Both are filterable and sortable:
locationId can allocate less still because the score counts stock in every location.
List the parts that can fulfill a kit item
acceptablePartIds on a part kit item returns every part that can fulfill it, each tagged with why it qualifies:
partIdInformation takes one of four values:
For more information about the setting behind the two interchangeable values, see Enable part interchangeability.