The room where you count what you have
Scan a box and its bin comes up: receive it, count it, or take from it. Every move a person makes writes a line saying who moved it, from which screen, why, and what was left — so a number that looks wrong gets explained instead of argued about. A bar counts bottles, a clinic counts gloves, a salon counts colour tubes, a reseller counts cartons with four different marketplace codes on the side.
Counting is shift work, so it is not behind an owner’s gate: anyone whose role carries Inventory can do it. Deleting a bin is a manager’s.
One bin on the screen, one thing to do with it
The stock table is read at a desk. Counting is done walking, with a phone or a scanner in your hand and one item at a time — so it is its own lane, with big targets, and it opens where the button is instead of somewhere further up the page.
- 01
Find the bin
Scan or type a code. It is looked up as a barcode first, then as the item’s marketplace SKU, then as one of that item’s other SKUs. The screen says which of the three answered, so a code that was found by SKU can be filed as a barcode with one tap.
- 02
Receive, count, or use
Three buttons and a number. Receive adds, Use subtracts, Count sets the shelf to what you have just counted. The quantity that comes back is the server’s, not the one your screen was holding.
- 03
A count is a statement about a shelf
A recount carries the number your screen was showing. If somebody counted the same shelf while you were counting, the save is refused and you look again — instead of quietly writing over their work.
- 04
No signal, still counting
A receive or a use captured in a basement waits on the device and lands once. The move carries an id generated before it left, so a reply lost on the way cannot turn one delivery into two. A recount does not go into that queue at all: a count replayed twenty minutes later is not news about a shelf, so it fails in front of you instead of landing late.
- 05
Why it says four
A History tab on the bin you are holding, and a Recent moves tab for the whole room: what moved, by how much, why, how long ago, and what was left behind.
Two terminals can work the same shelves. A scan on one appears on the other without a refresh, and the stock a cook depletes mid-service appears there too.
What can actually read a barcode
A camera that reads an EAN-13 is not something every browser has, and a page that skips that gets found out on the first shift. So: exactly where it works, and what to use where it does not.
A USB or Bluetooth scanner — everywhere
A wedge scanner is a keyboard: it types the code and presses Enter. The box is focused when the lane opens and focused again after every save, so the gun works with nobody touching the screen. This is the one that works in every browser, on a phone, a tablet or a desktop. It is also why a person with no scanner can simply type the number.
The phone camera — Chrome on Android and ChromeOS
The camera button appears only where the browser can decode a product barcode itself, which today means Chrome on Android and ChromeOS. Everywhere else it is hidden rather than offered and broken.
Not an iPhone browser
The fallback decoder in the page reads QR codes and nothing else, so an EAN-13 held in front of an iPhone camera in Safari would never resolve. On an iPhone the Structa app scans with the camera instead; in any browser, the scanner or the keyboard does the job.
The camera is asked for EAN-13, EAN-8, UPC-A, UPC-E, Code 128, Code 39 and QR — so an internal label printed as a QR somewhere else still resolves.
One item answers to all of its codes
A box carries more than one number and always has: the maker’s EAN-13, a UPC-A for the US market, an EAN-8 on the small pack, the case code the supplier prints, and whatever the venue stuck on the bin. A single barcode field forces the counter to pick one of them and then come up empty every time a colleague scans a different face of the same box.
Many codes, one item
Codes are rows, not a column. Inside your business a code answers to exactly one item — the database refuses the second — and one of them is marked as the one the printed label carries.
A mistyped code is refused
EAN-13, EAN-8 and UPC-A each carry a check digit, and it is verified before the code is filed. A thirteen-digit number whose check digit does not add up is not stored as an EAN-13; it becomes a Code 128, which claims nothing about having been verified.
Marketplace codes count as codes
The SKU an item sells under, and the extra SKUs it sells under on other platforms, answer the same scan. The same product usually ships under a different seller code on each marketplace, and a scanner that says “unknown” to a code the business demonstrably knows is a scanner nobody trusts twice.
A code for a bin that has none
A bin with nothing scannable on it gets a Structa code: STR- and eight characters from an alphabet with no I, O, 0 or 1 in it, so it can be read back over the radio when the label peels off. It lives in our own namespace and can never collide with a manufacturer’s number.
Print the bins that have none
Half a stockroom is loose product, decanted stock and boxes whose barcode is under the tape. Those bins get a label.
- Print one label from the bin you are standing at, or a sheet for everything the table is currently showing.
- Items with no code are listed by name before you print, never silently skipped — a print job that quietly leaves four bins out is how a stockroom ends up half labelled with nobody knowing which half.
- One button gives all of them a Structa code, and then they print.
- The bars are Code 128, drawn in the page itself rather than fetched from a barcode service, and the sheet prints from the browser like any other page.
- A label is not proved until one is scanned. Print one, read it with the gun you actually own, and then print the hundred — nothing in software can prove how ink reads under a real laser.
Why the number is what it is
Stock used to move with nothing recording why, so the only thing anybody could see was the number now. “It said nine this morning” had no answer at all. Now every move a person makes writes a line, and the lines are what the shelf adds up to.
What one line holds
- How much moved
- the amount actually applied
- What was left
- the quantity after it
- Why
- received · counted · used · adjusted
- Who
- the person, and the screen they did it from
- When
- to the second
The rules that make it worth reading
- The amount recorded is the amount that actually moved. Use 5 from a shelf holding 3 and the line says 3, so the history always reconciles with what is on the shelf — and the screen tells you how much was really there.
- It is append-only. No browser holds permission to insert, edit or delete a line; rows arrive only through the one function that moves the stock, in the same statement. A line cannot describe a change that did not happen, and a change cannot happen unrecorded through that door.
- The same function refuses to apply a move twice. The id is generated before the move leaves the device, so a delivery received on a dying connection is one delivery.
- A line written from a queued offline move says so, so a number that arrived late reads as having arrived late.
- The person is recorded on the line. What the history tab puts in front of you is what moved, why, how long ago, and what was left.
- Not every kind of move writes a line, and this is the limit to know: typing a new number straight into the stock table does not, the kitchen’s depletion when a dish is marked prepared does not, and an order taking its units off the shelf does not. The scan lane and the ± buttons do.
A dish leaves the shelf when it is cooked
A menu item can carry a recipe: how much of each stock item one of them uses. The kitchen is what moves the stock — not the order, and not the bill — because the moment a thing is really gone is the moment somebody cooked it.
- A cook marks a line prepared and the ingredients come off, multiplied by how many were ordered.
- Un-mark it and exactly what was deducted goes back. The amount is recorded per line when it leaves, so editing the recipe in between cannot change what is restored.
- The kitchen board flags a ticket whose recipe needs more of something than the shelf holds, before the cook starts it.
- Amounts are fractional. 0.2 kg is a real recipe line, and a shelf can hold 4.5 kg.
- Changing what a dish is made of is a manager’s; counting what is on the shelf is not. Removing a stock item removes it from every recipe it is in, which is why removing one is a manager’s too.
What is low, and the list you send
An item is low at or under the reorder level you set and out at zero, and low or out is computed from those two numbers rather than stored, so changing the threshold changes what is low that second.
- One filter turns the table into the list of what needs ordering. A manager opening the dashboard in the morning gets the same count without opening the module.
- The order writes itself: each item back to about twice its reorder level, rounded up to a whole unit, never an order for nothing.
- Copy it and paste it wherever you talk to your supplier, or open it as an email draft. It is plain text addressed to the supplier you already buy from, and you edit it before it goes.
- Export what you are looking at as a CSV — the full stock report, or only the shopping list.
- Units are the ones people say out loud, picked from a short list: kg, g, l, ml, pcs, pack, box, bottle, can, bag.
Two systems, one number
A reseller who already keeps stock in ShipStation has a second count of the same shelf, and two systems that both subtract will count one sale twice. So the question is asked out loud and the owner answers it.
Structa counts
A new order takes its lines off the shelf by SKU, and a cancellation puts them back — including a cancellation that arrives from the sync, from the crew’s screen, or from a manager deleting the order. This is how it starts, and the owner can switch the deduction off.
ShipStation counts
Their on-hand is copied here on every sync and Structa stops deducting, restores included. Nothing is written back: their number is the master, ours reflects it, and the next sync re-asserts it. Reading their inventory needs their V2 key — the key and secret that pull orders cannot do it.
Check before you hand the number over
Check reads their account first and says how many SKUs are there, how many match your items, and a few real examples. An account where inventory was never set up says that instead of quietly copying zeros over a shelf you counted by hand.
Codes that answer to nothing
SKUs seen on synced orders that match no item wait in a queue you open when you want to: create an item from one, link it to an item you already have as an extra code, or file it as not yours — and unfile it later if you were wrong. Nothing is ever created from an order on its own, and a SKU that matches nothing never moves stock.
Starting from their catalogue
A business that arrives with orders and no stock list can import ShipStation’s product codes as items at zero. Existing items are not touched and no count is invented — the counting is still yours to do.
An order with a SKU that has no item yet is not abandoned: it stays pending, and the units come off the shelf on the next sync after somebody creates or links that item.
What this room does not do
A buyer who finds a limit on their own stops believing the rest of the page. So here they are, and each one is a fact of the code rather than a caution.
- The camera reads product barcodes only where the browser can: Chrome on Android and ChromeOS. On an iPhone browser the button is not offered at all, because the fallback decoder reads QR and nothing else. A USB or Bluetooth scanner works everywhere, and so does typing the number.
- There are no variants. An item is a name, a unit, a count and a reorder level — sizes and colours are separate items, and nothing in the product splits one item into them.
- There is one count per business. Not one per storeroom, not one per van.
- Stock is not costed. There is no unit cost, no stock value and no shrinkage report; what the room holds is a count, and the money lives in Accounting.
- The restock list is text you send yourself. There is no supplier account, no purchase order and nobody at the other end of it.
- The history does not hold every kind of move: a number typed straight into the stock table, the kitchen’s depletion and an order’s deduction all change the count without writing a line.
- A move made by hand or by scan never takes a shelf below zero. The kitchen’s depletion and an order’s can, and the item then reads as out.
- Marketplace SKUs, extra SKUs and the unknown-code queue appear only with the Delivery module on. A restaurant’s stock list stays a stock list.
- Nobody can edit a line of the history to make it agree with the shelf. You count again, and that count is a line of its own.
- Deleting an item takes it out of every recipe it is in, and that is permanent. It is a manager’s act for exactly that reason.
What you need before any of this works
- The Inventory module on for the business, and on the role of whoever does the counting.
- Items with a reorder level on them. Low and out are computed against it, so a threshold left at zero means nothing is ever low.
- For scanning: a code on the box, or a Structa code minted for the bin.
- For the camera: Chrome on Android or ChromeOS, or the Structa app on an iPhone.
- For a wedge scanner: any USB or Bluetooth model that types and presses Enter. No driver and no pairing screen inside Structa — the operating system already has it.
- For recipes: the Menu module, and the Kitchen module for the cook who marks the dish prepared.
- For marketplace codes and the ShipStation question: the Delivery module and a ShipStation connection, plus their V2 key if you want their count mirrored.
- For labels: a printer. The sheet prints from the browser like any other page.
What’s actually true today
- A USB or Bluetooth scanner works in every browser, with nobody touching the screen.
- One item answers to all of its codes, and a code answers to exactly one item inside your business.
- A mistyped EAN-13 is refused by its own check digit before it is filed.
- A bin with no code can be given one and printed — a single label, or a sheet for everything on screen.
- Every scan and every ± writes a line: how much, why, who, from which screen, and what was left.
- A move cannot be applied twice, even if the reply was lost and the phone tried again.
- Two people counting the same shelf cannot silently overwrite each other.
- A receive or a use captured with no signal lands once, later.
- A cook marking a dish prepared takes its ingredients off the shelf, and un-marking puts back exactly what was taken.
- The owner decides whether Structa or a connected system counts, and the one that is not counting stands down.
- Your data is yours: a full export any time, and permanent deletion on request.
Questions owners ask
Will it work with the scanner I already have?
If it types the code and presses Enter — which is what nearly every USB and Bluetooth scanner does — yes. There is nothing to install and nothing to pair inside Structa: the scanner is a keyboard, the lane keeps the box focused, and your hands never leave the gun.
Can I scan with my phone’s camera?
On Chrome on Android and ChromeOS, yes — the button is there. On an iPhone browser it is not, because the decoder that would have to do the work reads QR codes and nothing else, and we would rather hide a button than open a camera that stares at a barcode. The Structa app on an iPhone scans with the camera; in any browser, a scanner or the keyboard works.
A box has three different barcodes on it. Which one do I use?
All of them. File as many codes against an item as it wears, and any of them finds it. One is marked as the code your printed label carries. A code can only ever belong to one item inside your business, so a scan is never ambiguous.
Two people counted the same shelf. What happens?
The second save is refused and that person is told to look again. A recount carries the number the screen was showing, and the server compares it before writing — so the later count never quietly erases the earlier one.
Does selling a dish take it off the shelf?
Cooking it does. Give the dish a recipe and the ingredients come off when a cook marks that line prepared; un-marking puts back exactly what came off, even if somebody edited the recipe in between. A dish with no recipe moves no stock.
I already keep inventory in ShipStation. Will it double-count?
Not once you answer the question. The owner chooses who counts: Structa deducts from orders, or ShipStation’s on-hand is mirrored here and Structa’s deduction stands down. Check shows you their real SKUs and how many match your items before you switch.
Can the AI assistant count for me?
It can tell you what is low or out, because that is in the data it is handed, and it can propose adding an item — a card naming the exact item, waiting for you to press the button. It does not move a count.
What happens if I turn the module off?
The room disappears from every workspace and nobody can receive, count or use stock any more. What is already there — the items, their codes and the whole history — stays exactly where it is, and comes back when you turn it on again.