Hayat POS for Windows
The keyboard-and-scanner till for Windows PCs and Android tablets — shifts, scanning, invoice tabs, split payment and card machines, refunds, receipt printers and cash drawers, barcode labels on Zebra, TSC and Xprinter label printers, the customer display, and selling offline.
Hayat POS is a till program for supermarket and restaurant counters. It runs on a Windows PC (and on Android tablets), starts full-screen, and is built for a barcode scanner and the keyboard. It sells on the same tills, shifts, prices, promotions and payment methods as the web till, and keeps selling when the internet drops.
Install on a till PC
- Get hayat_pos-windows.zip from Hayat support (or your IT, who build it with
build-all.ps1 -Apps hayat_pos— see Building the Windows version). - Unzip it anywhere, for example C:\Hayat POS, and run hayat_pos.exe. A clean Windows may first need the Microsoft Visual C++ Redistributable 2015–2022 (x64).
- Sign in. The server is backend.hayaterp.com; the server button on the sign-in screen changes it.
- Choose the branch and which till this PC is. With no till yet, Set up a till for this branch makes one (needs pos.shift.manage). The choice is remembered for this user and branch; Change till is in the menu.
The data (items, the offline queue, open invoices) is kept in %LOCALAPPDATA%\Hayat POS\data, so the program folder can be read-only.
Building the Windows version
For IT: build-all.ps1 -Apps hayat_pos builds the Windows version on a Windows PC with Visual Studio's C++ desktop tools and puts out\hayat_pos-windows.zip next to the Android file. It now builds:
- Switch on Developer Mode on the build PC (Windows Settings → For developers) — Flutter needs it to build Windows apps with plugins.
- The script sets the CMake policy floor (
CMAKE_POLICY_VERSION_MINIMUM=3.5) beforeflutter build windows, because the Firebase C++ SDK still asks for CMake older than 3.5, which CMake 4 otherwise refuses. - It warns when sqlite3.dll is missing from the Release folder: without it Hayat POS cannot open its offline database.
Shifts
- Open shift: count the float by notes and coins.
- X report during the shift, printed on the receipt printer.
- Close shift: refused while invoices are open, sales are held or offline sales are still waiting. Count the cash by denomination and type the other methods. With blind cash-up on (POS settings), the expected figures are not shown. The Z report prints for users with pos.shift.manage.
- Cash in / out, pickup and open drawer (no sale), with a reason.
If the open shift on this till belongs to another cashier, Pay is refused — the server would refuse the sale too.
Selling
The barcode box always has the focus: anything typed while no other box is focused goes there.
| Type or scan | Does |
|---|---|
| A barcode or SKU (pack barcodes too) | Adds the item. |
3* then a scan, or 3*code |
Adds three. |
| A scale label (EAN-13 starting with 2) | Adds the weighed line; the server reads the weight or price. |
| Part of a name | Adds it when one item matches, else the grid shows the matches. |
Category chips and the item grid sit beside the lines. Items with sizes and colours ask for the variant; weighed items ask for the weight. Every basket change is priced by the server within half a second — promotions, coupons, the FBR fee and the member — and Supervisor PIN needed at payment shows when an approval will be asked.
Up to 9 invoices can be open at once (F6 new, Alt+1…9 switch), each with its own lines, customer, coupons and discount. They survive a restart.
- F4 quantity, F12 price (only items that allow it; below the minimum price it warns), F11 line discount with a reason, bill discount in the menu; a line note and the order details (type, table and token on restaurant tills; patient, doctor and prescription on pharmacy tills).
- F5 customer: scan the loyalty card or type a phone, card number or code.
- F7 hold and F9 recall (this till or the whole branch).
When the server asks for a supervisor, the PIN dialog asks who approves and their manager PIN, then tries again.
Payment
F8 (or Ctrl+Enter) opens the payment with a cash tender: type the cash given (empty = exact) and press Enter. For a split payment add methods with Alt+1…9; cash always takes what the others leave and the change shows in large type.
| Method | What to do |
|---|---|
| Card | Amount, slip / approval number, first 6 and last 4 digits. With a bank offer the card is charged the offer amount. With a linked card machine, send to the machine: the approval, last 4 and amount fill in and the sale completes when the bill is covered. |
| Wallet / digital | Amount and transaction id. |
| Store / gift card | Online only. Type or scan the number — scanning the customer's phone QR (SC1:…) anywhere in the payment adds it — and the PIN. |
| Loyalty points | With a member only, up to the points' value and the programme's limit. |
| Voucher | The code; the balance is checked. |
| On account | Needs a customer. |
After the sale the receipt prints (with Auto print), the drawer opens for cash, the customer display says thank you with the e-receipt QR, and the invoice panel offers Reprint and Send e-receipt.
Refunds and today's receipts
F10 refund: scan the receipt's barcode or type its number, choose the quantity of each line coming back, the reason and the refund method (As it was paid or another), and confirm. Ctrl+R lists today's receipts to reprint (marked COPY), void (pos.void or a supervisor) or send.
Printer, drawer and display
Settings → Receipt printer (kept on this PC):
- Network ESC/POS (IP and port 9100), Windows printer, ESC/POS (a USB thermal printer — cut, logo and drawer work) or Windows / system printer as a page (A4 or a roll through its driver; no drawer).
- 42, 48 or 32 characters (80 / 58 mm), auto print, cut, Print as a picture (needed for Urdu and Arabic names), the logo, and the drawer pin (2 or 5) with Test print and Test drawer.
- The receipt has the company, branch, header and footer from the POS settings, each line, tax by rate, savings, rounding, the FBR fee, payments, change, points, the FBR invoice number and QR, and the receipt-number barcode.
Settings → Label printer is a second printer for barcode and price labels — see Barcode labels.
Settings → Barcode scanner sets how fast keys must come to count as a scan (default 45 ms between keys, at least 5 characters, ending with Enter). Raise it for slow Bluetooth scanners; set the scanner to send Enter after the code.
Settings → Customer display: Pair a display (pos.setup) shows a 6-character code; Open the display page on this PC opens my.hayaterp.com/display — drag it to the second monitor and press F11. See Customer display.
Barcode labels
Hayat POS prints the business's label templates on the till PC's label printer — a Zebra (ZPL), TSC, Xprinter or Gprinter (TSPL) or older Zebra (EPL2) — or as exact-size PDF labels on any printer.
Settings → Label printer (kept on this PC): Windows printer, raw ZPL / TSPL / EPL (USB) with the Printer name as Windows shows it, Network label printer (IP, port 9100), or Any printer, PDF labels; then Save label printer and Test label. The same card switches on the label bridge (Let the web app print labels on this printer, the port and the Pairing code), so Inventory → Print labels in the browser on this PC prints on the label printer too.
The Labels screen — Print barcode labels in the till's menu, or in the menu of the screen shown when no shift is open: scan or search items, or load a goods receipt, transfer, bill, stock count or the last 7 days' price changes; set the number of labels with − / +, choose the template and Print n labels.
It needs See stock (inventory.view), which the Cashier role does not have. Templates, prices and new barcodes are set up on the web. Full details, printer setup and calibration: Barcode and price labels.
Selling offline
When the server cannot be reached the sale goes into the till's queue and an OFF-… receipt prints, marked as an offline sale. Every 30 seconds (or Send now) the queue is sent, oldest first; a sale is never saved twice. The status bar shows Online / Offline, how many are waiting or refused (tap for the list, with Retry and Discard), the items' age, the printer and the display.
Offline the till sells at shelf prices with its own discounts — promotions and coupons apply when the sale reaches the server. Store cards, holds, refunds and opening or closing the shift need the server. Only the signed-in cashier's queued sales are sent; another cashier's wait until they sign in on that till.
Keyboard
| Key | Action |
|---|---|
| F1 | Help |
| F2 | Barcode box |
| F3 | Price check |
| F4 / F11 / F12 | Quantity / discount / price |
| F5 | Customer |
| F6 | New invoice tab |
| F7 / F9 | Hold / recall |
| F8 or Ctrl+Enter | Pay |
| F10 | Refund |
| ↑ ↓, Delete, Esc | Select a line, remove it, clear the box |
| Alt+1…9 | Switch tab (in the payment: add that method) |
| Ctrl+R / Ctrl+P / Ctrl+D | Receipts / reprint the last / open the drawer |
Where the money goes
Exactly as the web till: every sale, return and cash movement posts the same journal — see Point of sale and How every module reaches the accounts. Offline sales post when they reach the server.