feat(schedule): movable holidays defined by recurrence rules #204

Open
opened 2026-10-02 15:41:47 +00:00 by gabogg · 0 comments
Owner

Problem

A Holiday is entered as one fixed calendar date. That works for annual fixed-date holidays (12-25, 01-01). Movable holidays fall on a different date each year:

  • Carnival Monday and Tuesday, and Holy Thursday and Good Friday, move with Easter;
  • some holidays are "the Nth weekday of a month".

Today each year's dates have to be entered by hand. Nothing links a 2025 Carnival to the 2026 Carnival.

Idea

Allow a Holiday to be defined as movable: a recurrence rule rather than a single date, chosen in a broader selector. Examples:

  • "Easter Sunday −48 days";
  • "third Monday of January";
  • "the next Monday after a date".

The rule produces that holiday's dates for any year.

Why it matters

  • Historical import hints. Maintainer decision on #170, 2026-10-02: Holiday entries hint imported days by day and month in any year, so a holiday on 2026-12-25 hints 2025-12-25. Movable holidays can't be matched that way, so the reviewer marks them by hand. A rule would let the import hint them too.
  • A future Holiday Baseline (#205) needs to know which past date was "the same holiday".

Out of scope for the historical backfill milestone

The maintainer decided (2026-10-02) that this precision isn't needed for the milestone's deliverable. Fixed-date hints plus manual review are enough for now.

To settle

  • Which rule kinds are needed: Easter-relative, Nth weekday of a month, fixed date with a weekend shift.
  • Is a movable holiday's hours rule shared across years, or set per year?
  • How does it relate to existing fixed-date entries? Convert them, or keep both kinds?
  • The admin UI selector.
  • How edits to a rule affect completed days. They need an audit reason, as fixed holidays do.

Refs #161, #170, #202.

## Problem A Holiday is entered as one fixed calendar date. That works for annual fixed-date holidays (12-25, 01-01). Movable holidays fall on a different date each year: - Carnival Monday and Tuesday, and Holy Thursday and Good Friday, move with Easter; - some holidays are "the Nth weekday of a month". Today each year's dates have to be entered by hand. Nothing links a 2025 Carnival to the 2026 Carnival. ## Idea Allow a Holiday to be defined as **movable**: a recurrence rule rather than a single date, chosen in a broader selector. Examples: - "Easter Sunday −48 days"; - "third Monday of January"; - "the next Monday after a date". The rule produces that holiday's dates for any year. ## Why it matters - **Historical import hints.** Maintainer decision on #170, 2026-10-02: Holiday entries hint imported days by day and month in any year, so a holiday on 2026-12-25 hints 2025-12-25. Movable holidays can't be matched that way, so the reviewer marks them by hand. A rule would let the import hint them too. - **A future Holiday Baseline** (#205) needs to know which past date was "the same holiday". ## Out of scope for the historical backfill milestone The maintainer decided (2026-10-02) that this precision isn't needed for the milestone's deliverable. Fixed-date hints plus manual review are enough for now. ## To settle - Which rule kinds are needed: Easter-relative, Nth weekday of a month, fixed date with a weekend shift. - Is a movable holiday's hours rule shared across years, or set per year? - How does it relate to existing fixed-date entries? Convert them, or keep both kinds? - The admin UI selector. - How edits to a rule affect completed days. They need an audit reason, as fixed holidays do. Refs #161, #170, #202.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gabogg/hikcentral#204
No description provided.