Serial numbers
EVA facilitates serial number validation and management by means of several services, which is accompanied by regex validation for an efficient way of checking validity. Once configured, they will be visible throughout the Apps, and Admin Suite.
The serial numbers feature is a work in progress. While most of the back-end work is finished, front ends are currently not ready yet for any serial number requirements other than 0.
Serial number usage
Serial numbers can be used throughout EVA to a degree that best suits your way of working.
This can categorised in the following four ways
- None: By default EVA does not track serial numbers, meaning practically that a serial number is never required
- Sales: You can make serial numbers required for your day to day sales and returns
- Sales (practically meaning Carry out)
- Returns
- Click & Collect
- Ship from Store
- OwnershipChange: This will make EVA require a serial number scan for any kind of movement that entails a change of ownership
- Sales, including SFS and C&C
- Returns
- shipments, including Interbranch, incoming shipments (POs) and RTS
- StockMovements: Every single stock movement of a product with a serial number requires verification
- Sales
- Returns
- Shipments
- Cycle counts
- Full stock counts
- Manual stock movements
- Reservation cleanups
- (Basically all kinds of stock movements)
To make this more insightful, we've created the following matrix, which shows exactly what EVA will do - or explicitly block - for each flow in combination with each type of owner.
Current OU | Non sellable | Different OU | Customer | Unknown SN | No match | |
---|---|---|---|---|---|---|
Sale | Accept | Block | Cycle Count | Accept | Accept | Block |
Referenced Return | Cycle Count | Cycle Count | Block | Accept | Block | Block |
Unreferenced return | Block | Block | Block | Accept | Block | Block |
Incoming shipment | Cycle Count | Accept | Cycle Count | Cycle Count | Block | Block |
Return to Supplier | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Interstore order | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Ship from Store | Accept | Block | Cycle Count | Cycle Count | Accept | Block |
Click and Collect | Accept | Block | Cycle Count | Cycle Count | Accept | Block |
Cycle counts | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Repairs | Cycle Count | Cycle Count | Cycle Count | Accept | Accept | Block |
Cases | Cycle Count | Cycle Count | Cycle Count | Accept | Accept | Block |
Full stock count | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Move stock | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Adjust stock | Accept | Accept | Cycle Count | Cycle Count | Accept | Block |
Exchange | Block | Block | Block | Accept | Accept | Block |
User bought products | Block | Block | Block | Accept | Accept | Block |
Taking the Sale flow for example:
- If a serial number is owned by the current OU, EVA allows the sale of the serial number product.
- If the serial number product is registered on a non-sellable stock label however, EVA blocks the sale.
- If the serial number product is registered on another OU, EVA will still allow the sale, but ask for a cycle count (since obviously there are some issues with stock)
- If the serial number product is scanned, but registered to a customer, then the serial number is accepted
- If the serial number on the product is unknown, but it does match the Regex pattern, the sale is allowed.
- If the serial number on the product does not match the Regex, the sale is blocked.
Serial number configurations
We start off by creating serial number configurations, for now this is done via designated services.
Soon serial number configuration will become even easier, when it's available in Admin Suite.
The service in question isCreateSerialNumberConfiguration
, which comes with the following properties:
- Name - has to be unique
- Description
- Requirement - specify for what kind of flow a serial number will be required
- -1 (None)
- 0 (Sales)
- 1 (OwnershipChange)
- 2 (StockMovements)
- ValidationRegex (optional) - when set, all serial numbers entered for products with this configuration must comply with this regex or be rejected
Additionally, the following list of related services is available for serial number configuration management.
ListSerialNumberRegistrations
to list registrations and their outcome for a specific SerialNumber.- GetSerialNumberConfigurations to display all available configurations
- UpdateSerialNumberConfiguration to updates existing ones
Serial number creation
There are several ways of creating serial numbers, each with their own advantages and use cases.
PushSerialNumbers
CreateSerialNumber
SupplierShipPurchaseOrder
1. PushSerialNumbers
This service allows you to introduce a huge number of existing serial numbers to EVA directly.
Take note that you can directly add an OU and stock label.
{
"SerialNumbers": [
{
"OrganizationUnitID": 123,
"ProductID": 123,
"SerialNumber": "string",
"StockLabelID": 123
}
]
}
2. CreateSerialNumber
The second way is by creating the serial number product combination in EVA directly, by using CreateSerialNumber
.
This simple service requires the following two properties:
- ProductID
- SerialNumber
This is best used when you're already on EVA, and want to start taking advantage of serial numbers.
3. Purchase order shipments
You can also introduce serial numbers to EVA by informing your OUs which serial number products are coming their way via purchase order shipments. This is done by means of the SupplierShipPurchaseOrder
service.
As in the following sample, all serial numbers can be added to the Lines of the product in the service call. This way all products come with a specific serial number attached.
The subsequent receive goods task then allows the store employee to choose whether to accept the entire shipment, while the detailed inspection is optional. The latter is a must however when the specified quantity does not correspond with the actual quantity.
The OU is now owner of the serial number.
{
// SupplierShipPurchaseOrder
"BackendID": "string",
"BackendSystemID": "string",
"Confirmations": [
{
"BackendID": "string",
"CustomFieldsByBackendID": {
"key": {
"ArrayValues": [
{
"re": "cursion"
}
],
"BlobValue": "fef6dd95-c2a7-4237-805c-afd3257a8057",
"BoolValue": true,
"DateTimeValue": "2024-11-06",
"NumberValue": 123.456,
"StringValue": "string"
}
},
"ExpectedDeliveryDate": "2024-11-06",
"Lines": [
{
"BackendID": "string",
"Barcode": "string",
"CustomID": "string",
"Quantity": 123,
"SerialNumbers": [
"SN123456789a",
"SN123456789b",
"SN123456789c",
"SN123456789d"
]
}
],
"TrackingCode": "string",
"TrackingLink": "string"
}
],
"ID": 123,
"ShipToOrganizationUnitBackendID": "string"
}
Other relevant services
The following shipping services also support serial numbers.
ShipPurchaseOrder
ShipExternalOrder
ReceiveShipment
ReceivePurchaseOrderShipment
Flow-specific practices
Sales
In practice, when you've configured your serial number configuration correctly, all the store employee needs to do is scan a serial number to add the product to the active basket.
All serial number products will be unstacked, in other words: displayed as invidual order lines.
The same goes for Click & Collect and Ship from Store.
Returns
Returns are easier than ever: all you have to do is scan the serial number of the product. This will turn the order into a (referenced) return. This makes it especially easy for returns with multiple of the same product.
Keep in mind that if the serial number is unknown to EVA, the return cannot be processed.
This also means that if a customer references an order with the same product, coming to return the product, the product in question can only be returned if the serial number of the product matches the one which the customer returns.
This ensures a customer can for example not buy a new product, intending to return their damaged one.
RTS
With both configuration 1 and 2, the creation of an RTS order requires scanning of serial numbers.
When creating an RTS request via Admin Suite, an RTS order requiring specific serial numbers can be created.
This is especially useful when there are specific batches which need returning.
Receiving goods
An employee can choose whether to fully receive the entire shipment or to perform a detailed inspection, as based on the Shipment:OverrideUserDefinedReceiveMethod setting.
When opting to receive goods via detailed inspection, the user is expected to scan solely the serial numbers.
Mind that this is only possible when the serial numbers were included and matched with the products in the shipment - thus, known in EVA. If this is not the case, the user will have to scan both the product ID and the serial number to match them. To make this easier, quantity selectors are disabled and the expected serial numbers are displayed.
Mind that scanning unexpected serial numbers is not allowed here.
Cycle counting
Usually when it comes to cycle counting, only the serial numbers will have to be scanned, since they're often already known in EVA.
If they're unknown however, they can still be accepted, but only if they match the serial number configuration's Regex pattern.
Cycle count confirmations
Stock movements are only made after completing the cycle count confirmation task.
During this task, users will not be able to make changes as only the deviations are shown and the user will either have to accept deviations or perform a recount.
Stock movement tasks
Moving and adjusting stock is similar to how cycle counting works: you'll have to scan serial numbers explicitly. You cannot add stock directly via quantity selectors.
Pick tasks
When performing a pick task for a C&C or SFS flow, the serial number is registered only to a specific order line upon picking the product. This makes sense considering a product is usually added to a package, which is then sealed, after performing the task.