Skip to content

2. Источник данных производственного календаря РФ — API isdayoff.ru

Date: 2026-02-03

Status

Accepted

Context

Для типа оплаты «По производственному календарю» (Salary.type = 4) необходимо рассчитывать стоимость рабочего дня и часа из месячного оклада (monthly_salary) по количеству рабочих дней и часов в месяце согласно производственному календарю РФ. Требуется актуальный и бесплатный источник данных о рабочих/выходных/праздничных днях.

Decision

Использовать бесплатный API isdayoff.ru (https://www.isdayoff.ru/, расширенное API: https://www.isdayoff.ru/extapi/) как единственный внешний источник производственного календаря РФ. Запрос за месяц: GET https://isdayoff.ru/api/getdata?year=YYYY&month=MM&pre=1. Ответ — строка, по одному символу на день: 0 — рабочий (8 ч), 1 — нерабочий, 2 — сокращённый (7 ч), 4 — рабочий (covid, 8 ч). Без ключа и авторизации.

Обоснование

  1. Официальность — данные из официальных источников (указы, распоряжения).
  2. Бесплатность — не требует API-ключа, подходит для внутренних систем.
  3. Актуальность — поддержка РФ, обновление календаря.
  4. Достаточность — один запрос за месяц даёт и число рабочих дней/часов, и проверку дня (рабочий/выходной) через позицию символа.

Альтернативы

  • production-calendar.ru — рассмотрено; выбор сделан в пользу isdayoff.ru из-за простоты API и отсутствия ключа.
  • Локальный JSON/фикстуры — отвергнуто из-за необходимости ежегодного обновления и риска рассинхронизации.

Consequences

  • (+) Нет затрат на лицензию/ключ.
  • (-) Зависимость от доступности внешнего сервиса; необходимы кэширование и обработка ошибок (таймаут, 4xx/5xx).
  • (-) При кодах ответа 100/101/199 календарь невалиден — расчёт не выполнять, не делить оклад на ноль.

Источник: backend/narmak_v2/app/manufacture/ADR.md (ADR-001)