The safe audit
At the end of the day the store manager checks the safe in a safe audit. Cash Management already knows how much cash came into the safe from the tills that day. The manager counts the rest of the safe by hand, Cash Management compares that count with what it expected, books the difference, and the extra cash goes to the bank.
A safe audit is made per safe and currency. In Hii InStore it is the Safe Audit screen.
What the manager sees
| Line on the screen | What it is | Where it comes from |
|---|---|---|
| Cash from till audits | the cash counted into the safe from the drawers, with the drawers' total deviation | Reconciliation's completed till audits and recounts for the period (reconciledAmount, reconciledDeviationAmount) |
| Cash from cash changer | the same for the cash changers. Shown only when the store has them. | Reconciliation's cash-changer till audits (cashChangerAmount, cashChangerDeviationAmount) |
| Cash in safe | the rest of the safe, counted by the manager, and its deviation from what was expected | entered (actualAmount) |
| the store's own fields | amounts the tenant has defined, such as sealed coin rolls | entered, see Customer-defined fields |
| Total balance | everything above added up: what the safe holds after the audit, before the bank drop | calculated. Hidden when cmm.show-total-balance-in-safe-audit.v1 is false. |
| Max amount in safe | the most cash the safe may hold | the tender limits. Hidden when cmm.show-max-allowed-amount-in-safe-audit.v1 is false. |
| Bank drop | the cash that goes to the bank | entered, or suggested by Hii InStore |
| Bag reference | the number on the bank bag | entered (referenceId) |
🛑 "Cash in safe" excludes the day's cash from the tills. The till cash has already been counted once, in Reconciliation, and is shown on its own line. The manager counts everything else in the safe. Counting the whole safe into Cash in safe makes the till cash appear twice, and the audit shows it as a surplus.
The arithmetic
For each currency:
| Value | Calculation | Example (NOK) |
|---|---|---|
| the safe's balance | the sum of everything booked | 10 630 |
| Cash from till audits | the cash counted into the safe from drawers in the period | 1 630 |
| Cash from cash changer | the same for cash changers | — |
| expected Cash in safe | balance − cash from till audits − cash from cash changer | 9 000 |
| Cash in safe | counted | 8 995 |
| deviation | counted − expected | −5 |
| Total balance | cash in safe + cash from till audits + cash from cash changer + the store's own fields | 10 625 |
| Bank drop | total balance − max amount in safe, but at least the smallest bank drop. Hii InStore suggests it; the manager can change it. | 2 625 |
| the safe after the audit | total balance − bank drop | 8 000 |
The example is the store from What moves the safe: till 1's counted 1 620 and the recount's 10 make up the 1 630 from the tills, with no deviation left after the recount.
Rules Hii InStore applies:
- A deviation larger than the allowed deviation, short or over, needs a comment. The allowed deviation is the
tender's
maxAllowedDeviationAmount, and it applies to the size of the deviation in either direction. The comment is stored on the audit and published with it. - The safe may not be left holding more than its maximum. When the total balance is above Max amount in safe,
Hii InStore asks for a bank drop and suggests the amount above the maximum, or the smallest bank drop
(
minAmountBankDeposit) if that is more. The manager can change the amount.
What the audit books
When the audit is submitted, Cash Management books, for each currency:
| When | Event type | The safe |
|---|---|---|
| the deviation is not zero | Correction | + a surplus, − a shortfall |
| a bank drop is entered | BankDeposit | − the bank drop |
| a customer-defined field has a value | the field's id | + or − the value |
A currency with no deviation and no bank drop books nothing. All of the audit's transactions carry the safe audit's id
as eventId, and the audit itself is published as a safe audit event. See
Receiving the events.
Which period an audit covers
- By default, Cash from till audits is the till cash of the current business date. A day without an audit is simply not audited; its till cash is still in the safe's balance, and the next audit expects it in Cash in safe.
- With
cmm.do-reset-safe-audit-when-submitted.v1set totrue, the period starts at the previous safe audit for that currency. A store that skips a day, or audits twice a day, gets every till audit exactly once. With no earlier audit, the period is the last month.
Customer-defined fields
A tenant can add its own amount fields to the safe audit in cmm.safe-audits-dynamic-properties.v1: for example
Sealed coin rolls or Change ordered from the bank. Each field has an id, a name shown on the screen, and
optionally isNegativeSignByDefault, meaning the amount entered is taken as negative, and sortOrderKey, the order on
the screen.
A field's value is part of the total balance, and is booked into or out of the safe as its own transaction, with
the field's id as event type: a positive value into the safe, a negative value out of it. Choose ids that read well
in an accounting system, because they appear in the published events. See Configuration.
When the numbers change under you
Between opening the safe audit and submitting it, another till audit can be completed. Cash Management recalculates the expected values when the audit is submitted, and refuses it with 400 if Cash from till audits, Cash from cash changer or the expected amount has changed. Hii InStore then reloads the audit, and the manager checks the count again.
Through the API
| To | Call |
|---|---|
| get the values to show, and the screen settings | GET /api/v2/business-units/{businessUnitId}/repositories/{repositoryId}/audits/audit |
| submit the audit | POST /api/v2/business-units/{businessUnitId}/repositories/{repositoryId}/audits |
| find earlier audits | POST /api/v1/business-units/{businessUnitId}/repositories/audits:search |
The GET returns one entry per currency with reconciledAmount, reconciledDeviationAmount, cashChangerAmount,
cashChangerDeviationAmount, expectedAmount, repositoryMaxAmount, bankDepositMinAmount and
maxAllowedDeviationAmount, plus the store's screen settings and customer-defined fields. The POST sends those values
back unchanged for each currency, with the manager's actualAmount, bankDepositAmount, referenceId, comment and
field values. See The Cash Management API.