Пошаговая инструкция
Сначала пройдите интерактивную карту экрана. Точки показывают, где находится действие. После walkthrough ниже идут карточки по каждой кнопке и рабочему блоку: что нажимать, что проверять и зачем это нужно.
Эти экранные карты собраны по исходникам lib/terminal/kassa, lib/terminal/sale, lib/components/pin_block, lib/terminal/ssmena, lib/components/listorders и связанным POS-компонентам.
Поля и кнопки на этом экране
Вход в POS
Как выполнить: Откройте https://sabsus.flutterflow.app/logkass и введите PIN сотрудника. После верного PIN откроется Kassa.
Зачем: PIN-вход выбирает сотрудника и не дает терминалу стартовать под неправильным человеком.
Загрузка Kassa
Как выполнить: После PIN-входа дождитесь загрузки продуктов, категорий, оплат, налогов, сотрудников, счетов и заказов.
Зачем: Если начать работу до загрузки данных, списки могут выглядеть пустыми или неполными.
Загрузка данных
Как выполнить: Дождитесь загрузки продуктов, категорий, методов оплаты, налогов, сотрудников, счетов и realtime-заказов.
Зачем: Пока данные не загружены, экран может выглядеть пустым или неполным.
Рабочая смена сотрудника
Как выполнить: Если появляется окно смены сотрудника, нажмите Start shift.
Зачем: Рабочая смена фиксирует время персонала отдельно от кассы.
PIN-код
Как выполнить: Нажмите замок, введите 4 цифры, используйте очистку или backspace при ошибке.
Зачем: PIN ускоряет защищённые действия и сохраняет ответственность конкретного сотрудника.
Индикатор кассовой смены
Как выполнить: Нажмите зелёный или красный индикатор смены в верхней панели.
Зачем: Так открывается Cash shift management, где видно открыта касса или нет.
Открытие кассовой смены
Как выполнить: Введите Cash at opening и нажмите Open shift.
Зачем: Стартовая сумма нужна для расчёта расхождения при закрытии.
Закрытие кассовой смены
Как выполнить: Введите фактическую наличность, проверьте expected balance и cash difference, добавьте комментарий и нажмите Close shift.
Зачем: Закрытие без сверки скрывает кассовые ошибки.
Калькулятор наличности
Как выполнить: Используйте поля монет и купюр для пересчёта кассы.
Зачем: Пересчёт по номиналам снижает ошибки ручной арифметики.
Карточка сотрудника
Как выполнить: Проверьте, какой сотрудник активен, и откройте профиль при необходимости.
Зачем: Заказы, смены и действия должны быть привязаны к правильному человеку.
Переключатель списка и плиток
Как выполнить: Нажмите иконку вида; двойное нажатие и долгое нажатие меняют количество колонок плиток.
Зачем: Плитки удобны на быстрых продажах, список удобен для детального контроля.
Вкладки терминала
Как выполнить: Используйте Active, Service Calendar, Bookings, Table map, Archive, Available Slots и Routes.
Зачем: Это разные рабочие зоны, а не просто текстовые фильтры.
Фильтры статуса
Как выполнить: Выберите Unpaid, In Progress, Done, Canceled или All Statuses.
Зачем: Так быстрее найти неоплаченные, активные или завершённые заказы.
Фильтры типа заказа
Как выполнить: Выберите All, Dine-in, Pickup, Delivery или Catering.
Зачем: Тип заказа определяет, нужны ли стол, адрес, курьер или event-данные.
Период
Как выполнить: Откройте календарь и выберите нужный период.
Зачем: Это нужно для архива, доставок, броней и старых заказов.
Сортировка таблицы
Как выполнить: Нажимайте Type and channel, Date, Delivery date, Status, Amount and payment.
Зачем: Сортировка помогает быстро найти срочный, неоплаченный или поздний заказ.
Открытие заказа
Как выполнить: Нажмите строку или плитку заказа.
Зачем: Откроется Orderkassa/Sale без выхода из POS.
Новый заказ
Как выполнить: Нажмите New order только после проверки сотрудника и смен.
Зачем: Новый заказ получает сотрудника, заведение, кассу, смену, валюту и POS integration.
Выбор типа заказа
Как выполнить: Выберите Dine-in, Pickup, Delivery или Catering; fast-food может создать Dine-in сразу.
Зачем: Тип управляет доступными полями, продуктами и маршрутизацией.
Dine-in и столы
Как выполнить: Для заказа в заведении выберите стол, зал, гостей или бронь, если бизнес это использует.
Зачем: Столы связывают сервис, посадку и оплату с правильными гостями.
Pickup
Как выполнить: Используйте Pickup, когда клиент сам забирает заказ.
Зачем: Pickup не требует курьера, но может требовать клиента и время готовности.
Delivery
Как выполнить: Используйте Delivery для адреса, маршрута, курьера, статуса доставки и стоимости доставки.
Зачем: Доставка требует больше данных, чем обычный заказ.
Catering
Как выполнить: Используйте Catering для событийных заказов.
Зачем: Catering не должен смешиваться с обычным dine-in или pickup.
Каталог
Как выполнить: Откройте Catalog, выберите категорию, найдите продукт или отсканируйте код.
Зачем: Продукты формируют корзину, суммы, налоги и производство.
Scanner
Как выполнить: Нажмите Scanner и наведите камеру на barcode или QR.
Зачем: Код может соответствовать product ID, QR code или excise code.
Services
Как выполнить: Для услуг выберите сотрудника, дату, длительность и доступный слот.
Зачем: Услуги требуют расписания, а не только количества.
Customer
Как выполнить: Найдите, отсканируйте, выберите или создайте клиента.
Зачем: Клиент подключает CRM, скидки, бонусы, депозит и историю.
Address
Как выполнить: Откройте Address для доставки или адреса клиента.
Зачем: Адрес влияет на стоимость доставки, маршрут, налоги и курьера.
Promotions
Как выполнить: Введите промокод, выберите промо и нажмите Apply.
Зачем: Скидка должна быть видна в суммах и истории.
Basket
Как выполнить: Проверьте продукты, количество, модификаторы, единицы и кнопки удаления.
Зачем: Ошибки в корзине ломают суммы, производство и склад.
Production comment
Как выполнить: Пишите здесь только инструкции для кухни или цеха.
Зачем: Производственный комментарий не должен заменять клиентский комментарий.
Customer comment
Как выполнить: Используйте для пожеланий клиента или клиентских инструкций.
Зачем: Это отделяет customer-facing данные от внутренних заметок.
Totals
Как выполнить: Проверьте delivery cost, discount, subtotal, tax, tips, commission, paid и total.
Зачем: Оплата принимается только после понятного итога.
Pay
Как выполнить: Нажмите Pay, выберите метод, бонусы, сумму, чаевые, налог, комиссию и комментарий.
Зачем: Оплаты должны объяснять, как закрыт заказ.
Payment information
Как выполнить: Откройте строку оплаты, чтобы увидеть метод, сумму, order, tips, tax, fee и comment.
Зачем: Это нужно перед refund или объяснением расхождений.
Refund payment
Как выполнить: Используйте Refund payment только после проверки конкретной оплаты.
Зачем: Refund меняет paid totals, финансы и историю заказа.
Print receipt
Как выполнить: Печатайте чек после проверки суммы и настроек языка/чека.
Зачем: Чек подтверждает продажу и может быть нужен клиенту или учёту.
Change status
Как выполнить: Меняйте Awaiting, Paid, Confirmed, Started, In preparation, Ready, Awaiting delivery, Delivered, Waiting customer, Done.
Зачем: Статусы управляют кухней, доставкой, клиентскими ожиданиями и отчётами.
Send to kitchen
Как выполнить: Отправляйте на кухню/производство только когда позиции и комментарии готовы.
Зачем: Иначе кухня получит неполный заказ.
Assign courier
Как выполнить: Назначайте курьера для delivery и проверяйте delivery windows, tracking number и link.
Зачем: Курьер нужен для ответственности и поддержки клиента.
Cancel order
Как выполнить: Отменяйте заказ только когда он действительно не должен быть активным.
Зачем: Отмена должна быть объяснима в истории и отчётах.
POS menu
Как выполнить: Используйте Products, Stock, All shifts, break, Start/Close shift, transaction, supplier delivery, devices, terminal settings, deposit, manager panel и refresh.
Зачем: Это соседние операции терминала, а не случайные переходы.
Refresh data
Как выполнить: Нажимайте Refresh data после изменений в настройках, продуктах, оплатах, налогах или сотрудниках.
Зачем: POS использует кэш и realtime-потоки, которым иногда нужен reload.
Частые ошибки
- Открывать /Kassa напрямую и пропускать /logkass: кассир не проходит PIN-вход, и контекст POS может выглядеть неверным.
- Вводить PIN, который не назначен текущему сотруднику или пользователю.
- Создавать заказ до открытия рабочей или кассовой смены.
- Использовать общий PIN для нескольких сотрудников.
- Закрывать кассу без фактической суммы и комментария при расхождении.
- Путать рабочую смену сотрудника и кассовую смену.
- Выбирать неверный тип заказа: delivery как pickup скрывает адрес и курьера.
- Добавлять продукты без проверки заведения и доступного канала продаж.
- Сканировать код и не проверять найденный продукт.
- Писать клиентские инструкции в production comment.
- Принимать оплату до проверки скидок, налогов, доставки, чаевых и комиссий.
- Делать refund без проверки конкретной строки оплаты.
- Печатать чек до финальной проверки статуса и оплаты.
- Отправлять на кухню до заполнения модификаторов и комментариев.
- Ставить Done, когда доставка, выдача, производство или оплата не завершены.
- Забывать Refresh data после изменений в продуктах, налогах, оплатах или сотрудниках.
AI Agent Field Reference для реализации
Этот блок ниже основной инструкции. Он объясняет, какие данные POS пишет или читает, чтобы будущие AI-агенты могли правильно отвечать про заказы, оплаты, смены, статусы, производство и доставку.
| Поле | Хранится как | Назначение | Почему важно |
|---|---|---|---|
| POS entry route | LogkassWidget.routePath = /logkass | Реальный экран входа в POS с PIN-блоком. | Кассир начинает здесь: Logkass загружает сотрудников и проверяет PIN перед открытием терминала. |
| POS workspace route | KassaWidget.routePath = /Kassa | Рабочая страница кассира после PIN-входа. | Kassa — это не первый публичный вход, а рабочий терминал после успешного /logkass. |
| Должность сотрудника | FFAppState().User.position | Проверяет, может ли пользователь работать в POS. | Если должность пустая, терминал уводит пользователя из POS. |
| Заведение | FFAppState().User.establishment | Текущая локация сотрудника. | Заказы, продукты, налоги, склад, залы, оплата и валюта зависят от локации. |
| Настройки терминала | FFAppState().terminal | Поведение и раскладка POS. | Колонки, строки продуктов, поиск, категории и терминальные настройки читаются отсюда. |
| Realtime заказы | actions.startOrdersStream(...) | Поток заказов компании, заведения и кассы. | Список заказов должен обновляться без ручной перезагрузки. |
| PIN | users.Pin / PinBlockWidget | Четырёхзначный код доступа. | PIN нужен для защищённых действий и ответственности сотрудника. |
| Рабочая смена | timeWorker / EmplyySmenaWidget | Смена времени сотрудника. | Это не то же самое, что кассовая смена. |
| Кассовая смена | FFAppState().cashRegister / SmensStruct | Смена денежной кассы. | Наличные и расхождения должны быть привязаны к правильной кассе. |
| Стартовая сумма | SmensStruct.summaNachalasmens | Наличность при открытии. | От неё считается закрытие. |
| Фактическая сумма | SsmenaWidget closeTextController | Пересчитанная наличность при закрытии. | Нужна для выявления расхождения. |
| Комментарий кассира | SmensStruct.comment | Пояснение к смене или разнице. | Расхождение без комментария сложно проверять. |
| Режим экрана | KassaModel.pagefocus | orders, tiles, table, archive, menu, bookings, service, inventory calendar. | Один терминал показывает разные рабочие зоны. |
| Фильтры статусов | Unpaid / In Progress / Done / Canceled / All Statuses | Быстрая фильтрация заказов. | Помогает не пропустить неоплаченные или активные заказы. |
| Фильтры типов | atplace / pickup / delivery / catering | Типы заказов. | Тип влияет на обязательные поля и отчётность. |
| Период | KassaModel.period | Диапазон дат. | Нужен для архива, доставок и старых заказов. |
| Список заказов | ListordersWidget | Табличное отображение заказов. | Даёт сортировку и основные действия. |
| Плитки заказов | OrderitemTilesWidget | Компактные карточки. | Удобно на быстром терминале. |
| Новый заказ | KassaWidget New order | Создаёт OrderStruct и открывает SaleWidget. | Заказ получает POS integration, сотрудника, смену, кассу, валюту и статус. |
| Fast food режим | establishments.fastFood | Создаёт atplace заказ без выбора типа. | Ускоряет работу быстрых заведений. |
| Тип заказа | TipOdersWidget | Выбор atplace, pickup, delivery или catering. | Определяет доступные поля, продукты и маршрутизацию. |
| OrderStruct | OrderStruct | Основной объект заказа. | Связывает товары, оплаты, клиента, статусы, доставку, комментарии и историю. |
| integration | OrderStruct.integration = POS | Маркер источника заказа. | Отделяет POS-заказы от app, web, kiosk и интеграций. |
| cashregister | OrderStruct.cashregister | Касса заказа. | Нужна для смен и отчётов. |
| worker | OrderStruct.worker | Сотрудник заказа. | Нужен для ответственности, отчётов и комиссий. |
| Catalog | SaleWidget Catalog | Каталог товаров. | Из него формируется корзина. |
| Services | SaleWidget Services | Каталог услуг и слотов. | Нужен бизнесам с расписанием. |
| Customer | ClientsKassaWidget | Поиск, выбор или создание клиента. | Подключает CRM, скидки, бонусы и депозит. |
| Address | SaleWidget Address | Адрес заказа. | Нужен для доставки, маршрута и налогов. |
| Promotions | PromotionsKassaWidget | Промокоды и промо. | Меняет итог и должно быть видно в истории. |
| Search | MenuKassa2Widget.textController | Поиск продукта или barcode input. | Ускоряет добавление товаров. |
| Scanner | actions.scanBarcode | Сканирование barcode/QR. | Снижает ошибки ручного выбора. |
| Basket | OrderStruct.items | Позиции заказа. | От корзины зависят сумма, налог, производство и склад. |
| Production comment | OrderStruct.commentForProduction | Комментарий для кухни/цеха. | Не должен смешиваться с клиентским комментарием. |
| Customer comment | OrderStruct.commentClient | Комментарий клиента. | Нужен для доставки, сервиса и пожеланий. |
| Payments | OrderStruct.payments[] | Оплаты заказа. | Поддерживает split payments, bonus, cash/card и refunds. |
| Payment method | PaymentsStruct.methodPayment | Метод оплаты. | Определяет счёт, наличные, интеграцию и комиссии. |
| Payment amount | PaymentsStruct.amount | Сумма оплаты. | Объясняет paid и остаток. |
| PaymentinfoWidget | PaymentinfoWidget | Детали оплаты и refund. | Перед возвратом нужно проверить строку оплаты. |
| Print receipt | SaleWidget Print receipt | Печать чека. | Документирует продажу. |
| Order status | StatusWidget / Change status | Статус заказа. | Управляет кухней, доставкой, клиентскими ожиданиями и отчётами. |
| Send to kitchen | SaleWidget Send to kitchen | Отправка в производство. | Кухня получает заказ только после проверки. |
| Assign courier | OrderitemWidget Assign courier | Назначение курьера. | Доставка должна иметь ответственного. |
| Cancel order | Cancel order / DeletorderWidget | Отмена заказа. | Отмена должна быть отражена в истории. |
| POS menu | MenukassaWidget | Меню соседних операций. | Доступ к products, stock, shifts, break, devices, terminal settings, deposit и refresh. |
Связанные инструкции
Перед POS должны быть настроены сотрудники, должности, методы оплаты, продукты, заведения и чеки.