Settings
Control and Audit Sale Date Backdating
Allow changing sale date controls the New Sale date picker. When off, Posnic fills the current outlet time and disables picker interaction, but this is a client-side workflow control rather than an API authorization boundary.
- Menu path
- Manage -> Core Settings -> Sale -> Allow changing sale date
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-13
Technical source evidence
Live demo rechecked 2026-09-13 at Manage -> Core Settings -> Sale and Sales -> New Sale, frontend/modules/settings_write.html allow_sale_date_edit, frontend/static/script/js/modules/js/settings.js setting load, local cache and save, frontend/static/script/js/modules/js/sales.js applySaleDateLock and New Sale payload, api/src/models/setting.model.js branch setting persistence, api/src/helpers/sales.helper.js report date filtering, api/src/repositories/sale.repository.js stored sale-date normalization
Understand the Two Modes
| Setting | New Sale behavior | Operator implication |
|---|---|---|
| On | The date field keeps its date-picker behavior and a cashier can choose another date and time. | Backdating and future-dating become possible from the standard till interface. |
| Off | Posnic replaces the field with the current time in the outlet time zone, removes the picker hook and blocks pointer interaction. | A normal cashier cannot select another date from New Sale. |
| Unset or client error | The current code leaves the field editable. | Treat an unexpected editable date as a control failure and stop before saving. |
| Edit saved sale | The existing sale date is read-only in the normal edit flow. | The New Sale switch is not a general permission for rewriting every historical date. |
Recognize the Control Boundary
The lock is applied by the New Sale browser code after reading a locally cached branch setting. The sale API still receives the date supplied in the transaction payload. It is therefore a cashier-interface safeguard, not an audit-grade server permission or protection against custom API requests, altered clients or a failed cache refresh.
- Do not describe the switch as preventing all backdated sales.
- Restrict Sale Write and API access separately.
- Use individual employee accounts so a saved transaction has an accountable operator.
- Review sales by business date and modification date where the report exposes both.
- Escalate an editable field while the switch is off as a till configuration incident.
Choose a Backdating Policy
| Operating situation | Recommended mode | Required control |
|---|---|---|
| Normal live counter sales | Off | Record the sale when money and goods change hands. |
| Approved offline-entry recovery | Temporarily on for an authorized operator | Use source receipts, a bounded time window and manager review. |
| Historical migration | Do not use the live till casually | Use an approved import or migration plan with reconciliation. |
| Training or demo data | On only in a non-production outlet | Keep test transactions out of live reports and tax periods. |
| Regulated tax or closed accounting period | Off | Require accountant-approved correction procedures instead of backdating. |
Turn Sale-Date Editing Off
- Finish or park any sale already open on the till.
- Open Manage -> Core Settings and select Sale.
- Clear Allow changing sale date.
- Use the main Core Settings Save button and wait for the success response.
- Open a fresh Sales -> New Sale screen; do not test with a page that was already open before saving.
- Confirm the upper-right date shows the current outlet date and time.
- Select the date field and verify no date picker can be used.
- Repeat the test on every active device and after switching outlets.
Allow an Approved Backdated Sale
Enable the setting only for a controlled operational reason. A changed date can move revenue, tax, stock evidence and customer history into another business period.
- Record the manager approval, intended source document and exact permitted date range.
- Enable Allow changing sale date in the correct outlet and save.
- Open a fresh New Sale and select the intended date and time in the outlet time zone.
- Enter the sale from the original receipt or other approved evidence; do not estimate tender, tax or quantities.
- Before payment, compare customer, items, quantities, tax, discount, tender and selected date with the evidence.
- Save once and record the generated bill number in the recovery log.
- Turn date editing off again immediately after the approved batch and retest a fresh New Sale.
- Reconcile the bills in Sales History, payment reports, tax reports and stock logs.
Know Which Dates Reports Use
| Surface | Relevant behavior | Audit consequence |
|---|---|---|
| Receipt and sale detail | Show the stored transaction date. | Confirm the selected business date on the saved bill. |
| Sales History | Uses stored business-side date fields with legacy fallbacks and may show return/update timing for returned sales. | Use bill number and detail view when dates appear inconsistent. |
| Some sales and KOT reports | Filter the sale date. | A backdated transaction can appear in the earlier selected period. |
| Other tax, payment and item reports | Some filter updated_date instead. | An older business date entered today can appear in a current modification window. |
| Dashboard and day boundaries | Use the outlet time zone. | Test dates near midnight after any outlet time-zone change. |
| Inventory Logs | Provide separate movement evidence. | Reconcile stock timing instead of assuming the receipt date explains every log timestamp. |
Audit Backdated Activity
- Export or record the approved bill-number list before beginning the review.
- Run Sales History for both the original entry day and every selected backdated day.
- Compare bill number, customer, operator, items, total, tender and stored sale date with source evidence.
- Run payment transaction reports for the actual collection period and reconcile settlement evidence.
- Run sales-tax and GST working reports across both relevant date windows when tax applies.
- Review Inventory Logs for each affected tracked item.
- Document differences caused by sale-date versus updated-date filtering; do not force unlike reports to match.
- Have the owner or accountant sign off before closing the correction batch.
Troubleshooting
| Problem | Likely reason | Controlled response |
|---|---|---|
| Date picker still opens after turning the switch off | The New Sale tab or device cache predates the saved change, or the client lock failed open. | Stop the sale, reload Core Settings, reopen a fresh New Sale and report a repeat failure. |
| Date field is read-only but still opens a picker | The editable field uses readonly text with the commonDate picker hook. | Test actual picker interaction; readonly alone does not prove the lock is active. |
| Backdated bill is missing from today's sales report | That report filters the stored sale date. | Run the report for the selected backdated period and reconcile by bill number. |
| Old bill appears in a current report | The report filters updated_date or the sale was edited/returned today. | Inspect the report's date rule and source sale detail. |
| The displayed time is wrong | Outlet time zone or device state is incorrect. | Verify outlet locale settings before creating more transactions; do not compensate by choosing a false sale time. |
| Employee can submit a custom dated transaction | The UI switch is not server-side authorization. | Restrict API and Sale Write access, preserve evidence and escalate for security review. |
| Closed tax totals changed | A sale was placed into or updated during a previously reviewed period. | Freeze further corrections and have the accountant reconcile the affected periods and filings. |
Manager Close Checklist
- Sale-date editing is off on every normal production outlet.
- Every temporary enablement has approval, source evidence and a bounded list of bill numbers.
- The switch was disabled and retested after recovery work.
- Sale-date and updated-date reports were reconciled according to their actual filter behavior.
- Payment settlement, tax and stock evidence agree with the approved correction record.
- Unexpected editable dates or custom API activity were escalated rather than treated as operator error.