datetime/sla_calculator_utils library

SLA / due-date calculator over business hours + holidays — roadmap #595.

Answers "when is this due if it must be done within N working hours?" and "how much working time elapsed between these two instants?", counting only time inside a weekly BusinessHours schedule and skipping holidays from an optional BusinessCalendar. Reuses the holiday-aware calendar (#593) for the day-level skip and layers time-of-day open windows on top.

Open windows are half-open [open, close) and times are compared in the instant's own zone; all date stepping uses calendar fields (not Duration) so it never drifts across a DST boundary.

Classes

BusinessHours
A weekly schedule of open windows keyed by DateTime.weekday (Mon = 1 … Sun = 7). A weekday with no entry is fully closed.
OpenWindow
A single open period within a day, expressed as minutes from midnight: [startMinute, endMinute). 09:00–17:00 is OpenWindow(540, 1020).
SlaCalculator
Computes deadlines and elapsed working time against a BusinessHours schedule, optionally skipping holidays from a BusinessCalendar.