We all have Menu Items that use varying amounts of the same Ingredients (Inventory). We can control Inventory Consumption on a per-Item basis via Recipes and Product Portions. To make this work with all Ingredients (i.e. Meat, Produce, Condiments), we want to have them defined as Order Tags, mapped to a related Ingredient Product.
Let’s take a Philly Sandwich vs Wrap for example. When we build these Menu Items for the customer, we allow them to specify what they want in their Philly or Wrap. Both can have Chicken, Cheese, Lettuce, Tomato, Onion, Mayo, Mustard, etc. Some customers simply want Chicken and Lettuce, while others may want it loaded with everything, so we should specify all Ingredients as Order Tags. That part is easy, and we tend to build our systems in this way most of the time. But what if the amount of each Ingredient can vary in volume between the Philly and the Wrap? How do we do proper Inventory control in this case?
Let’s use the Chicken Ingredient as an example. And let’s say we compare the amount of Chicken that goes into a Wrap vs the amount of Chicken that goes into a Poutine. The Wrap uses 225 mL of Chicken, while the Poutine uses 100 mL of Chicken. How do we specify the Inventory Consumption of Chicken when we choose Wrap vs Poutine ?
Portion Mapping
The answer lies in Portion mappings. This mechanism is built-in to SambaPOS, but it is rarely discussed, and most people do not even realize it exists. It goes like this:
The Portions of a Master Product (ie. Philly, Poutine, Wrap, etc.) are inherently linked to the Portions of a Sub-Product (ie. Chicken, Cheese, Lettuce, etc). If the Master Products and Sub-Products have the same Portion Names, they are automatically mapped to each other. If no matching Portion exists between the Products, the first listed Portion is used.
First, we define a Product that we will use as an Ingredient (Sub-Product). We won’t sell this product directly as a Menu Item (Master Product), but we need to define it so that we can map it directly to an Order Tag, which we will use when we build a Poutine or Wrap for the customer. We also need to set the Portion Names for the types of Master Products that this Ingredient can be used in. So we set up the Chicken Ingredient Product as such:
We also need to set the proper Portion Names for our Menu Items (Master Products) so that they will be automatically linked/mapped to the Ingredient Sub-Product. So we set up our Menu Item Products for Wrap and Poutine as such:
Order Tags mapped to Ingredient Sub-Products
Next, we can set up the Order Tags for our Menu Items, and map them directly to the Ingredient Sub-Products. This is the Meat Order Tag Group, where each Tag is mapped to an Ingredient Sub-Product:
And of course this Order Tag Group is mapped to several Master Products, which are actual Menu Items that we sell:
Inventory Items
Now let’s get to Inventory. First we define the Inventory Item for Chicken. We buy Whole Chickens by the Pound (Transaction Unit
). But we use mL (Base Unit
) for the amount of Chicken that goes into a Menu Item. Here we assume that there is 450 mL (Multiplier
) in 1 Pound of Chicken:
Recipes
Next, we set up Recipes to define how much Chicken goes into each Inventory Sub-Product. Notice how each Recipe is linked to the Ingredient Sub-Product Chicken, while the corresponding Portion is used. This way we can define the Wrap Portion to use 225 mL, while the Poutine Portion uses only 100 mL:
We should also define Recipes for the Master Products (Menu Items), but we will set them up so that they use no Inventory Items directly. Instead, all Inventory Items are defined through Order Tags like we just did with Chicken:
Does this really work?
Ok, let’s see if this works. Let’s buy some Chicken. This Inventory Transaction shows that we purchased 30 Pounds of Chicken, which equates to 13500 mL (450 mL / Pound):
Now we sell some Items: a Chicken Club Wrap and a Poutine with Chicken - both contain Chicken, among other Ingredients, which we specify via Order Tags:
Let’s look at how our Inventory Consumption of Chicken turned out. This End of Day Record shows that we Consumed 0.722 Pounds of Chicken, so it predicts we have 29.277 Pound of Chicken remaining in stock:
We purchased 30 lbs of Chicken which is 13500 mL (450 mL / Pound).
We sold a Chicken Club Wrap which uses 225 mL in its Recipe.
We sold a Poutine with Chicken which uses 100 mL in its Recipe.
Consumed: 225 mL + 100 mL = 325 mL / 450 = 0.722 lbs
Prediction: 13500 mL - 325 mL = 13175 mL / 450 = 29.277 lbs
It worked!
The BIG Picture
Here is an overview of the entire linkage: