Staff — Overview
Staff manages people and work schedules: staff view their own calendar/timetable, request and get approval for leave, and admins manage the Staff Roster (weekly shifts) with visibility into leave overlaps so they do not schedule incorrectly.
Four main areas
| Area | What it is | Users |
|---|---|---|
Staff Home (/staff/home) | Staff "My Calendar" page + navigation links | Staff |
Timetable (/staff/timetable) | Personal timetable, date/week navigation | Staff |
| Roster Weekly Planner | Admin Portal → Staff → Roster → Weekly Planner; schedules weekly shifts | Admin |
| Leave / Availability | Request leave, approve leave, declare availability | Staff + Admin |
Important ideas
- Leave has its own type: leave forms only show
TrackingCodeof type Leave (not Shift). - Roster can see leave overlapping shifts: when creating/editing a shift, the popup shows read-only
Leaveif the staff member has leave that overlaps the shift interval (compare by time interval, not only date). - One person = one row in planner, even when they have records in multiple BUs (dedupe by
enterpriseUserId). - Open Shift is a shift that has been published but has no employee assigned (
EmployeeId = null), so any eligible staff can claim it.
Suggested reading order
- End-user view — what staff and admin do.
- Concepts & architecture — leave, roster, tracking code, dedupe.
- Data & read/write tables — EnterpriseUser, Shift/EmployeeAbsence tables in flows.
- Common cases — leave overlap, cross-BU, slot sorting.
Current implementation: NFC sign-in/out
Tuke has a /sign-in-out surface for contactless/NFC attendance. The gate loads sign-in/sign-out rolls by contact and site context, using a short client cache and in-flight request deduplication. Signature submission sends the action and contact name, plus coordinates when the WebView/browser provides them; missing geolocation does not block the operation.
Real-world example: A parent opens an NFC link for two sites. → The gate shows only eligible rolls for those sites. → Successful sign-in clears the roll cache so the next open does not use stale data.