Skip to content

Polish Statutory Holidays ​

Business day calculations for offline invoice deadlines exclude weekends and Polish statutory holidays, as required by Polish law (Ordynacja podatkowa, art. 12 §5).

Holiday List ​

Source: Ustawa z dnia 18 stycznia 1951 r. o dniach wolnych od pracy (Dz.U. z 2025 r., poz. 296).

Fixed Holidays (10) ​

DateNameNotes
1 JanuaryNowy RokNew Year's Day
6 JanuaryTrzech KróliEpiphany
1 MayŚwięto PaństwoweLabour Day
3 MayŚwięto Narodowe Trzeciego MajaConstitution Day
15 AugustWniebowzięcie NMPAssumption of Mary
1 NovemberWszystkich ŚwiętychAll Saints' Day
11 NovemberNarodowe Święto NiepodległościIndependence Day
24 DecemberWigilia Bożego NarodzeniaChristmas Eve (since 2025)
25 DecemberBoże Narodzenie (1st day)Christmas Day
26 DecemberBoże Narodzenie (2nd day)St. Stephen's Day

Note: Christmas Eve (24 December) was added by the amendment of 6 December 2024 (Dz.U. 2024, poz. 1965), effective from 1 February 2025. For years before 2025, this date is not treated as a holiday.

Moveable Holidays (4, Easter-based) ​

HolidayCalculationExample (2026)
Wielkanoc (Easter Sunday)Computus algorithm5 April
Poniedziałek Wielkanocny (Easter Monday)Easter + 1 day6 April
Zielone Świątki (Pentecost)Easter + 49 days24 May
Boże Ciało (Corpus Christi)Easter + 60 days4 June

Pentecost always falls on a Sunday, so it does not affect business day calculations. It is included for legal completeness.

Total Count ​

  • 14 holidays per year (2025 onwards)
  • 13 holidays per year (2024 and earlier, before Wigilia amendment)

Implementation ​

The holiday logic is in src/offline/holidays.ts:

  • computeEasterSunday(year) — computes Easter Sunday using the Anonymous Gregorian algorithm (Meeus/Jones/Butcher). Pure math, no external dependencies.
  • getPolishHolidays(year) — returns a Set<string> of ISO date strings (YYYY-MM-DD) for all statutory holidays in the given year. Results are cached per year.
  • isPolishHoliday(date) — checks if a UTC Date falls on a Polish statutory holiday.

These functions are used internally by nextBusinessDay() and addBusinessDays() in src/offline/deadline.ts. The integration is transparent — all deadline functions (calculateOfflineDeadline, extendDeadlineForMaintenance) automatically skip holidays without any API changes.

Usage ​

typescript
import {
  computeEasterSunday,
  getPolishHolidays,
  isPolishHoliday,
  nextBusinessDay,
} from 'ksef-client-ts';

// Easter Sunday for 2026
computeEasterSunday(2026); // → 2026-04-05

// All 14 holidays for 2026
const holidays = getPolishHolidays(2026);
// Set { '2026-01-01', '2026-01-06', '2026-04-05', ... }

// Check a specific date
isPolishHoliday(new Date('2026-12-25')); // → true (Christmas)
isPolishHoliday(new Date('2026-12-27')); // → false

// nextBusinessDay skips holidays automatically
nextBusinessDay(new Date('2026-12-23')); // Wed → Mon Dec 28
// (skips: Thu Dec 24 Wigilia, Fri Dec 25 Christmas, Sat-Sun weekend)

Holiday Clusters ​

Some holiday combinations create extended non-working periods. Examples for 2026:

PeriodNon-working daysNext business day
Christmas 2026Dec 24 (Thu, Wigilia) + Dec 25 (Fri) + Dec 26-27 (Sat-Sun)Mon Dec 28
Easter 2026Apr 5 (Sun, Easter) + Apr 6 (Mon, Easter Monday)Tue Apr 7
May holidays 2026May 1 (Fri) + May 2 (Sat) + May 3 (Sun, Constitution Day)Mon May 4

These clusters are handled automatically — nextBusinessDay() and addBusinessDays() keep advancing until a working day is found.

Released under the MIT License.