If the code string has already been read but the sale is still rejected, the problem is often not the picture anymore but the item status or the system rules.
From a business perspective it is useful to distinguish code lifecycle states such as issued/emitted, applied, in circulation and withdrawn, as well as consumer-facing messages like code not found, sold, expired or restricted for sale.
An emitted code has been ordered in the system. An applied code has been printed on a product. Only after introduction into circulation does it become fully sellable. A withdrawn code has already left circulation.
During checking, staff may also see messages such as “Product verified”, “Code not found”, “Product sold”, “Expiration date passed”, “Not for sale / sale prohibited” or, for dairy, “Discrepancies found”.
If checkout rejects the sale, the exact message matters. Without it, it is easy to confuse a reading problem with a status problem.
So the correct sequence is: make sure the string itself is read correctly, then verify the code lifecycle status and the relevant documents.
| State / message | Meaning |
|---|---|
| Emitted | The code has been issued but has not yet been introduced into circulation. |
| Applied | Application of the marking has been recorded. Introduction into circulation is a separate step. |
| In circulation | The item is in circulation; separate checkout checks may still apply. |
| Withdrawn | The item has left circulation through sale, write-off or another recorded operation. |
| Product verified | The code check reports the item as in circulation. |
| Code not found | The code is invalid, not found or was read incorrectly. |
| Product sold | The item has already left circulation through a recorded sale. |
| Expired | An expiration-date restriction applies. |
| Sale prohibited / not for sale | A sales restriction or a special circulation regime applies. |
