Reports
Review Detailed Kiosk and Self-Order Sales
Detailed kiosks is the transaction-level Kiosk Report. It lists eligible kiosk and self-order sales across the selected branches, then expands each order into item, SKU, price, quantity, discount, tax and total details.
- Menu path
- Reports -> Sales -> Kiosk Reports -> Detailed kiosks
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
frontend/modules/kioskReport.html Detailed kiosks tab filters columns pagination and controls, frontend/static/script/js/modules/js/report_kiosk.js detailed rendering expansion pricing and CSV export, api/src/middleware/sales.validation.js kiosk query normalization, api/src/controllers/sales.controller.js kiosk report access and response normalization, api/src/repositories/sale.repository.js kiosk eligibility plan limit and ordering, demo.posnic.io Detailed kiosks captured on 2026-09-11
Run the Detailed Report
- Enable Sales Channels and make sure the user has Report Read permission.
- Open Reports, then Sales, then Kiosk Reports.
- Select Detailed kiosks.
- Open Filter and choose the date range.
- Select one or more branches.
- Choose All Methods, Kiosk or Self-Order.
- Select Apply and wait for the table or No Records message.
- Use the plus icon beside an order to inspect its saved item lines.
Which Sales Are Included
| Rule | Current behavior | Operational meaning |
|---|---|---|
| Channel | All Methods means sale_method Kiosk or Self-Order; a selected method is an exact match. | Normal cashier sales are excluded. |
| Sale process | Add, Edit and PartialReturn are included. | Returned or edited records can remain in this operational list; reconcile unusual totals with Sales History. |
| Date | The report filters updated_date from the selected start through end of day. | Editing an older order can move it into a later reporting period. |
| Branch | Every valid selected branch ID is queried together. | Rows do not display branch, so run branches separately when outlet attribution matters. |
| Ordering | Newest updated_date is shown first. | This is update order, not necessarily original sale order. |
| Access | Report Read must be exactly true. | A 403 permission result is not an empty report. |
| Plan | The report applies the sales report plan limit; Free Plan UI can blur both tabs and disable export. | Upgrade messaging or missing rows may be plan behavior rather than missing sales. |
Read the Order Row
| Column | What it shows | Check |
|---|---|---|
| ID | The saved sales_id and a link to the sale detail route. | Use it to reconcile the source sale. |
| Date | The normalized updated date shown in the shop format. | It may differ from the original sale date. |
| Customer Phone | The saved customer phone as a clickable telephone link. | Blank or placeholder contact data can appear. |
| Items | The saved number_of_items value. | Do not assume it equals the number of expanded rows or total units without checking. |
| Sales Type | Kiosk or Self-Order sale_method. | This is the channel filter field. |
| Order Type | The saved order value. | Verify channel terminology used by your shop. |
| Total | The saved items_total formatted in the current currency. | Reconcile payment, return and round-off differences elsewhere. |
Expand and Inspect Items
- Select the plus-circle in the first column; the row opens an inner item table.
- Each saved line shows Item name, SKU, Price, Qty, Discount, Tax and Total.
- For tax-inclusive lines, the displayed Price is backed out by dividing stored item_price by one plus the tax rate.
- A percentage discount displays its rate and calculated line discount; a fixed discount is multiplied by quantity.
- Tax displays its rate and a calculated amount after item discount.
- The expanded Total comes from the saved line total_amount, so investigate disagreement with the browser's reconstructed price, discount or tax.
- Item and order values are inserted into generated table HTML without explicit escaping; keep catalog and channel data trusted.
Pagination and Empty Results
- The default page size is 5; available sizes are 5, 10, 25, 50 and 100.
- Showing X to Y of Z counts sale records, not item lines or units.
- Previous and Next request server pages sorted by most recently updated sale first.
- When no sale matches, the table header, pagination and dedicated export control are hidden or disabled and the selected range is shown in the No Records message.
- Refresh reruns the current Detailed kiosks query.
Export All to CSV
- Apply the final date, branch and channel filters and note the on-screen total.
- Select Export All To CSV inside the Detailed kiosks tab, not merely a page-level export button.
- Posnic requests one page using the last known total as the limit.
- The export writes one CSV row per item line, repeating its parent kiosk order fields.
- Confirm columns for kiosk ID, date, sale type, order type, customer phone, item count, item name, SKU, price, quantity, discount, tax and item total.
- Compare distinct kiosk IDs and row counts with the screen and source sales before filing the export.
Export and Audit Limits
- The dedicated CSV omits branch, customer name, payment method, sale process, original sale date, operator, round-off, refund amount and order-level items_total.
- The export uses kiosks_id normalized from sales_id, while the visible row links with the record _id.
- Export All relies on the total from the most recent table response; data changes between load and export can change completeness.
- After export, the browser immediately reloads the normal table query.
- The page-level PDF, CSV, Excel and Email controls are generic report controls; verify their output separately instead of assuming they match the dedicated item-line CSV.
- Use Sales History, Payment Reports and the source receipt for financial sign-off.
Troubleshooting
| Problem | Check | Action |
|---|---|---|
| No Records | Date range, every selected branch, method, sale process and updated date | Test a known Kiosk or Self-Order sale under the same filters. |
| Old order appears in a new period | Whether it was edited or partially returned | Reconcile its updated_date and Sales History activity. |
| Cannot tell which branch owns a row | Whether multiple branches were selected | Run each branch separately and label the exports. |
| Items count differs from expanded detail | Saved number_of_items, expanded row count and item quantities | Use the expanded lines and source receipt; do not infer one measure from another. |
| Export is disabled | Whether the report is empty, the account is Free Plan, or Report Read is missing | Resolve the relevant data, plan or permission condition. |
| CSV differs from the screen | Data changed after load or the prior total was stale | Refresh, export again and reconcile distinct kiosk IDs. |
| Total differs from reconstructed lines | Inclusive tax, fixed or percentage discounts, saved total_amount and returns | Open the linked sale and compare its receipt and payment record. |