Reports
Review Discounts Granted on KOT Orders
KOT Discount Report is a manager control for restaurant orders that reached KOT processing and contain a positive line or bill discount. Read its percentage and total rows carefully: they do not always represent the whole filtered period.
- Menu path
- Reports -> Sales -> KOT Reports -> Discount Report
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
frontend/modules/kotReport.html Discount Report tab and columns, frontend/static/script/js/modules/js/report_kot.js PosnicPro.kotdiscountreport rendering and CSV export, api/src/controllers/sales.controller.js kotDiscountReports access and query handling, api/src/repositories/sale.repository.js getKotDiscountReports calculation and filters, demo.posnic.io KOT Discount Report captured on 2026-09-11
Run the Report
- Open Reports, then Sales.
- Open KOT Reports.
- Select Discount Report.
- Open Filter and choose the date range and branches to review.
- Apply the filter.
- Review each KOT against its receipt, table record and manager approval before closing the shift.
Which Orders Appear
| Rule | Current behavior | Meaning |
|---|---|---|
| KOT status | The sale must have was_kot_proceeded set to true. | Ordinary non-KOT sales do not belong in this report. |
| Sale process | Add, Edit and PartialReturn records are eligible. | Review returns separately before treating the report as a final net-discount ledger. |
| Discount test | A positive sale_extra_discount, item_discount or item_discount_percentage is required. | Orders without a persisted positive discount do not appear. |
| Date | The API filters updated_date in the shop timezone. | Editing an older KOT can move it into a later reporting period. |
| Branch | Only selected valid branch IDs are queried; the current branch is used as a fallback when the selector is empty. | Confirm the branch scope before concluding that no discounts were granted. |
| Access | Report Read permission is required. | A denied report is an access issue, not evidence of zero discounts. |
Understand Every Column
| Column | What it shows | How to use it |
|---|---|---|
| ID | The sale or KOT sales ID. | Use it to locate the source transaction. |
| Date | The formatted updated date returned by the API. | Use the update timestamp when reconciling period boundaries. |
| Table | The table number; blank or Take Away is displayed as TA. | Confirm the order belonged to the expected table or takeaway channel. |
| Total | Net Amount plus the combined discount. | Treat it as the reconstructed value before discounts. |
| Discount % | Shown only when a bill or item percentage discount exists. | It may be the raw bill percentage, not the effective percentage of every combined discount. |
| Discount | Currency amount shown only when the order has no percentage-based discount. | A dash does not mean zero when Discount Price is positive. |
| Discount Price | Item discounts plus the persisted bill-level sale_extra_discount. | Use this as the combined currency discount for the row. |
| Net Amount | The saved sales_total after discounts. | Compare it with the final receipt and payment evidence. |
How Posnic Calculates the Discount
- A fixed item discount is multiplied by item quantity.
- For an exclusive-tax percentage discount, the percentage is applied to the stored item total_amount.
- For an inclusive-tax percentage discount, Posnic first backs tax out of item price multiplied by quantity, then applies the percentage.
- The bill-level component uses the persisted sale_extra_discount amount; extra_discount retains the originally entered value and type.
- Discount Price equals calculated item discounts plus the bill-level discount amount.
- Total equals saved Net Amount plus Discount Price.
Percentage and Total Caveats
- When a bill-level percentage exists, Discount % displays that raw percentage even if item discounts are also included in Discount Price.
- When only item percentage discounts exist, the browser derives an effective percentage from Discount Price divided by Total.
- When any percentage discount exists, the separate Discount currency column shows a dash; use Discount Price for the actual combined amount.
- The bold Total row is built from the list returned for the current page after pagination. It is a page total, not a guaranteed total for every matching KOT in the filtered period.
- Change rows per page or export all matching rows before preparing a period control total.
Export the Evidence
- Confirm the filter and row count.
- Use the share icon inside the Discount Report table to export all matching rows.
- Open the file named KOT_Discount_Report_YYYY-MM-DD.csv.
- Confirm it contains ID, Date, Table, Total, Discount Percentage, Discount, Discount Price and Net Amount.
- Recalculate the exported Discount Price total independently when the report spans more than one page.
- Store the export with the shift approval and exception records according to your retention policy.
Manager Reconciliation
- Match each ID to the saved sale or KOT record.
- Confirm the table or TA designation and the staff member who handled the order.
- Separate fixed line discounts, percentage line discounts and bill-level discounts.
- Check the applicable role limit and manager approval record.
- Compare Total, Discount Price and Net Amount with the final receipt.
- Review edited orders and partial returns near the date boundary.
- Investigate repeated discounts by operator, table, item or time period.
- Sign off only after the exported rows and source receipts agree.
Troubleshooting
| Problem | Check | Action |
|---|---|---|
| No Discounts appears | Branch, updated-date range, KOT processing flag and positive persisted discount fields | Correct the scope and verify a known discounted KOT. |
| Discount column is a dash | Whether any item or bill percentage discount exists | Read Discount Price for the combined currency amount. |
| Percentage looks too low or high | Mixed item and bill discounts | Recalculate the effective rate from exported Total and Discount Price. |
| Total row changes between pages | Current page and rows-per-page setting | Use the export and calculate the full-period total independently. |
| An old KOT appears today | Its updated date and edit history | Reconcile it in the update period and retain the original receipt evidence. |
| Export control is unavailable | Matching rows and Report Read permission | Correct the filter or user access. |