Прогноз попиту
Кухар щоранку відповідає на одне й те саме питання: скільки чого заготовити. Закупівельник — на сусіднє: скільки чого замовити. Зазвичай обидва відповідають з пам'яті.
Відкрийте Адмін-панель → Склад → вкладка «Прогноз» (admin.cenaly.com/inventory). Вкладка бере історію продажів і перетворює її на три конкретні артефакти. Порядок на екрані — за терміновістю: зверху те, що ризикує закінчитися до кінця дня, нижче — план заготовок, ще нижче — чернетка замовлення постачальнику. Якщо ризикових товарів немає, верхнього блоку не буде взагалі. У самому низу, згорнутою довідкою, лежить таблиця «Прогноз за стравами» — на неї можна не дивитися, поки не захочеться перевірити цифру.
Як рахується прогноз#
Рівно дві статистики, обидві зрозумілі кухареві з голосу:
- Скільки цієї страви зазвичай продається цього дня тижня. Вікно історії — 8 тижнів (56 днів). Точкова оцінка — медіана, а не середнє: вісім вівторків, один з яких був днем народження на 40 осіб, середнім кажуть «готуй на 40» щотижня, а медіана цей вівторок ігнорує. У довідковій таблиці «Прогноз за стравами» поруч із числом показано чесний розкид спостережень (мінімум–максимум), скільки спостережень у вибірці та пік — частина доби з найбільшою часткою продажів. У шапці вкладки написано підставу розрахунку: «медіана того самого дня тижня за 56 днів · N робочих днів історії».
- Як цей попит розподілений усередині дня — частки за частинами доби: ранок (6–11), обід (11–16), вечір (16–23), ніч (23–6). Межі однакові для всіх закладів, а сам профіль рахується за всіма днями історії одразу, не окремо за вівторками.
Що вважається спостереженням, теж вирішено усвідомлено: скасовані замовлення в історію не йдуть; сьогоднішній незакритий день у вибірку не потрапляє; дні до першого продажу страви не рахуються нулями (новинка не отримує «нуль продажів» за ті тижні, коли її ще не було в меню); «день без продажів» відрізняється від «дня, коли заклад був зачинений». Доба рахується в часовому поясі точки. У розрахунок беруться топ-500 товарів точки за оборотом — довгий хвіст меню відсікається.
Менше трьох спостережень одного дня тижня — числа не буде. У таблиці замість цифри стоятиме прочерк, а в колонці спостережень — позначка «мало». У план заготовок і в закупівлю така страва не потрапить взагалі. Прогноз, якому не можна вірити, гірший за відсутній: за ним готують і закуповують.
Перемикач угорі вибирає, на який день будувати прогноз — сьогодні чи завтра.
План заготовок#
Прогноз за стравами розгортається за тех-картами в потребу в товарах і напівфабрикатах. Розгортання йде за поточними тех-картами, на момент відкриття вкладки — якщо шеф змінив рецептуру вранці, план це врахує (правку, зроблену в сусідньому вікні, підхопить оновлення сторінки).
Вкладені напівфабрикати розгортаються вглиб: якщо соус варять з бульйону, а бульйон теж напівфабрикат, у план потраплять обидва — інакше кухареві сказали б зварити соус, не сказавши, що бульйону під нього немає. Глибина вкладеності обмежена п'ятьма рівнями (і захищена від рецептур, що посилаються одна на одну по колу): усе, що глибше, вважається сировиною і йде в закупівлю, а не в план заготовок.
Таблиця плану:
| Колонка | Що означає |
|---|---|
| Назва товару | напівфабрикат, який потрібно випустити |
| Залишок | скільки вже є |
| Потрібно | валова потреба за прогнозом на день |
| Випустити | нестача — скільки реально варити/різати |
| До | година, до якої залишку перестає вистачати |
Термін — це не «початок зміни». Якщо соусу вистачає на ранок, але не на обід, кухареві треба встигнути до 11:00, а не до 6:00. Година округлюється до найближчої межі частини доби (6:00, 11:00, 16:00, 23:00), а у вкладених напівфабрикатів терміну немає взагалі — там стоїть прочерк: їх варять «до» того, що з них роблять. Рядки відсортовані за терміном: раніший дедлайн — вище в списку. Якщо заготовляти нічого, вкладка так і пише: залишків вистачає на прогноз.
Залишок напівфабрикату витрачається один раз: якщо один і той самий бульйон входить і в соус, і в суп, наївний розрахунок застосував би залишок двічі і закупівля недобрала б сировини.
Кнопка «До дошки зміни» перетворює план на чек-ліст завдань — див. Дошка завдань зміни. Створюється одне спільне завдання «План заготовок — <дата>», а кожна заготовка стає його підзавданням з кількістю та годиною прямо в заголовку («Соус деміглас — 16 шт до 11:00»); закрити спільне завдання можна лише коли закриті всі підзавдання. Повторне натискання не плодить дублі: якщо план на цю дату вже стоїть на дошці, кнопка так і скаже.
Страви без тех-карти в план не йдуть і перелічуються окремим попередженням (до 20 назв): щодо них прогноз нічого сказати не може, і це краще сказати вголос, ніж вдавати, що замовлення повне.
Чернетка замовлення постачальнику#
Нижче плану — чернетка закупівлі на вибраний горизонт покриття (поле «Покриття, днів»: зазвичай термін постачання плюс запас; за замовчуванням 3 дні, припустимо від 1 до 30).
Для кожного товару рахуються дві величини, і береться більша:
- потреба за прогнозом на горизонт мінус поточний залишок;
- добір до цільового залишку (а якщо він у товару не заданий — до точки замовлення) — звичайна складська логіка.
Чому більша, а не одна замість іншої: страховий запас не знає про завтрашню п'ятницю з подвійною посадкою; а прогноз не знає про товари, які взагалі не беруть участі в тех-картах (упаковка, витратні матеріали) — у них складські нормативи єдиний орієнтир. Рядки, що потрапили до списку за другим правилом, позначені «за точкою замовлення». Зверніть увагу: правило дивиться на цільовий залишок, тому до чернетки потрапить і товар, який ще вищий за точку замовлення, але нижчий за цільовий — вкладка «Потрібно замовити» такий товар поки не показує.
За прогнозом закуповуються лише кінцеві інгредієнти: напівфабрикати до замовлення постачальнику за прогнозом не йдуть (їх випускають за планом заготівель) — вони можуть потрапити до чернетки хіба що за складським нормативом.
Кількість округлюється вгору до кратності упаковки, якщо вона задана в товару. Рядки згруповані за постачальниками (товари без призначеного постачальника — окремою групою), і кнопка створює своє замовлення на кожного постачальника — далі це звичайні закупівлі з розділу Склад.
«Закінчиться до 19:00»#
Найвищий блок вкладки — ризик вичерпання до кінця дня: те, що горить просто зараз. Він порівнює поточний залишок з очікуваною витратою за години, що залишилися, порахованою за профілем частин доби, і називає годину, до якої залишок обнулиться. Якщо годину визначити не вдається, рядок чесно каже «не вистачить до кінця дня», без вигаданого часу.
Блок рахується лише для сьогодні: при перемиканні на «завтра» він зникає — ризику «закінчиться до 19:00» у завтрашнього дня не буває.
Поправка на сьогоднішній темп: якщо до обіду вже витратили більше звичайного, очікування на залишок дня пропорційно піднімається, і в рядку з'являється позначка на кшталт «темп дня ×1.4». Темп рахується за фактичними продажами (списання, псування та харчування персоналу до нього не йдуть) і вимірюється для першого десятка з невеликим найризикованіших рядків — решта рахуються за звичайним профілем. Коефіцієнт затиснутий у діапазоні ×0.5…×2 — поправка на «сьогодні людно» потрібна, а передбачення за одним чеком ні. Якщо темп виміряти нема з чого взагалі, вкладка чесно скаже, що взято звичайний профіль дня тижня.
Що потрібно, щоб прогноз з'явився#
| Потрібно | Навіщо | Без цього |
|---|---|---|
Бренд на контурі AWS (cenaly.com, cenaly.com…) |
історію продажів рахує серверна аналітична база, а вона піднята лише там | на cenaly.ru вкладка завжди пише «Поки мало історії замовлень» — повідомлення про історію, але причина інша: рахувати її там нічим |
| Історія продажів | порахувати медіану за днем тижня | «Поки мало історії замовлень, щоб прогнозувати попит» |
| ≥ 3 однакових дні тижня в історії | рахувати вибіркою | страва в таблиці позначена «мало» і в плани не йде |
| Тех-карти страв | розгорнути прогноз у товари | страва потрапить до попередження «без тех-карти» |
| Актуальні залишки | порахувати нестачу та ризик | вкладка не покаже нічого, поки залишки не завантажаться |
Агрегат історії перераховується на сервері приблизно раз на пів години (і лише для облікових записів, які зараз працюють); розгортання тех-карт і вирахування залишків рахуються в момент відкриття вкладки, за поточними даними.
Пов'язані розділи#
- Склад — тех-карти, залишки, прихід і закупівлі
- Дошка задач зміни — куди вирушає план заготівель
- Меню-інжиніринг — що робити зі стравою, коли видно і попит, і маржу
- Аналітика — продажі за стравами та періодами
Часті питання#
Чому в половини страв стоїть позначка «мало»?#
Бо за цими стравами в історії менше трьох продажів цього дня тижня — наприклад, страва з'явилася в меню два тижні тому. Число з'явиться саме, коли спостережень стане достатньо; до того страва не бере участі ні в плані заготівель, ні в закупівлі.
Чому використовується медіана, а не середнє?#
Медіана стійка до викидів. Один банкет на 40 осіб зсуває середнє так, що заклад тижнями готує зайве. Середнє в інтерфейсі не показується взагалі — лише медіана, розкид і число спостережень.
Прогноз враховує погоду, свята, футбол?#
Ні. Він знає лише день тижня та час доби. Святковий тиждень і матч по сусідству, як і раніше, тримає в голові керуючий — і це чесніше, ніж модель, яка вдає, що врахувала їх.
Чи можна будувати прогноз на тиждень уперед?#
Вкладка показує сьогодні та завтра. Для закупівлі горизонт задається окремо — полем «Покриття, днів»: прогноз одного дня множиться на нього.
Чернетка закупівлі одразу надсилає замовлення постачальнику?#
Ні. Це саме чернетка: зайві рядки ви знімаєте галочкою і лише потім натискаєте створення — виходять звичайні чернетки закупівель розділу «Склад», по одній на постачальника. Кількості правляться вже у створеному замовленні, там же, де й зазвичай.