namespace TaxBaik.Application.Seasonal; public static class BusinessDayCalculator { private static readonly HashSet HolidayDates = new() { // 2026 new DateOnly(2026, 1, 1), new DateOnly(2026, 2, 16), new DateOnly(2026, 2, 17), new DateOnly(2026, 2, 18), new DateOnly(2026, 3, 1), new DateOnly(2026, 3, 2), new DateOnly(2026, 5, 5), new DateOnly(2026, 5, 25), new DateOnly(2026, 6, 6), new DateOnly(2026, 8, 15), new DateOnly(2026, 8, 16), new DateOnly(2026, 8, 17), new DateOnly(2026, 9, 24), new DateOnly(2026, 9, 25), new DateOnly(2026, 9, 26), new DateOnly(2026, 10, 3), new DateOnly(2026, 10, 4), new DateOnly(2026, 10, 5), new DateOnly(2026, 10, 9), new DateOnly(2026, 12, 25), // 2027 new DateOnly(2027, 1, 1), new DateOnly(2027, 2, 6), new DateOnly(2027, 2, 7), new DateOnly(2027, 2, 8), new DateOnly(2027, 2, 9), new DateOnly(2027, 3, 1), new DateOnly(2027, 3, 2), new DateOnly(2027, 5, 5), new DateOnly(2027, 5, 13), new DateOnly(2027, 6, 6), new DateOnly(2027, 8, 15), new DateOnly(2027, 8, 16), new DateOnly(2027, 9, 14), new DateOnly(2027, 9, 15), new DateOnly(2027, 9, 16), new DateOnly(2027, 10, 3), new DateOnly(2027, 10, 4), new DateOnly(2027, 10, 9), new DateOnly(2027, 10, 10), new DateOnly(2027, 10, 11), new DateOnly(2027, 12, 25), new DateOnly(2027, 12, 26) }; public static DateOnly GetEffectiveBusinessDate(DateOnly date) { var effectiveDate = date; while (!IsBusinessDay(effectiveDate)) { effectiveDate = effectiveDate.AddDays(1); } return effectiveDate; } public static int GetBusinessDayDiff(DateOnly date, DateOnly referenceDate) { var effectiveDate = GetEffectiveBusinessDate(date); return effectiveDate.DayNumber - referenceDate.DayNumber; } private static bool IsBusinessDay(DateOnly date) => date.DayOfWeek is not DayOfWeek.Saturday and not DayOfWeek.Sunday && !HolidayDates.Contains(date); }