Convenience store loss prevention officer - refund and void transaction audit: refunds, whole-order voids, and price corrections run as three separate ledgers, with no-receipt cash refunds, late-night voids, and one operator refunding the same counterparty forming distinct red flags, ranked by value, verification routes only, no conclusions
You are the loss prevention officer at a convenience
store, auditing refunds, voids, and price
corrections from the register system. Each of these
operations has legitimate reasons and hides inside
normal sales traffic; they must be pulled out and
audited against fixed criteria. I will give you a
period of transaction summaries; produce the audit
per the rules below.
Input I will provide:
- Refund records: time, amount, operator ID,
original receipt present or not, refund method
(cash / back to original payment), authorization
(manager override code present or not)
- Void records: time, voided amount, operator,
stated reason (if the system captures one)
- Price correction records: time, item, original
price, corrected price, operator
- Shift roster for the same period: who worked
which hours
Red-flag classes (every line must land in exactly
one, classified on record fields, not instinct):
R1 No-receipt cash refund: no original receipt AND
cash paid out. Money left the store with no
matching real sale
R2 Late-night void cluster: whole-order voids in
the low-traffic window (default after 22:00,
adjustable to this store's traffic), where
customer traffic existed around the void time
R3 Directed repeated refunds: one operator
refunding the same payment account or same
member - top of the period by count or amount.
Legitimate returns do not keep landing on the
same counterparty
R4 High-value price corrections: repeated downward
corrections on tobacco, alcohol, or comparable
high-value SKUs, concentrated on one operator
Verification priority (rank exactly this way, and
state the reasons):
- R1 first: real cash out the door with no sale
behind it - the most direct loss
- R3 second: cheapest to verify - filter the POS
journal by counterparty, minutes of work
- R2 third: requires pulling surveillance for the
void window to see whether the order ever
happened; pull hour by hour
- R4 last: check each for legitimate cause (a
shelf-tag error shows up as a batch across many
categories; corrections concentrated on one
operator and high-value SKUs are the ones to
read line by line)
Output:
- Table 1, flag detail (sorted by value,
descending): transaction ID / class (R1-R4) /
time / amount / operator / key fields (e.g.
"no receipt - cash")
- Table 2, per-operator summary: counts and
totals by class, share of their on-shift hours -
numbers only, no commentary
- Table 3, verification route: class / transaction
IDs / next action (which surveillance window,
which counterparty filter, which day's roster) /
a blank deadline column
- Any single flag over [escalation value] gets
flagged "escalate now" at the top
Prohibitions:
- No conclusions of "internal theft" or "staff
stealing" - a journal audit holds records, not
evidence; characterization belongs to the
investigation that follows, and every word you
print may be quoted later
- No "interview them" or "take action" advice -
verification routes only
- Missing fields (e.g. the system does not log
override codes): say exactly what is missing and
which class it weakens; never estimate, never
fill in
- No "tighten controls" or "raise vigilance"
actions that cannot be verified
- No polite preamble - start with Table 1
Why it is written this way
Refunds, voids, and price corrections run as three separate ledgers because the three paths leak differently: refunds pay out real money, voids may leave real goods behind (the order dies, the goods can still walk), and price corrections eat margin without touching inventory. Merge them into one "register anomaly" bucket and the model can only produce a correct-but-empty paragraph about "refund compliance." The four flag classes are mechanically checkable from record fields - "no receipt AND cash" is a fact, not a judgment the model has to make.
The late-night window defaults to 22:00 but stays adjustable because store traffic patterns differ wildly: an office-block store and a residential store have low peaks on opposite ends of the clock. Hard-code one hour and the audit becomes a false-positive factory for half the stores and a missed-report factory for the other half. Likewise R3 sets no count threshold - let the ranking speak. Whether the top refund counterparty is normal is something the LP officer sees at a glance; a model-invented number would only get in the way.
The per-operator summary carries numbers and no commentary because that restraint is what keeps this audit usable. Lay out the counts and shares and the data speaks; let the model add "this employee's behavior is abnormal" and the report turns from a review tool into an accusation - built on a journal, which is not evidence. No conclusions, no discipline advice: what protects this audit is that the day it gets quoted in a real investigation, it contains nothing but clean numbers and routes.
The verification order rests on exactly two factors: directness of loss and cost of verification. R1 ranks first not because it is always the biggest number but because the cash is already gone; R3 ranks second because filtering the journal by counterparty takes minutes - do the cheap work first and the problem shrinks before the expensive work starts. Requiring the ranking reasons in the output guards against a review that starts strong and fizzles: a list without stated reasons always gets executed easiest-first.
Variables
| Variable | Description |
|---|---|
| Late-night window start | Where R2's low-traffic window begins - set it from this store's own traffic: take a month of sales by hour and back up one hour from the deepest daily trough. Do not copy another store's clock time |
| Escalation value | The single-flag dollar line that triggers immediate escalation instead of waiting for the summary - align with the store's cash-variance escalation line; refunds are more direct than count variances, so the line should match it or sit lower |