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

# Absence and expected hours

> How TimeTracker works out expected hours, the grace window, and every timecard day status – Present, Late, Absent, Unscheduled and the rest.

Expected hours come from a person's work schedule. Every timecard day is compared
against them, and that comparison produces the day's status.

## Where expected hours come from

Each day, TimeTracker resolves one schedule for you. It looks at:

1. A schedule assigned to **you** personally.
2. Otherwise, one assigned to your **group**.
3. Otherwise, the **workspace** default.

Day exceptions – a holiday, a day off, replacement hours – are applied on top,
provided they are at least as specific as the assignment they are changing.

The result gives the day three things:

| From the schedule           | Used for                              |
| --------------------------- | ------------------------------------- |
| Whether it is a working day | Absent, or Worked on day off          |
| Expected minutes            | The **Scheduled** column and Variance |
| Scheduled start and end     | Late and Left early                   |

Full detail: [Working hours and days off](/schedules/working-hours-and-days-off).

<Warning>
  If nobody assigns you a schedule, no expected hours resolve. Every day you work
  reads **Unscheduled**, and no day is ever marked **Absent**. The Time Clock needs
  schedules to be useful, which is why the app requires them.
</Warning>

## Expected is gross time

**Scheduled** is the total of your scheduled work periods. Breaks are **not**
deducted from it.

Your actual breaks are shown in their own **Break** column and are already
excluded from **Worked**, because a break is the gap between two sessions.

So a 09:00–17:00 schedule shows **Scheduled 8h** even if you always take an hour
for lunch. Take that hour and you will sit at roughly −1h variance every day.
Plan the schedule around what you expect people to be present for.

## Your timezone comes from the schedule

A schedule template carries its own timezone. That is the timezone your scheduled
start and end times are read in.

This matters for a distributed team. If Ana Ferreira's schedule template is set
to Lisbon time, her 09:00 start means 09:00 in Lisbon – not 09:00 in the
workspace's timezone.

<Note>
  Two different timezones are in play, and they answer different questions:

  * **Which day a shift belongs to** – the workspace timezone.
  * **What "09:00 start" means** – the schedule template's timezone.

  See [Schedule timezones](/schedules/schedule-timezones) and
  [Dates, times and timezones](/concepts/dates-times-and-timezones).
</Note>

## The grace window

A five-minute grace window applies to lateness, leaving early, and overtime.

That means:

* Clocking in up to five minutes late still reads **Present**.
* **Late** by `0` means "within grace", not "exactly on time".
* Only the minutes **beyond** the grace window are counted as late.

Clock in nine minutes after your scheduled start and the day is **Late** by four
minutes.

## The eight day statuses

| Status                | Decided when                                                               |
| --------------------- | -------------------------------------------------------------------------- |
| **Incomplete**        | A session on that day is still open.                                       |
| **Absent**            | The day was a working day with expected minutes, and you never clocked in. |
| **Unscheduled**       | You worked, but no schedule resolved for you at all.                       |
| **Worked on day off** | You worked on a day your schedule says is not a working day.               |
| **Late**              | Your first clock-in was after the scheduled start, beyond grace.           |
| **Left early**        | Your last clock-out was before the scheduled end, beyond grace.            |
| **Over scheduled**    | You worked more than the expected minutes, beyond grace.                   |
| **Present**           | A working day, worked, with none of the above.                             |

A day can qualify for more than one – Late **and** Left early, for example. The
most decision-worthy one becomes the main badge, in the order shown above, and
the rest appear beside it. **Present** is only ever shown on its own.

<Note>
  A non-working day with no work at all produces no row. An off day for everyone
  does not fill your timecard with empty entries.
</Note>

## How absence is decided

You cannot be called absent halfway through the day. So absence is finalised
**after the day ends**.

A daily job runs through the previous calendar day, in each workspace's timezone,
and recalculates every member's summary for it. Someone scheduled to work who
never clocked in gets an **Absent** day at that point.

Client-portal contacts are skipped – they never clock.

<Warning>
  A day inside a **submitted** or **approved** timecard is never silently
  recalculated. It is the record the person submitted and a manager signed off on.
  Reopen or withdraw the period to make it recompute.
</Warning>

## Variance

```
variance = worked minutes − scheduled minutes
```

It is shown as `+1h 15m` or `−39m`. A negative variance is red. A day with no
schedule shows a dash instead.

## Example

Northwind Studio's standard schedule is 09:00–17:00, Monday to Friday, eight
hours a day.

| Day | In    | Out   | Worked  | Scheduled | Variance | Status            |
| --- | ----- | ----- | ------- | --------- | -------- | ----------------- |
| Mon | 09:03 | 17:05 | 8h 02m  | 8h        | +2m      | Present           |
| Tue | 09:22 | 17:00 | 7h 38m  | 8h        | −22m     | Late              |
| Wed | –     | –     | –       | 8h        | −8h      | Absent            |
| Thu | 09:00 | 19:30 | 10h 30m | 8h        | +2h 30m  | Over scheduled    |
| Sat | 10:00 | 13:00 | 3h      | –         | –        | Worked on day off |

* Monday's three minutes late are inside grace, so it is **Present**.
* Tuesday is 22 minutes late; grace takes five off, so the day records 17
  actionable late minutes and reads **Late**.
* Wednesday is only marked **Absent** after the day ended.
* Thursday's overtime is 2h 30m beyond expected, well past grace.
* Saturday is not a working day, so there is nothing to compare against.

## Permissions

| To see                               | You need                                            |
| ------------------------------------ | --------------------------------------------------- |
| Your own expected hours and statuses | `schedule.view` and `timecard.view`                 |
| Someone else's                       | `timecard.manage` or `timecard.approve`, plus scope |
| To change a schedule                 | `schedule.manage` – Owner and Admin only            |

## Common questions

<AccordionGroup>
  <Accordion title="Why is every day Unscheduled?">
    Nobody has assigned you a schedule. Ask an owner or admin – see
    [Assign a schedule](/schedules/assign-a-schedule).
  </Accordion>

  <Accordion title="Why am I always slightly negative on variance?">
    Your breaks. **Scheduled** is gross time and does not deduct them. If people
    take an hour for lunch, either accept the daily gap or build the schedule
    around it.
  </Accordion>

  <Accordion title="Can I change the grace window?">
    The grace window is five minutes. It is not a per-workspace setting today.
  </Accordion>

  <Accordion title="Does approved time off stop an Absent day?">
    Leave shows up as a day exception on the schedule, which makes the day
    non-working. A non-working day with no work produces no row, so it is not
    marked absent. See [Request time off](/time-off/request-time-off).
  </Accordion>

  <Accordion title="Why did an old day change status?">
    Editing its shifts recomputes it. Days inside submitted or approved periods
    are frozen and will not change.
  </Accordion>

  <Accordion title="Does a public holiday count as absence?">
    No. A holiday makes the day non-working, so there is nothing to be absent
    from. See [Holidays](/time-off/holidays).
  </Accordion>
</AccordionGroup>

## Related guides

<CardGroup cols={2}>
  <Card title="Timecards" icon="table" href="/time-clock/timecards">
    Where the statuses appear.
  </Card>

  <Card title="Working hours and days off" icon="calendar" href="/schedules/working-hours-and-days-off">
    Building the schedule behind expected hours.
  </Card>

  <Card title="Schedule timezones" icon="globe" href="/schedules/schedule-timezones">
    Which timezone a start time is read in.
  </Card>

  <Card title="Expected vs tracked hours" icon="chart-simple" href="/timesheets/expected-vs-tracked-hours">
    The same comparison on timesheets.
  </Card>
</CardGroup>
