Step-by-step instructions
A cashier or manager can open Login to POS, enter the correct employee PIN, reach the Kassa workspace, start the correct work and cash shift, find or create orders, add products and customer context, accept payment, print receipts, and keep every order traceable to the employee, establishment, cash register, and shift.
Use the interactive screenshot walkthrough first. Switch steps with the step dots, then read what to fill and why it matters.
Fields on this screen
Open Login to POS
How to fill: Open https://sabsus.flutterflow.app/logkass. This is the real cashier entry screen, not the manager order editor.
Why: The PIN screen selects the employee and prevents the terminal from starting under the wrong person.
Enter employee PIN
How to fill: Enter the employee PIN on the Logkass PIN block. After a valid PIN, SABSUS opens the Kassa workspace.
Why: The order, shift, payments, and protected actions must belong to the correct employee.
Initial loading
How to fill: After PIN login, wait until products, categories, payment methods, taxes, employees, accounts, and realtime orders are loaded.
Why: Starting work before data loads can make lists look empty or incomplete.
Employee work shift modal
How to fill: If SABSUS says the employee has no active shift, click Start shift before taking orders.
Why: The terminal records staff time separately from the cash register shift.
PIN lock
How to fill: Click the lock icon, enter the four-digit PIN on the keypad, use clear/backspace if needed, and confirm.
Why: PIN protects quick employee switching and protected POS actions while preserving accountability.
Cash shift indicator
How to fill: Click the green/red shift indicator in the top bar to open Cash shift management.
Why: Green means a cash register shift is open; red means it must be opened before cash work is reliable.
Open cash shift
How to fill: Enter the starting cash amount in Cash at opening and click Open shift.
Why: This amount becomes the baseline for closing reconciliation.
Close cash shift
How to fill: Enter the actual drawer amount, compare expected balance and cash difference, add a comment if there is a discrepancy, then click Close shift.
Why: Closing without checking differences hides cash errors.
Cash calculator
How to fill: Use coins and bills denomination fields when counting a physical drawer.
Why: Counting by denomination reduces manual arithmetic mistakes.
Employee responsible
How to fill: Check the Cash responsible block before closing.
Why: The person opening or closing the shift should be traceable.
Top employee card
How to fill: Click the employee card to open the profile, or use refresh to return through Logkass and reload streams.
Why: The cashier must know which employee is currently operating the terminal.
List/tile toggle
How to fill: Click the view icon to switch between order list and tile mode; double click or long press changes tile column count.
Why: Busy counters often need tiles, while managers often need table-style order details.
Main tabs
How to fill: Use Active, Service Calendar, Bookings, Table map, Archive, Available Slots, and Routes for the correct workspace.
Why: Each tab changes the operational context instead of only filtering text.
Status filters
How to fill: Use Unpaid, In Progress, Done, Canceled, or All Statuses before searching manually.
Why: Status filters prevent missed unpaid orders and reduce noise.
Order type filters
How to fill: Use All, Dine-in, Pickup, Delivery, and Catering to focus the list.
Why: Order type controls required fields such as table, address, courier, or event details.
Date filter
How to fill: Open the calendar icon and choose a period when reviewing old orders or deliveries.
Why: Orders are often found by delivery date or creation date.
Order table headers
How to fill: Click Type and channel, Date, Delivery date, Status, or Amount and payment to sort.
Why: Sorting gives the fastest way to find urgent, unpaid, late, or high-value orders.
Open existing order
How to fill: Click an order row or tile to open Orderkassa / Sale.
Why: The modal keeps the cashier in the POS flow while editing the order.
New order
How to fill: Click New order only after the correct shift and employee are active.
Why: New orders inherit employee, establishment, cash register, cash shift, currency, and POS integration.
Choose order type
How to fill: If the type dialog opens, choose Dine-in, Pickup, Delivery, or Catering. If fast-food mode is enabled, SABSUS creates Dine-in directly.
Why: The order type decides which products and fields are available.
Dine-in or table
How to fill: For dine-in, select table, hall, guest count, or reservation data when the business uses tables.
Why: Table context keeps service, seating, and payment tied to the right guests.
Pickup
How to fill: Use Pickup when the customer collects the order without delivery routing.
Why: Pickup does not need courier routing but still needs customer and ready time when applicable.
Delivery
How to fill: Use Delivery when address, route, courier, delivery status, or delivery fee are required.
Why: Delivery orders have extra scheduling, address, and accountability fields.
Catering
How to fill: Use Catering for event-style orders with special date, amount, or logistics requirements.
Why: Catering should not be mixed into normal dine-in or pickup reporting.
Catalog
How to fill: Open Catalog, choose a category, search by product name/code, or scan a barcode/QR code.
Why: Product selection is the source for basket, totals, tax, and production.
Scanner
How to fill: Click Scanner and point the camera at a barcode or QR code; the code can match product ID, QR code, or excise code.
Why: Scanning is faster and less error-prone than manual search.
Services
How to fill: Open Services for appointment/service items, choose employee, date, duration, and available slot, then add to order.
Why: Services need scheduling data, not only product quantity.
Customer
How to fill: Open Customer, search, scan a card/QR, select an existing profile, or create a new client.
Why: Client data drives discounts, bonuses, deposit, CRM history, and support.
Address
How to fill: Open Address for delivery or customer address details.
Why: Delivery cost, route, tax location, and courier assignment depend on address.
Promotions
How to fill: Open Promotions, enter promo code when needed, select an eligible promotion, and click Apply.
Why: Promotions must be visible in history and totals.
Basket
How to fill: Review item quantity, modifiers, units, options, and delete buttons before payment.
Why: Wrong basket lines create wrong totals, production tickets, and stock movement.
Production comment
How to fill: Add a production comment only for kitchen/workshop instructions.
Why: Production comments should not contain private customer support notes.
Customer comment
How to fill: Use customer comment for customer-facing instructions or customer-provided notes.
Why: This keeps customer instructions separate from internal production notes.
Totals
How to fill: Review delivery cost, discount, amount without discount, subtotal, tax, tips, commission, paid amount, and total amount.
Why: The cashier should catch changes before payment is accepted.
Pay
How to fill: Click Pay, choose method, bonus use, amount, tips, tax, fee, and comment, then confirm.
Why: Payments should explain exactly how the order was settled.
Payment information
How to fill: Click an existing payment row to inspect payment method, paid state, amount, order total, tips, tax, fee, and comment.
Why: Use this before refunding or explaining payment differences.
Refund
How to fill: Use Refund payment only after confirming the exact payment row and the refund reason.
Why: Refunds change paid totals, finance, and customer trust.
Print receipt
How to fill: Click Print receipt after reviewing totals and receipt language/settings.
Why: Receipts document the sale and may be required for the customer or compliance.
Status changes
How to fill: Use Change status to move the order through Awaiting, Paid, Confirmed, Started, In preparation, Ready, Awaiting delivery, Delivered, Waiting customer, or Done.
Why: Statuses tell staff and customers what should happen next.
Send to kitchen
How to fill: Click Send to kitchen or To production only when products and comments are ready.
Why: Production tickets should not be sent with missing or incorrect items.
Courier assignment
How to fill: Use Assign courier for delivery orders and check delivery windows, tracking number, and link when present.
Why: Courier data keeps delivery progress and customer support accurate.
Cancel order
How to fill: Use Cancel order only when the order should no longer be active, and make sure history records the reason.
Why: Canceled orders must be explainable in reports and support.
POS menu
How to fill: Open the menu for Products, Stock, All shifts, Take a break, Start/Close shift, Create a transaction, Process supplier delivery, Devices, Terminal settings, Deposit, Return to manager panel, and Refresh data.
Why: These buttons are adjacent terminal operations, not random navigation.
Refresh data
How to fill: Click Refresh data after changing setup in manager screens or after backend updates.
Why: The terminal uses cached app state and realtime streams that sometimes need a reload.
Common mistakes
- Opening /Kassa directly and skipping /logkass, so the cashier misses the employee PIN entry and POS context can look wrong.
- Entering a PIN that is not assigned to the current employee or user.
- Creating an order before the employee work shift or cash register shift is opened.
- Using the wrong employee PIN or sharing one PIN across several workers.
- Closing a cash shift without entering actual cash or commenting on a cash difference.
- Treating employee work shift and cash register shift as the same thing.
- Creating the wrong order type, for example delivery as pickup, which hides address and courier requirements.
- Adding products before checking the correct establishment and available sales channel.
- Using scanner results without confirming the product when several identifiers are similar.
- Putting customer instructions into production comment or internal production instructions into customer comment.
- Applying a promotion without checking whether it changed the expected total.
- Taking payment before reviewing tax, delivery cost, tips, commission, and discounts.
- Refunding a payment row without checking the method, amount, and order total snapshot.
- Printing receipt before the final payment and status are correct.
- Sending to kitchen before item modifiers and comments are complete.
- Marking an order Done when delivery, pickup, payment, or production is still incomplete.
- Using Archive to find an active order instead of checking Active filters first.
- Forgetting to refresh terminal data after manager-side changes to products, payment methods, taxes, or staff.
AI Agent Field Reference for implementation
This block is intentionally below the human instructions. It explains storage names and downstream dependencies for automation, support, and future AI agents.
| Field | Stored as | Purpose | Why it matters |
|---|---|---|---|
| POS entry route | LogkassWidget.routePath = /logkass | Real Login to POS screen with the PIN block. | Cashiers start here; Logkass loads employees and validates the PIN before opening the terminal workspace. |
| POS workspace route | KassaWidget.routePath = /Kassa | Main cashier workspace used for sales and order operations after PIN login. | Kassa is not the first public entry screen; it is the working terminal opened after /logkass succeeds. |
| Required staff position | FFAppState().User.position | Determines whether the terminal can load operational data. | If the position is empty, the page redirects away from POS and the cashier cannot work. |
| Establishment context | FFAppState().User.establishment | Current branch or location for the cashier. | Orders, products, taxes, stock, halls, payment methods, and currency are filtered by location. |
| Terminal settings | FFAppState().terminal / FFAppState().User.terminal | Layout and behavior settings for the POS. | Column count, product rows, category width, scanner behavior, and terminal preferences depend on this object. |
| Realtime orders | actions.startOrdersStream(...) | Live order stream for the company, establishment, cash register, and tax context. | The order list must update without a manual page reload. |
| PIN code | PinBlockWidget / users.Pin | Four-digit quick access or protected-action code. | PIN protects staff switching and manager-like actions while keeping terminal work fast. |
| PIN keypad | KeyboardWidget actionadd/actionclear/actioncompletle | Numeric keypad used by the PIN block. | Digits, backspace, clear, and complete behavior decide whether PIN entry succeeds. |
| Employee work shift | timeWorker / EmplyySmenaWidget | Time-tracking shift for the employee. | SABSUS can require the employee to start work before orders are handled. |
| Cash register shift | FFAppState().cashRegister / SmensStruct | Cash shift attached to payments and receipt reconciliation. | Cash, refunds, taxes, fees, tips, and expected balance must belong to the right shift. |
| Starting cash amount | SmensStruct.summaNachalasmens | Amount counted in the drawer at opening. | The closing difference is calculated from this starting value plus cash movement. |
| Expected cash balance | SsmenaWidget calculated balance | System balance based on opening cash and cash transactions. | Managers compare expected versus actual cash to find discrepancies. |
| Actual cash balance | SsmenaWidget closeTextController | Cashier-entered drawer amount at close. | Closing the shift with the wrong actual value breaks cash accountability. |
| Cashier comment | SmensStruct.comment | Explanation for cash difference or shift notes. | A difference without a comment is hard to audit. |
| Cash calculator coins and bills | SsmenaWidget denomination controllers | Count by denomination for coins and bills. | Denomination count helps staff close the drawer accurately. |
| Order view mode | KassaModel.pagefocus | Selected POS workspace such as orders, tiles, table, archive, menu, bookings, service, or inventory calendar. | The same terminal changes behavior depending on the selected view. |
| Order status filters | Unpaid / In Progress / Done / Canceled / All Statuses | Quick filters for visible orders. | Cashiers should not search through every historical order during service. |
| Order type filters | atplace / pickup / delivery / catering | Filters for dine-in, pickup, delivery, and catering orders. | Each type has different required fields and operational routing. |
| Date range filter | KassaModel.period | Selected date or period from the calendar. | Helps find old orders, delivery orders, bookings, and archive records. |
| Sort columns | ListordersWidget.sortby / low | Sortable columns: type, date, delivery date, status, amount. | Sorting helps staff find urgent or unpaid work quickly. |
| Order list row | OrderitemWidget | Visible order summary in list mode. | Rows show type, client, status, payment, details, and actions. |
| Order tile | OrderitemTilesWidget | Compact order card in tile mode. | Tile mode is faster for high-volume counters and tablet layouts. |
| New order button | KassaWidget New order | Creates a new POS order and opens SaleWidget. | New orders should carry POS integration, employee, shift, register, establishment, currency, and first status. |
| Fast-food direct order | establishment.fastFood | Creates atplace order immediately when enabled. | Fast-food businesses skip the order type dialog for speed. |
| Order type dialog | TipOdersWidget | Chooses atplace, pickup, delivery, or catering. | The selected type controls which fields and products are available. |
| Order record | OrderStruct | Full order object with items, payments, status, client, totals, comments, and routing fields. | Every downstream process reads the order record. |
| POS integration marker | OrderStruct.integration = POS | Marks that the order was created from the terminal. | Reports and agents can separate POS orders from app, web, kiosk, delivery, or integration orders. |
| Cash shift number | OrderStruct.numberCashShift | Cash shift copied onto the order. | Order revenue and payments must reconcile to the right shift. |
| Cash register | OrderStruct.cashregister | Register identifier attached to the order. | Multiple terminals or drawers need separate accountability. |
| Worker | OrderStruct.worker | Employee who created or owns the order. | Staff performance, commissions, audit, and support depend on this link. |
| Catalog tab | SaleWidget Catalog | Product catalog inside the order. | Cashiers add sellable products from this section. |
| Services tab | SaleWidget Services | Service catalog and appointment scheduling. | Service businesses need employee, date, duration, and available slot logic. |
| Customer tab | SaleWidget Customer / ClientsKassaWidget | Search, scan, select, or create a client. | Client data connects the order to CRM, discounts, bonuses, deposits, and history. |
| Address tab | SaleWidget Address | Delivery or customer address selection. | Delivery pricing, courier routing, tax, and customer communication depend on address. |
| Promotions tab | PromotionsKassaWidget | Promo code and available promotions. | Discounts must be applied intentionally and recorded in order history. |
| Digital products tab | SaleWidget Digital Products | Links purchased digital items to the order. | Digital fulfillment should not be confused with physical products. |
| Tasks and documents tab | SaleWidget Tasks and documents | Operational tasks and signed agreement data. | Some orders require follow-up tasks or documents. |
| Order write-offs tab | SaleWidget Order write-offs | Inventory write-off or ingredient movement attached to the order. | Stock consumption and loss must stay connected to sales when used. |
| History tab | SaleWidget History | Status and action history for the order. | Support, managers, and agents use history to explain what happened. |
| Search field | MenuKassa2Widget.textController | Searches products or reads barcode input. | The cashier can find products quickly by name or code. |
| Scanner | actions.scanBarcode | Scans barcode, QR code, product ID, or excise code. | Scanning reduces errors when products have codes. |
| Category chips | FFAppState().Category | Product category filter in the terminal catalog. | Categories keep the catalog usable on a busy POS screen. |
| Product card | OptionRowWidget / product selection | Product row or card added to basket. | The product card controls quantity and item selection. |
| Basket | OrderStruct.items | Selected products, modifiers, service lines, and quantities. | Totals, production, stock, and payment come from basket contents. |
| Production comment | OrderStruct.commentForProduction | Instruction for kitchen or workshop. | Production notes should not be mixed with customer comments. |
| Customer comment | OrderStruct.commentClient | Customer-facing or customer-provided note. | Delivery and service preferences need a separate field. |
| Delivery cost | OrderStruct.priceForDelivery | Fee included for delivery orders. | Delivery cost changes totals and payment due. |
| Discount | OrderStruct.discount / discounts | Manual or promotion discount. | Discounts affect revenue, margin, and approval rules. |
| Tax | OrderStruct.tax / taxrates | Calculated tax amount and applied rule. | Receipts, reports, and compliance depend on correct tax. |
| Tips | OrderStruct.tips / PaymentsStruct.tips | Tip amount on the order or payment. | Tips may affect staff payouts and payment settlement. |
| Payment rows | OrderStruct.payments[] | List of payments attached to the order. | Supports split payments, bonus payments, card/cash separation, and refunds. |
| Payment method | PaymentsStruct.methodPayment | Configured payment method selected during payment. | Payment method controls account, cash handling, online/integration behavior, and fees. |
| Payment amount | PaymentsStruct.amount | Amount collected for the payment row. | Payment rows must explain paid total and remaining balance. |
| Pay with bonuses | methodPayment.id = Bonus | Bonus or loyalty balance used for payment. | Bonus use changes customer balance and order paid state. |
| Payment information | PaymentinfoWidget | Payment detail modal with method, amount, order, tips, tax, fee, comment, and refund. | Staff can audit or refund a specific payment row. |
| Refund payment | PaymentinfoWidget Refund payment | Protected action that refunds or reverses a payment row. | Refunds must be deliberate because they change order paid totals and finance records. |
| Print receipt | SaleWidget Print receipt | Prints customer receipt or production receipt depending on settings. | Printing documents the transaction and may trigger receipt history. |
| Payment success | SecsessPaymentWidget | Success screen after payment. | Cashier confirms purchase completion and closes the payment flow. |
| Order status | StatusWidget / Liststatusorder / Change status | Current status such as Awaiting, Paid, Confirmed, Started, In preparation, Ready, Awaiting delivery, Delivered, Waiting customer, Done. | Statuses route work to kitchen, delivery, pickup, and reports. |
| Send to kitchen | SaleWidget Send to kitchen / To production | Marks order lines for preparation. | Production should receive the order only when items and comments are correct. |
| Assign courier | OrderitemWidget Assign courier | Assigns delivery worker. | Delivery accountability and customer ETA depend on courier assignment. |
| Cancel order | OrderitemWidget Cancel order / DeletorderWidget | Cancels an order with the correct status/history. | Canceled orders must not look like active unpaid work. |
| POS menu | MenukassaWidget | Operational menu for adjacent terminal tasks. | Cashiers and managers use it without leaving the POS context. |
| Break button | Take a break / Return from break | Toggles employee rest state. | Break state affects staffing and shift activity. |
| Start or close employee shift | MenukassaWidget Start shift / Closing your shift | Opens or closes the employee work shift. | Work time must match the real staffing day. |
| Refresh data | MenukassaWidget Refresh data | Reloads operational data. | Use after backend changes or when the terminal cache is stale. |
Related guides
Use these guides to connect this section to adjacent SABSUS workflows.