-- 0015_recurring_annual — расписание «ежегодно по дате» вместо интервала. -- -- Зачем: «повторять каждые N месяцев» заменяется на конкретную дату — -- день и месяц («15 марта»): правило срабатывает раз в год в эту дату. -- Нагляднее для человека и попадает в «Новая заявка» чекбоксом, а не -- отдельной секцией в проекте (см. README). -- -- Существующие правила переводятся на день/месяц своего создания — -- семантика «первая годовщина после заведения» сохраняется. -- -- Невозможные даты прижимаются к последнему дню месяца при расчёте -- срока (29 февраля в невисокосный → 28), здесь — только рамки поля: -- день 1..31, месяц 1..12. -- -- Применённый файл не редактировать (checksum в schema_migrations). -- ============ recurring_rules: interval_months → run_month/run_day ============ ALTER TABLE recurring_rules ADD COLUMN run_month smallint NOT NULL DEFAULT 1, ADD COLUMN run_day smallint NOT NULL DEFAULT 1; UPDATE recurring_rules SET run_month = EXTRACT(MONTH FROM created_at AT TIME ZONE 'UTC')::smallint, run_day = EXTRACT(DAY FROM created_at AT TIME ZONE 'UTC')::smallint; -- CHECK interval_months (interval >= 1) уходит вместе с колонкой. ALTER TABLE recurring_rules DROP COLUMN interval_months; ALTER TABLE recurring_rules ADD CONSTRAINT recurring_rules_run_month_check CHECK (run_month BETWEEN 1 AND 12), ADD CONSTRAINT recurring_rules_run_day_check CHECK (run_day BETWEEN 1 AND 31);