Пороги и правила
Значения читаются из config/thresholds.json — на этом хостинге конфиг вкомпилирован в сборку, правка требует пересборки. Версия конфига 4, обновлён 2026-08-31.
| Критерий | 🟢 зелёная | 🟡 жёлтая | 🔴 красная | Статус цифр |
|---|---|---|---|---|
| Приезд водителя | до 06:09 | 06:10–06:30 | с 06:31 / нет отметки | подтверждено Подтверждено заказчиком 25.08.2026: 🟢 до 6:09, 🟡 6:10–6:30, 🔴 с 6:31. В формулировке жёлтая зона названа «6:10–6:31», но красная начинается с 6:31 — верхняя граница жёлтой взята как 6:30, иначе 6:31 попадал бы в две зоны сразу. Совпадает с рукописным листом (🔴 с 6:31). |
| Вход — Повар | до 06:00 | 06:01–06:10 | с 06:11 / нет отметки | подтверждено Подтверждено заказчиком 25.08.2026. По фото: 🟢 5:50–6:00, 🟡 6:01–6:10, 🔴 6:11+. Приход раньше 5:50 считается 🟢. |
| Вход — Кассир | до 07:00 | 07:01–07:10 | с 07:11 / нет отметки | подтверждено Подтверждено заказчиком 25.08.2026: 🟢 до 7:00, 🟡 7:01–7:10, 🔴 7:11+. В тексте ТЗ было «🟢 до 6:50» — расходилось с листом, верен лист. |
| Вход — Бариста | до 07:00 | 07:01–07:10 | с 07:11 / нет отметки | подтверждено Подтверждено заказчиком 25.08.2026: 🟢 до 7:00, 🟡 7:01–7:10, 🔴 7:11+. |
| Вход — ЗД по залу | до 06:00 | 06:01–06:10 | с 06:11 / нет отметки | подтверждено Подтверждено заказчиком 25.08.2026: 🟢 до 6:00, 🟡 6:01–6:10, 🔴 6:11+. В тестовых выгрузках должность не встречается — отдельный вопрос к HR, как она называется в 1С (см. README). |
| Наполнение витрины | 95–100% | 85–94% | ≤84% | подтверждено Подтверждено: 🟢 95–100%, 🟡 85–94%, 🔴 ≤84%. |
Правила расчёта
- Другой график ⚠
- приход позже 08:00 → нейтральный статус, из агрегатов исключается
- Приход позже этого времени → статус «другой график», из агрегатов 🔴/🟡/🟢 исключается. ЭВРИСТИКА, а не источник правды: реальное опоздание на 2+ часа тоже попадёт сюда и спрячется. Заменить на справочник графиков из HR/1С ЗУП, как только он будет доступен — см. README, раздел «Известные компромиссы».
- Досчёт прихода
- уход − 30 мин, окно правдоподобия 03:00–12:00
- Есть «Уход», нет «Прихода» → расчётный приход = Уход − 30 мин (время приёмки). Окно правдоподобия отсекает ночные уходы (0:19, 1:51 в тестовом файле): для них расчёт не применяется, статус = «нет отметки» 🔴.
- Лавка сотрудника ⚠
- поле «Подразделение»
- Какое поле считать лавкой сотрудника: «Подразделение» (место отметки) или «Подразделение сотрудника» (штатная лавка). По умолчанию — место отметки: радар меряет открытие конкретной лавки. В тестовой выгрузке расходятся 30 строк из 336. ПОДТВЕРДИТЬ у HR.
- Зоны по среднему баллу
- баллы 🟢 3 / 🟡 2 / 🔴 1; 🔴 0–1,9 · 🟡 1,91–2,6 · 🟢 2,61–3
- Подтверждено заказчиком 27.08.2026: статусы переводятся в баллы 🟢 3 / 🟡 2 / 🔴 1, берётся среднее, и зона определяется по нему: 0–1,9 🔴, 1,91–2,6 🟡, 2,61–3 🟢. Пример из сообщения: 3+3+1 = 7/3 = 2,33 → 🟡. Балл округляется до 2 знаков (как в примере) и сравнивается с верхними границами включительно — поэтому промежутки 1,90–1,91 и 2,60–2,61 не проваливаются между зонами.
- Общий результат лавки
- (балл водителя + балл сотрудников + балл витрины) ÷ 3 → зона по баллу
- Методология заказчика от 27.08.2026 (лист «Вод + Сотр + Витри»): итог лавки = (балл водителя + балл сотрудников + балл витрины) / 3, зона по scoreZones. Балл сотрудников — сумма баллов ВСЕХ сотрудников (повар, кассир, бариста, ЗД по залу), делённая на их количество: «9 / 5 = 1,8 — красное». Слагаемое без данных за день в среднее не входит — делим на то, что есть. Альтернативы: 'worst' — худший критерий побеждает (правило ТЗ); 'average' — среднее по критериям, а не по людям; 'worstOfConfirmed' — худший из подтверждённых критериев.
- Агрегация внутри критерия
- средний балл сотрудников роли → зона по баллу
- Если по критерию в лавке несколько человек (например, 3 повара) — статус критерия = средний балл их статусов по scoreZones (подтверждено 27.08.2026: «3+3+1 = 7/3 = 2,33 — это жёлтая»). До 27.08.2026 было 'worst' — худший побеждает. Сотрудники в статусе «другой график» и без назначения не учитываются.
Маппинг должностей
Стажёр попадает в те же пороги, что базовая роль, и помечается флагом.