> ## 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.

# The employee directory

> Browse, filter and search your people; add them one at a time or by CSV import; act on many at once.

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="employee:read" />

**Employees** is the master list. Every other people surface — attendance, leave, payroll, documents — hangs off a row here.

## The list

Columns: code, name, role, department and location, joining date and status. Sortable, paginated, and searchable by name or code.

### Filters and facets

Status filters carry live counts — how many are Active, Onboarding, on Probation, Exited — sourced from the data rather than hardcoded. Department and location filters narrow further.

The filter popover adds three more:

| Filter              | Narrows to                                    |
| ------------------- | --------------------------------------------- |
| **Reports to**      | Everyone below a given manager, transitively. |
| **Tenure**          | A minimum and maximum months-since-joining.   |
| **Branch / office** | A specific location.                          |

<Note>
  The transitive "reports to" walk is a **list filter only**. It narrows rows you are already entitled to see — it does not widen your authority over anyone. Approving still requires being someone's direct manager, or holding `hr:approve`.
</Note>

## Adding one person

<PermissionNote perm="employee:write" />

<Steps>
  <Step title="Open the wizard">
    **+ Add employee**.
  </Step>

  <Step title="Identity and contact">
    Name, employee code, email. The code must be unique in your organization; the email must be unique across all of OnTime, because it identifies the person rather than the membership.
  </Step>

  <Step title="Work details">
    Department, location, manager, shift template, employment type, joining date.

    <Tip>
      **Set the manager.** Approvals route on the direct-manager link. An employee without one has nobody to approve their leave.
    </Tip>
  </Step>

  <Step title="Role">
    From your organization's roles — the four presets, plus any you have defined.
  </Step>

  <Step title="Initial password">
    You set it, at least 8 characters. Share it through your own channel; OnTime sends no welcome email.
  </Step>
</Steps>

## Bulk import

For a whole workforce. Upload a CSV and OnTime shows the parsed rows with per-row validation errors before anything is written — so a bad row is a row you fix, not an import that half succeeded.

<Warning>
  **Imported employees cannot sign in.** The import generates a random password that is never displayed. After importing, set a real password on each employee (**Employee → Edit**) or they have no way in.

  This is a deliberate safety property — an import cannot silently create accounts with guessable credentials — but it does mean import is a two-step process.
</Warning>

## Bulk actions

Select rows and act on all of them:

* **Assign a manager**
* **Change department**
* **Archive**
* **Add a tag**

<Note>
  **Bulk "set shift" is present in the toolbar but not wired.** It does nothing. Assign shift templates individually, or through the roster.
</Note>

## Export

CSV, honouring every filter currently applied. Filtering to one location and exporting gives you that location.

## Employee status

| Status       | Meaning                                                              |
| ------------ | -------------------------------------------------------------------- |
| `Onboarding` | Record created, not yet started.                                     |
| `Probation`  | Started, within the probation period. Flagged during payroll review. |
| `Active`     | The normal state.                                                    |
| `Exited`     | Left. Retained for history, payroll and compliance.                  |

Exited employees stay in the system — their attendance, payslips and documents are part of your statutory record.

## Finding someone fast

Press `⌘K` (or `Ctrl+K`) anywhere in the admin console. The command palette searches employees by name and code, and also offers permission-filtered navigation commands.

<Note>
  The palette searches **employees and navigation only**. It does not search attendance records, payslips or documents.
</Note>
