Register Reports
Hyvä POS is in closed beta
Hyvä POS is currently in a closed beta (pilot phase) with a small group of merchants. It is not yet generally available: the App Store release follows the pilot, and features and configuration may still change, possibly in backwards-incompatible ways, before the general release. Want to take part? Sign up at hyva.io/pos.
When a cashier closes the register, the register writes the closing of the session: the Z report. On the free tier the closing stays on the device, where it prints and exports as PDF or CSV. With PRO and module 1.4.0, every closing is also sent to Magento, where the back office reads the closings of every register per terminal and location, adds notes to them, and totals them over a period.
What a Closing Is
A closing is the record of one register session, from the moment the register opened to the moment it closed. Several cashiers can sell into one session; a cashier change does not close it, and several sessions can close on one day.
The closing holds what the session's Z report shows:
- the location and terminal, by id and by the names they had at the close,
- the business date, the opening and closing times with their timezone, and who opened and who closed the register,
- the order count, sales and refunds excluding tax, the tax and the totals including tax,
- the tenders: cash, card, the cash and card parts of split payments, pay by invoice, credits redeemed and issued, layaway receivables and payments, Credit Due collections and cash rounding,
- card activity per payment provider, collected and refunded,
- the tax per rate for sales and refunds, with reverse-charge and tax-exempt sales in buckets of their own,
- the cash drawer: opening float, cash in and cash out with their notes, expected cash, counted cash, the difference and the cash left in the drawer,
- the documents booked into the session (sales, refunds, exchanges and layaway payments), each with its sale id, type, amount and receipt number,
- the closing note.
A session without a cash drawer has no float, count or difference; those amounts are absent, not zero. All amounts are in the currency the session opened with. A register session keeps that currency until it closes: while a session is open, the store picker does not switch to a store view that sells in another currency.
The business date is the date the session opened, in the location's timezone as it was when the session opened. A session that runs past midnight keeps the date it opened on.
Who opened and closed the register is the signed-in cashier, by name; a cashier with a staff account is also recorded by staff id.
A closing is the register's own record of a session. It is not a fiscal closing and makes no claim of fiscal status.
Closing Numbers
Every closing carries a number, printed with the four-character code of its numbering series: Z-Report A3F9-7 is closing 7 of series A3F9. The Register Reports listing shows the same code and number.
A numbering series belongs to one install of the app on one device, under one store connection. Numbers in a series run from 1 without gaps. A reinstall, a restored backup, a new device, or a store connection removed and added again starts a new series at 1, with a new code, so no number is ever issued twice. Magento gives each series of a terminal an ordinal in the order the series arrive; the closing's page names it as "series 2 of this terminal".
When a Closing Is Written and Sent
Tapping Close Register writes the closing to the device first, in one write, before the register leaves the open state. If that write fails, the register stays open and says so. Reprints and exports read the same closing, so a closing is never numbered twice. The device keeps every closing until Magento holds it, beside the newest 100 sessions in the register history.
The register then sends the closing to Magento, right after the close. A closing Magento has not taken yet is sent again on the register's later sync passes, when the app starts and when the connection returns, so a register can close offline. The closed screen names where the closing is: "Closing A3F9-7 sent to Magento", or "Closing A3F9-7 is kept on this device until Magento takes it".
Sending a closing takes PRO, a device activated on a terminal, and module 1.4.0. On an older module the closings stay on the device, and Reports → Sync Issues has one entry, "Closings are kept on this device", that names the module version that takes them. When Magento refuses a closing, Sync Issues lists "Closing A3F9-7 is not in Magento" with the reason, and the closing waits there until it is retried.
Magento stores each closing once. Sending the same closing again answers the one Magento holds; a second closing for a session Magento already has a closing for, or a number already taken in the series, is refused and listed under Sync Issues.
A device that was replaced still sends the closings it holds: Magento takes them from a device the terminal was bound to before. The replacement numbers its own closings in a new series.
What Holds the Close
A cash difference never blocks the close; it is recorded on the closing. Two things do hold it:
- Unreconciled Card Payments: a card payment the terminal took whose order has not been created yet. Retry Sync sends the order again.
- Card payments to check: a terminal payment started in this session whose outcome the provider did not confirm. Check payments opens the Terminal Payments check, where each payment is checked with the provider or marked settled.
The register closes once each one is resolved. Payments from a terminal test, from self-checkout and from another session do not hold the close. A sale that is only waiting for its Magento upload does not hold it either.
In Magento: Register Reports
Hyvä POS → Reports → Register Reports lists the closings, one row each, with filters, sorting and CSV export. The columns are the location, terminal, closing (series code and number, for example C4A1-41), business date, opened, closed, opened by, closed by, currency, sales including and excluding tax, tax, refunds, cash difference, order count, the four states, the session and report ids, and when the closing reached Magento; the column picker chooses which show. The location filter lists the store's locations; the business date filters by range.
Each row shows its amounts in its own currency. Nothing is added up across rows.
Opening a row shows the closing's page, with Back and Print in the action bar. It shows the closing as the register sent it: the closing and its series, the register session with who opened and closed it, the figures for sales and refunds per tax rate with the reverse-charge and tax-exempt buckets, the tenders, the card activity per provider, the cash drawer and its movements, and the documents of the session. Each listed document links to its receipt in Magento, or shows as not received.
A closing cannot be edited or deleted, in the admin or through the API.
States
Beside each closing Magento keeps its states:
| State | In this release |
|---|---|
| Closing Received | Set when Magento stores the closing |
| Documents Received | Complete when Magento holds a receipt for every document the closing lists, Incomplete while one is missing, Not checked for a closing that lists no documents. A receipt that arrives after its closing sets the state again |
| Orders Processed | Not checked |
| Figures Reconciled | Not checked |
A receipt that reaches Magento late changes the state, never the closing.
Notes on a Closing
Under the closing, Annotations lists the notes added in Magento, each with its author and time. An admin user whose role has Annotate Register Reports adds one with Add Annotation. A note changes no figure, and a note cannot be edited or deleted. Adding one gives the closing a new revision, so a connector reading the API sees it again.
In Magento: Register Totals
Hyvä POS → Reports → Register Totals totals the closings whose business date falls in a period. Pick the period (the month to date by default), the scope (one location or all), and Totals per location or terminal. The table has a row per location or terminal and a total row, with the number of closings, orders, sales excluding tax, tax, sales including tax, refunds, cash, card, the cash and card parts of split payments, invoice, the cash difference and the number of closings whose documents are complete. Cash Difference sums the counted closings only.
There is one table per currency, and nothing is added up across currencies. Export CSV saves the same table.
Receipts and Their Closing
Every sale, refund, exchange and layaway payment records the register session it was booked into, and its receipt carries it to Magento. The receipt's page in Hyvä POS → Store Setup → Receipts names the register closing the receipt was booked into.
Permissions
| Permission (Magento role resource) | What it allows |
|---|---|
| Register Reports | The Register Reports listing, the closing's page, Register Totals, and reading closings through the API |
| Annotate Register Reports | Adding an annotation to a closing |
| Upload Register Reports | Sending closings to Magento. The register's own role or integration needs it; installing module 1.4.0 grants it to every role and integration that may upload receipts |
Who may close the register at the counter is the Close Register permission of the cashier's role.
For Developers
Closings are readable through GET /V1/pos/register-reports and GET /V1/pos/register-reports/:reportId, with a revision cursor for connectors, and Magento dispatches hyva_pos_register_report_saved after every stored or changed closing. See the API reference.
Requirements
- Hyvä POS PRO on a device activated on a terminal, with the register at 0.3.0 or later.
- Module 1.4.0 or later.
Not in This Release
- Orders Processed and Figures Reconciled are not computed yet.
- Card activity per provider shows on the closing's page only; the listing has no provider columns.
- No PDF of a closing from the admin; the page prints.
- No register reports on the location's page, no view of the registers open right now, and no dashboard widget.
- No closing from the admin, no shared cash drawer across devices, no reason codes on cash movements, and no email on close.
- No X reports in Magento: an X report stays on the device.
- No accounting or ERP connectors; the API and the event are where one connects.
- No grand total carried across closings, no booking of a card payment settled after its session closed, and no correcting documents: a closing is corrected with an annotation.