---
title: "Planning & filling the roster"
description: "The monthly loop — plan the month, generate a draft, fill the gaps, publish; and how to read the three conflict tiers."
---

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

# Planning & filling the roster

Scheduling's monthly loop: **plan the month → generate a Draft → place people →
publish**. It presumes [Scheduling setup](/en/docs/scheduling/vocabulary/) already
holds shift types and day types — a branch with no day types can't plan anything, and
the screen points there instead.

## Once a month: plan the month

**Plan a month** applies the setup's **weekly rhythm** to real dates: the calendar
paints each date in its day type's colour, with a dot on dates that override the
rhythm. Only **this month's exceptions** are handled here — this Wednesday closed,
that Saturday open — the standing rhythm belongs to setup and doesn't need restating
monthly.

With the exceptions set, press **Generate**: the roster is created as a Draft and you land
in the workspace. A month has **exactly one** roster — an already-planned month shows
a banner linking to it where the generate button would be.

## Placing people

The workspace has two views one toggle apart: **Roster**, a person × date grid of who
works when, and **Fill**, the month as a calendar of where people are still missing, with
the number still to place on its tab. Each day in the calendar lists its shift types as
rows, in the order they start, each row led by its code; an open place shows the position it
needs (for example "N" for Nurse), or the duty when the demand names one. Hover any place for
the whole shift, its hours, the position and the name. "Drag a name onto a hole, or click the
hole."

The **Staff** panel shows each person's hours on this roster and their consecutive days.
When one more day in a row would need an override, the run turns amber with a warning icon;
hover it for why.

- Click a **hole**: the candidate list, ranked clean → advisory → override → hard —
  a hard-conflicted candidate is shown disabled, not hidden. Days a colleague declared
  under [Availability](/en/docs/scheduling/shifts/) are flagged here too: **Can't work** is
  an override, **Prefer not** advisory.
- Click a **cell** (a person, a date): their shifts that day, the open shifts they
  could take, day-off marks (statutory rest / rest day / public holiday — omit the
  type and the server applies its default: the week's first day off is statutory
  rest, the next a rest day), and unassign.

The three conflict tiers are the workbench's language: **hard** is refused (the
server refuses it too, whatever the client shows); **override** takes a typed reason,
stamped on the row; **advisory** writes with its flags showing. People on approved
leave read "Leave" in their cells.

## Publish — or start the month over

- **Publish** — the Draft roster's primary action: the month settles at once and the
  roster becomes Published, one notification per person however many shifts they hold.
  After publishing, edits are **cell-by-cell amendments** — the roster stays
  Published and never returns to Draft; the hint says it straight: "It is
  published — changes happen on the roster itself, cell by cell."
- **Delete draft** — a month that went wrong is removed whole (shifts, placements and
  its day marks, all in one go) and planned again — never regenerated over. The confirm
  says every shift, and everyone placed on one, goes with it; a Published month never
  offers the button.

Source: https://peoplematter.app/en/docs/scheduling/planner/index.mdx
