# How the data fits together

**For:** Manager | Admin
**You'll need:** Nothing.

{{ app_name }} has a small handful of records that build on each other. Once you see the chain, the rest of the product is just views into it. This article walks the chain from the company outward to the shift on the calendar.

## The chain

```
Location  ─┐
           ├─► MLP entry ─► Shift  ─► Assignment ─► Time entry ─► Payroll
Person ────│
           │
Position ──┘                           
```

Read it left-to-right: a **location** plus a **position** define a job you might schedule. A **person** becomes eligible to work that job once an **MLP entry** ties them to it. A **shift** at that (location, position) gets staffed by creating an **assignment** to that person. Once the shift runs, the assignment carries the clock data — the **time entry** — and that's what payroll reads.

Every link in the chain is enforced. You can't assign a person to a shift they have no MLP entry for; you can't submit a time entry against an unpublished shift; you can't approve a time entry inside a closed company period.

## The records, one by one

### Location

A physical site — restaurant, store, ward. Has its own timezone, statutory holidays (auto-seeded from country and state), work rules, and break rules. Almost everything else is scoped to a location. See {doc}`/set-up-your-company/locations/index`.

### Position

A role you schedule — *cashier*, *line cook*, *registered nurse*. Positions are defined at the company level and are available at every location by default; you can optionally restrict a position to a subset of locations. Positions carry headcount thresholds (minimum, target, maximum) that drive the coverage grid, and optional skill requirements. *Whether a specific person can work a position at a specific location* is a separate question — that's what the MLP entry below covers. See {doc}`/set-up-your-company/positions/index`.

### Skill

A qualification — *food safety*, *forklift*, *RN license*. Skills attach to people (with optional expiry dates) and to positions (as requirements). Validation rejects an assignment if the person lacks a required skill, or if their certification has expired. See {doc}`/set-up-your-company/skills/index`.

### Person

A team member: name, email, employment type, hire date, hourly rate, plus the locations they belong to. A person without at least one location can't be scheduled anywhere. See {doc}`/set-up-your-company/people/index`.

### MLP entry — the eligibility join

**MLP** stands for **M**ember–**L**ocation–**P**osition. One MLP entry says *this person can work this position at this location*. Without that entry, the person won't appear in the candidate list for any shift at that pair.

You can create and edit MLP entries from three places — whichever matches how you're thinking about the problem:

- From a **location** — "who can work which positions at this site?"
- From a **person** — "which positions can this person work, and where?"
- From a **position** — "who can work this role, and where?"

It's the same underlying record from any of the three. Each entry can also carry an override hourly rate. See {doc}`/set-up-your-company/people/manage-the-mlp-block`.

### Shift

One block of work: a date, a start and end time, a location, a position, optionally an area inside that location. A shift can exist with no assignment yet — that's a *gap*, surfaced on the coverage grid. A shift is born **Draft**: visible to planners, invisible to workers. See {doc}`/plan-schedules/shifts/index`.

### Assignment

One person × one shift. Creating an assignment is what stocks the shift; deleting it leaves the shift unstaffed. New assignments are created in **Draft** regardless of the shift's status — but when you publish the shift, its draft assignments are flipped to published alongside it. See {doc}`/plan-schedules/assignments/index`.

### Time entry

The record of what was actually worked on an assignment: clock-in, clock-out, breaks, and attendance flags. Time entries are the source of truth for hours, overtime, and pay — they're what {{ app_name }} hands to payroll. See {doc}`/track-time/timesheet/index`.

## What anchors what

Two records anchor the rest of the system and are worth getting right early:

- **Country and state on each location** — drives the seeded statutory holidays.
- **Hire date on each person** — drives leave accrual (proration and service-year boundaries). Getting it wrong rewrites months of leave balances later. Time-comp accrual is calendar-year based and doesn't use hire date.

Almost everything else can be edited later without rippling.

## Related

- {doc}`three-ways-to-build-a-schedule`
- {doc}`from-shift-draft-to-payroll`
- {doc}`/set-up-your-company/index`
- {doc}`/plan-schedules/assignments/how-validation-works`
