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

# People

> The HR master data a company sets up — employees, departments, shifts, holidays, custom attributes, and time cards.

**People** manages employees, organizational structure, schedules, and employee attributes. An employee record defines company membership and work assignments. Login methods, roles, and access grants are managed through [permissions](/docs/reference/permissions.md).

Alforse represents a person across three tables. `user` is the global login identity. `employee` represents membership in one company. `employeeJob` stores the person's title, location, department, shift, and manager. The records share an ID and are company-scoped, so one user can have different employment details in multiple companies.

## Employees

The **Employees** directory (under **Manage**) lists everyone in the company. Each row shows first and last name, email, employee type, location, and a **Status** of **"Active"**, **"Invited"**, or **"Inactive"** — derived from the employee record and any pending invite, not stored as a field. Open a person to see their **Profile**, **Job**, **Abilities**, and **Notes**, plus a tab per attribute category and a **Timecards** tab when time cards are enabled.

When the company requires two-factor authentication, the list also carries a **Two-Factor** column showing whether each person has an authenticator set up, and the row menu offers **"Reset Two-Factor Auth"** for anyone who has lost their device. Both are covered in [two-factor authentication](/docs/reference/two-factor.md).

The **Job** section is the employee master data you edit here:

FieldType

<details>
  <summary>**Title**`text`</summary>

  The person's job title within this company. This is *not* their permission role — see the callout below.
</details>

<details>
  <summary>**Start Date**`date`</summary>

  When they started.
</details>

<details>
  <summary>**Location**`reference`</summary>

  The site they're based at. Required.
</details>

<details>
  <summary>**Shift**`reference`</summary>

  Their assigned work schedule (optional). The scheduler reads this to know when the person is available for gated work.
</details>

<details>
  <summary>**Department**`reference`</summary>

  The department they belong to.
</details>

<details>
  <summary>**Manager**`reference`</summary>

  Who they report to; another employee.
</details>

HEADS UP

"Job" here means a job *title*, not a production job. The `employeeJob` table is org placement — completely separate from the `job` table that holds work orders on the floor. And a person's title is separate again from what they can *do*: access is granted by their **employee type**, covered in [permissions](/docs/reference/permissions.md).

Adding and removing people (invites, deactivation) is part of the identity and access flow, not this master data. Deactivating a person tears down their membership — it removes them from the company, deletes their job placement, and revokes their access — so treat it as an access action, not an edit here.

## Departments

A **department** is an organizational unit. Each has a name and an optional Parent Department, so departments form a hierarchy you can roll headcount up through. Employees attach to a department via their job placement.

FieldType

<details>
  <summary>**Department Name**`text`</summary>

  Unique within the company.
</details>

<details>
  <summary>**Parent Department**`reference`</summary>

  The department this one rolls up under; leave empty for a top-level department.
</details>

Departments are configuration, so they live under **Configure**. Deleting a department is a hard delete — check that no one is assigned to it first, since removing it leaves those job placements without a department.

## Shifts

A **shift** is a named work schedule tied to a location: a start time, an end time, and the days of the week it runs. You assign a shift to an employee through their **Job** section. Shift membership answers *who's scheduled today*, and it is a real [scheduling](/docs/reference/scheduling.md) input: the engine intersects each person's shift hours with a machine's operating hours to decide when ability-gated work can run, so editing a shift or a person's shift assignment queues a replan of the affected schedules.

FieldType

<details>
  <summary>**Shift Name**`text`</summary>

  What the schedule is called.
</details>

<details>
  <summary>**Location**`reference`</summary>

  The site the shift belongs to. Required.
</details>

<details>
  <summary>**Start Time**`time`</summary>

  When the shift begins.
</details>

<details>
  <summary>**End Time**`time`</summary>

  When it ends.
</details>

<details>
  <summary>**Days**`booleans`</summary>

  Monday through Sunday toggles — the days the shift runs.
</details>

NOTE

Shifts schedule both people and machines. A shift assigned to an employee defines when that person can be scheduled; a shift assigned to a [work center](/docs/reference/work-centers.md) defines that station's operating hours. And for operations whose process requires an ability, who's on shift *is* the binding constraint — no qualified operator on shift means the operation waits.

Deleting a shift marks it inactive instead of removing it, preserving historical assignments.

## Holidays

A **holiday** is a company non-working day: a name and a date. The year is derived from the date automatically, and the list groups by year so you can review one calendar year at a time.

FieldType

<details>
  <summary>**Holiday Name**`text`</summary>

  What the day is called.
</details>

<details>
  <summary>**Date**`date`</summary>

  The calendar date. Its year is computed from this.
</details>

## Attributes

**Attributes** are custom fields you track against people — things Alforse doesn't model natively, like a certification expiry, a badge number, or a t-shirt size. They're organized in two layers: an **attribute category** groups related fields, and each **attribute** inside it is one field with a data type.

A category carries a name, an emoji, and a Public toggle that controls whether its attributes show on a person's public profile or stay admin-only.

Each attribute defines:

FieldType

<details>
  <summary>**Name**`text`</summary>

  What the field is called.
</details>

<details>
  <summary>**Data Type**`enum`</summary>

  The kind of value it accepts. See below.
</details>

<details>
  <summary>**List Options**`text[]`</summary>

  The allowed values, only when the data type is *List*.
</details>

<details>
  <summary>**Self Managed**`boolean`</summary>

  When on, employees can edit this value on their own profile; otherwise only admins can.
</details>

The Data Type comes from a fixed set: **"Text"**, **"Numeric"**, **"Yes/No"**, **"Date"**, **"List"**, and **"User"** (the same list also powers customer and supplier custom fields, which add **"Customer"**, **"Supplier"**, and **"File"**). A **"List"** attribute pulls its choices from its List Options. The **"Link"** type is offered on custom fields only, not on attributes.

NOTE

Pick the data type when you create the attribute — it's fixed once the attribute has recorded values. Category and attribute deletes are soft deletes (marked inactive), so an attribute you retire won't erase the values already collected against it.

## Time cards

A **time card** is a clock-in / clock-out record for an employee. Time tracking is off by default and turns on per company with the **Timecards** switch (marked Beta) under **Settings → People**; once on, the **Timecards** tab appears on each person and a company-wide list shows up under **Manage**.

Each entry captures the employee, a clock-in time, an optional clock-out time, and a note. An entry with no clock-out is still open — Alforse derives its **Status** from that:

<details open>
  <summary>**Active**</summary>

  Clocked in with no clock-out yet — the employee is on the clock.
</details>

<details>
  <summary>**Complete**</summary>

  Clocked out. The entry is closed and its duration is fixed.
</details>

Status is computed, not a stored field, and there is **no approval step** — a completed time card is final, not pending sign-off. Duration is calculated from clock-in to clock-out (or to *now* while still active), and weekly hours roll up from the current week's entries. You can also add, edit, or delete entries directly, so a missed punch can be corrected after the fact.

NOTE

These are the office-side time card records. On the shop floor, operators clock time against specific job operations in the [MES](/docs/reference/mes.md) — that production time is a separate mechanism from an employee's clock-in/clock-out day.

## Related

**Permissions**

Employee types, roles, and what a person is allowed to do.

[Open](/docs/reference/permissions.md)

**Two-factor authentication**

Authenticator codes, company-wide enforcement, and resetting a lost device.

[Open](/docs/reference/two-factor.md)

**MES**

Clocking time against job operations on the floor.

[Open](/docs/reference/mes.md)

**Work centers**

Where operations run, and how they're scheduled and costed.

[Open](/docs/reference/work-centers.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.