Inventory Control for Menu Items via Order Tags and Portion Mapping

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:

:bulb: 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:


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:


Breaking it down even further - Going Granular

If you noticed in the previous post, one of our Meat Ingredient Sub-Products is called Patty Beef. Another one is called Meatball. We can define Recipes for these as well, so when we put a Patty or Meatball on a Menu Item (Master Product), we can see how much overall Ground Beef (Inventory) we consume.

Master Product to Sub-Product Portion Mapping

Let’s look at how the Master to Sub-Product Portion Mapping is set up.

We have 2 types of Burgers: a Whiskey Burger and a Stuffed Burger. They have default Portions of Burger and Stuffed, respectively.

We also have several other Menu Items that we can put a Meatball into. For illustration, we will concentrate on the Slider Menu Item, which has a default Portion of Slider.

It is good to note another feature here: the Portion Multiplier. In this case the Multiplier indicates the number of Meatballs that go into each type of Menu Item. This is not true. I will update this Tutorial in the future when we receive Recipe Multipliers Feature (@emre ;)).

Order Tags

A quick look at the Meat Order Tag Group for review:

Inventory Items

We define Inventory Items for a number of the Ingredients which could go into a Patty or Meatball; the main one being Ground Beef, shown here.


The Recipes for Patty, Stuffed Patty, and Meatball contain varying amounts of ingredients, most notably the amount of Ground Beef in each Recipe is the main factor:

We also have Recipes for the Meatball Product mapped to other Portions such as Slider and Wrap.

Note that the Menu Item called Pulled Pork Wrap probably should not be used here. The point is that the Menu Item name is arbitrary, so if we stack Meatballs in a Pork Wrap, we will still consume Meatballs accordingly.

We still need Recipes for the Master Products (Menu Items which we sell):

Testing the Patty and Meatball Recipes

Purchase 10 Pounds of Ground Beef: 160 Ounces
Sell Whiskey Burger: 8 Ounces
Sell Stuffed Burger: 7 Ounces
Sell Slider: 2 Ounces
Sell Pulled Pork Wrap (with Meatballs instead of Pork!): 2 Ounces per Meatball x 3 (Multiplier) = 6 Ounces

Consumed: 8 + 7 + 2 + (2x3) = 23 Ounces / 16 = 1.4375 Pounds
Prediction: 160 Ounces - 23 Ounces = 137 Ounces / 16 = 8.5625 Pounds


… reserved for future updates …

Is Portion Mapping specific to inventory control for menu items only? Can it be used for anything else? For Example, I shop has a menu with a product that comes in two different portions and prices. He sells a sweet by itself for $2 or 3 for $5. Can portion mapping be used in a way in which whenever the button for sweets is pressed lets say twice, the amount is automatically adjusted to the 3 for $5 deal?

Portion mapping can not do automation. You would have to build automation for that behavior.

1 Like

Portion Mapping is specific to Inventory control for any Product. A Product does not need to be on your Menu, as is shown in the above Tutorial. “Pork” for example is a Product, but it is not a Menu Item that you can choose, because we don’t map it to the Menu. At least,we cannot choose it directly, but as shown above, we map that Product to an Order Tag, then to Inventory via a Recipe.

1 Like

Ahh. Hmm is there any examples I can follow for such a automation method @kendash? I would like to try this, and if it works its probably something that many people can use if they have similar things.

There have been several examples of this done by the community in the past. I do not have links to them right now it has been a while since I read them. Maybe search the forum and see if you can spot one. Or do like I did when I first started with SambaPOS and spend some time learning it eventually you can make your own automation once you learn it.

@QMcKay Yes you’re right, I figured that when i was playing around with it just now. Though Initially I thought it could be used as an automation but thanks for clarifying its specific to inventory control. Makes sense. I’m going to try a build with this in work for future customers I may have.

1 Like

@kendash Of course :), I’ve been doing that and learning many things. I’m in the process of compiling all tutorials and potential information into an on going Instructions Manual Booklet which can be provided to anyone who just found Sambapos and wants to get familiar. It’s the least I can do to help :smile: I’ll look around and figure something out. Thanks Kendash

1 Like