> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ontime.hosai.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Holidays

> Maintain the holiday calendar, import last year's, export to ICS, and understand how holidays change attendance and overtime.

export const PermissionNote = ({perm}) => <Info>
    Requires the <code>{perm}</code> permission. Ask your administrator if an
    action described here is missing from your screen — see
    [Roles & permissions](/help/concepts/roles-and-permissions).
  </Info>;

<PermissionNote perm="holiday:write" />

The holiday calendar is not decoration. It changes what a day *means* — to attendance, to leave arithmetic, to overtime, and therefore to pay.

**Shifts & rosters → Holidays.**

## Why it matters

<CardGroup cols={2}>
  <Card title="Attendance" icon="calendar-check">
    A day on the calendar with no punches reconciles to `Holiday`, not `Absent`. Without the calendar loaded, every public holiday looks like a whole workforce failing to turn up.
  </Card>

  <Card title="Payroll" icon="indian-rupee">
    Payroll counts loss of pay from `Absent` days. A holiday marked `Absent` is a holiday your people get docked for.
  </Card>

  <Card title="Leave" icon="palmtree">
    Holidays inside a leave range are excluded from the working-day count, so a request spanning one costs a day less.
  </Card>

  <Card title="Overtime" icon="timer">
    Overtime approved on a holiday earns comp-off on top of paid overtime.
  </Card>
</CardGroup>

## Holiday types

| Type         | Typical use                                           |
| ------------ | ----------------------------------------------------- |
| `national`   | Observed everywhere — Republic Day, Independence Day. |
| `regional`   | Observed at some locations only.                      |
| `restricted` | Optional; employees choose from a list.               |
| `company`    | Your own closures — a founding day, a plant shutdown. |

## Maintaining the calendar

<Steps>
  <Step title="Import last year">
    **Import previous year** copies every holiday from the preceding year into the target year. Duplicates are skipped, so re-running it is harmless.

    <Note>
      Dates are copied literally. A 29 February source is skipped when the target year is not a leap year, and moveable festivals will need correcting by hand — the import is a starting point, not a calculation.
    </Note>
  </Step>

  <Step title="Adjust">
    Add, edit and delete individual holidays. The year view shows the calendar at a glance with counts by type.
  </Step>

  <Step title="Publish it to your people">
    **Export ICS** downloads a standard calendar file employees can subscribe to in their own calendar app.
  </Step>
</Steps>

<Tip>
  Filter pills narrow the list and the year grid by type. The counts in the KPI strip stay unfiltered by design — they always describe the whole year.
</Tip>

## Regional holidays and locations

A holiday can be organization-wide or tied to specific locations. Attendance reconciliation consults both: a day is a holiday for an employee if it is organization-wide, or if it applies to that employee's own location.

This is what lets a Mumbai-only festival be a holiday in Mumbai and an ordinary working day in Bengaluru, from one calendar.

## Known gaps

<Warning>
  Two behaviours worth knowing before you rely on the calendar:

  **A holiday worked still reconciles as `Present`.** If someone punches in on a holiday, the day is `Present`, not a distinct "holiday worked" status. The comp-off credit still fires correctly when their overtime is approved, but the day record itself does not distinguish the case.

  **A weekly-off day with no punches reconciles to `Absent`, not `WeeklyOff`.** Only the holiday case has been closed. This affects rest days that fall outside the shift template's configured weekly offs.
</Warning>

The **Weekly-off default**, **Restricted** and **Compliance** panels on the holidays page are representative of the intended model rather than functional — they display, they do not configure.
