営業日・締め日のリマインドのレシピ集

cron や RRULE では書きにくい「営業日で前後にずらす」「祝日を避ける」定期の予定を、Hidori で使える式(Kairos)として 18 本公開しています。各ページで、今後 1 年間の発火日を確かめられます。

月次・締め

月末営業日 17:00

毎月の最終営業日(土日祝なら手前の営業日)の夕方に発火。標準 cron に「月末」は無く、Quartz の LW も祝日は扱えない——「月末を営業日で前へ丸める」が 1 行になる。

月末営業日の 3 営業日前 09:00

経理の締めリマインドの定番形。月末を営業日へ丸めてからさらに営業日で 3 日さかのぼる——「営業日で数える後方シフト」は cron/RRULE に無い語彙。

毎月最初の営業日 09:00

月初が土日祝なら後ろの営業日へ送って朝に発火。cron の「毎月 1 日」固定では休日始まりの月に休日のまま発火してしまう、月初処理の定番形。

毎月第 5 営業日

月初から数えて 5 番目の営業日(月次バッチ・報告締めの定番)。「営業日で数えて N 日目」は暦日ベースの cron には存在しない語彙。数字を変えれば第 N 営業日に。

月末 3 日間の毎朝 09:00

月の最後の 3 日間だけ毎朝発火。月長 28〜31 日の揺れを daysInMonthOf が吸収し、cron だと月ごとに壊れる複数本の書き分けが 1 行に。

毎月 31 日(無い月は月末)

「31 日が無い月はどうするか」は cron の古典的な罠(2 月に一度も動かない設定事故の温床)。「常にその月の最終日」と意図を言い直せば式は 1 語——二義が式の選び方として明示される。

給与・支払

給与日: 25 日・休日なら前営業日 09:00

25 日が土日祝のときは直前の営業日へ前倒し。「固定日+祝日カレンダーで前へ丸める」の合成は cron/RRULE では書けない給与実務の定番形。

納付期日: 10 日・休日なら翌営業日 09:00

源泉所得税など「期日が休日なら翌倒し」型。前倒しの給与日と対になる Following 丸めで、固定日と祝日カレンダーの合成は cron/RRULE では書けない。

15 日に最も近い平日(土日回避)

15 日が土曜なら前日の金曜・日曜なら翌月曜(Quartz 15W 相当・土日回避)。「最も近い」の中の場合分けがそのまま式に見える——祝日回避まで必要なら「給与日」レシピの roll(…, on: bizDay) 合成の形に組み替える。

五十日

五十日(ごとおび)・休日は前営業日

5・10・15…30 日と月末、休日は前営業日へ前倒し。集金・支払が集中する五十日の実務定番で、mod 演算と営業日丸めの合成は cron に無い語彙。

週次・曜日

営業日の毎朝 09:00

土日祝を除く毎朝に発火。cron の MON-FRI 指定では祝日を除けない——祝日カレンダー連動の「営業日」語彙がそのまま式になる。

週報: 毎週金曜・祝日なら前営業日 17:00

金曜が祝日の週は木曜へ前倒しして夕方に発火。「曜日+祝日回避」の合成はRRULE では書けない週報の定番形。

定例会: 第 2・第 4 水曜

隔週とはずれ方が違う「第 2・第 4」の定例会形(月をまたいでも序数を保つ)。BYDAY=2WE,4WE は iCalendar 実装間で通らないことで知られる相互運用の断層。

第 2 月曜 09:00(ハッピーマンデー型)

成人の日・スポーツの日と同じ「第 2 月曜」の形。月内で数えて 2 番目という序数指定がwithin+nth の正準形でそのまま書ける。

隔週月曜 09:00(起点日は書き換えて使う)

起点日から 1 週おきの月曜に発火。cron が書けない「隔週」の代表例で、どちらの週かの位相は stride の起点日が固定する——起点は自分の運用に合わせて書き換える。

第 2 火曜と第 4 木曜(1 本の定義で)

曜日規則の違う 2 系列を単一の定義に合成。iCalendar の仕様上は書けても(BYDAY=2TU,4TH)実装間で通らない(Outlook が拒否し W3C が提供を断念)——相互運用の断層で知られる形。

四半期・年次

四半期末の営業日

3・6・9・12 月の月末を営業日へ前倒し。月の指定はできても「月末を営業日で丸める」が cron には無く、決算・報告締めの定番が 1 行になる。

祝日連動

祝日の前日 09:00(連休前の確認)

祝日カレンダーそのものを起点に前日へずらして朝に発火。連休前の在庫・締め確認向けで、「祝日の集合」を式の材料にできるのは external カレンダー連動ならでは。