Ниже — полный чек‑лист причин, почему ваш расчёт отпускных может дать неверный результат. Пройди по пунктам и сверяй с кодом: почти все ошибки — в неправильном выборе периода/доходов, в некорректном делителе/округлении или в пропуске особых ситуаций.
1) Каким периодом считаете (опорный период)
- Обычно берут последние 12 календарных месяцев, предшествующих месяцу отпуска. Убедитесь, что вы выбрали правильный интервал (не «последние 12 месяцев с даты начала отпуска», а именно 12 месяцев перед месяцем, в котором начинается отпуск).
- Если сотрудник работал меньше 12 мес — берётся фактический период от найма.
- Проверьте, что вы правильно обрабатываете месяцы с нулевым доходом (например, из‑за длительного отпуска без сохранения заработка) — закон в ряде случаев требует учитывать такие месяцы, в других — исключать; нужно реализовать соответствующее правило.
2) Какие выплаты включаются/исключаются из расчётного заработка
- Включайте регулярные выплаты: оклад, надбавки и доплаты, премии, которые носят систематический характер и связаны с работой, оплата за вредные условия, оплата за разъезды/командировки (в части, относящейся к заработку) и т. д.
- Исключайте разовые выплаты, не связанные с производственными результатами (матпомощь, выходное пособие, разовые вознаграждения, компенсации одного раза).
- Компенсации по временной нетрудоспособности, выплаты ФСС, больничные: надо проверить, включаются ли они (в некоторых случаях не включаются или учитываются отдельно).
- Премии/комиссии: если выплачиваются регулярно — учитывайте пропорционально. Если нерегулярные разовые — исключайте.
3) Делитель (количество календарных дней в расчётном периоде)
- Частая ошибка — неправильно считать количество календарных дней в расчётном периоде. Делитель обычно — количество календарных дней в выбранных месяцах (вместе с февраля и високосными годами).
- Если в периоде были дни временной нетрудоспособности, декрета или другие периоды, которые по закону не учитываются, корректно уменьшите либо числитель, либо делитель в соответствии с правилом.
4) Как считаются два способа (и выбор наилучшего для сотрудника)
- Убедитесь, что реализованы оба метода расчёта, которые предписывает законодательство, и сравниваете результаты, выбирая большее.
- Документируйте и логируйте оба результата при тестах — часто ошибка бывает в одном из методов.
5) Учёт смены зарплаты/структуры выплат в расчётный период
- Если оклад или ставки менялись в расчётном периоде, код должен суммировать фактически выплаченные суммы за каждый месяц, а затем делить на соответствующее число календарных дней.
- При частичных месяцах (при приёме/увольнении/переводе) учитывайте только фактически отработанные дни и выплаты за них.
6) Частичная занятость / работа по совместительству / почасовая оплата
- Для совместителей и почасовиков расчёт среднего и делителя может отличаться (учитывайте реальные выплаты и реальные календарные дни).
- Для почасовой и сдельной оплаты рассчитывайте средний дневной/часовой заработок по фактически начисленным суммам.
7) Пересечение отпуска с больничным/декретом/прогулом/отпуском без оплаты
- Если во время отпуска возникло заболевание и выдали больничный, отпускные пересчитываются (некоторые дни переводятся в больничный).
- Дни отпуска, совпадающие с нерабочими праздниками, обычно не включаются как «рабочие», но считаются как календарные дни отпуска — проверьте правило в вашем регионе.
- Отпускные не начисляются за периоды отпуска без сохранения зарплаты — такие месяцы нужно учитывать при формировании расчётного периода.
8) Дополнительные отпуска (льготные категории)
- У сотрудников с дополнительными оплачиваемыми днями (например, педработники, инвалиды) учитывайте дополнительную продолжительность отпуска при умножении среднедневной ставки.
9) Округления и формат денежной суммы
- Проверьте правила округления: обычно округляют до копеек; при расчёте среднего дневного заработка может понадобиться промежуточное округление.
- Ошибки с делением и дробями могут дать небольшую погрешность, копейки при суммировании дают заметную разницу.
10) Налоговые удержания и взносы
- Если вы сверяете суммы «на руки», учтите НДФЛ и иные удержания — но при расчёте отпускных обычно сравнивают брутто (до вычета налогов). Уточните, с чем вы сравниваете.
11) Правила выплаты отпускных (периодичность и срок)
- Закон требует выплатить отпускные не позднее, чем за три календарных дня до начала отпуска. Неправильная дата выплаты не влияет на сумму, но влияет на тесты и логи.
12) Крайние и частые кейсы, которые ломают расчет
- Сотрудник принят/уволен в середине расчётного периода.
- Сотрудник долго болел, был в отпуске без зарплаты, в декрете (надо исключать/корректировать периоды).
- Премии выплачивались нерегулярно, но являются существенной частью заработка — их надо интерпретировать правильно (пропорция).
- Работа на ставку + оплата по сдельным/премиям: распределяйте премии по месяцам аккуратно.
- Нестандартные рабочие графики, сменность, графики 2/2 и т. п.
13) Тестирование и отладка (рекомендации по коду)
- Логируйте промежуточные значения: суммарный заработок за период, количество календарных дней, рассчитанный средний дневной заработок, оба результата двух методов, итоговое отпускное.
- Напишите модульные тесты на типовые и крайние ситуации: смена оклада, больничные в расчётном периоде, увольнение/приём в периоде, часть месяца, дополнительные дни отпуска.
- Проверьте соответствие примерам из типовой бухгалтерской программы или расчётных формул из методички вашей компании.
14) Документируйте используемую формулу
- Часто ошибка — в неверном понимании формулы: стандартная схема — получить суммарный начисленный доход за расчётный период (учитывая включаемые выплаты) / количество календарных дней в этом период = средний дневной заработок. Отпускные = средний дневной * количество календарных дней отпуска. Но вторым методом может являться расчет «по среднему месячному» или иной специфический метод — реализуйте оба.
15) Законодательные изменения и локальные особенности
- «Новое законодательство» могло внести исключения (какие доходы включать/исключать) — проверьте актуальные нормативные акты и методические разъяснения для вашей страны/региона.
- В разных юрисдикциях правила расчёта бонусов/надбавок и больничных в расчётном периоде могут различаться.
Что сделать прямо сейчас
- Прогони через свой код несколько контрольных примеров: простой оклад без премий (12 мес), оклад + регулярная премия, смена оклада в середине периода, сотрудник с 6 мес работы, сотрудник с длительным больничным. Сравни результаты с ручным расчётом.
- Добавь логирование обоих методов и промежуточных величин.
- Если хочешь, пришли пример входных данных (выплаты по месяцам, даты) и результат, который ты получаешь; я прогоню расчёт вручную и укажу, где может быть рассогласование.
Если нужно — пришли отрывок кода или набор данных (выплаты по месяцам + дата начала отпуска + длительность) — посмотрю конкретно и укажу ошибку.