Все формулы ниже взяты
из исходного кода hrp-api (не выдумка). Под каждой — путь к файлу. Термины расшифрованы в
Глоссарии.
1. Нормализация площади
Крупные объекты «приводятся» к базовым 10 000 м² через справочник коэффициентов приведения — чтобы норматив не рос линейно с площадью.
если S ≤ 10000 → нормализованная = S
иначе → нормализованная = 10000 × k // k — коэф. строки с макс. area ≤ S
Источник: area-conversion-coefficient.service.ts → normalizeArea(). Пример: S=50000 при area=[30000,50000], k=[1.0,1.5] → 10000×1.5 = 15000 м².
2. План часов по нормативу
Плановые часы для должности на работе считаются по нормативу труда hoursPer10kM2 (часов на 10 000 м²) и не зависят от назначенных людей.
единицы = нормализованная площадь ÷ 10000
часы = единицы × hoursPer10kM2
часы = max(часы, minHours) // нижняя граница из норматива
план_позиции = Σ часы по всем разделам работы
Источник: shared/utils/calculate-position-demands.ts. Площадь берётся «полная» или «по типовым этажам» (флаг useTypicalFloorsInCalc).
3. Совмещение: коэффициент производительности
Когда сотрудника ставят на чужую должность (совмещение), его выработка умножается на коэффициент из карточки должности («Может выполнять»).
если основная должность = назначенной → k = 1.0
иначе → k = PositionSubordinate.productivityCoefficient // напр. 0.8, 1.36; по умолчанию 1.0
Источник: workload.service.ts → getProductivityCoefficient(). k<1 — медленнее профильного, k>1 — быстрее.
4. Факт часов (ТРЗ)
Факт — это ТРЗ (трудозатраты): сумма часов, которые сотрудники списали на работу.
факт_часы(работа) = Σ WorkTimeEntry.spentHours по работе за период
Источник: financial-summary.service.ts → calculateWorksHoursBatch(). Прогресс = факт ÷ план.
5. ФОТ сотрудника (месяц)
Фонд оплаты труда одного сотрудника за месяц — из загруженного отчёта «Налоги и взносы».
ФОТ = totalAccrued + pension + accident + social + medical
// начислено + пенсионные + от несчастных случаев + социальные + медицинские
Источник: employee-wage-fund.service.ts → calculateWageFund(). Все суммы — из таблицы Tax.
6. Средняя стоимость часа
ставка_часа = Σ ФОТ ÷ Σ отработанные_часы // за последние 12 месяцев
Источник: employee-wage-fund.service.ts → aggregateMonthsAndComputeAverage(). Часы — из отчёта «Анализ зарплаты» (workedHours).
7. 💰 Деньги от часов — распределение ФОТ по работам
Ключевая модель для руководителей. Зарплата сотрудника разносится на конкретные работы пропорционально спискам часов. Это то, что видно в отчёте ФОТ по объектам и в финсводке.
доля_проекта = часы_на_проекте ÷ всего_отработано_часов // за месяц
ФОТ_проекта = ФОТ × доля_проекта
доля_работы = часы_на_работе ÷ часы_на_проекте
ФОТ_работы = ФОТ_проекта × доля_работы
// ограничение: Σ ФОТ_работ ≤ ФОТ сотрудника (иначе пропорц. масштабирование)
Источник: financial-summary.service.ts → computeUserWorkFotForMonth() + applyWageFundLimits().
Смысл: если инженер за месяц списал 100 ч, из них 40 ч на работу «КР» — то 40% его месячного ФОТ ложится в себестоимость этой работы.
8. Стоимость и маржа (что видит рук. предприятия)
план_стоимость = план_ФОТ + доп_расходы + общие_доп_расходы + премия
маржа = стоимость_контракта − факт_себестоимость
маржа_% = маржа ÷ стоимость_контракта × 100 // null если контракт ≤ 0
Источник: financial-summary.service.ts → calcPlanTotalCost(), calcMargin(), calcMarginPercent(). Зелёное отклонение — экономия, красное — перерасход.
9. Обучение норм (автокоррекция)
Система сравнивает норматив с фактом по завершённым работам и раз в 12 часов предлагает уточнение — сглаженно (EMA), с защитой от резких скачков.
факт_норматив(работа) = приведённые_часы × 10000 ÷ нормализованная_площадь
среднее = Σ(факт_норматив × площадь) ÷ Σ площадь // взвешенное по площади
предложение = текущий × (1 − α) + среднее × α // α = 0.3 (EMA)
// ограничение изменения: ±30% (maxChangeRatio); мин. 3 работы; выбросы (>100% от медианы) отсекаются
Источник: labor-standard-correction/utils/calculate-correction.ts + correction.types.ts (alpha=0.3, maxChangeRatio=0.3, minWorks=3, outlierThreshold=1.0).
Предложения не применяются молча — руководитель принимает/отклоняет каждую корректировку (см.
Корректировка норм).