Magento’s latest version 2.3.0 introduced a much discussed feature, Magento MSI, or Multi Source Inventory. It gives Magento more flexible, more capable inventory management functions that match Magento’s already powerful multi site capabilities.
In a sentence: Inventory is managed across multiple sources that are mapped to sales channels (aka websites) via stocks .
This gives businesses the ability to:
- Track physical inventory across multiple physical sources
- Implement more complex multi source (or Omnisource) fulfillment strategies
The New Concepts:
Without MSI, Magento has a single QTY value for all simple products. A purchase of a product deducted directly from that number.
MSI introduces a new figure, Salable Quantity, that exists in tandem with QTY. Essentially, it’s an intermediate calculation to ensure that you don’t oversell, while the QTY is maintained across at source level and only updates with shipments or returns.
In order to maintain an accurate salable quantity, reservations made against salable quantities with unfulfilled purchases. In terms of what you see in the admin panel, there isn’t much difference but this is one of the features that allows tracking of salable inventory across multiple channels/websites.
A core component of MSI, sources represent physical inventory sources. Sources will generally represent warehouses, brick and mortar stores, or drop shippers but can be structured according to individual business structures.
Stocks are simply a tool to organize sources into groups according to business flows. Sales channels (websites) are mapped to one or more sources via stocks . Taking a simple example, if we have both a warehouse and a brick and mortar store that are capable of fulfilling US orders, we might assign both of these sources to a stock called “US Ecommerce,” which serves as our stock for our US storefront (website).
How They Add Up
Let’s take a look at the graphic again. Below we have a single warehouse, with a single online sales channel/website. Our source is called “Warehouse” and our stock is called “Bicycle Shop Marketplace.” Salable Quantity at the Stock level is determined by the Quantity at Source level, minus any thresholds we’ve set, minus any pending orders on eBay(note we’ve just grabbed the the magento graphic here – eBay can be considered a website here).
This is essentially the non-MSI magento stock setup, the only exception being that salable quantity is takes two thresholds into its calculation.
Let’s say our sales are growing and we’ve decided to open a new UK brick and mortar store (Flagship store), and two EU websites: UK and Germany (DE).
These two new websites can have orders fulfilled with inventory from both our original warehouse and the new brick and mortar store. This is achieved by assigning these two independent sources to a single stock, “Bicycle Shop UK,” which in turn serves inventory for both of the new websites.
Orders from our eBay storefront continue to be fulfilled only by our warehouse.
Continuing to grow, we open up a new US Brick and mortar store, and build a new US website.
Fulfillment for our other websites remains unchanged, but we’ve decided to fulfill orders for our new US website from the two previous sources, as well as our new brick and mortar store.
This is accomplished by creating a stock for the US website which has all three sources assigned to it. This brings us back to the full graphic:
*Editors note: we’re starting form scratch and not using the same source, stock and storefront names used in the above diagrams.
Below is a brief look at where MSI shows up in the Magento admin panel:
Each installation starts out with a Default source that can’t be disabled. If you’re setting up multiple sources you can rename the default source to better reflect the warehouse or store that it represents.
The only mandatory fields for a source are Name, Code (development use), and Country. Additional fields for unique source contact info and location data that would be utilized for any distance-based source selection algorithm.
Due to the fact that sources are integrally tied to order and shipment histories, they can’t be deleted. However, they can be disabled with the same effect, removing them out from any fulfilment equation.
When setup is completed, your “sources” page should represent all your physical inventory sources as in our sample below (Three US and one Canadian):
Again, stocks are used for source organization and mapping, so different operation’s stock setup will be unique. In the below example, we’ve set up our “US Ecommerce” stock to represent two of our US sources:
As the object that connects sources to sales channels, both websites and and inventory sources are selected in the Stock view (in this case we’ve added Amazon to represent multi channel operations).
Note that, if multiple sources are assigned to a stock, the admin can drag and drop into a different order. This order is used by the default MSI Source Selection algorithm outlined below.
Source Selection Algorithms:
One of the MSI features with serious potential is support for Source Selection Algorithms which programmatically suggest optimal fulfilment sources for items in an order.
At the time of writing, the only out of the box algorithm in MSI is the “SSA Priority” algorithm for Magento 2.3, but expect updates with new versions soon.
The primary feature of this algorithm is that it prioritizes Sources in the order chosen by the admin on the “Stock” level through a drag and drop list.
In the below screenshot, two sources are assigned to our “US Ecommerce” Stock, and our Seattle Warehouse source will be prioritized by the Priority algorithm due to its position here in the admin.
The full priority algorithm follows this logic:
- Checks each source for virtual salable quantity in their assigned order at stock level (top to bottom)
- Selects source if a stock level is present (including any aggregate configuration and out of stock thresholds)
- Moves down the list to fulfill entire order
- E.g. if Seattle source has right socks and New York source has left socks and we’ve sold a configurable product, “Pair of Socks,” 1 simple product will be deducted from each source.
- Skips disabled sources assigned to stock.
Custom Source Selection Algorithms
Appealing to multi-channel sellers and larger operations is the potential to customize a source selection algorithm to optimize inventory logistics and shipping costs.
According to Magento:
Magento supports custom development and extensions to add alternative algorithms to prioritize sources. For example, you can have one priority algorithm based upon geography and another based upon expense of stock or a customer attribute. When the cost of stock changes, your implementation can easily change algorithms to ensure the lowest cost.
In other words, you can create the algorithm that’s most appropriate for your operations.
A couple other examples that might be factored into a custom Source Selection algorithm:
- Choose source based on cheapest shipping cost
- Choose source based on fasted shipping time
- Choose source based on national (tax) borders
Again, these more complex algorithms need to be written by third party developers at this point, but the most widely applicable calculations to be incorporated into future Magento releases.