Skip to main content

Types of count

A count's type decides two things: which items it lists, and what happens to an item on that list that nobody counted. Everything else — counting, submitting, the stock correction — works the same way for every type.

The four types​

TypeUsed forItem listAn item on the list that nobody counted
FULLthe whole store, typically once or twice a yearevery item in the store's assortment that is worth counting — see belowset to 0
CYCLEone part of the store — a category, a brand, a supplier — often on a rotating schedulethe items matching the count's saved searches, narrowed the same wayset to 0 if mandatory, left alone if optional
CONTROLchecking a few items, whenever someone doubts a figurenone — staff count whatever they choosethere is no list, so nothing is set to 0
TESTtraininglike a cycle count if it has saved searches, otherwise nonea test count is never published and never changes stock

Rules the API enforces when a count is created:

  • a FULL or CONTROL count takes no filters — a full count is scoped by the assortment, a control count by what staff choose to count;
  • a CYCLE count needs at least one saved search or search query — or a NEGATIVE_STOCK stock-state filter, which on its own is a complete scope: every item in the store with negative stock;
  • the start date is today or later, and a due date is not before the start date.

In the Hii Retail Inventory app, staff create full counts and carry out full and cycle counts; cycle counts are created by head office or generated from a recurring definition. Control counting in the app is the quick count. Test counts are created through the API.

Purpose-built counts​

These are ordinary counts of one of the four types, created through a dedicated endpoint that fills in the item list for a specific purpose.

Quick count​

One item, counted now, submitted at once. Staff scan an item anywhere in the store, register what they find in one or more locations, and the count is created, completed and published in a single step. It is recorded as a CONTROL count, so it lists nothing else and sets nothing else to 0.

A quick count records at least one unit per location. To record that an item is missing altogether, register a line of 0 in a count that lists the item.

POST /business-units/{businessUnitId}/stock-counts:quick-count

Items not counted this year​

A CYCLE (or TEST) count of every item that has moved this calendar year but has not been counted this calendar year — the usual way to make sure nothing escapes a year of cycle counting. No saved search is involved: the list is taken straight from the stock information. Every item on it is mandatory. The calendar year is the UTC year.

POST /business-units/{businessUnitId}/stock-counts:items-not-counted

Imported list​

A count whose item list the caller supplies, item by item, with a mandatory flag per item (mandatory unless stated otherwise). It is a CYCLE count unless created as TEST. The list is taken as given: it is not narrowed by the stock information and it is not checked against other open counts. Use it when the decision about what to count is made in another system.

POST /business-units/{businessUnitId}/stock-counts/{stockCountId}/import

Suspicious items​

A CYCLE count generated automatically for a store, of the items whose stock figure looks wrong:

  • items whose sales have slowed sharply — sold over the last three days at less than a set fraction of their usual pace, which often means they are missing from the shelf while the system believes they are there;
  • items with negative stock.

The items come from STP's suspicious items report. Items counted within a set number of weeks are left out, so a store is not asked to recount what it has just counted. The count is generated at 03:00 UTC on a configured weekday, every few weeks, and only for stores where it is switched on — see Configuration.

Recurring counts​

Counts generated automatically, on a schedule, for a store, a group of stores or the whole tenant. See Recurring counts.

How the item list is built​

For full and cycle counts — including those a recurring definition generates — Stock Count builds the list in the background, in this order. An item has to pass every step.

1. It is a candidate. For a full count: the store's assortment in Product, Price and Promotion (PnP). For a cycle count: the items matching each of the count's saved searches or search queries — or, for a cycle count scoped only by NEGATIVE_STOCK, every item the store holds stock information for. A saved search is a search selection saved in PnP; a search query is the same kind of search written out directly.

2. STP has stock information for it. Only items that Stock Transaction Processing has held sellable stock of can be listed. An item that has never been received, sold or counted in the store is not listed — not even in a full count. See Stock ownership.

3. It is worth counting. The item holds stock (a positive or a negative quantity), or it has moved since it was last counted, or it has never been counted. An item at zero that has not moved since its last count is settled — there is nothing new to find — and it is left out. This rule applies to every count, full ones included, and no filter can override it.

4. It passes the count's stock-state filters, if it has any — see below.

5. No other open count in the store already lists it. An item is in at most one open count per store at a time, so two counts never ask for the same item. An item becomes available again once the count holding it is completed or deleted. Which of several counts created together gets a shared item is described under Recurring counts.

A count created for today is prepared straight away; one that starts later is prepared on its start date. While a count is open its list is refreshed every night at 01:00 UTC, so items that begin to qualify — a new delivery, a count elsewhere that has finished — are added. Items are never removed from an open count's list.

Stock-state filters​

Steps 1 to 3 decide what can be counted. Stock-state filters narrow the list further by what has happened to each item:

FilterSelectsWindow
MOVED_SINCEitems whose stock moved within the windowrequired: SINCE_LAST_COUNT, YEAR_TO_DATE or FIXED_DAYS
NOT_COUNTED_SINCEitems not counted within the window — including items never countedrequired: YEAR_TO_DATE or FIXED_DAYS
NEGATIVE_STOCKitems whose stock is below zeronone
  • SINCE_LAST_COUNT means since the item's own last completed count. YEAR_TO_DATE means since 1 January (UTC). FIXED_DAYS takes a number of days from 1 to 400.
  • Filters combine with AND, never OR. MOVED_SINCE/YEAR_TO_DATE together with NOT_COUNTED_SINCE/FIXED_DAYS 30 means "moved this year, and not counted in the last 30 days" — the usual way to stop an item being counted twice in a month.
  • They narrow; they never widen. An item that fails steps 1–3 cannot be brought back by a filter.

Stock-state filters can be set on any count created through the API, and on a recurring definition, which carries them into every count it generates. The items not counted this year count is built from two of them.

Why is an item not in my count?​

ReasonWhat to do
STP has never had stock of it in this storeNothing — there is no stock to count. A delivery or a sale creates the stock information.
Its stock is zero and it has not moved since it was last countedNothing — it is settled.
Another open count in the store already lists itCount it there, or complete or delete that count; the next nightly refresh adds it here.
It is not in the store's assortment in PnP (full count), or does not match the saved search (cycle count)Correct the assortment or the search.
The list is still being prepared, or the count starts laterWait — see How a count works.

Mandatory and optional items​

Every listed item is either mandatory or optional, and that decides what happens if nobody counts it.

  • In a full count every item is mandatory.
  • In a cycle count each saved search is marked mandatory or optional, and its items inherit that. ⚠ A saved search is optional unless it is marked mandatory. If the same item matches two searches of one count, the first search in the count's list decides.
  • In an imported list each item carries its own flag, mandatory unless stated otherwise.
  • In the items not counted this year count every item is mandatory.

What happens to items nobody counted​

When a count is submitted — or when staff mark a category as done — every mandatory item that nobody counted is registered as counted 0, and is published and applied like any other counted item. An optional item that nobody counted is simply left out: it is not published, and its stock is not touched.

The zero is registered for items the stock information says the store holds, and for items whose stock has changed in the last 30 days; an item that is already at zero and has not changed for 30 days has nothing to correct. In the published event these zeros appear with the location UNKNOWN.

🛑 A full count sets everything nobody counted to zero — including items on a shelf nobody got to. Submit a full count only when the whole store has been counted. In the app, marking each category as done as it is finished makes the gaps visible before it is too late: the deviation review shows which items are about to become 0.