日本語 · English

nonWorking — カレンダー実体の予約公開語と bizDay 標準導出

分類: カレンダー実体(premise 層) / 正体: 公開語 nonWorking : Stream(引数なし・実体 tz の day 整列) / nonWorking確定名(2026-07-09・F51 の一括確定)。規範は spec §3.9・ADR-35。

意味

calendar: メンバーに立てるカレンダー実体は、予約公開語 nonWorking(非稼働集合)を持つ premise である——専用構文は無く、普通の premise 定義に「どの束縛が非稼働か」の指名が加わるだけ。 正体判定(ADR-19 の延長)が要求するのは:

正体判定とは別の統治として、テーブルを含む premise の常で source: は宣言必須寄り・版は asof: が 担う(再現性重視なら宣言推奨。ADR-26)。

利用側は calendar: に実体を立てると、言語が一律に規定する標準導出 bizDay = everyDay \ C.nonWorkingeveryDay は利用側で解決・C.nonWorking は実体にピン)が使える。 calendar: の在圏では bizDay は予約された導出名(手動束縛は静的エラー)。

実体を宣言し、標準導出 bizDay で営業日を読む(1/1 は祝日、1/3・1/4 は土日。例示のため休業日データは 簡略化してある——実在の東証は年末年始 12/31〜1/3 も休業):

# eval: 2026-01-01..2026-01-08
premise TSE {
  calendar-system: Gregorian
  tz:     "Asia/Tokyo"
  source: "jpx.co.jp/trading-calendar"
  asof:   2026-01-05
  satSun     = everyDay |> filter(d => weekday(d) == Sat or weekday(d) == Sun)
  holidays   = [2026-01-01] covering: 2026..2026
  nonWorking = satSun | holidays
}
premise Tokyo {
  calendar-system: Gregorian
  calendar:        TSE
  tz:              "Asia/Tokyo"
  wkst:            Mon
}
@Tokyo
everyDay |> filter(on: bizDay)
#=> 2026-01-02 2026-01-05 2026-01-06 2026-01-07

軸位置に実体名を直指する(on: TSEcalendar: TSE の文脈での on: bizDay。F53・ADR-35)—— 給料日 25 日が日曜なら前営業日:

# eval: 2026-01-01..2026-02-01
premise TSE {
  calendar-system: Gregorian
  tz:     "Asia/Tokyo"
  source: "jpx.co.jp/trading-calendar"
  satSun     = everyDay |> filter(d => weekday(d) == Sat or weekday(d) == Sun)
  holidays   = [2026-01-01] covering: 2026..2026
  nonWorking = satSun | holidays
}
premise Tokyo {
  calendar-system: Gregorian
  calendar:        TSE
  tz:              "Asia/Tokyo"
  wkst:            Mon
}
@Tokyo
everyDay |> within(month) |> nth(25) |> roll(Preceding, on: TSE)
#=> 2026-01-23
#~> 範囲外 2026-01-01..2026-01-02(TSE.holidays covering 2026-01-01..2026-12-31)

組織ローカルの上書きは既存の withsource: も上書きする——宣言必須寄り):

premise MyCompany = TSE with {
  source:     "intra.example.com/holidays"
  nonWorking = TSE.nonWorking | companyHolidays    # base 参照は修飾ピン
}

実体のメンバーは修飾参照で本体式から読める(ADR-17「曖昧なら修飾」・還流第 3 便 F100 への 回答——祝前日リマインド級は予約名の追加なしで書ける。裸名は premise 相対解決のため実体の中身を 自動では晒さない=設計どおり):

# eval: 2026-01-02..2026-03-01
premise Cal { calendar-system: Gregorian; tz: "Asia/Tokyo"; wkst: Mon; source: "hr-db"
  holidays = [2026-01-01, 2026-01-12, 2026-02-11] covering: 2026..2026
  satSun = everyDay |> filter(d => weekday(d) == Sat or weekday(d) == Sun)
  nonWorking = satSun | holidays
}
premise Use { calendar-system: Gregorian; tz: "Asia/Tokyo"; wkst: Mon; calendar: Cal }
@Use
Cal.holidays |> shift(-1, unit: day)
#=> 2026-01-11 2026-02-10

落とし穴

関連

結合子(カスケード・整列検査)・filter/roll(軸位置の 直指)・with(組織上書き)・テーブルリテラルsource:/covering:)・ spec §3.9・ADR-35/36。