Convenience store inventory count specialist - single-line variance triage tool: paste one count variance, carton-exact differences route to receiving, transfer, and return-to-DC documents while loose differences route to price-change posting, pack crossover, and missed write-offs, three causes ranked cheapest-check-first
You are a coding agent building internal tools for a
convenience store. Build a single-file HTML "count
variance triage" tool for the inventory count
specialist: paste one variance line after a count
and know immediately which documents to pull first.
Runs locally, no network, no dependencies.
Input (one line per item):
- Item / book qty / counted qty / unit basis
(carton or each)
- Carton size: how many selling units per carton
(enter 1 when counting in eaches)
- Temperature zone: ambient / chilled / frozen
- In a promo or price-change window: yes / no
- Same-direction variance at last count:
yes / no / unknown
Tool logic (must be shown in a "Method" section on
the page):
- Step 1, convert: the variance folds to the
smallest selling unit - carton-basis figures
multiply by carton size, each-basis figures
pass through
- Step 2, route: variance (in units) divides
evenly by carton size - carton-level route;
does not divide - loose route
- Carton-level route, check in order: receiving
logs -> return-to-DC documents -> transfer
documents. Whole cartons move between store and
store, warehouse and store - the biggest pipes
a carton-exact gap can leak through
- Loose route, check: sales posting during the
price-change window, barcode crossover (regular
vs multipack or promo pack scanned against each
other), missed write-off logging
- Overlay signals (they reorder the route):
A loose difference inside a promo or
price-change window moves "check price-change
posting" to first
Chilled or frozen loose differences raise the
write-off check - short shelf life writes off
often
"Same-direction variance last count: yes" tags
the line "recurring - move to a dedicated
count"
Output (a result card per line):
- The three most likely causes ranked by
verification cost, lowest first - the ranking
basis is cost, not likelihood: the tool guesses
no probabilities, it only guarantees you start
with the cheapest documents and stop the moment
one explains the gap
- Each cause carries two things: the document type
to pull (specific - "this month's return-to-DC
documents," "POS sales journal for the
price-change week") and a one-line action
- Items with overlay signals render the signal
line above the cause list
- Missing input (a blank carton size, say): name
what is missing and why it is required; no
results, no guessing
Implementation requirements:
- Single HTML file, inline CSS and JS, opens by
double-click, no network requests
- Nothing persists; refresh clears. The page
states: "This page stores nothing"
- Preload three sample variance lines: one
carton-level difference, one loose difference
inside a price-change window, one loose
difference with a prior same-direction variance -
both routes and both signals visible the moment
the page opens
- Single-line triage only: no table summaries, no
report generation
Prohibitions (for the coding agent):
- The words "suspected theft," "internal theft,"
or any characterization never appear in the UI
or the output - the tool gives verification
routes only; the moment such a phrase renders, a
screenshot becomes the "evidence" used against
an employee
- No probability percentages anywhere - "80%
likely" is invented; the ranking recognizes
verification cost only
- No invented industry variance statistics; the
UI quotes no "industry average"
- No marketing copy or pleasantries in the UI;
the input box is the first thing on screen
Why it is written this way
Splitting carton-exact from loose differences is the foundation of the routing, and the test is a division, not a judgment call. Losing a case and losing a bottle happen by different mechanisms: carton-exact gaps point at the big pipes - a receiving post that never landed, a transfer that left the book but not the floor, a return-to-DC that left the floor but not the book; gaps with a loose remainder point at the sell floor - sales misposting, pack crossover, write-offs nobody logged. Asking the user to decide which kind of miss they are holding gets it wrong a few times out of ten; asking the tool to divide the variance by the carton size never tires and never guesses.
Ranking the three causes by verification cost, lowest first, is how the tool stays honest about what it cannot know. The moment a tool prints "most likely a receiving error, 80% confidence," that percentage is fabricated - no data backs it. Ranking by cost instead means the user always starts with the five-minute document pull and escalates toward the hour-long surveillance request only if the cheap explanations fail. The order itself saves labor, and every position in the list can answer "why am I first" with a reason that holds up in front of a manager.
The two overlay signals give the route a memory and a context. A loose difference inside a promo or price-change window checks posting first because the days around a price change are exactly when sales posting is most fragile - a price not yet synced, a promo pack rung at the regular price, and the variance lands in the loose column. The prior-variance flag turns single lines into trends: one variance is an event, the same direction two counts running is a system - but nobody pulls last cycle's sheet to cross-reference by hand, so the line carries its own history forward and the dedicated-count list builds itself.
Never rendering "suspected theft" and never persisting data are the tool's boundaries, not missing features. A triage router that prints a characterization becomes evidence the moment somebody screenshots it - the tool decides which stack of documents to open first, and guilt is decided elsewhere, with those documents. Nothing persists because count variances touch named people's accountability, and data left in a browser on a shared machine is data left for whoever uses it next. The three preloaded sample lines exist so a first-time user sees both routes inside ten seconds - a routing tool whose routing you cannot see is just a form with a button.