Daily Cashier Reports
Read the day’s takings without a POS licence or a till session: Cashier Collection lists every settlement taken, and the Z Report totals one branch for one date. Both screens only read; nothing is created or changed. Expect them to disagree for the same day: the Z Report counts sales returns and Cashier Collection does not, while Cashier Collection counts sales orders, payment vouchers and receipt vouchers that the Z Report never sees.
Overview
Daily Cashier Reports is a read-only reporting applet with two screens: Cashier Collection, a line-level listing of every settlement taken, and the Z Report, the end-of-day summary for one branch and one date. It creates and changes nothing — both screens are single calls to the sales reporting endpoints, rendered in a grid.
The same two reports are also reachable inside POS General. This applet exists so that a manager or back-office user can read them without a POS licence or a till session, and its Z Report is a slightly reduced version of the POS one — it has no Device filter and no Show Settlement Methods By User / Show Category Details options.
Where it fits
| Applet | Relationship | |
|---|---|---|
| Data source | POS General, Sales Invoice (Internal), Sales Return (Internal), Sales Refund Note (Internal) | The Z Report sums exactly these four document types. Cashier Collection reads a different set of six — see Fields |
| This applet | Daily Cashier Reports | Reads. Writes nothing |
| Adjacent | Sales Report | Broader sales analysis over the same documents |
| Where the money lands | Cashbook | The bank and cash accounts the settlements post to |
Screens and menus
Two menu entries by default:
| Menu item | Route | What it shows |
|---|---|---|
| Cashier Collection | cashier-collection-report | Every settlement line, filtered by advanced search |
| Z Report | z-report | The end-of-day summary for one branch and one date |
A third screen, Cashier Collections By Settlement Type, is built and routed
(cashier-collections-settlement-type) with its own backend endpoint, and the settings screen even
offers a toggle to hide its menu item — but its entry is commented out of the menu list, and the
menu builder only re-inserts entries that exist in that list. No menu entry opens it. The route itself is still
registered, so the screen should open if you go straight to its address — the applet’s own address followed by
/cashier-collections-settlement-type. That is read from the routing and has not been tried.
Cashier Collection
One grid, twelve columns: Branch, Settlement Method, Doc Type, Doc No, Created Date, Txn Date, Sales Agent, Sales Agent Code, User Create, Device, Amount, Remarks. Filtering is through the shared advanced-search panel, which offers a create-date and a transaction-date range (each with a Day / period selector) alongside the model’s other criteria. Grouping and totalling are done in the grid — drag Branch or Settlement Method into the group bar to get subtotals per payment method.
The branch list is restricted to the branches your API_TNT_DM_ERP_REPORT_CASHIER_COLLECTION_READ
permission target allows.
Z Report
A short form — Branch and Date — then SEARCH, with Export to PDF beside it. The grid has three columns, Username, Description and Amount, grouped by Username with the amount summed per group.
The request asks for one day (the same date is sent as both from and to) and restricts the query to
four server document types: INTERNAL_SALES_CASHBILL, INTERNAL_SALES_INVOICE,
INTERNAL_SALES_RETURN and INTERNAL_SALES_REFUND_NOTE. Anything else — a credit note, a receipt
voucher, a journal — is not in the Z Report.
The response is rendered as five blocks in this order:
- Settlement totals per payment method, ending in a Total row. Methods with a zero amount are dropped.
- Settlement detail — the same payments broken out per user.
- Sales: Gross Sales (net amount plus discount, less rounding), Discount, Rounding, and Total Net Sales, then the tax lines.
- Categories — one row per item category.
- Counts: No. of Transactions, No. of Transaction (Discounted), Item Sold, Item Sold (Discounted).
The branch list here is restricted by the API_TNT_DM_ERP_Z_REPORT_READ permission target.
Export to PDF renders the grid as it stands through the shared PDF exporter, with the Amount column right-aligned. There is no separate “print” action — print the PDF.
A recorded walkthrough of these two reports is available: Daily Cashier Reports (video).
Configuration
Before you can use it
| What | Where | Why |
|---|---|---|
| Branches | Organisation | Both screens are branch-scoped |
| Settlement methods | Organisation | The Settlement Method column and the Z Report’s payment blocks |
The read permission targets API_TNT_DM_ERP_Z_REPORT_READ and API_TNT_DM_ERP_REPORT_CASHIER_COLLECTION_READ | Settings → Permission Set / Role Permission | Without a branch target on these, the branch drop-down comes back empty |
| Sales documents of the four counted types | POS General and the sales applets | There is nothing to report otherwise |
No GL code, numbering or tax configuration is needed: this applet posts nothing.
Applet settings
Settings live on this applet’s own Field Settings screen, not the shared one. The settings menu has two entries, Field Settings and Default Selection; a Release Notes route exists with no menu entry. Personalization has one entry, Default Selection.
Five keys are bound to a control, saved by SAVE, and read at runtime:
| Setting | What it controls | Default | Effect when changed |
|---|---|---|---|
Allow viewing own created transactions only (VIEW_OWN_CREATED_TRANSACTIONS_ONLY) | Restricts the Cashier Collection grid to rows the current user created | off (null until first save) | On: a user sees only their own collections, unless they hold the ALLOW_VIEW_TRANSACTION_ALL_USER_CREATE permission |
Hide Z-Report Menu (HIDE_ZREPORT_MENU) | Removes the Z Report menu entry | off | The entry can be restored per role with the SHOW_ZREPORT_MENU client-side permission |
Hide Cashier Collection By Settlement Type Menu (HIDE_CASHIER_COLLECTION_BY_SETTLEMENT_MENU) | Would remove that menu entry | off | No effect — the entry is commented out of the menu list, so the screen is unreachable either way |
Default Transaction Date Range (DEFAULT_TRANSACTION_DATE) | Pre-fills the Cashier Collection transaction-date filter | unset | 1_day or 1_week sets the opening range |
Sorting Order (SORTING_ORDER) | The column and direction the Cashier Collection grid opens on | unset | Applied as the query’s orderBy |
formControl binding at all. They can be switched, they are never read,
and SAVE does not persist them.Default Selection sets the applet-wide Default Branch and Default Location; Personalization → Default Selection overrides them per user, and the Z Report pre-fills its Branch field from the personal setting.
Feature visibility and permissions
Two client-side permission codes are checked and both are seeded:
| Code | What it does |
|---|---|
SHOW_ZREPORT_MENU | Restores the Z Report menu entry for a role even when HIDE_ZREPORT_MENU is on |
ALLOW_VIEW_TRANSACTION_ALL_USER_CREATE | Lets a user see other users’ rows on Cashier Collection when VIEW_OWN_CREATED_TRANSACTIONS_ONLY is on |
Server-side, the applet requests the API_TNT_DM_ERP_Z_REPORT_READ permission at start-up; the
Cashier Collection screen declares API_TNT_DM_ERP_REPORT_CASHIER_COLLECTION_READ as its branch
read permission. Both are target permissions — they decide which branches appear, not merely
whether the screen opens.
Fields
Nothing here is created or edited, so the only fields are the ones you search with — and on both screens the search panel decides the answer more than most people realise.
Z Report — two boxes, and only one is checked
Branch is required; Date is not, and defaults to today. The date box carries a Date is not valid message in the template with no validator behind it, so it never appears — a cleared date simply sends an empty range. Branch is pre-filled from your personal default branch (Personalization → Default Selection), not the applet-wide one, so two colleagues open the same screen on two different branches.
The branch list is not the tenant’s branch list: it is the branch target on your
API_TNT_DM_ERP_Z_REPORT_READ permission. No target means no branches, and the screen still opens.
Cashier Collection — six criteria, and three traps in them
| Criterion | What it does |
|---|---|
| Branch | Multi-select, from the API_TNT_DM_ERP_REPORT_CASHIER_COLLECTION_READ target |
| Sales Agent | Multi-select over employee entities — the sales agent recorded on the document, not the cashier who took the money |
| Device | Single-select, despite sitting among multi-selects. One till at a time |
| Create Date and Transaction Date | Two separate ranges, each behind its own checkbox, and you may tick only one. Ticking both is refused with Please choose either the date txn or date create filter |
| User Create | Multi-select — but see the trap below |
Three things the panel does not tell you:
- With neither date checkbox ticked, the report covers today only. The request falls back to the start and end of the current day, which is why a search with an untouched panel looks empty on a quiet morning. If you tick a checkbox but leave its range blank, the bounds become 2022-01-01 to 2099-12-31 — effectively everything — which is the other way this goes wrong.
- The User Create filter does nothing unless Allow viewing own created transactions only is
switched on. With that setting off, whatever you choose in User Create is never put in the
request. With it on and you holding
ALLOW_VIEW_TRANSACTION_ALL_USER_CREATE, your choice is sent; with it on and you not holding the permission, the filter is forced to your own login and your choice is ignored. So the box is live in exactly one of three configurations. - There is no Settlement Method filter, although Settlement Method is a column. To see one payment method, drag that column into the grid’s group bar — the grouping is the filter.
A keyword shorter than three characters is refused with Search keyword must more than 2 characters.
Why the two screens will never agree
They do not read the same documents. The Z Report asks for four server document types; Cashier Collection asks for six, and they overlap in only three:
| Document type | Z Report | Cashier Collection |
|---|---|---|
INTERNAL_SALES_CASHBILL | ✓ | ✓ |
INTERNAL_SALES_INVOICE | ✓ | ✓ |
INTERNAL_SALES_REFUND_NOTE | ✓ | ✓ |
INTERNAL_SALES_RETURN | ✓ | — |
INTERNAL_SALES_ORDER | — | ✓ |
INTERNAL_PAYMENT_VOUCHER | — | ✓ |
INTERNAL_RECEIPT_VOUCHER | — | ✓ |
So a day with returns reconciles differently on the two screens, and a day with receipt vouchers or payments out reconciles differently again. Neither screen is wrong; they answer different questions, and nothing on either says so. Reconcile the Z Report against the till and Cashier Collection against the bank.
One more sign convention: on Cashier Collection the Amount column is negated in the browser for
INTERNAL_PAYMENT_VOUCHER and INTERNAL_SALES_REFUND_NOTE rows, so money out shows as a negative
number and the column totals correctly. The stored amount on those documents is positive.
Lifecycle and effects
This applet is read-only. It creates no documents, writes no journal, moves no stock and holds no state of its own beyond the five settings above.
| Screen | What it reads | How |
|---|---|---|
| Cashier Collection | Settlement lines | The cashier-collections/backoffice-ep sales-report endpoint under the tenant ERP reports prefix |
| Z Report | Payments, sales, categories and transaction counts for one branch and date, over INTERNAL_SALES_CASHBILL, INTERNAL_SALES_INVOICE, INTERNAL_SALES_RETURN, INTERNAL_SALES_REFUND_NOTE | The z-report sales-report endpoint |
| Cashier Collections By Settlement Type (unreachable) | The same collections grouped by settlement type | The cashier-collections-settlement-type/backoffice-ep endpoint |
Related applets
- POS General — where the cash bills and settlements are taken, and where the fuller Z Report lives.
- Sales Invoice (Internal), Sales Return (Internal), Sales Refund Note (Internal) — the other three document types the Z Report counts.
- Sales Report — analysis across the same documents, not restricted to one day.
- Cashbook — the accounts the settlements post to; reconcile the Cashier Collection totals against them.
- Organisation — branches, locations and settlement methods.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The Branch drop-down is empty on either screen | Your role has no branch target on API_TNT_DM_ERP_Z_REPORT_READ (Z Report) or API_TNT_DM_ERP_REPORT_CASHIER_COLLECTION_READ (Cashier Collection). This is a target filter, not a yes/no permission — the screen still opens | Add the branches to the permission target |
| The Z Report total does not match the day’s takings | The Z Report counts only INTERNAL_SALES_CASHBILL, INTERNAL_SALES_INVOICE, INTERNAL_SALES_RETURN and INTERNAL_SALES_REFUND_NOTE. Credit notes, debit notes and receipt vouchers are excluded | Reconcile the excluded documents separately, or use Sales Report |
| The Z Report and Cashier Collection disagree for the same day | They read different document types — the Z Report counts sales returns, Cashier Collection does not; Cashier Collection counts sales orders, payment vouchers and receipt vouchers, the Z Report does not | Expected. See Why the two screens will never agree |
| Cashier Collection comes back empty with an untouched search panel | Neither date checkbox is ticked, so the request covers today only | Tick Create Date or Transaction Date (not both) and set the range |
| A User Create choice is ignored on Cashier Collection | The filter is only sent when Allow viewing own created transactions only is on; with it off, the box does nothing | Switch the setting on, or filter in the grid |
| The Z Report shows one day only | The form has a single Date field and the request sends it as both from and to | Run it once per day |
| A user sees no rows on Cashier Collection | VIEW_OWN_CREATED_TRANSACTIONS_ONLY is on and the user created none of the day’s collections | Grant ALLOW_VIEW_TRANSACTION_ALL_USER_CREATE, or clear the setting |
| The Z Report menu entry is missing | HIDE_ZREPORT_MENU is on for the tenant | Grant SHOW_ZREPORT_MENU to the role, or clear the setting |
| The Cashier Collections By Settlement Type screen is missing from the menu | Its menu entry is commented out; the hide setting for it has no effect either way | Go to the applet’s address followed by /cashier-collections-settlement-type; the route is registered (read from the routing, not tried). |
| Toggles under Lines Settings or Department Settings do nothing | They have no form binding and are not saved. | Ignore them |
| An AG Grid Error toast appears after SEARCH | The report endpoint returned an error; the applet surfaces the message verbatim under that heading | Read the message; the usual causes are an out-of-range date or a branch you have no target for |
| Export to PDF is empty | The grid is empty — export renders what is on screen | Run SEARCH first |