Products
Updated on 2026-09-30
Where do I find it?
Voorraad → Producten (Stock → Products).
The form
What it is
A photo box on the left, the details on the right.
| Field | Required | Notes |
|---|---|---|
| Foto (photo) | no | png, jpeg or webp, up to 4 MB, with a cropping tool |
| Naam (name) | yes | Zonder het merk ervoor — dat staat hiernaast. (Without the brand in front — that goes next to it.) |
| Inhoud (size) | no | Wat hetzelfde product in twee formaten uit elkaar houdt. (What tells the same product in two sizes apart.) — e.g. 250 ml |
| Merk (brand) | no | with a + to create a new brand on the spot |
| Categorie (category) | no | |
| Omschrijving (description) | no | Wat je erover vertelt aan de klant die het in handen neemt. (What you tell the client who picks it up.) |
Below the photo box you see where the current photo came from: the note, the source and the date it was fetched. If there is nothing, you read Herkomst onbekend. (Origin unknown.)
That is not there for information but as a brake: anyone about to replace a photo ought to see on what grounds the current one is there.
If there is a line Ook bekend als (also known as) below the description, those are names under which this product appears on older receipts — "STMNT Hairspray 150ml" for what the supplier's invoice says was the 200ml. Receipt lines with such a name belong to this product. The line is read-only: each name is shown with its proof in brackets, and was set by the HairConnect administrator with the invoice at hand. A name no rule may guess, HairConnect does not guess either.
Price
Inkoop is exclusief btw, verkoop is de prijs op het schap — dus inclusief. De marge in de lijst wordt daaruit gerekend.
(Purchase is excluding VAT, sale is the price on the shelf — so including. The margin in the list is calculated from that.)
| Field | Required | Notes |
|---|---|---|
| Inkoopprijs (purchase price) | no | with excl. btw (excl. VAT) after the field; Leeg = onbekend; dan blijft de marge leeg in plaats van te doen alsof. (Empty = unknown; the margin then stays empty rather than pretending.) |
| Verkoopprijs (sale price) | yes | with incl. btw (incl. VAT) after the field |
| Btw (VAT) | yes | 21 % by default |
Backbar means: no sale price. Leave the sale price at 0 and the product is backbar; the help text then reads Geen verkoopprijs: dit product is backbar en komt niet aan de kassa. Vul een prijs in om het te verkopen. (No sale price: this product is backbar and does not appear at the till. Enter a price to sell it.) With a price on it, it is never backbar.
The margin in the list is: the sale price without VAT, minus the purchase price. If there is no purchase price, the cell stays empty.
Stock
De voorraad zelf verandert alleen via leveringen en verkopen, zodat elk verschil te herleiden is. Hier stel je in wanneer het salon een seintje moet krijgen.
(Stock itself only changes through deliveries and sales, so that every difference can be traced. Here you set when the salon should be alerted.)
| Field | Notes |
|---|---|
| Huidige voorraad (current stock) | only fillable when creating the product — De stand waarmee je begint. (The level you start from.) On the edit page the field is switched off, with Corrigeer dit via een levering of een voorraadbeweging. (Correct this through a delivery or a stock movement.) |
| Minimumvoorraad (minimum stock) | Onder dit aantal verschijnt het product op het overzicht als "bij te bestellen". Leeg = geen seintje. (Below this number the product appears on the overview as "to be reordered". Empty = no alert.) |
| Leverancier (supplier) | Bij wie je het bestelt. (Who you order it from.) |
Recognition and sale
This section is collapsed.
| Field | Notes |
|---|---|
| Streepjescodes (barcodes) | the codes the till uses to find the product when scanning. Per code: the code itself, Op de verpakking sinds (on the packaging since) — which may stay empty — and Huidige (current). |
| Artikelnummer (item number) | Het nummer van de leverancier, voor op de bestelbon. (The supplier's number, for the order form.) |
| Backbar | read-only: the switch follows from the sale price, you do not set it yourself. Volgt uit de verkoopprijs: een product zonder verkoopprijs (€ 0) is backbar — gebruikt aan de wasbak en in de kleurkeuken, niet verkocht. Backbar telt mee in het verbruik, niet in de omzet. (Follows from the sale price: a product without a sale price (€ 0) is backbar — used at the basin and in the colour bar, not sold. Backbar counts towards consumption, not towards revenue.) |
| Actief (active) | Uit voor wat je niet meer verkoopt. Het blijft in de historiek staan, maar verdwijnt uit de kassa. (Off for what you no longer sell. It stays in the history, but disappears from the till.) |
One product may carry more than one barcode. When the supplier changes the packaging, the old bottles are still on the shelf while the new ones arrive: they are the same product with a single stock figure. Add the new code and leave the old one — both ring up the same product at the till. There is at most one Huidige (current) code: that is the one that belongs on a new label and on an order; the others stay perfectly valid to scan for as long as you still have stock of them. A code never disappears by itself — not even an import erases one; removing it is your decision. The same code on two products is impossible: the till would not know which bottle you are scanning.
The list
A thumbnail of the photo on the left — a hairdresser recognises a bottle by its shape and colour, not by "Illumina Color 6/".
| Column | Contents |
|---|---|
| Product | the name, with the size underneath |
| Merk (brand) | |
| Prijslijst (price list) | the article number and description as they appear at your supplier. Only visible once you have uploaded a price list; a product that is not on it shows Staat er niet op (not on it) and, underneath, why: which barcode was looked up, or that the record carries no code at all |
| Voorraad (stock) | a badge: red below zero, orange at or below the minimum stock |
| Inkoop (purchase), Verkoop (sale) | underneath the purchase price is where it came from. If the price list says something else, that amount is shown too and the cell turns orange |
| Categorie, Marge, Backbar, Actief, Gearchiveerd, Wella | hidden by default, switched on with the columns button on the right |
Search works on the name as well as on every barcode, including an old one.
Above the list
Five dropdowns sit in plain sight above the list, with nothing to unfold first: Merk (brand), Categorie (category), Soort (kind — sold, backbar or both), Wat wil je zien (what do you want to see) and Gearchiveerd (archived). They act at once — you do not have to press another button.
Under Wat wil je zien are the lists you actually go looking for: Onder de minimumvoorraad (below minimum stock), Negatieve voorraad (negative stock), Zonder foto (without photo), and in a salon with the Wella integration also Nog niet gekoppeld aan Wella (not yet linked to Wella), Staat niet op de Wella-prijslijst (not on the Wella price list), Zonder streepjescode voor Wella (no barcode for Wella) and Inkoopprijs komt nog uit Optios (purchase price still comes from Optios).
Those two are the status the price-list round writes on your product record. When you upload a file from Wella, every product that does not find its place in it gets its reason on the record itself — no longer as a row on the clean-up list. Staat niet op de Wella-prijslijst holds the products whose barcode was looked up and is not in the file: Wella no longer carries the article, or the bottle carries a wrong code. Zonder streepjescode voor Wella holds the products where there was nothing to look up; scan the bottle once, and at the next upload the product comes along on its own. Together with Nog niet gekoppeld aan Wella that is, in a single choice, the list of what you cannot order today. The Wella column (hidden by default) shows the same status as a badge.
What is in the Prijslijst column is what your supplier writes himself: his article number, his description and the size alongside. That size is there because it makes the difference —
Welloxon Perfect 12% / 40 VOLexists in 60 ml and in a litre, and without it two different articles read identically. If you have uploaded more than one file from your supplier, this column also shows an article that is only on the older one; the price comparison next to it is made against the most recently uploaded file only.HairConnect puts it next to your product record. Your sale price only changes when you confirm it yourself under Settings → Wella-prijslijst. Your purchase price is corrected there straight away if it still comes from Optios, and your record then also takes over the name and the size the way the supplier writes them —
Color Touch 5/0instead ofCT 5/0 41/50 60ML. A product you created yourself keeps the name you gave it.If your price already happened to be right, not a cent moves, but the line underneath does. It said Uit Optios overgenomen (taken from Optios) and from now on says Uit de prijslijst van de leverancier (from the supplier's price list), because that is where it comes from now. This is not cosmetic: that line is exactly what decides whether a later price list may still overwrite that amount.
Getting rid of a product
There is a bin next to every row. What it does depends on what is attached to that product — and the dialog says so before you click:
| Nothing points at the product — no receipt, no delivery, no stock movement | it is deleted. Exactly what you need for the leftovers that came across from an old package. |
| It carries history | it is archived, and the dialog names why: "this product is on 12 receipts and 3 deliveries". |
That second case is not a detour but a limit. A till receipt is a fiscal document: it may not lose its product name because you are tidying up a year later. An archived product disappears from the till, from the order proposal and from this list; the stock and the history stay. To bring it back: Settings → Producten opkuisen (clean up products).
Negative stock is a signal, not a fault of the software. It means something was sold that was never booked in — and that should stand out at once, so you can put it right.
If there is nothing yet: Nog geen producten — Voeg de flacons toe die je verkoopt en die je aan de wasbak gebruikt, dan kloppen de voorraad en de marge. (No products yet — Add the bottles you sell and the ones you use at the basin, then the stock and the margin will be right.)
Two cards for the same product
When the supplier changes the packaging, an old package often ends up with a second product card: "Mousse Forte 200ml" with the old barcode next to "Mousse Forte" with the new one, each with its own receipts, deliveries and stock. That is one product, and it should be one card — otherwise a receipt line matches two cards and gets attached to neither, and your stock is split across two lines.
Open the card that should go and choose Merge with another product; the same button sits next to every row in the list. The dialog first shows what moves — barcodes, receipt lines, delivery lines, stock movements, stocktake lines, paper order-note lines, price proposals, promotions, and how many units of stock — and then asks which product to merge into. Search it by name or by barcode.
The card you are on is the one that disappears. So you open the old one and choose the new one, not the other way round. What happens:
| Barcodes | the codes of the disappearing card are added. The Huidige (current) code becomes the code of the card that was delivered last — that is the new packaging; without deliveries, the one of the card that was sold last, and if neither tells, the current code of the product that stays remains current. Old and new both ring up the same product at the till. The current code decides which article of the price list sets the prices. |
| History | every receipt, delivery, stock movement and stocktake line now points to the product that stays. The receipts themselves and their seal do not change: a till receipt is a fiscal document, and the link to the product card is not part of the seal. |
| Stock | is added up, as a stock movement that says where the units came from. |
| The disappearing card | goes to the bin and is marked archived. It does not come back on the next import from Optios: HairConnect remembers that the Optios number of the old card belongs to the new one. If Optios still keeps that old card, its stock counts towards the product that stayed on every round: at Optios they are two cards, here it is one product with the sum of both stock levels. If you still sell on the old card at Optios, that sum goes down with it — once, not twice. |
This button is only there for the owner. It cannot be undone; what disappeared — name, size, barcode, Optios number and the counts — is in the audit log.
Two sizes are not a duplicate. "Dark Oil 30 ml" and "Dark Oil 100 ml" are two products, each with its own stock; you do not merge those. Merging is for the same bottle under two cards.
Open clean-up proposals Receipt: product name on several products for this pair stay open until the receipt lines are re-linked; the proposal Barcode already on another product about this pair is closed, because that clash no longer exists.
Tidying up your products
Settings → Tidy up products shows, for every product, when it was last sold or used at the basin, and how many units went out over the past weeks. That figure comes from your own receipts and stock movements; nothing extra is recorded. The screen splits your products into three, and puts that as a label next to every bottle: Frequent for what moved over the last twelve weeks, Stil (idle) for what has been standing still for longer, and Nooit bewogen (never moved) for what has not been sold or used a single time since the takeover. An archived product carries Gearchiveerd (archived). You set those twelve weeks yourself with Set the window, along with the number of idle weeks after which a product is proposed for archiving (a year by default). Leave them empty and those defaults apply.
Archiving never happens on its own. The screen proposes, you tick and press Archive. An archived product disappears from the register, from the order proposal and from the pick lists, but nothing is deleted: every receipt, every delivery, every stock movement and every past report stays exactly as it was, and last year's revenue figure does not change. The stock stays too — before archiving, the screen tells you how many units are still on the shelf. You can always bring a product back, and if its barcode is scanned at the register anyway, the register says the product is archived and offers to restore it right away.
Setting a whole brand aside at once
When you stop carrying a brand, you rarely want to tidy away a single bottle but the whole line. So set the Brand filter to that brand, pick the group you want to see next to it, tick the products and use Archive.
Archiving is deliberately not deleting: the products disappear from the till, from the order proposal and from the pick lists, but their receipts, deliveries and stock movements stay exactly as they were, and Restore brings them back. A brand you sold last year belongs in your reports — even when you no longer order it.
What goes into the audit log
A price change on a product — sale price, purchase price or VAT — is recorded.
A merge as well: which card disappeared, which one it was merged into, and how many receipt lines, deliveries, movements and units of stock moved.
With the assistant
If the assistant is on, you change a price or the minimum stock by saying so, whichever screen you are on: de verkoopprijs van Olaplex nr. 3 wordt 24,50 (the sale price of Olaplex no. 3 becomes 24.50), de inkoopprijs van de hydraterende shampoo is 8,90, minimumvoorraad van de folie op 4. You first see old and new side by side and confirm; only what you named changes. If the name matches more than one product — the same bottle in 100 ml and 250 ml — the assistant asks which one, with the names as they appear in this list. The stock level itself cannot be set this way: it only changes through a delivery or a movement, for the assistant too.
Frequently asked questions
Why can't I just type over the stock? Because every difference then becomes inexplicable. Every stock movement here has a reason — a sale, a delivery, a count — and that is exactly what lets you find out later why a level is what it is.
Why does my backbar product have no margin? Backbar is not sold, so there is no margin. Leaving that cell empty is more honest than showing an invented loss.