{
  "entity_type": "data_package_index",
  "dataset_id": "calcgrid-luxembourg-public-holidays",
  "dataset_version": "lu-statutory-calendar-2026-2028.1",
  "jurisdiction": "LU",
  "coverage": {
    "start": "2026-01-01",
    "end": "2028-12-31"
  },
  "supported_years": [
    2026,
    2027,
    2028
  ],
  "scope": "Luxembourg 2026-2028 eleven annual statutory holidays with explicit Monday-Friday planning baseline before individualized leave",
  "holiday_policy": "Eleven_L232_2_statutory_holidays_per_year; individualized_compensation_not_computed",
  "substitute_day_policy": "No_uniform_next_Monday_or_compensatory_leave_date_assigned",
  "limitation": "Luxembourg 2026-2028 statutory holiday dates over an explicitly selected Monday-Friday planning baseline, BEFORE individual annual or compensatory leave. A holiday on a normally non-worked day may produce compensatory leave depending on the employee's schedule, hours and applicable rules; no compensation date or next-Monday closure is assigned here. Bank-only Good Friday/Christmas Eve afternoon, customary or collectively agreed holidays, school/local/employer/shift schedules, hours, payroll, personal entitlements and legal deadlines are not computed.",
  "year_urls": {
    "2026": "/api/v1/data/luxembourg-public-holidays/2026",
    "2027": "/api/v1/data/luxembourg-public-holidays/2027",
    "2028": "/api/v1/data/luxembourg-public-holidays/2028"
  },
  "calculators": [
    "/api/v1/calculators/luxembourg-public-working-day",
    "/api/v1/calculators/luxembourg-public-add-working-days",
    "/api/v1/calculators/luxembourg-public-working-days-between"
  ],
  "sources": [
    {
      "id": "itm-calendar",
      "name": "ITM: Jours feries legaux, dated table 2025-2030",
      "url": "https://itm.public.lu/fr/conditions-travail/conges/jours-feries.html",
      "type": "government_calendar",
      "last_updated_on": "2026-05-19",
      "sha256": "0260b59b13e49fe4d376ea11e68b0cdac27572dba9c4b6cc985d52a7b43c56a1",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:39.9903574Z",
      "checked_on": "2026-09-29",
      "scope": "French table supplies all eleven statutory dates for each target year 2026-2028; independently checked against the official open dataset."
    },
    {
      "id": "government-calendar",
      "name": "Luxembourg government portal: Public holidays",
      "url": "https://luxembourg.public.lu/en/living/quality-of-life/jours-feries-legaux.html",
      "type": "government_calendar",
      "last_updated_on": "2026-08-14",
      "sha256": "209b4481dc5f29cf39f220009e5a87ef8c5085426cd8b4978f9d4cd04e16d0a4",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:42.2745856Z",
      "checked_on": "2026-09-29",
      "scope": "2026-2027 statutory dates; bank-only Good Friday and Christmas Eve afternoon are separate from the general calendar."
    },
    {
      "id": "itm-holidays",
      "name": "ITM D9a2: Eleven statutory holidays",
      "url": "https://itm.public.lu/fr/questions-reponses/droit-travail/jours-feries-legaux/a/a2.html",
      "type": "government_guidance",
      "last_updated_on": "2020-07-28",
      "sha256": "5d84d93f19ce446f6049e4713224f32a21dfd14c72db3288c29853160d1b0011",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:44.1579793Z",
      "checked_on": "2026-09-29",
      "scope": "Eleven holidays under Labour Code L.232-2, including Europe Day from the law of 25 April 2019."
    },
    {
      "id": "itm-compensation",
      "name": "ITM D9a4: Holiday on a normally non-worked day",
      "url": "https://itm.public.lu/fr/questions-reponses/droit-travail/jours-feries-legaux/a/a4.html",
      "type": "government_guidance",
      "last_updated_on": "2024-04-23",
      "sha256": "ba149efad672292402972901f43e73b33defd9ab13b58cae143191bf4f212a83",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:46.3494224Z",
      "checked_on": "2026-09-29",
      "scope": "Compensation depends on normal weekday/Sunday roster and hours. Individual entitlement and the later compensatory date are not computed."
    },
    {
      "id": "itm-customary",
      "name": "ITM D9a9: Customary holidays",
      "url": "https://itm.public.lu/fr/questions-reponses/droit-travail/jours-feries-legaux/a/a9.html",
      "type": "government_guidance",
      "last_updated_on": "2026-02-27",
      "sha256": "c73f246aaa3c2ec24c854c4af7c6aab5fb62ea0cbc84bad4aa5e3c4faff8d047",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:49.5574149Z",
      "checked_on": "2026-09-29",
      "scope": "Carnival Monday, Good Friday, All Souls and Braderiesmeindeg are not among the eleven general statutory holidays; agreements can differ."
    },
    {
      "id": "guichet-private",
      "name": "Guichet: Working on public holidays",
      "url": "https://guichet.public.lu/en/citoyens/travail/conges-jours-feries/jours-feries/travail-jours-feries.html",
      "type": "government_guidance",
      "last_updated_on": "2024-07-17",
      "sha256": "aa8b059dc01b60a6fa7f461f4ac49d29b47ecd82a3a0b95e36ab40211bdca923",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:36:53.7293922Z",
      "checked_on": "2026-09-29",
      "scope": "Private employee/apprentice holiday and compensatory-leave guidance; bank and personal arrangements are not national uniform closure dates."
    },
    {
      "id": "open-data-catalog",
      "name": "Official Luxembourg Open Data Portal: Jours feries legaux au Luxembourg",
      "url": "https://data.public.lu/fr/datasets/jours-feries-legaux-au-luxembourg/",
      "type": "official_open_data_catalog",
      "last_updated_on": "2026-09-01",
      "sha256": "62fb0442ae395014686827a64fa74234d3ed4dfcd54a48b61a77365a7ba78463",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:37:56.2551555Z",
      "checked_on": "2026-09-29",
      "scope": "CC0 dataset published by the official Open Data Letzebuerg portal account. Automatically generated calendar is cross-checked against ITM, not treated as a universal roster."
    },
    {
      "id": "open-data-json",
      "name": "Official Luxembourg Open Data: holidays.json snapshot",
      "url": "https://download.data.public.lu/resources/jours-feries-legaux-au-luxembourg/20260901-040008/holidays.json",
      "type": "official_open_dataset",
      "sha256": "15e7777611f84c6844e0217f2e21c9243f9bc679a4cfe091d4e17ec95c902840",
      "hash_scope": "response_body_bytes",
      "retrieved_at": "2026-09-29T09:37:25.6845470Z",
      "checked_on": "2026-09-29",
      "license": "CC0-1.0",
      "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
      "upstream_url": "https://data.public.lu/fr/datasets/r/9dd69c71-f55e-4124-87b8-4a54ba528335",
      "scope": "Source has 187 records for 2020-2036; only 33 dates for 2026-2028 are copied and independently checked against the ITM French table. Hash covers the whole source response."
    }
  ],
  "work_schedule": "mon_fri_planning",
  "required_inputs": [
    "work_schedule"
  ],
  "statutory_holidays_per_year": 11,
  "compensatory_leave_scope": "not_computed",
  "compensatory_date_policy": "no_dates_assigned",
  "personal_roster_scope": "not_computed",
  "payroll_scope": "not_computed",
  "count_scope": "Planning working dates before individualized annual or compensatory leave; not actual annual employee attendance",
  "excluded_scopes": [
    "bank_only_closures",
    "customary_or_collective_holidays",
    "school_calendar",
    "individual_shift_roster",
    "employer_compensatory_dates"
  ],
  "evidence_checked_on": "2026-09-29",
  "date_derivation": "All 33 copied dates agree with the ITM French 2026-2028 table; Easter Monday, Ascension and Whit Monday independently verified by Gregorian computus.",
  "license": "CC0-1.0",
  "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
  "reuse_note": "The copied official open-data calendar rows are CC0. This does NOT assert a blanket open licence for government guidance text; no full guidance pages are redistributed.",
  "upstream_json_sha256": "15e7777611f84c6844e0217f2e21c9243f9bc679a4cfe091d4e17ec95c902840"
}