# Shifts and roster

> Define shifts, roster each person on a shift at a site for each day, and manage attendance records by hand on the Attendance page.

Sidebar → **Attendance** (route `/attendance`) has three lists:

- **Shifts**: the time slots, e.g. Day 07:00–19:00, Night 19:00–07:00, General 09:00–18:00.
- **Roster Assignments**: one person, one shift, one site, one date.
- **Attendance Records**: what actually happened each day. Most are created by guards checking in on [Field Attendance](/docs/field-attendance); you can also add or fix them here.

**Who can do this:** Admin, Ops Manager, Supervisor (`rosters.manage`, `attendance.manage`).

## Add a shift

![Attendance: the Shifts list, with Add shift](/docs-images/guide/shifts-list.webp)

**Shifts → Add shift**:

| Field | Required | Notes |
|---|---|---|
| Site | | Leave empty for a shift used at every site, or pick one site |
| Shift Name | Yes | e.g. *Day* |
| Starts At | Yes | 24-hour, e.g. 07:00 |
| Ends At | Yes | e.g. 19:00 |
| Crosses Midnight | | **Yes** for night shifts (19:00 → 07:00) |
| Break Minutes | | e.g. 30. Subtracted from worked time. |
| Status | | **draft**, **published**, **locked**, **cancelled**. Use **published**. |

![Add shift: (1) name, (2) start and end, (3) Save](/docs-images/guide/shift-add.webp)

A check-in is **late** when it's more than the late-after grace (15 minutes by default) past the shift start. Set the grace in [Field Attendance → Setup](/docs/field-attendance#attendance-rules).

## Roster someone

**Roster Assignments → Add roster assignment**:

| Field | Required | Notes |
|---|---|---|
| Employee | Yes | |
| Deployment | | **Pick the person's deployment.** This link gives the day a pay rate and a bill rate. Without it, payroll counts the day at ₹0 and flags it. |
| Shift | Yes | |
| Site | Yes | Where they work that day |
| Roster Date | Yes | One row per day |
| Status | | Use **published** |
| Notes | | |

![Add roster assignment: (1) the deployment, which gives the rates, (2) one row per day, (3) Save](/docs-images/guide/roster-add.webp)

> Workers placed with [Approve & Deploy](/docs/approve-and-deploy) are rostered automatically for the next days (31 by default), linked to their deployment.

**A guard with no roster entry for today sees "No shift rostered" and can't check in.** The phone takes the site (for the location check) and the shift (for on-time or late) from today's roster.

The **Deployment** dropdown shows each deployment as "role · start date" without the person's name. If several people share a role and start date, open the [Deployment](/docs/deployment) page to tell them apart.

## Attendance records by hand

**Attendance Records → Add attendance record** creates a day manually, for staff who don't use the app or for corrections. Prefer the [muster](/docs/field-attendance#muster) for day-to-day marking and corrections: it keeps an audit trail and the original punches.

## How it connects

- Uses [shifts](#add-a-shift), [deployments](/docs/deployment) and [sites](/docs/clients-and-sites).
- [Field Attendance](/docs/field-attendance) reads today's roster for each guard and lists everyone rostered in the muster.
- [Payroll and billing](/docs/payroll-and-billing) follow attendance → roster → deployment to find rates.
