Контроль потерь и кассовые риски
Одна ручная скидка ничего не значит. Двадцать скидок одного PIN за смену при трёх у всех остальных — значат.
Контроль потерь состоит из двух слоёв. Первый — журнал опасных операций, он отвечает на вопрос «что было». Второй — восемь правил, которые отвечают на вопрос владельца «на что смотреть».
Журнал опасных операций#
Касса пишет событийную ленту рискованных действий с привязкой к текущему кассиру (учитывается быстрое переключение по PIN, а не только тот, кто залогинен на устройстве):
| Событие | Когда пишется |
|---|---|
| Ручная скидка / изменение цены | кассир вручную снизил цену или дал скидку |
| Отмена заказа | чек аннулирован целиком |
| Удаление позиции после отправки на кухню | сторно уже готовящегося блюда |
| Возврат по чеку | оформлен возврат |
| Открытие денежного ящика без продажи | ящик открыли вне чека |
| Повторная печать выданного чека | репринт — классический способ подменить чек гостя |
| Правка счёта после пречека | гость уже видел итог, а счёт изменили (сюда же — слияние столов, аннулирующее напечатанный пречек) |
| Расхождение кассы при закрытии смены | факт не сошёлся с ожиданием |
Сама лента с фильтрами по кассирам и типам операций живёт на вкладке «Опасные операции» раздела «Статистика» — см. Посещаемость и сводка. Здесь она не дублируется.
Чтобы разобрать месяц с бухгалтером или управляющим, нажмите «⬇ Скачать CSV» над «Лентой событий»: в файл уйдёт вся отфильтрованная лента (кассир, тип операции, точка и период), а не только строки на экране — время, кто и в какой роли, что изменилось, сумма, номер заказа и кто одобрил. Если открыта история одного заказа, выгрузится она.
По кассам и по причинам#
Под таблицами «По кассирам» и «По типам» на вкладке «Опасные операции» есть ещё два свода за тот же период и фильтры:
- «По причинам» — отмены, сторно и возвраты по причине, которую выбрал кассир: «Гость отказался», «Брак блюда», «Долгое ожидание», «Ошибка кассира», «Тест / обучение», причины из вашего справочника возвратов и «Прочее (своими словами)» — там же видно, что именно писали. Число и сумма по каждой причине; строки в сумме дают число операций с причиной. Чтобы касса спрашивала причину всегда, включите настройку точки «Спрашивать причину отмены отправленной позиции» (заказы зала). Отмены, записанные до появления свода, причину хранят только в тексте операции — они в свод не входят, их число показано под таблицей. Причину в свод пишут и браузерная касса, и касса-приложение для Android, Windows и Ubuntu — при снятии отправленной позиции и при возврате по чеку.
- «По кассам» — на какой кассе (устройстве) сделана операция: число, сумма и сколько раз открывали ящик без продажи. Имя кассе дают на самом устройстве: в веб-кассе — окно «Внешний вид POS» → «Название кассы», в кассе-приложении для Android, Windows и Ubuntu — поле «Название кассы» в настройках устройства. Без имени касса-приложение видна под именем устройства (модель планшета или имя компьютера), веб-касса — коротким номером. Тот же разрез по выручке — в «Финансах».
У журнала есть вторая, серверная нога. Опасные операции не только записываются кассой, но и выводятся сервером самостоятельно — из того, как менялся сам заказ: снятие позиции, уже отправленной на кухню, ручная скидка, изменение цены, переоткрытие закрытого заказа, отмена после оплаты, возврат, правка после пречека. Эту запись касса обойти не может: она делается на стороне, которая принимает заказ, а не в браузере.
Из двух ног складывается отдельное правило — «расхождение журналов»: если операция есть в журнале кассы, но её нет в серверном (или наоборот), это повод посмотреть внимательнее — приложение работало офлайн, журнал не долетел или кассир пытался обойти запись. Такое расхождение попадает в «Кассовые риски» на вкладке «На контроле» вместе с остальными алёртами.
Восемь правил#
Правила считаются на сервере по журналу и по данным учёта. Окно наблюдения — неделя, «смена» приближается календарным днём точки.
| Правило | Когда срабатывает |
|---|---|
| Серия отмен | у одного кассира за смену набралось столько отмен/сторно, что это уже не «бывает» (по умолчанию — 8, примерно одна в час полной смены) |
| Серия скидок | сумма ручных скидок кассира за смену втрое (×3) превышает медиану по всем кассирам аккаунта за окно |
| Расхождение кассы | недостача/излишек при закрытии смены выше порога владельца либо втрое (×3) выше медианы расхождений |
| Расход выше нормы | по циклу инвентаризации фактический расход превысил теоретический (по тех-картам) больше чем на N % (по умолчанию — 5 %) — «куда делась разница» |
| Скачок закупочной цены | товар приняли дороже медианы его цены (по умолчанию — на 15 %+) |
| Расхождение журналов | операция есть в журнале кассы, но её нет в серверном (или наоборот) — см. раздел выше |
| Выше своей нормы | смена сотрудника сильно выше его собственного обычного уровня: скидки, отмены, возвраты или расхождение кассы за день больше, чем «среднее + k × разброс» его рабочих дней за 12 недель (по умолчанию k = 2). Пока у сотрудника меньше 6 смен, норма не считается — новичков не дёргаем |
| Много наличных в ящике | касса сообщила, что наличных в ящике больше порога точки («Пора инкассировать», см. Кассовая смена); один сигнал на точку в день |
Своя норма против общей медианы. «Серия скидок» сравнивает кассира со всеми остальными и пропускает сотрудника, у которого скидки всегда втрое выше, чем у коллег. «Выше своей нормы» сравнивает человека с ним самим: всплеск видно, даже если по меркам заведения сумма обычная. Дни смен без скидок входят в норму нулями. Чтобы одна мелочь не считалась всплеском, нужно не меньше двух денежных операций (или трёх отмен) за день и значение хотя бы в полтора раза выше нормы.
Почему денежные пороги самокалибруются. Константа тут не работает: у аккаунтов разные валюты и разный масштаб чека. Поэтому денежные правила сравнивают кассира с медианой по всем кассирам того же аккаунта и срабатывают только при превышении её втрое.
Медиана закупочной цены считается по окнам 30 и 90 дней, одна накладная — одна точка выборки (поставщик, разбивший поставку на пять строк, не сдвигает медиану впятеро сильнее честного). Меньше трёх поставок — не выборка, правило молчит. Та же медиана даёт бейдж «+N % к медиане» прямо на строке приёмки — см. Склад.
Каждый алёрт имеет уровень (высокий/средний), сумму под риском, число событий и период. Повторный пересчёт не плодит дубликаты: один и тот же перекос за один и тот же день — это один и тот же алёрт.
Где смотреть и как настроить#
Блок «Кассовые риски» — в «Рабочем чате» → «Требует решения» → вкладка «На контроле», вместе с остальными делами. Отдельного раздела «Требует внимания» в панели больше нет; старый адрес приводит сюда же. Кнопка «Разобрать» ведёт в ленту событий.
Пороги открываются шестерёнкой ⚙️ в шапке раздела «Статистика», пункт «Пороги алёртов»: она сама переключит на вкладку «Опасные операции» и раскроет свёрнутый блок порогов (пункт видят владелец и управляющий). Туда же можно дойти вручную — вкладка «Опасные операции» → блок порогов. Что задаётся:
- сумма ручных скидок за смену — поднимает планку: нужны оба условия, и порог, и превышение медианы (норма скидок относительна и зависит от промо);
- серия отмен за смену — счётный порог;
- расхождение кассы — замещает медиану: здесь владелец знает свою терпимость в абсолютных деньгах;
- потери сверх теоретического расхода, %;
- превышение медианы закупочной цены, %;
- «Сравнивать сотрудника с его собственной нормой» — галочка правила «Выше своей нормы» (включена по умолчанию), чувствительность k и сколько смен нужно для нормы.
Пустой порог = «порога нет»: правило работает от медианы (денежные) либо от консервативного значения по умолчанию.
Письмо владельцу — по подписке. По умолчанию алёрты считаются и видны в админке, но писем никто не получает. Тумблер почты стоит в тех же настройках, и задумано так: одно письмо на прогон со сводкой новых алёртов, а не по письму на каждый — серия отмен обычно приходит пачкой.
Пуш на телефон руководителя — тоже по подписке. Галочка «Пуш на телефон руководителя» в тех же настройках: о новой недостаче, «много наличных в ящике», скидках или отменах выше нормы руководитель узнаёт в приложении Cenaly Business (оно же — монитор заказов на телефоне владельца), даже если он не в зале. Чтобы пуш не превратился в шум:
- одна сводка, не чаще раза в 4 часа (по умолчанию; поле «Не чаще раза в, часов»): новые сигналы копятся и уходят одним уведомлением, например «Анна: скидки 18 000 при норме 7 000»;
- тихие часы (по умолчанию 23:00–08:00 по времени точки): ночью пуш ждёт, утром приходит сводка;
- пушатся только кассовые правила (расхождение кассы, много наличных, выше нормы, серии скидок и отмен) и только за сегодня и вчера — включив пуш, вы не получите сводку за прошлую неделю.
Пуш получает владелец аккаунта на телефонах, где выполнен вход в приложение. Нажатие открывает «Опасные операции».
Видеоклипы опасных операций#
Если к кассовому устройству через Cenaly Hardware Bridge подключена камера, к событию можно прикладывать короткий видеоклип: несколько секунд до и после операции.
Настраивается по точке (у каждой кассы свой зал и свой ракурс) в разделе оборудования:
- включение (по умолчанию выключено — видео кассовой зоны это персональные данные, включать молча за клиента нельзя);
- камера кассовой зоны из списка устройств моста;
- сколько секунд до и после события попадает в клип — по умолчанию 30 и 30, допустимо от 5 до 120 секунд;
- суточный лимит клипов на точку — по умолчанию 40, допустимо от 1 до 200;
- срок хранения клипа — по умолчанию 30 дней, допустимо от 1 до 365.
Журнал полностью работоспособен и без камеры — видео это добавка, а не условие.
PIN-одобрение#
Опасные операции можно закрыть подтверждением старшего: кассир запрашивает действие, менеджер вводит свой PIN, и в журнал попадает и операция, и тот, кто её одобрил.
Лимиты скидок, возвратов и сторно по ролям задаёт владелец в разделе Сотрудники и смены; касса по ним решает, требует ли операция PIN-одобрения.
Гейт стоит не только в интерфейсе. Когда чек уходит на сервер, лимиты кассира резолвятся заново — по его реальной должности, а не по тому, что прислало приложение; чек со скидкой сверх лимита без подтверждения старшего просто не примут. И одобривший обязан действительно иметь право одобрять: имя и роль «из запроса» сервер во внимание не берёт.
Репринт выданного чека тоже проходит под PIN и записывается в журнал.
Проверка возраста (18+) и отмены «в отходы»#
Эти настройки действуют для выбранной точки в веб-кассе и по умолчанию выключены. Откройте шестерёнку кассы → «Контроль операций кассира». Они работают отдельно от аналитических правил потерь, описанных выше.
Проверить возраст перед продажей#
- В блоке «Проверка возраста (18+)» включите «Спрашивать проверку возраста», задайте «Минимальный возраст» и «Категории 18+», затем нажмите «Сохранить». Подкатегории наследуют отметку категории.
- Теги позиции «18+» или «21+» задают свой порог. При включённом распознавании тегов учитываются также алкоголь, табак, вино, пиво, кальян и энергетики. Возрастная позиция внутри комбо тоже требует проверки; применяется самый высокий порог в чеке.
- При добавлении такой позиции касса открывает проверку. Проверьте документ и нажмите, например, «Документ проверен — 18+» либо заполните «Дата рождения из документа» и подтвердите рассчитанный возраст. Если выбрали «Позже», касса спросит снова перед оплатой; без подтверждения продажа не проводится.
- «Отказать в продаже» убирает неотправленные возрастные позиции. Уже отправленные позиции отмените обычным способом в чеке. Отказ записывается в журнал операций.
В заказе сохраняются сотрудник, время, способ подтверждения и возрастной порог. Дата рождения и данные документа не сохраняются. Подтверждение относится к текущему чеку.
Отменить приготовленную позицию и учесть продукты#
- В «Контроле операций кассира» включите «Спрашивать, что с продуктами».
- При отмене отправленной на кухню позиции или уменьшении её количества выберите «В отходы», если блюдо уже приготовили, либо «Не списывать», если продукты не израсходованы или блюдо передали другому гостю.
- После «В отходы» проверьте «Склад» → «Документы»: состав отменённого количества списывается отдельным документом с причиной «отходы». Для этого у позиции должен быть настроен складской состав/техкарта. «Не списывать» не создаёт такого списания отходов.
Ограничения#
Эти сценарии описаны для веб-кассы. Проверка 18+ требует включения и корректных тегов или категорий; она не распознаёт возраст по внешности. Списание «в отходы» относится к снятому количеству отправленной позиции, а не к отмене заказа целиком. Без складского состава списывать нечего.
Устранение неполадок#
| Симптом | Причина | Что делать |
|---|---|---|
| Проверка возраста не появилась | Опция выключена, позиция не отмечена или страна точки — Россия | Проверьте настройки точки и теги; для России используйте алкогольный контур |
| Оплата снова спрашивает возраст | Подтверждение отложено или добавлена позиция с более высоким порогом | Повторите проверку документа для нужного порога |
| После отказа позиция осталась | Её уже отправили | Отмените позицию в чеке |
| Нет документа отходов | Выбрано «Не списывать», отменён весь заказ либо нет состава; возможна ошибка записи | Проверьте выбор и техкарту, затем документы склада; при отсутствии ожидаемого документа обратитесь к администратору |
Сторно нескольких позиций и лимит количества на чек#
Оба инструмента есть в веб-кассе; в кассе-приложении для Android, Windows и Ubuntu их пока нет.
Снять несколько позиций разом#
- Над строками чека нажмите «☑ Выбрать» и отметьте позиции.
- Нажмите «✕ Сторно».
- Если среди них есть позиции, уже отправленные на кухню, касса один раз спросит причину (и, если включено «Спрашивать, что с продуктами», — «В отходы» или «Не списывать»). PIN старшего — тоже один раз, по настройке «PIN старшего для отмены отправленной позиции».
- Все отмеченные строки снимаются сразу.
После сохранения заказа в журнал опасных операций уходит одна запись «Сторно позиции (отправлена на кухню)» со списком позиций, общей суммой и причиной. Сервер по-прежнему видит снятие каждой строки, и правило «Расхождение журналов» сопоставляет групповую запись со всеми ними — ложной тревоги не будет. Для правила «Серия отмен» групповое сторно — одна отмена. Позиции, ещё не отправленные на кухню, снимаются без вопросов, как обычный ✕.
Лимит количества позиции на чек#
Владелец задаёт в карточке товара (вкладка «Цена») блок «Количество в заказе» → «Максимум» — то же поле, которое ограничивает корзину сайта. Поле есть в карточке товара каталога (магазин, розница); в карточке блюда ресторана его пока нет. На кассе это не жёсткий запрет, а контроль:
- пока в чеке не больше максимума этой позиции (считаются все её строки), касса пробивает без вопросов;
- следующая штука сверх него — плитка, скан, повтор или «+» у строки — открывает «Нужно одобрение менеджера» с пояснением «Превышен лимит позиции на чек (… станет 3 при лимите 2)»;
- после PIN позиция добавляется; разрешение действует на этот чек и до одобренного количества — следующая штука сверх него снова спросит PIN; отказ — позиция не добавлена;
- возврат — не больше проданного (как и раньше) и не больше максимума позиции без PIN старшего.
Весовые и повременные позиции лимиту не подчиняются. Минимум и кратность из той же карточки касса не навязывает: они про корзину сайта.
Связанные разделы#
- Посещаемость и сводка — сама лента «Опасные операции» и вкладка «Розлив»
- Требует внимания — вкладка «На контроле» рабочего чата, где живёт блок «Кассовые риски»
- Касса (POS) — PIN-роли, пречек, возвраты
- Кассовая смена — сверка наличных и Z-отчёт, откуда берётся расхождение
- Склад — инвентаризация, потери и бейдж «+N % к медиане» на приёмке
- Сотрудники и смены — лимиты скидок, возвратов и сторно по ролям
Частые вопросы#
Это слежка за сотрудниками?#
Это инструмент разговора, а не наказания. Правила не обвиняют — они показывают, что у одного человека число операций резко выбивается из общей картины. Дальше решает управляющий.
Почему правило не сработало, хотя скидка была огромная?#
Денежные правила смотрят на сумму за смену против медианы по всем кассирам, а не на одну операцию. Если крупные скидки — норма для всего заведения, медиана будет высокой. Задайте явный порог, если хотите ловить абсолютные суммы.
Алёрты приходят по одному и тому же случаю несколько раз?#
Нет. Идентификатор алёрта строится из правила, точки, кассира и периода — повторный пересчёт даёт тот же алёрт, а письмо по нему уходит один раз.
Пуш о недостаче пришёл не сразу — это сбой?#
Нет. Правила пересчитываются раз в 30 минут, пуш уходит одной сводкой не чаще раза в 4 часа (по умолчанию), а в тихие часы ждёт утра. Срочность — в самой ленте «Опасные операции»: там сигнал появляется с ближайшим пересчётом.
Почему новичку не приходит «выше своей нормы»?#
Пока у сотрудника меньше смен, чем указано в настройке (по умолчанию 6), личной нормы нет — сравнивать не с чем. Общие правила (серии скидок и отмен, расхождение кассы) работают с первого дня.
Можно ли включить письма, но не включать видео?#
Да, это независимые настройки: почта — в порогах правил, видео — в настройках точки в разделе оборудования.
Что делать, если сработало «Расход выше нормы»?#
Сравнить теоретический расход по тех-картам с фактом инвентаризации: чаще всего причина — неточная тех-карта, непроведённые списания порчи или порции «на глаз». Разбор — на вкладке «Потери» раздела Склад.