User guide · Modules

Staff

People and their access in one place: staff records, the weekly rota, daily attendance, leave requests and approvals, and the sign-in accounts that decide what each person can open.
Whole guide

Purpose and the two axes

HR ManagerHotel Manager

A staff record is the job; an account is the way in. They are linked, but neither implies the other.

Staff answers two different questions. Who works here, and when?: the Directory, Rota, Attendance and Leave tabs. Who can sign in, and what may they open?: the Accounts tab. As the screen puts it: “a staff record is the person's job, an account is their way in. Link the two from the directory when someone needs both.”

  • A room attendant may have a staff record and no login (they use the shared front-desk PIN, or none at all).
  • An outside accountant may have a login and no staff record, they are not on the rota.
  • A receptionist has both: a record with job title “Receptionist” in Front Office, linked to an account whose role is Receptionist. The job title is free text; the role is the permission set. They do not have to match.

HR managers own the directory, rota, attendance and leave. Department heads with Staff Edit mark attendance and request leave for their teams. Administrators manage accounts and approve leave. Everything on this page emits live updates, so two HR screens never disagree.

Screen anatomy

Six KPI tiles, department chips and a directory table (with Cards and By department views) on the Directory tab; four more tabs for Rota, Attendance, Leave and Accounts.

Staff → Directory
1234567
  1. 1
    Page head
    “12 active people across 5 departments · 4 on duty right now”, plus a link “2 leave requests to decide” when the queue is not empty. Add staff on the right.
  2. 2
    Total staff
    Active records.
  3. 3
    On duty / Off duty / On leave
    Derived right now. Click a tile to filter the grid by that duty status; click again to clear.
  4. 4
    Leave to decide
    Pending requests. The Leave tab is where you act on them.
  5. 5
    Attendance
    Days not marked absent over the last 30 days, hotel-wide.
  6. 6
    Department chips and directory
    All · Front Office · Housekeeping · …, then the table: Name, Job title, Department, Duty (hover for the reason), Phone, Hired, Attendance, Account. Tap a heading to sort, or its filter icon to narrow by that column. The Cards view shows one card per person with today's shift; By department groups the cards.
  7. 7
    Filter bar
    Search (name, code, job title, phone), Duty status, Job title. Narrows within the chosen department.

The tabs: Directory, Rota, Attendance, Leave, Accounts. Retired records are hidden from the directory and rota but can be restored from their drawer.

Adding, editing and retiring a staff record

HR Manager

Add staff creates the record; the drawer edits it, links an account, and retires or restores it.

  1. 1
    Click Add staff
    The dialog is titled “Add staff, A staff record. A sign-in account is optional and separate”.
  2. 2
    Full name, Job title, Department
    Name and job title need two characters or more; department is a dropdown of the hotel's departments. Phone is optional.
  3. 3
    Linked account (optional)
    A dropdown of active accounts not already linked to someone else, shown as “Name · Role”. Leave it at “No login” for staff who do not sign in.
  4. 4
    Click Add staff
    The person gets an S-code and appears in the grid; the toast reads “Jane Doe added to the team”.
  5. 5
    Edit later from the card
    Click a card to open the drawer. Name, job title, department, phone and Linked account are editable; Save writes them (“Staff record updated”). The right-hand column shows phone, email, hire date, today's shift and attendance.
  6. 6
    Retire record
    Red button in the drawer → confirm “Retire record”. “They disappear from the directory and rota. You can restore the record later.” A retired record cannot be rostered, marked or booked on leave. Restore record brings it back.

Shift templates and the weekly rota

HR Manager

Define the shifts once (Staff Full), then fill a staff × day grid one cell at a time.

Shift times

At the bottom of the Rota tab, Shift times lists the templates the rota can use, “Morning 07:00 – 15:00”, “Night 22:00 – 06:00”. With Staff Full you can rename a shift, retime it (hh:mm), or add one with the row at the bottom. “An end time at or before the start makes it an overnight shift” and gets an overnight tag. “Retiming a shift moves every rota entry already using it.” Start and end must differ. Without any templates, “every rota cell is empty”.

Filling the rota

  1. 1
    Pick the week
    The card head shows “Mon 7 Sep – Sun 13 Sep · one shift per person per day”. Use ‹ › to move a week, This week to come back. Today's column is highlighted.
  2. 2
    Choose a shift in each cell
    Every cell is a dropdown: “, off” or a template “Morning · 07:00 – 15:00”. It saves on change and is written to the audit log as rota.assigned or rota.cleared.
  3. 3
    Find the gaps
    Filter Coverage → “Has unfilled days” to list only people with at least one empty cell this week; combine with Department.

Marking attendance

HR Manager

One row per active person per day: Present / Late / Absent, clock in and out, and a note. Never for a future date.

  1. 1
    Pick the date
    The date box tops out at hotel-local today; the card head reads “7 of 12 marked for today · unmarked people read as off duty”.
  2. 2
    Click a status chip
    Present, Late or Absent on the row. It saves immediately and is audited as attendance.recorded.
  3. 3
    Clock in / Clock out
    Type hh:mm and leave the field. Typing a time on an unmarked row marks the person Present as well, because a record needs a status. A bad value shows “Enter the time as hh:mm, e.g. 07:30” and reverts.
  4. 4
    Note
    Free text up to 200 characters (“doctor's appointment”), saved when you leave the box.
  5. 5
    Work down the unmarked list
    Filter Status → “Not yet marked” to see who is left. The Shift column shows the rostered window so you can judge Late.

Attendance % on the directory (per person and hotel-wide) is the share of marked days over the last 30 that are not Absent, Late counts as attended. People with no marks show “not marked yet”.

Leave: request, approve, reject, withdraw

HR ManagerHotel Manager

Anyone with Staff Edit can raise a request; only Staff Full decides it; withdrawing is for requests raised in error.

  1. 1
    Click Request leave
    On the Leave tab. The dialog says “Pending until someone with Staff full access decides”. Choose the Staff member, Type (Annual, Sick, Unpaid, Other), First day, Last day and an optional Reason.
  2. 2
    Submit request
    The request gets an LV-code, appears under Pending requests, and a blue alert “Leave request: Jane Doe” goes to the feed. A request that overlaps a pending or approved one for the same person is refused.
  3. 3
    Approve or Reject (Staff Full)
    Green Approve / red Reject on the pending row open a confirmation titled “Approve LV-…” or “Reject LV-…” with an optional Note “kept on the record”. Approving warns: “Approved leave outranks the rota: this person reads as On leave on every day in the range.” Rejecting: “the rota untouched. The request stays in history with your note.”
  4. 4
    Withdraw (Staff Edit)
    For requests raised in error. Confirm “Withdraw request”: the row “disappears from the approval queue and is filed as cancelled. … use Reject to turn one down.”
  5. 5
    History
    Decided and withdrawn requests, newest first, with Decided by and the note. Filter by Status, Leave type and Department; search by code or name.
Leave request lifecycle
Leave request lifecycleApprove (Full)Reject (Full)Withdraw (Edit)PendingApprovedRejectedCancelled
  • PendingApproved (Approve (Full))
  • PendingRejected (Reject (Full))
  • PendingCancelled (Withdraw (Edit))

Decided requests are final: there is no un-approve. If plans change, the person simply comes to work and is marked Present, attendance is checked after leave, so an approved day still reads as On leave; ask an administrator if that matters for records.

Duty status is derived

On duty, Off duty and On leave are never typed in, they are worked out live from leave, today's attendance and the rota.

The badge on every card is recomputed on each request, in this priority order. The first rule that applies wins, and the card's tooltip tells you which one it was.

  1. 1
    On leave
    On approved leave today
  2. 2
    Off duty
    Marked absent on today's attendance sheet
  3. 3
    On duty
    Marked present on today's attendance sheet, or marked late on today's attendance sheet
  4. 4
    On duty
    Inside a rostered shift right now (by the hotel's clock)
  5. 5
    Off duty
    Rostered today, but outside the shift window, or no shift on today's rota
  • An attendance mark is an explicit statement about today and outranks the rota: someone marked Present at 06:50 is on duty even before their 07:00 shift starts.
  • Overnight shifts work across midnight: a “Night 22:00 – 06:00” rostered for Monday shows the person on duty from 22:00 Monday until 06:00 Tuesday.
  • Nobody on the rota today and no mark → Off duty with “No shift on today's rota”. This is why a brand-new hotel shows everyone off duty until the rota is filled.
  • The KPI tiles and the page-head “on duty right now” use exactly the same rule, so they always agree with the cards.

Accounts: logins, roles, passwords, deactivation

HR ManagerSuper Admin

Create sign-in accounts, change a role, reset a password or deactivate. Admin-tier roles need Settings Full.

The Accounts tab lists every login with Name, Email, Role, Status (Active / Deactivated) and Last sign-in, with four counters (Accounts, Active, Deactivated, Roles in use) and filters for Role and Status. Your own row is tagged “you”.

  1. 1
    New account
    Dialog “New staff account, They sign in with this email and password”: Full name, Email, Temporary password (“min 8 chars, share it securely”), Role. Click Create account. The email must be unique in the hotel.
  2. 2
    Change a role
    Open the account and pick a new Role; it saves at once (“Role updated”) and takes effect on the person's next request. You cannot change your own role.
  3. 3
    Reset password
    Type a new password (8+ characters) and click Set. The toast reads “Password reset. Existing sessions revoked”: the person is signed out everywhere.
  4. 4
    Deactivate account
    Confirm “Deactivate account”: “They will be signed out immediately and will not be able to sign in until you reactivate the account.” Reactivate account reverses it. You cannot deactivate yourself.
  5. 5
    Link it to a person
    Go back to the Directory, open the staff record and choose the account under Linked account.

Fields

Staff record, shift template, leave request and account, what each form accepts.

Staff record (Add staff / drawer)
FieldTypeNotes
Full name *text 2–80Searchable.
Job title *text 2–80Free text; feeds the Job title filter. Not a permission.
Department *selectOne of the hotel's departments; drives the chips and rota/attendance filters.
Phonetext ≤ 30Optional.
Linked accountuserActive, not linked elsewhere. “No login” is fine.
Hire datedateShown as “Hired …” in the drawer when set; not on the forms.
Activeyes/noRetire / Restore record. Retired people cannot be rostered, marked or booked on leave.
Shift template (Rota → Shift times, Staff Full)
FieldTypeNotes
Name *text 2–40“Morning”, “Night”.
Start · End *hh:mmMust differ. End at or before start = overnight.
Leave request
FieldTypeNotes
Staff member *selectActive records only.
Type *enumAnnual / Sick / Unpaid / Other
First day · Last day *dateInclusive; days = last − first + 1. Last day may not precede first; at most 366 days.
Reasontext ≤ 300Optional, shown to the approver and in history.
Note (decision)text ≤ 300Optional, typed by the approver; kept on the record with their name.
Account (Accounts tab)
FieldTypeNotes
Full name *text 2–80Shown in the top bar and audit log.
Email *emailSign-in identity; unique per hotel; stored lower-case.
Password *≥ 8 charsTemporary on creation; reset from the drawer. Never shown again.
Role *selectThe permission set. Admin-tier roles need Settings Full to grant.
Activeyes/noDeactivate / Reactivate. Deactivating revokes every session.

Permissions

Staff View reads everything; Edit runs the day-to-day; Full decides leave and defines shifts; Settings Full is needed for admin-tier accounts.

Default levels that matter on this page
RoleStaffSettings
Super AdminFullFull
Hotel ManagerFullEdit
ReceptionistNoneNone
AccountantNoneNone
Housekeeping MgrEditNone
MaintenanceNoneNone
Restaurant MgrViewNone
HR ManagerFullView
SecurityViewNone
None No accessView View onlyEdit Can editFull Full access
  • Staff View: all five tabs read-only (drawers say “View-only access …”).
  • Staff Edit: Add staff, edit / retire / restore records, fill the rota, mark attendance, Request leave, Withdraw; create accounts, change roles, reset passwords, deactivate and reactivate.
  • Staff Full: additionally Approve / Reject leave and add or retime shift templates.
  • Settings Full: required on top of Staff Edit to create, re-role or edit a Super Admin / Hotel Manager (admin-tier) account.

Defaults: HR Manager has Staff Full but Settings View, so HR can approve leave yet cannot touch admin accounts; Housekeeping Mgr has Staff Edit; Restaurant Mgr and Security can only look; Super Admin does everything.

Tips

Tiles as filters, the hotel clock, live updates and where the numbers come from.

  • Tiles filter. Click On leave to see who is away today; it also resets the department chip because tiles count the whole hotel.
  • Hotel time. “Today” for attendance, the rota and duty status is the hotel's own calendar day and clock, not your laptop's.
  • Everything is live. Approving leave on one screen flips the person's badge on every other open Staff page within seconds.
  • Start-of-day routine: Attendance tab → filter “Not yet marked” → chips down the list; then Directory to confirm “on duty right now” matches the floor.
  • Pending queue. The page-head link “N leave requests to decide” jumps straight to the Leave tab.
  • History is capped. The Leave tab shows the 200 most recent decided requests; pending ones always show in full.

Errors you may see

Every refusal from the staff and accounts endpoints, verbatim.

Records, rota, attendance

400That account is already linked to a staff record
Why
The Linked account you chose belongs to another person.
Fix
Unlink it from the other record first, or create a new account.
400That record is retired, restore it before rostering shifts
Why
A rota cell was set for a retired person (usually from a stale grid).
Fix
Open the record from the directory (Duty status → any) and click Restore record.
400That record is retired, restore it before recording attendance
Why
Attendance was marked for a retired person.
Fix
Restore the record, then mark.
400Attendance cannot be recorded for a future date
Why
The date is after hotel-local today.
Fix
Pick today or an earlier date.
400Start and end time must differ
Why
A shift template with identical start and end would last 24 hours.
Fix
Set a real window; end before start is fine (overnight).
404Staff record not found
Why
The record was removed or the tab is stale.
Fix
Reload the page.
404Shift template not found
Why
The shift used in the cell was removed.
Fix
Reload and pick a current shift.

Leave

400End date must not precede start date
Why
Last day is before First day.
Fix
Swap the dates.
400A single request cannot span more than a year
Why
More than 366 days, almost certainly a typo.
Fix
Check the year in both dates.
400That record is retired, restore it before booking leave
Why
Leave was requested for a retired person.
Fix
Restore the record first.
400Overlaps LV-0042 (approved) for the same staff member
Why
A pending or approved request already covers one of those days.
Fix
Adjust the dates, or withdraw / decide the other request first.
400Overlaps already-approved LV-0042
Why
Approving this request would overlap leave approved after it was raised.
Fix
Reject one of them, or shorten the dates by raising a new request.
400Only pending requests can be decided (this one is approved)
Why
Someone else decided it moments ago.
Fix
Nothing, the list refreshes on its own.
400Only pending requests can be cancelled (this one is rejected)
Why
Withdraw was clicked on a request that is no longer pending.
Fix
Nothing to do; it is already in history.
404Leave request not found
Why
Stale row.
Fix
Reload.

Accounts

403Only a Super Admin can manage Hotel Manager accounts
Why
You tried to create, re-role or edit an admin-tier account (Super Admin, Hotel Manager, or any role with Settings = Full) without Settings Full yourself.
Fix
Ask a Super Admin, or have your own role granted Settings Full in User Roles.
409A user with that email already exists
Why
Emails are unique per hotel (case-insensitive).
Fix
Search the Accounts tab for the address, it may be a deactivated account you can reactivate.
400You cannot deactivate or change the role of your own account
Why
Self-lockout guard.
Fix
Ask another administrator.
400Password must be at least 8 characters
Why
Validation on create; the Set button also stays disabled below 8.
Fix
Use a longer temporary password.
404Role not found
Why
The role was deleted in User Roles while the form was open.
Fix
Reload and pick again.
Staff record
A person on the payroll: S-code, job title, department, rota and attendance. May have no login.
Account
A sign-in (email + password) with a role. May have no staff record.
Duty status
On duty / Off duty / On leave, derived live from leave, attendance and the rota; never stored.
Shift template
A named time window (e.g. Night 22:00 – 06:00) that rota cells reference. Retiming it retimes every cell.
Admin tier
Super Admin, Hotel Manager, or any role with Settings Full. Needs Settings Full to grant; never PIN sign-in.