Unit of Measure Levels
Use this page to sell and receive one product in several pack sizes — a can, a case, a pallet — all from one shared stock count.
Quick steps
To set up a product:
- Go to Settings, open the Products & Inventory tab, tick Enable Units of Measure (pack / case / pallet) and save. (Once only.)
- Open the product and go to its Inventory tab. Click Set up pallet / case / unit levels for this product.
- Tick This product is sold in unit-of-measure levels.
- Fill in one row per pack size: Name (e.g.
Case), Units per (base) (e.g.24) and Price. Make your smallest level1. Use + Add level for more rows. - Click Save levels.
To receive a delivery: on the same Units of Measure page, under Receive stock, scan the case label (or pick the Level), enter how many packs arrived in Quantity, add the Total cost paid if you know it, and click Receive.
At the register: tap the product and pick the pack size from the Sell as… list — or scan the case's own barcode to add it straight to the cart.
Levels don't borrow the product's normal price. A sellable level left at 0 sells for $0.00.
Common questions
What does the stock number mean? It's always the smallest unit. 144 means 144 cans, however they're boxed. Receiving 1 case of 24 adds 24; selling 1 case takes off 24.
Levels or variations? Use levels when it's the same item packed differently (a can and a case of cans). Use variations when they're different items with their own stock, like a 1g and a 3.5g jar.
I don't see a Units of Measure button on the product. That button only shows once a product uses levels. For the first setup, use the link on the product's Inventory tab.
Do I have to type the same pack sizes on every product? No. Save the shape once as a template under Products → More Actions → Unit of Measure Templates, then pick it under Apply a saved shape on each product. Prices are still set per product.
More detail: how levels work, turning it on, and levels vs. variations
The Core Idea
Pick the smallest thing you sell — a single can, a single bottle, one unit. That is the base unit, and it is the only thing Brother POS actually counts.
Every other pack size is a level that says how many base units it contains:
| Level | Units per (base) | What it means |
|---|---|---|
| Pallet | 288 | 288 cans |
| Case | 24 | 24 cans |
| Unit | 1 | 1 can |
From there, everything works off the same number:
- Receive 1 case and the pool goes up by 24.
- Sell 1 case at the till and the pool goes down by 24.
- Sell 1 can and the pool goes down by 1.
There is no separate "case stock" and "singles stock" to reconcile, and no transferring between them. Break a case open on the shelf and nothing needs to be entered — the 24 cans were already counted the moment the case was received.
Turning Units of Measure On
Units of Measure is an optional feature you switch on yourself:
- Go to Settings and open the Products & Inventory tab.
- In the Stock Management section, tick Enable Units of Measure (pack / case / pallet).
- Save the settings.
It isn't part of the Basic plan.
Once it is on, the Units of Measure button only appears on products that already use levels. This keeps it off products that never need it, like cannabis sold by the gram. To set up a new product, see Setting Up Levels on a Product.
Levels or Variations?
These two features look similar and solve different problems.
| Use levels when… | Use variations when… |
|---|---|
| It is the same item, just packed differently — a can, a case of cans, a pallet of cases. | They are genuinely different items — a 1g jar and a 3.5g jar, different flavours, different sizes. |
| Selling one pack size should draw down the others. | Each option holds its own separate stock count. |
| You want one shared cost per unit. | Each option has its own SKU and cost. |
If breaking open the big pack gives you the small one, you want levels.
Barcode aliases are several barcodes for the same thing at the same price. A carton of cigarettes is a different price and takes ten packs off the count — that's a level, not an alias. The Product Codes section of the product page points you to the levels setup for exactly this reason.
More detail: setting up levels and every field
Setting Up Levels on a Product
- Go to Products and open the product you want.
- Open the Units of Measure page:
- First time on this product: go to the Inventory tab and click Set up pallet / case / unit levels for this product. If your store sells bar drinks, the link reads Set this up as a liquor bottle (sell by the pour) instead. The Product Codes section also has a Set up pallet / case / unit levels → link.
- Product already set up: click Units of Measure at the top of the edit page. A liquor bottle shows Bottle & Pours instead.
- Tick This product is sold in unit-of-measure levels.
- Fill in a row for each pack size in the Levels table, using + Add level for more rows. Or, if you've saved a template, pick it under Apply a saved shape and click Apply shape.
- Click Save levels.
The setup link does not appear on a single variation. Pallets and cases belong to the product you actually receive, so set levels up on that product.
The Level Fields
| Field | What to enter |
|---|---|
| Name | What staff call it: Unit, Case, Pallet, 6-Pack. This is the wording clerks see at the register. |
| Units per (base) | How many base units this pack contains. Your smallest level should be 1. |
| Price | What the customer pays for one of this level. A case of 24 priced at $28.00 sells for $28.00, not 24 × the single price. |
| Cost (opt) | What one of this pack normally costs you. When you receive at this level and leave Total cost paid blank, this cost is used instead — see How Cost Averaging Works below. |
| Barcode / QR | Leave it blank and Brother POS generates a short, scannable code for you. Type your own in if the pack already carries a code you want to use. |
| Sellable | Ticked, the level appears at the register. Unticked, it is receive-only — useful for a pack size you buy in but never sell whole. |
The ✕ button on the right removes a level when you save.
A level priced at 0 sells for $0.00. Levels do not borrow the product's normal price, so fill in a price for every level you tick Sellable.
If you change Units per (base) later, past sales are not rewritten — each sale remembers the pack size it was rung up at. Only sales from that point forward use the new number.
More detail: templates and spreadsheets
Templates: Set Up a Shape Once
If many products share the same pack sizes — twelve spirits with the same bottle / shot / double, or every cigarette brand sold as a pack and a carton — save the shape as a template instead of typing it on every product.
A template holds the shape only: the level names, how many base units each is worth, and whether each sells at the till. Each product keeps its own prices, costs and barcodes, and applying a template never changes them.
Creating a template
- Go to Products → More Actions → Unit of Measure Templates. (Admins and managers, once Units of Measure is on.)
- Click New Template and give it a Template Name, such as Cigarettes.
- Under Levels, the first row is the base unit — stock is counted in it — for example
Packwith1. Each other row says how many base units it's worth: aCartonof ten packs is10. Untick Sells at the till for a level you only receive in. The form always has one spare empty row; to add more levels than that, save the template and open it again. - Optionally tick categories under Suggest for Categories.
- Leave Active ticked and click Save Template.
A template is refused if a level has no name, has a multiplier of zero, is listed twice, or if two levels are worth the same number of base units — for example a "Carton" worth 1 pack, which would charge a carton's price while taking a single pack off the count.
Applying a template to a product
On the product's Units of Measure page, Apply a saved shape lists your active templates. If the product is in one of a template's suggested categories, that template is pre-selected — but nothing is applied until you click Apply shape.
Applying a template:
- Creates any level the product doesn't have yet — with no price, so set one before selling it. The page warns about any sellable level at $0.00.
- Corrects the units and Sells at the till of levels with the same name.
- Never deletes a level, and never changes a price, cost or barcode.
Changing a template later
Edit the template and click Save Template, then click Apply on the templates list to push the new shape to every product using it. Clearing a level's name drops it from the template, but products already using that level keep it — it may carry a printed barcode and counted stock.
Deleting a template doesn't change any product; they keep the levels they already have.
Levels in a spreadsheet
Product exports and imports carry levels too, in two columns: uom_levels (for example Case:24:72.00|Can:1:3.50) and uom_template. Export your catalog, fill in the levels, and import it back to set up many products at once. An import adds or corrects levels by name and never removes one. See CSV Import.
More detail: barcodes and labels
Barcodes and Labels
Each level gets its own scannable code, so a clerk can point the scanner at a case and sell a case.
- Automatic codes — when you first save a new level with the barcode field blank, Brother POS assigns it a short numeric code that is unique across every product and level in your store. Short codes matter: they print narrow enough to fit a 2" × 1" label with room to spare.
- Your own codes — if the case already has a code printed on it, type that into the Barcode / QR field instead.
Printing Level Labels
The Print labels card on the same page lists every level that has a code. Set a quantity and click Print label — it prints on your thermal label printer using your default product label template, with the product and level name (for example Cola — Case), the level's price and the level's barcode on it.
Stick the label on the case or pallet as it comes in. From then on, one scan handles it — at intake and at the till.
More detail: receiving at a level
Receiving at a Level
Receiving happens on the same Units of Measure page, in the Receive stock card.
- Scan the case or pallet label into the Scan a case / pallet code box — the matching level is selected automatically. (You can also just pick it from the Level dropdown.)
- Enter the Quantity — how many of that level arrived. Six cases is
6, not 144. - Optionally enter the Total cost paid — the whole amount on the invoice for this delivery. Leave it blank and the level's own Cost is used for each pack, if it has one.
- Click Receive.
Brother POS confirms what it did, for example: "Received 6 × Case (+144 base units). Cost per unit now $0.5375."
The stock increase is a normal receive entry, so it shows up in the product's history with the reason "Received 6 × Case" and the name of whoever did it. See Stock Adjustments for how that history works.
Receiving against a purchase order or through Scan to Receive does not use these levels — those tools use the order line's pack size and add base units straight to the same pool. Receiving a purchase order, or scanning it in against the order with Scan to Receive, does blend what you paid into the average cost, worked out per base unit (a case of 12 at $120 is $10 a unit).
More detail: what staff see, on the page and at the register
What Staff See
On the Units of Measure page
A summary strip across the top shows, at a glance:
- On hand (base units) — the real count, in singles.
- Avg cost / base unit — what one single currently costs you.
- Inventory value — the two multiplied together.
Underneath is one chip per level: 6 × Case, 144 × Unit, and so on. These are the same stock expressed different ways, not separate piles. Partial packs show as decimals — 5.5 × Case means five full cases and half of another.
At the register
- The stock number on the product tile is the base-unit count — 144 means 144 singles, however they are boxed.
- Tapping the product opens a Sell as… list of every sellable level with its price. The clerk picks one, sets a quantity, and adds it.
- Scanning a sellable level's barcode skips the list entirely — one of that level goes straight into the cart at the level price. A receive-only level's code isn't recognised at the till.
- The cart line names the level and the pack size, for example
Case · 24 units each.
Everything downstream stays in base units without anyone thinking about it: completing the sale, voiding it, refunding it, or holding and recalling it all move the full pack — 24 units, not 1.
Selling levels also works offline: the line is priced at the level and stock is drawn down in base units, then synced when the connection comes back.
More detail: how cost averaging works
How Cost Averaging Works
This is the part people trip over, so here it is in one sentence:
Brother POS keeps one running cost per single unit, and each delivery nudges that number.
It does not track "this case cost me $12 and that case cost me $14." It keeps one blended figure, recalculated every time you receive with a cost — either the Total cost paid you type, or the level's own Cost when you leave that blank:
new average = (units on hand × old average + total cost paid)
÷ (units on hand + units received)
A worked example
You sell cans. The base unit is one can.
First delivery. Shelf is empty. Ten cases of 24 arrive and the invoice is $120.
- Units received: 10 × 24 = 240 cans
- Average cost: $120 ÷ 240 = $0.50 per can
You sell some. You are down to 200 cans. Selling does not change the average — it is still $0.50 per can.
Second delivery, at a worse price. Five cases of 24 arrive and the invoice is $72.
- Units received: 5 × 24 = 120 cans
- New average: (200 × $0.50 + $72) ÷ (200 + 120) = $172 ÷ 320 = $0.5375 per can
Your cost per can drifted up because the new stock cost more, weighted by how much of each you actually had. A case now costs you 24 × $0.5375 = $12.90 in the margin figures, and a pallet 288 × $0.5375.
Things to know
- Leave Total cost paid blank and the level's Cost is used. If the level has no Cost either, the average does not move — stock still goes up. Use that for samples, freebies, or a delivery you will price later.
- The pack size does not matter, only the money and the units. Buying a pallet for $1,440 and buying twelve cases for $1,440 land on exactly the same average.
- It is always per single unit. Every level's cost is worked out from that one number, so a case can never be costed inconsistently against the singles it contains.
- It becomes the product's cost. Each receive with a cost also sets the product's Cost per unit to the new average, so sales rung up afterwards carry it for margins.
- Stock with no cost yet doesn't drag it down. If the product had no cost before (nothing received at a price, no cost typed), the delivery's cost per unit simply becomes the cost. Stock below zero doesn't count either.
- Margins use it. The Product Costs page (Products → More Actions → Product Costs) shows
avg $X/unitunder the cost for any product carrying an average, and calculates margin from it instead of the plain cost field. - Enter the whole invoice amount, not a per-unit price. "Total cost paid" means the total for that delivery.
More detail: limitations, troubleshooting and best practices
Limitations
These are real behaviours to plan around, not bugs to report.
- Case and pallet lines cannot go on a tab. Saving a cart with a level item to a tab is blocked with a message — tabs do not carry the pack size, so the item would check out deducting a single unit instead of a full case. Ring these sales through directly.
- The online storefront does not offer levels. Level choices live at the register. Your storefront and online menu list the product at its own price.
- Margins use the average cost, not the per-level Cost. A level's Cost only matters as the fallback when you receive at that level without typing a Total cost paid.
- Purchase orders and Scan to Receive bypass the levels, as described above.
- One price per level for everyone. A level's price is a plain price; there is no separate tier or quantity-break pricing per level.
Troubleshooting
| Problem | Cause and fix |
|---|---|
| No Units of Measure button on the product page. | The button only shows once a product uses levels. Use the setup link on the product's Inventory tab instead. If that link is missing too, the product may be a variation, or Units of Measure isn't switched on — see Turning Units of Measure On. |
| A level added by a template rings up as $0.00. | Templates never set prices. Open the product's Units of Measure page and give the new level a price. |
| The product still adds straight to the cart instead of asking "Sell as…". | Either This product is sold in unit-of-measure levels is unticked, or no level is marked Sellable. Both are needed. |
| Scanning the case code does nothing. | The register works from products it has already loaded, so a code added moments ago may not be there yet — refresh the register. Also check the code was actually saved on the level. |
| A level rings up as $0.00. | The level's Price is set to 0. Levels do not inherit the product's normal price. |
| Stock dropped by 1 instead of 24. | The item was rung up as the base unit, not the case. Check the cart line — it should name the level, e.g. Case · 24 units each. |
| Average cost per unit shows a dash. | Nothing has been received with a cost yet — no Total cost paid, and no Cost on the level received. Receive one delivery with the invoice amount and it will populate. |
| Average cost looks wrong after a delivery. | It is weighted against what was already on the shelf. If the recorded stock was wrong before the delivery, the blended figure will be off too. Correct the count first, then receive. |
| Level labels will not print. | The label print goes to your thermal label printer through the usual setup — see Label Templates and Label Printers. |
Best Practices
- Choose the smallest sellable thing as your base unit and never change it. One can, one bottle, one unit. Everything else is defined against it.
- Always include a level of 1, even if you rarely sell singles. It makes the stock numbers readable and gives the register a sensible default.
- Print and stick a label on every case and pallet as it arrives. One scan then covers both intake and the sale.
- Enter the invoice total every time you receive. Skip it and your margins slowly drift away from reality.
- Count in singles. When you do a stock count, count the pool — a full case is 24, not 1.
- Untick Sellable for pack sizes you only ever buy in, so clerks are not offered a pallet at the till.
What's Next?
- Stock Adjustments — how receives, counts, and corrections are recorded.
- Purchase Orders — formal ordering and receiving against a supplier.
- Stock Reservations — how held and online orders set stock aside.
- Product Variations — for options that need their own separate stock.
- Product Search and Scanning — how scanning behaves at the register.