Reports
Audit Cancelled Items on Restaurant Orders
KOT Cancellation Report is a manager exception report built from cancel entries in saved sale change history. It groups activity by table and item, so use the source KOT and staff evidence to explain who cancelled each item and why.
- Menu path
- Reports -> Sales -> KOT Reports -> Cancellation Report
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
frontend/modules/kotReport.html Cancellation Report tab and columns, frontend/static/script/js/modules/js/report_kot.js cancellationSummaryTable pagination and CSV export, api/src/controllers/sales.controller.js dailySalesReports permission, branch and date handling, api/src/services/sale.service.js cancellationPipeline grouping and calculations, demo.posnic.io KOT Cancellation Report captured on 2026-09-11
Run the Report
- Open Reports, then Sales.
- Open KOT Reports.
- Select Cancellation Report.
- Open Filter and choose the business-date range and branch.
- Apply the filter.
- Review each row against the source KOT, its change history, kitchen evidence and the staff explanation before shift close.
What Counts as a Cancellation
| Rule | Current behavior | Operational meaning |
|---|---|---|
| Source | The report reads items nested inside each sale's changes history. | It is an audit of recorded item changes, not simply a list of voided final receipts. |
| Process | Only change-history items whose process is exactly cancel are counted. | Edits and additions do not become cancellations unless the saved item change carries that process. |
| Sale status | The cancellation query does not restrict sale_process to Add, Edit or PartialReturn. | A cancellation can be included regardless of the sale's current process value. |
| Table | Rows with an empty table number are removed after grouping. | Takeaway or counter cancellations without a persisted table number will not appear. |
| Date | The API filters the sale date field from start of day through end of day after session filtering. | Use the business date of the source sale; this differs from reports that filter updated_date. |
| Branch | The screen sends only the first selected branch, falling back to the current branch when none is selected. | Run branches separately; selecting several does not produce a combined cancellation report. |
| Access | Report Read permission is required. | An authorization error is not evidence that no cancellations occurred. |
How Rows Are Grouped
- Rows are grouped by the sale's table_number and the cancelled change item's item_name.
- Cancel Qty is the sum of changes.items.item_quantity in that table-and-item group.
- Cancel Amount is the sum of changes.items.total in that group.
- Missing quantities and amounts are treated as zero.
- The API rounds grouped quantity and amount to two decimal places.
- Rows are sorted from highest Cancel Amount to lowest.
- Multiple cancellations for the same named item at the same table are combined, so one row does not necessarily mean one cancellation event.
Understand Every Column
| Column | What it shows | How to use it |
|---|---|---|
| Table No | The source sale's persisted table number. | Locate the table's KOT history and confirm the service period. |
| Item Name | The item name stored in the cancelled change entry. | Match the kitchen ticket and current catalog carefully; renamed items may retain an older name in history. |
| Qty | Combined cancelled quantity for that table and item. | Use it for waste or mistake review, not as a count of distinct button presses. |
| Amount | Combined stored total from the cancelled item changes, shown with the local currency sign. | Compare it with the original item price, quantity, tax and discount evidence. |
Manager Cancellation Review
- Confirm the branch and business-date range before reading the empty state or totals.
- For each row, open KOT History and locate the source table orders.
- Separate customer-request changes, duplicate entry, kitchen shortage, preparation error, complimentary replacement and suspected misuse.
- Identify the operator and approving manager from the KOT/change evidence; the summary row itself does not display either name.
- Compare cancelled quantity with kitchen production and waste records.
- Compare Cancel Amount with the original item pricing and receipt evidence.
- Investigate repeated cancellation patterns by table, item, operator or time window.
- Retain the export and signed explanation with shift-close records.
Pagination and Export
- The API returns the full cancellation summary; the browser paginates it locally at 5 rows by default.
- The share icon reloads the report in export-all mode and creates KOT_Cancellation_Report_YYYY-MM-DD.csv.
- The CSV contains Table No, Item Name, Cancel Count and Cancel Amount.
- The export filename date is the download date, not the selected report range.
- Current CSV construction does not quote or escape field values. An item or table name containing a comma, quote or line break can shift CSV columns; verify the file before importing it into accounting or analytics software.
- The report has no event ID, sale ID, operator, reason or cancellation timestamp column. Keep source KOT evidence for a defensible audit trail.
Troubleshooting
| Problem | Check | Action |
|---|---|---|
| No Cancellations appears | Branch, business date, source table number and a saved changes.items.process of cancel | Test with a known table cancellation and verify its KOT history. |
| A counter cancellation is missing | Whether the sale has a non-empty table_number | Use Sales History or other void evidence; this report deliberately drops blank-table groups. |
| Several branches were selected | Which branch appears first in the selector | Run and export one branch at a time. |
| Quantity is larger than expected | Whether several cancellation events share the same table and item name | Inspect source KOT changes; the report combines them. |
| CSV columns are misaligned | Commas, quotes or line breaks in table or item names | Open the file carefully and repair or re-export after using CSV-safe names. |
| Old and new report totals differ | Session filter, business-date bounds and source data changes | Use the same authorized user, branch and date scope and preserve the export used for sign-off. |