Pick Confirm

The Pick Confirm API allows you to perform cubed or non-cubed picking. Also:

  • The Pick Confirm API supports picking of multiple allocations in a single payload.
  • If one or more Pick updates fail we report an error only for the first failed Pick.
  • If the First Pick fails, then the rest of the Picks in the payload does not get Picked.
Note: This is a new API meant to replace the existing legacy `pick_confirm` API. The legacy API will eventually be retired so no further enhancements will be made to it. New functionality will instead be added to this API as part of the lgfapi suite.

This API supports features of the legacy API including the following new parameters:

  • mhe_mode_flg - true/false; default true
  • async_flg - true/false; default true
  • short_flg - true/false; default false
  • Replaces using the legacy "action_code" = "SHORT".

The Pick Confirm API can be called using the following POST request:

POST ..lgfapi/v10/pick_pack/pick_confirm/

Note About Distribution

This API has been updated so that it will not auto-close an OBLPN when there are cancelled allocations going into it. Also note, for distribution, it is recommend that you use the Pack OBLPN Distribution API.

Note About Tasks

If an allocation is completed using the pick_pack/pick_confirm API using one user, based on the modified user for the Task, the application restricts additional users from completing Picks through an API call.
Note: If you are not using the RF to complete Picks, it is not necessary to generate Tasks and Picks based on Tasks. You can perform Pick Pack directly without generating the Tasks using the Pick Pack API.

Allocation Unit of Measure

Note: If pick confirmation is called with a source location from active, and the allocation Unit of Measure (UOM) is “Cases” or “Packs”, the UOM_Qty considered will always be in terms of the item’s standard pack or case quantity. This is because allocation from active will always happen in terms of the underlying item’s standard pack or standard case quantity. If the allocation is from reserve, then the UOM_Qty will be relevant if the allocation UOM passed is “Cases” or “Packs”.

Request Parameters

Pick List

These represent the parameters required for a single pick/short:

Name Required Type Default Description
facility_id Integer Facility context by id.
facility_id__code String Facility context by code.
company_id Integer Company context by id.
company_id___code String Company context by code.
wave_nbr X String Associated wave.
order_nbr X String Associated sales order.
item_alternate_code C String Item identifier.
item_barcode C String Item identifier.
qty X Number 0 Quantity to be acted upon.
batch_nbr String Inventory batch/lot.
uom_qty Number Filter on Case or Pack quantity when searching for allocations.
allocation_uom String "UNITS", "PACKS", or "CASES".
reason_code String Reason for short.
pick_location C String From location.
from_container_nbr C String From container.
to_container_nbr C String LPN inventory is packed into. Not required for short.
update_inventory_on_short_flg Boolean False Also short source inventory on pick short?
close_container_status String "packed" Final OBLPN status: "picked" or "packed".
short_on_close_flg Boolean False Should any remaining unpacked quantity shorted?
mhe_system_code C String MHE system.
short_flg Boolean False Is this a short?
serial_nbr_list C String List of Serial Numbers separated by a comma.

invn_attr_a

C String Inventory attribute A

invn_attr_b

C String Inventory attribute B

invn_attr_c

C String Inventory attribute C

invn_attr_d

C String Inventory attribute D
invn_attr_e C String Inventory attribute E

invn_attr_f

C String Inventory attribute F

invn_attr_g

C String Inventory attribute G

invn_attr_h

C String Inventory attribute H
invn_attr_i C String Inventory attribute I
invn_attr_j C String Inventory attribute J
invn_attr_k C String Inventory attribute K
invn_attr_l C String Inventory attribute L

invn_attr_m

C String Inventory attribute M

invn_attr_n

C String Inventory attribute N
invn_attr_o C String Inventory attribute O
Expiry_date C Date Format YYYY-MM-DD
orig_iblpn_nbr C String If the original allocation is from the LPN and substitution is happening from a different LPN.
orig_batch_nbr C String Batch Number associated with the original allocation.
orig_expiry_date C String Expiry Date associated with the original allocation.
orig_inventory_attribute_a to orig_inventory_attribute_o C String Inventory attributes value associated with the original allocation.
cubed_oblpn_exact_match_only_flg Boolean False When passed as true, in cubed scenarios (when the OBLPN is created at wave time), the system will be enabled optimizations to make processing faster.

Validations

  • Facility must be in user's eligible facilities and not be ambiguous.
  • Possible if there is a Store and a DC with the same code.
  • Company must be in user's eligible companies.
  • If facility or company context is not included in the input parameters, user defaults are used.
  • User cannot pass both "facility_id" and "facility_id__code" in the same request.
  • User cannot pass both "company_id" and "company_id_code" in the same request.
  • "mhe_system_code" is required if "mhe_mode_flg" is True.
  • Only one of "item_alternate_code" or "item_barcode" is allowed.
  • Only one of "pick_location" or "from_container_nbr" is allowed.
  • "to_container_nbr" is required for "pick" operation, but is not required for "short".
  • If the allocated inventory for the given order detail in the API request does not match with the inventory attribute values passed in the API, then the system will return the error response "Inventory attribute combination is not allocated for order %order number%."

Request-Level Flags

Name Required Type Default Description
mhe_mode_flg Boolean True When true, enforce that "mhe_system_code" is provided.
async_flg Boolean True Run API asynchronously?
suppress_serial_warning_flg Boolean True

If the suppress_serial_warning_flg" is set to "false":

  • System should validate the validations pertaining to serial numbers sent in the API, which are of type Warning & Error .
  • If user is not sending serial numbers in the API request, then still user should be allowed to process the API without serial number (Existing behavior).

The following is an example JSON request:

{   
 "mhe_mode_flg": true,
 "async_flg": true,
"suppress_serial_warning_flg":true,
    "pick_list": [{ "facility_id__code": "QATST01",
        "company_id__code": "QATSTPC",
        "wave_nbr": "WVQATSTPC072935",
        "order_nbr": "CPORD102720C1",
        "item_barcode": "RUG99",
        "qty":3,
       "serial_nbr_list": [
                          "SLN1",
                          "SLN2",
                          "SLN3"],
"invn_attr_a" : "TESTA",
"invn_attr_b" : "TESTB",
"invn_attr_c" : "TESTC",
"invn_attr_d" : "TESTD",
"invn_attr_e" : "TESTE",
"invn_attr_f" : "TESTF",
"invn_attr_g" : "TESTG",
"invn_attr_h" : "TESTH",
"invn_attr_i" : "TESTI",
"invn_attr_j" : "TESTJ",
"invn_attr_k" : "TESTK",
"invn_attr_l" : "TESTL",
"invn_attr_m" : "TESTM",
"invn_attr_n" : "TESTN",
"invn_attr_o" : "TESTO",
       "from_container_nbr": "CNTST0100031583",
        "to_container_nbr": "CPOBLPN0106,
       "update_inventory_on_short_flg": true,
        "close_container_status" : "packed",
       "mhe_system_code": "CONVCP1",
        "short_flg": false  }]

}

The following is an example XML request:

<request>
<mhe_mode_flg>false</mhe_mode_flg>
<async_flg>false</async_flg>
<pick_list>
<list-item>
<facility_id_code>FAC</facility_id_code>
<company_id>1</company_id>
<wave_nbr>WAVE001</wave_nbr>
<order_nbr>ORDER001</order_nbr>
<item_barcode>ITEM1234</item_barcode>
<qty>10</qty>
<from_container_nbr>IBLPN0001</from_container_nbr>
<to_container_nbr>OBLPN0001</to_container_nbr>
<short_flg>false</short_flg>
</list-item>
</pick_list>
</request>

Currently, the Pick Confirm API (URL: pick_pack/pick_confirm/) sends the Batch Number that is used during picking. If the batch number provided in the API is not the same as the original allocated inventory, or if the location where the pick is happening contains inventory pointing to multiple batches for the same SKU, then substitution will happen against one of the allocated inventory. (For example: If Location has Batch1 and Batch2 allocated for Order1, during picking if the user sends Batch3 for Order1, the system will substitute against Batch1 or Batch2).

Note: To perform substitution by batch API, a new field called Original Batch Number for performing substitution will be required in upcoming releases after 21B. The behavior of the inbuilt substitution by only sending the batch number field will not be supported in the upcoming releases. Customers utilizing this API (pick_pack/pick_confirm/) please keep note of this new change in upcoming releases.
Note: If some of the inventory attribute values are not passed in the Pick request, then system will assume it to be wild card and matches with the allocated inventory. if the allocated inventory for the given order detail in the API request is not matching with the inventory attribute values passed in the API, then system should return error response "Inventory attribute combination is not allocated for order %order number%".

Substitution

In scenarios when the original allocated inventory is not available, you can now substitute with another inventory. The Pick Confirm API is enhanced to support substitutions where you can substitute or replace an inventory with another available inventory via Pick Confirm API. As shown below, the following fields were added to the Pick List:

Parameters

Name Required Type Default Description
Orig_IBLPN_Nbr C String If original allocation is from LPN & substitution is happening from different LPN.
Orig_Batch_nbr C String Batch Number associated with the original allocation.
Orig_expiry_date C String Expiry Date associated with the original allocation.
Orig_Inventory_Attribute_A to Orig_Inventory_Attribute_O C String Inventory attributes value associated with the original allocation.
  • Substitution will happen based on the value defined in the above fields, If the value is not defined in the above fields (LPN ,Batch, Expiry date), then the system will consider it as normal picking flow (Without substitution).
  • If original (Batch/Expiry/Attributes/LPN) values are not sent in the pick confirm API request, then after sending a different batch number (other than the allocated batch number), the system will perform implicit substitution which is an existing behavior.
  • If any of the Original values (Attribute/Expiry date/LPN) are sent in the pick confirm API, and the user wants a batch number to also be part of substitution, then the original batch number explicitly has to passed in the API. In this case, implicit substitution of the batch number will not happen.
	{
	"mhe_mode_flg": false,
	"async_flg": true,
	
	"pick_list": [{
	"facility_id__code": "QATST01",
	"company_id__code": "QATSTPC",
	"wave_nbr": "WVQATSTPC072935",
	"order_nbr": "CPORD102720C1",
	"item_barcode": "RUG99",
	"qty":2,
	"uom_qty":4,
	"orig_iblpn_nbr": "CNTST0100031599",
	"from_container_nbr": "CNTST0100031583",
	"to_container_nbr": "CPOBLPN010621C1",
	"orig_batch_nbr":"BAT2021",
	"batch_nbr":"CPBAT0708C12",
	"update_inventory_on_short_flg": true,
	"close_container_status" : "packed",
	"mhe_system_code": "CONVCP1",
	"short_flg": false
	},
	{
	"facility_id__code": "QATST01",
	"company_id__code": "QATSTPC",
	"wave_nbr": "WVQATSTPC072935",
	"order_nbr": "CPORD102720C1",
	"item_barcode": "RUG99",
	"qty":2,
	"pick_location": "CPLOC2021AA",
	"to_container_nbr": "CPOBLPN010621C1",
	"orig_batch_nbr":"BAT2021",
	"batch_nbr":"CPBAT0708C16",
	"update_inventory_on_short_flg": true,
	"close_container_status" : "packed",
	"mhe_system_code": "CONVCP1",
	"short_flg": false
	
	}
	
	]}