🧠 Логика работы приложения (служебное описание)
Данные. Всё хранится локально в браузере (localStorage): записи entries → squads (наряды-бригады: люди с часами, объекты, виды работ с объёмами, ТМЦ, техника), справочники workers / works / roads / tools / tmc, склад stockReceipt / stockWriteOff / stockWriteOffHistory, табель timesheetOverrides / timesheetLetters, шаблоны бригад. Полный бэкап — «Экспорт всех данных» (JSON).
Наряд (запись дня). Журнал → день → наряды-бригады. Каждая бригада: категория, объекты/дороги, работники с часами, виды работ (объём, участок км, часы инструмента), ТМЦ. При сохранении дня склад списывается по нормам видов работ и табель пересчитывается.
Расчёты. Зарплата работ = (directCost − toolCost) × объём. Трудоёмкость = laborCost × объём (чел-ч). ГСМ/масла = нормы materialNorms × объём. Техника = часы инструмента × machineCostPerHour; з/п машиниста = salaryPerHour × часы.
Норма выполнения. При норме < 100% расчёт по часам; при 100–130% — по сделке (тариф × КТУ, КТУ ≤ 1,2); свыше 130% КТУ обрезается до 1,2.
Склад. Приход — фактические поступления. Списания начисляются автоматически из сохранённых нарядов по нормам; кнопки «Пересчитать» удаляют списания за месяц и строят заново из нарядов. Остаток = приход − списано; отрицательный остаток = перерасход.
Табель. Строится из нарядов. Ручные правки: числа — timesheetOverrides, буквы (В, АБЗ...) — timesheetLetters. Правки имеют приоритет над нарядами. «Пересчитать табель из нарядов» — сброс всех правок и полная перестройка.
Объекты и ПУ. Типы: дорога (road, есть км и план-работы), объект ТР/КР (object, плановые объёмы), АБЗ (abz), база (base). У каждого — ПУ. Прогресс объекта = выполнено / план по видам работ. Содержание — только дороги ПУ-1/2/3; ТР/КР в отчёты по ПУ не входят.
Документы. Наряд-задание (Excel из шаблона, один день), наряд на сдельную по ПУ/объекту за месяц, табель (Excel/CSV), форма С-29 (расход материалов), отчёт по ПУ, CSV-экспорты. ФИО мастера и табельщика подставляются из Настроек.
Наряд по ПУ (v19.16). В наряд входят только дороги выбранного ПУ (как в исходной версии) — объекты ТР/КР в него не подмешиваются. Наряд по объекту формируется отдельно: объект выбирается в списке «Объекты с работами» (там теперь все объекты месяца, включая ТР/КР из ПУ). Колонки таблицы работ заполняются строго по заголовкам шаблона: Задано — объём (I), норма/ед (M), расценка (P), норма на весь объём (T), сумма (V); Исполнено — объём (X), норма на вып. объём (AA), норма времени (AC), сумма (AE). Итоги (строки 32 «ИТОГО», 74 «Итого» по табелю, 108 — расчёт, 109 «начислено») — формулы шаблона, не трогать. Работа попадает в наряд только по «своему» объекту: поле «Объект/дорога» работы (w.road), если пусто — первый объект наряда; так работы с дорог другого ПУ не смешиваются, когда бригада за день работала на нескольких дорогах (v19.16.1). Часы людей в табеле наряда — по наряду-бригаде целиком (без разделения по объектам), как в исходной версии.
Быстрое добавление из наряда (v19.2). Кнопки «Новый работник» / «Новый вид работ» в модалках выбора и «В справочник дорог» у поля объекта открывают те же модалки, что и справочник. После сохранения или отмены — возврат в наряд; новая позиция отмечена галочкой. Все связи (переименование, отчёты, склад) работают как при добавлении из справочника.
Лимит часов (v19.3). Не пропускает больше 12 часов на человека в сутки — ни в одном наряде, ни суммарно по нескольким нарядам дня. Сообщение показывает нарушителя и сумму.
Автоснапшоты (v19.3). Перед каждым сохранением делается копия всех данных, хранятся 5 последних. Восстановление: Настройки → Резервное копирование → Автоснапшоты. Не заменяет регулярный экспорт JSON.
Табель по фамилии (v19.3). В разделе «Табель» фильтр «Работник» выводит личный табель — удобно для водителей, работающих у разных мастеров.
Подписанты (v19.3). ФИО мастера-прораба, главного инженера и начальника задаются в Настройках и автоматически вписываются в документы (наряд-задание, С-29). Кто принимает в текущем месяце — меняется в настройках в любой момент.
Склад (v19.4). Приход вносится единой модалкой: несколько строк за раз, новый материал создаётся прямо в окне (попадает в справочник ТМЦ). Списания по-прежнему считаются автоматически из нарядов по нормам.
Подсказки (v19.4). Кнопка «Как вчера» в записи дня подставляет объекты, состав бригад и виды работ из последней записи (объёмы обнуляются).
Правило АБЗ/ОБЗ (v19.4). Если в табеле у человека на день стоит «АБЗ», при формировании наряда-задания его часы в наряд не попадают, в документ добавляется примечание. Табель — приоритет.
Техника (v19.6–19.8). Справочник «🚜 Техника» (тип + номер). При добавлении тракториста/мазиста в наряд предлагается назначить машину. Наряд на технику: месяц → водитель → только его объекты. Документ — отдельная форма «на работу дорожной машины»: шапка (Объект, ПУ, Водитель, Марка), таблица работ (только работы с нормой на технику; ручные не попадают) — заполняются обе части: Задано (объём, норма на единицу, расценка, норма на весь объём, сумма) и Исполнено (объём, норма на выполненный объём, норма времени, сумма); строка «отработано по часам» (часы × тариф); табельная часть с одним водителем и расчёт зарплаты. Назначение техники открывается при каждом сохранении состава бригады с трактористом/мазистом; при пустом справочнике — добавление машины прямо из окна. Техника ведётся в справочнике «🚜 Техника» (редактирование/удаление — там же; переименование обновляет подписи во всех нарядах). В карточке наряда блок «🚜 Техника»: привязка водитель↔машина редактируется в любой момент. В окне работы — выбор конкретной машины; работа с машиной уходит в наряд на технику её водителя; без выбранной машины — единственному машинисту бригады, а при нескольких машинах — водителю по исполнителю работы (🚜 → МТЗ/грейдер/погрузчик, 🚚 → МАЗ, v19.16.2; если подходящей машины нет — работу надо открыть и выбрать машину вручную). Табель-расчёт водителя (v19.16.3): ФИО и разряд — из справочника работников, часы по дням месяца — из нарядов (D40:S40 = дни 1–15, D41:S41 = дни 16–31); дни/часы итого, тарифный заработок и «начислено» — формулы шаблона (T40, Y40, P70, T70, W70, AE70, AE73), код дописывает только разряд (I70), ставку (L70) и коэффициент AA70=1; строка второго работника шаблона очищается, чтобы фамилия не дублировалась. У работы с техникой в справочнике должна быть «🚜 Норма на технику» > 0 — иначе она считается ручной и в наряд на технику не попадёт. У каждой работы есть «Исполнитель» (дорожные / трактор / МАЗ) — пометка видна в справочнике и в выборе работ наряда; автоматически: самосвальные → МАЗ, с машинной нормой → трактор. Выбор работ в наряде фильтруется по категории бригады. В карточках тех-бригад показывается прогресс машино-часов. В отчётах списки строятся только из данных выбранного месяца (нет записей — нет пункта в списке).
Наряд на технику (v19.5). Отчёты → Документы: собирает из нарядов месяца работы с техникой (инструменты-«машины»): дата, объект, вид работ, объём, машино-часы, ГСМ по нормам, стоимость машино-часов. Зарплата водителя — по табелю, отдельно.
Правила безопасности. Перед массовыми операциями (пересчёт табеля/склада, импорт JSON, очистка) делайте экспорт. Импорт JSON полностью заменяет текущие данные.