# How Shiftguide picks an hourly rate

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

When payroll, the labor-cost report, or "My earnings" needs to know what to pay a person for a shift, {{ app_name }} walks a three-step cascade and uses the first rate it finds. This article documents that cascade so you know exactly where to set (and where to override) someone's pay.

## The cascade

For any worked shift, Shiftguide checks these three sources in order and uses the first one that has a rate:

1. **MLP rate** — the **'Hourly rate'** field on the person's MLP entry for the shift's **location and position**. Set this when one person earns a different rate at one (location, position) pair — for example a server who is paid more when she covers the bartender shift at the flagship store.
2. **Person rate** — the **'Hourly rate'** field on the person's profile. The most common case: this is what you set when you first add someone.
3. **Employment-type rate** — the **'Hourly rate'** field on the {doc}`employment type </set-up-your-company/employment-types/index>`. Use this for "all our weekend juniors are on €18/h" cases — set it once on the employment type and skip filling it in per person.

If none of the three is set, the shift's pay computes as zero. Reports won't error, they'll just show €0 for the row.

```{note}
The MLP rate is keyed by **(person, location, position)** — three dimensions, matched strictly. The same person can earn one rate as Server at the Zürich store and a different rate as Bartender at the same store. There's no fallback across positions: if the shift's exact (location, position) pair has no MLP rate set — or the shift has no position assigned at all — Shiftguide skips MLP and falls through to the person-level rate.

A **0-cent** MLP rate is treated as a deliberate override (the shift earns nothing), not as a missing value. To make Shiftguide fall through to the lower levels of the cascade, **clear** the MLP rate field instead of setting it to 0.

The person-level and employment-type-level rates work the **opposite way**: a 0 at those levels is treated the same as an empty field, and Shiftguide moves on to the next level. Only the MLP override gives you a deliberate zero-pay rule.
```

## Why this order

Each level overrides the one below. The pattern lets you:

- Set a sensible default once on the **employment type** ("juniors get €18, seniors get €25").
- Override at the **person** level when someone has been promoted but their employment type hasn't changed.
- Override again at the **MLP / location** level for one person at one site, without affecting their pay anywhere else.

Each higher level is more specific, so it wins.

## Set or change a rate

- **MLP rate** — open the location, scroll to the **'MLP'** section, click the person's row, and edit **'Hourly rate'**. See {doc}`/set-up-your-company/locations/edit-a-single-mlp-entry`.
- **Person rate** — open the person at **Company → People** and edit the **'Hourly rate'** field. See {doc}`edit-a-person`.
- **Employment-type rate** — open the employment type at **Company → Employment types** and edit the **'Hourly rate'** field. See {doc}`/set-up-your-company/employment-types/index`.

## See which rate was applied

The rate doesn't show on the calendar or shift form — it surfaces in money columns:

- {doc}`Payroll summary </reports-and-payroll/payroll-summary>` — totals per person per pay period.
- {doc}`Payroll timesheet </reports-and-payroll/payroll-timesheet>` — per-shift detail with the applied rate.
- {doc}`Labor cost </reports-and-payroll/labor-cost>` — totals per location.
- {doc}`My earnings </reports-and-payroll/my-earnings>` — what the worker sees for their own shifts.

If a rate looks wrong on a payroll row, walk the cascade above starting at level 1.

## Common pitfalls

- **Forgot to set any rate.** The shift pays €0 and the row sits silently in payroll. Set a rate on either the employment type or the person.
- **MLP rate set on the wrong (location, position) pair.** Because the MLP rate is matched strictly, an MLP override at (Zürich, Bartender) is invisible to a shift at (Zürich, Server). If you want the same rate to apply to every position the person works at a location, set the rate on the person record instead.
- **MLP rate set to 0 when you meant "use the person rate".** A 0-cent MLP override is treated as a deliberate zero-pay rule, not as missing data — the shift will pay €0 and the cascade won't fall through. Clear the field instead.
- **Person or employment-type rate set to 0 expecting it to apply.** At those two levels a 0 is treated as missing — Shiftguide moves on to the next level. To enforce a zero-pay rule for one person at one (location, position) pair, set the **MLP** rate to 0 instead.
- **Currency mismatch.** All rates are in the company currency from the {doc}`general settings </settings-and-admin/company-settings/general>`. Check it if the numbers feel an order of magnitude off.

## Related

- {doc}`add-a-person`
- {doc}`edit-a-person`
- {doc}`/set-up-your-company/locations/edit-a-single-mlp-entry`
- {doc}`/set-up-your-company/employment-types/index`
- {doc}`/reports-and-payroll/payroll-summary`
- {doc}`/reports-and-payroll/payroll-timesheet`
- {doc}`/reports-and-payroll/labor-cost`
- {doc}`/reports-and-payroll/my-earnings`
