---
title: Using the clock
description: Clocking in, taking breaks, clocking out, reading your own history, and requesting a correction
order: 2
---

**Attendance → Clock** is one screen whose buttons change with the shift's state.

## Reaching the clock

On a phone, **Clock** sits in the bottom bar whenever Attendance is on. With the Kiosk
module on, the page header also carries **Show my badge** - the rotating code a shared
[kiosk tablet](/docs/attendance/kiosk/) scans.

## The four actions

| Shift state | Button | Result |
|---|---|---|
| Not clocked in | **Start** (Clock in) | The shift opens and the timer starts |
| Working | **Break** (Unpaid meal) | Work pauses, break time accumulates |
| On a break | **Resume** (End break) | Work resumes |
| Working or on a break | **Stop** (Clock out) | The shift closes |

Clocking out during a break closes the break at the same instant.

The browser counts elapsed time from the shift's start; server totals are the record.

### Times are server times

The recorded instant is the server's, so a wrong device clock cannot shift a punch.

## Concurrent clock-in attempts

A unique index permits one open shift per employee, so a second clock-in from another tab
or device is refused with a 409. Every punch carries an idempotency key, so the same
command sent twice replays the first punch instead of recording a second.

## Clocking in on a day off

Whole-day approved leave is handled by the effective attendance policy:

- **Warn** - the first clock-in is refused with a 409 `ATTENDANCE_LEAVE_CONFLICT`;
  resending with the conflict confirmed opens the shift.
- **Block** - clock-in is refused with the same 409, and no confirmation overrides it.

Pending leave never blocks anything. Partial leave reduces the day's expected time but
does not say which half of the day is free, so it never blocks a clock-in.

## Forgetting to clock out

An open shift left running past the workspace's stale threshold is closed automatically.
The recorded end is the shift's start plus that threshold, not the moment the job ran. The
employee is notified and one item appears in the
[Attendance review](/docs/attendance/review/) queue. Acknowledging it does not change the
times; a wrong end needs a correction.

## Your own history

**Attendance → My attendance** lists days newest first with worked, break and expected
time, in two windows - **This week** and **This month**. A day carrying an open review
item is flagged on its row. Opening a day shows the timeline - Work, Break, Work - and a
**Request correction** action. The open shift's raw punches sit under **Original punch
records** on the Clock page.

## Requesting a correction

Nobody edits a punch, including admins. Instead:

1. Open the day in **My attendance** and choose **Request correction**.
2. Enter the corrected times and a reason - a correction submitted without a reason is
   refused.

The request lands in the [Attendance review](/docs/attendance/review/) queue for a manager
or admin to decide. An approval appends corrective records and recalculates the day's
totals; the original punches stay as recorded, superseded rather than deleted.

## Worked example

Bartek taps **Start** at 08:58, **Break** at 12:30 and **Resume** at 13:05, then never
clocks out. Northlake keeps the 16-hour threshold, so the shift closes with an end of
00:58 and one review item opens. Bartek opens that day in **My attendance**,
requests a correction ending 17:30 with a reason, and Marta approves it - corrective
records recalculate the day and the original punches stay, superseded.

> [!AGENT]
> Clock me in, and if approved leave covers today, ask me before confirming.

## Related

- [Attendance](/docs/attendance/overview/)
- [Attendance review and policies](/docs/attendance/review/)
- [Kiosk](/docs/attendance/kiosk/)
