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 ч). Без ключа и авторизации.
Обоснование
- Официальность — данные из официальных источников (указы, распоряжения).
- Бесплатность — не требует API-ключа, подходит для внутренних систем.
- Актуальность — поддержка РФ, обновление календаря.
- Достаточность — один запрос за месяц даёт и число рабочих дней/часов, и проверку дня (рабочий/выходной) через позицию символа.
Альтернативы
- production-calendar.ru — рассмотрено; выбор сделан в пользу isdayoff.ru из-за простоты API и отсутствия ключа.
- Локальный JSON/фикстуры — отвергнуто из-за необходимости ежегодного обновления и риска рассинхронизации.
Consequences
- (+) Нет затрат на лицензию/ключ.
- (-) Зависимость от доступности внешнего сервиса; необходимы кэширование и обработка ошибок (таймаут, 4xx/5xx).
- (-) При кодах ответа 100/101/199 календарь невалиден — расчёт не выполнять, не делить оклад на ноль.
Источник: backend/narmak_v2/app/manufacture/ADR.md (ADR-001)