Attendance Management — view, filter, regularize
A complete training guide for Stafferin supervisors: filter guard attendance by date, site, or employee; expand a record to see breaks, location, and notes; open the check-in/check-out point on Google Maps; and regularize records when a guard's check-in time, check-out time, or pay rate needs correcting.
Before you start
Attendance Management is the supervisor's view of every guard's check-in and check-out. It's where you confirm coverage, spot missing records, and correct mistakes. Get a few things lined up before you open it.
09:00 or 17:30. Don't guess — pull it from the guard's report or the schedule.Regularization changes a guard's pay record. Editing a check-in time changes hours worked, which changes wages. Always have a documented reason — a verified note from the guard, a site-log entry, or an incident report — before you regularize. Audit fields capture who and when, so it's traceable back to you.
Open Attendance Management
From the Stafferin admin home menu, tap Attendance Management. You'll land on a page titled "Attendance Management" with a navy app bar — the formal admin tone. The Filters panel is open by default.
Attendance Management — opens with Filters expanded and From / To set to today.
What you should see
- A navy app bar reading "Attendance Management".
- A Filters panel, expanded by default. Inside: a horizontal row of date-preset chips, the From / To date pickers, the Site dropdown ("All Sites"), the Employee dropdown ("All Employees"), a Search field ("Search by name, number..."), a "Show Favorites Only" toggle, and the blue "Apply Filters" button at the bottom.
- Below the filters: an empty area with the message "Apply Filters to View Attendance" and the hint "Select date range and optionally filter by site or employee, then click 'Apply Filters'".
- On first open, the page auto-applies filters once the org date and sites finish loading — so you'll often see records appear without needing to tap Apply Filters yourself.
The empty prompt is normal at first. It means filters haven't been applied yet (or auto-apply is still loading). Tap Apply Filters, or wait a moment for the auto-apply to complete.
If you see the empty prompt and never anything else, the org-date or sites endpoints failed silently. Pull-to-refresh, then check your network. The snackbar "Failed to load organization date." may flash briefly.
How it works at a glance
Before we dig in, here's the full attendance review workflow on a single line. The indicator highlights each step in turn — that's the order you'll do them in.
Decision flowchart
Behind the scenes, here's what the page is doing. The orange diamonds are decision points — places where the app or you decide which way the flow goes.
or check network
From=To=today
tap Apply Filters
edit + Submit
Plain-English version: Pick the dates, narrow the list, expand a row to see what happened, and fix it if it's wrong. That's the whole page.
Watch the full flow
Six frames. Each one is a real screen from the app. Tap a step on the right to jump there, or use Pause / Restart.
Regularize Attendance
Step-by-step demo
- Open Attendance Management — Filters expanded.
- Pick a date preset (e.g., Yesterday) and a site.
- Tap Apply Filters. Records appear, count shown ("N record(s) found"). Active filter chips appear above the list.
- Tap any card — it expands to show shift detail, location, breaks, and a View on Map link.
- Tap Regularize, edit Check-in / Check-out (HH:mm) or Pay Rate, then Submit.
- "Attendance regularized successfully" — orange "Regularized" chip appears on the card.
You don't always need to regularize. Most records load fine — the regularize step only matters when a check-in / check-out time is wrong, missing, or the pay rate needs an override. Skip it for clean records.
Reading an attendance row
Each card holds nine pieces of information. Once you can read one, you can read every record on the page in under a second.
Two cards — an in-progress one and a regularized completed one (orange-bordered).
Anatomy of a card
-
Employee name & number
Top-left of the header. Bold name.
#EMP-204-style number underneath. Falls back to "Unknown" if the record has no name and the cached employee list can't resolve it. -
Status pill
Top-right. Three values, all derived from check-in / check-out timestamps: Not Started (gray) — neither time present; In Progress (yellow) — checked in, not yet out; Completed (green) — both present. There is no Late, No-Show, or Absent state in this view.
-
"Regularized" chip + orange border
If the record has been edited, an orange "Regularized" chip appears next to the status pill, and the card itself gets a subtle orange border. Tap to expand to see who regularized it and when.
-
Date & site row
Below the header: a calendar icon with the date, then a pin icon with the site name. Long site names truncate with ellipsis.
-
Check-in time + method badge
Labeled "In". The tiny colored badge next to it tells you how the check-in was recorded: NFC indigo (tap a tag), GPS teal (geofenced location ping), ADMIN orange (a supervisor entered it manually — i.e., regularized), MANUAL grey (manual / unknown method).
-
Check-out time + method badge
Labeled "Out". Same badge palette as check-in. If the guard hasn't checked out, this shows N/A with no badge.
-
Duration
Computed by the server (not the app). Shown as "8h 04m" or similar. If check-out is missing, duration shows --.
-
Chevron
Down arrow — tap the card to expand. Up arrow — tap to collapse. Only one card is expanded at a time.
-
Expanded detail (after tap)
Shows up to four sections: Shift Details (Position, Shift Time, Pay Rate, Break Time + each break window), Location (Check-in / Check-out address with "View on Map" link), Notes (Employee Notes, Payroll Notes), and Regularization (audit trail — only if the record was regularized). At the bottom: a "Regularize" button.
Status reference
Three derived states. If you need Late / No-Show / Absent classifications, they're not in this view — talk to Operations about the Reports module.
| Status | Pill color | What it means | Typical action |
|---|---|---|---|
| Not Started | Gray | No check-in time recorded. | Verify with the guard / site lead. If the guard worked, regularize the check-in time. |
| In Progress | Yellow | Checked in, no check-out yet. | Wait — guard is still on shift. After shift end, check back. If they forgot to check out, regularize. |
| Completed | Green | Both check-in and check-out present. | No action — record is closed. Regularize only if a time is wrong. |
| Regularized | Orange | An admin has edited check-in / check-out. Shown alongside the underlying status, not in place of it. | No action — but the audit trail (in the expanded detail) tells you who and when. |
Method badges
The four badges that can appear next to a check-in / check-out time. They tell you how the time was recorded — and "ADMIN" specifically flags supervisor edits.
| Badge | Color | Meaning |
|---|---|---|
| NFC | Indigo | Guard tapped an NFC tag at the site to record this time. High confidence. |
| GPS | Teal | Geofenced location ping — the app saw the guard inside the site geofence and recorded the time. |
| ADMIN | Orange | A supervisor entered or overrode this time via Regularize. Look at the audit trail in the expanded detail to see who. |
| MANUAL | Gray | Manual / fallback — guard used a manual check-in option, or the method wasn't classified. |
Why "ADMIN" matters. If both badges on a card are ADMIN, the guard never recorded the times themselves — they were entered by a supervisor. That's not necessarily wrong (e.g., the guard's phone died), but it's worth confirming the underlying reason. Check the Regularization audit trail.
Filters & date range
Six filter controls. Use them in any combination — they all apply at once when you tap Apply Filters.
Date range
Two ways to set it: tap a preset chip, or use the From / To date pickers directly. Presets just fill in the From / To for you.
Today
From = To = today's org date. The default on first open.
Yesterday
From = To = today minus one day. Quickest way to confirm last shift's coverage.
This Week
From = Monday of the current week (weekday 1) through today. Calendar week, not "last 7 days".
Last Week
From = Monday of last week through Sunday. The full prior calendar week.
This Month
From = first day of the current month, through today.
Last Month
From = first day of last month, To = last day of last month. The full prior calendar month.
Order rules. If you pick To earlier than From, you'll see "To Date cannot be before From Date". If you pick From later than To, you'll see "From Date cannot be after To Date". The pickers reject the change — your previous date stays.
Site dropdown
Defaults to "All Sites". Pick a single site to narrow the records to that location only. The Employee dropdown reloads automatically to show only employees assigned to that site.
"All Sites" clears the employee selection. Switching from a specific site back to "All Sites" wipes any employee filter you had set. If you want a single employee across all sites, pick "All Sites" first, then the employee.
Employee dropdown
Defaults to "All Employees". While loading, it shows "Loading employees...". The list cascades from the Site selection — pick a site first to narrow the employee roster.
Search
Free-text. Hint: "Search by name, number...". Matches against employee name and employee number. Case-insensitive. Combines with the dropdown filters — search inside the already-filtered set.
Show Favorites Only
A toggle near the bottom. Off by default. When on, only records for employees you've marked as favorites are shown. (Favoriting happens elsewhere — talk to Operations about how to mark.)
Apply Filters & active chips
None of the filter changes take effect until you tap Apply Filters. After that, your active filters appear as small dismissible chips above the list ("Site: Downtown Office", "Employee: Alex Johnson", "Search: maria", "Favorites Only"). Tap the on any chip to remove that filter and re-apply.
Pull-to-refresh on the list reloads the current filtered set. Use it after a guard finishes their shift to see their check-out come through. If filters aren't applied yet, the refresh shows "Please apply filters first".
Regularize an attendance record
Use the Regularize sheet when a check-in time, check-out time, or pay rate needs correcting. The sheet has three optional fields — fill at least one of the time fields.
Regularize Attendance
The Regularize bottom sheet — three fields, at least one time required.
The three fields
-
Check-in Time (HH:mm) — optional
Hint:
09:00. 24-hour clock. Pre-filled with the guard's actual check-in if there was one. Leave blank to keep the existing value. If you want to set a check-in, type a 24-hour time like14:30. -
Check-out Time (HH:mm) — optional
Hint:
17:00. Same format. Pre-filled with the actual check-out, or empty if the guard never checked out. -
Pay Rate — optional
Hint:
15.00. Decimal number, no currency symbol. Pre-filled with the current pay rate (e.g.,22.50). Used to override the rate for this specific record.
Tap Submit. On success, the sheet closes, the list refreshes, and a green toast confirms "Attendance regularized successfully". The card now shows the orange "Regularized" chip and an orange border. Tap it to see the audit detail.
Validation rules
Before the Regularize call goes out, the app checks four things. Fail any and you get an inline snackbar.
| Rule | What you'll see if you violate it | Fix |
|---|---|---|
| At least one time must be provided | Please enter at least a check-in or check-out time |
Type something into either field. |
| Check-in must be HH:mm | Invalid check-in time format. Use HH:mm |
Use 24-hour like 09:00, not 9 AM. |
| Check-out must be HH:mm | Invalid check-out time format. Use HH:mm |
Same. |
| Pay rate must parse as a number (if provided) | Invalid pay rate value |
Numeric only, e.g. 22.50. No $, no spaces. |
Audit trail (after regularization)
Once regularized, expanding the card shows a new Regularization section with five fields:
- Reg. Check-in — the new check-in time you entered.
- Reg. Check-out — the new check-out time you entered.
- Reg. Pay Rate — the new pay rate (formatted as
$15.00). - Regularized By — your name (the supervisor who submitted).
- Regularized At — the timestamp when the regularize was submitted.
Regularizing an already-regularized record overwrites the previous regularization. The audit trail keeps only the latest set of values. If you need a longer history, document changes in your own log before re-regularizing.
Regularizations affect payroll. A check-in shifted from 9:00 to 9:30 reduces paid hours by 30 minutes. Be sure of the correct time before submitting — pull from the guard's report, the site log, or the schedule. Your name is on the record forever.
Errors & how to fix them
Every error message you can see while using Attendance Management, with what it actually means and what to do.
Filter / date errors
| If you see… | It means | Do this |
|---|---|---|
| "Please apply filters first" | You pulled-to-refresh before tapping Apply Filters at least once. The list isn't loaded yet. | Set a From / To range, then tap Apply Filters. Pull-to-refresh works after that. |
| "Please select both From and To dates" | One of the two date pickers is empty. | Tap the empty picker, choose a date. Or tap a preset chip — it fills both at once. |
| "From Date cannot be after To Date" | You tried to set From to a date later than To. | Pick an earlier From, or first move To later. |
| "To Date cannot be before From Date" | You tried to set To to a date earlier than From. | Pick a later To, or first move From earlier. |
Loading errors
| If you see… | It means | Do this |
|---|---|---|
| "Failed to Load Attendance" | The attendance list endpoint failed. Could be network or server. | Tap the Retry button. If it persists, switch to wifi. |
| "Failed to load attendance records." | Snackbar version of the same. Shows briefly at the bottom. | Pull-to-refresh, or wait a moment and try again. |
| "Unable to load more records." | Pagination failed — the next page of records didn't load. | Scroll up and pull-to-refresh. Your existing records stay visible. |
| "Failed to load organization date." | The org date couldn't be auto-detected. From / To stay empty. | Pick From and To manually using the date pickers. |
| "Failed to load sites." / "Unable to load sites." | The site dropdown couldn't populate. You'll see "All Sites" only. | Pull-to-refresh. If still failing, retry once you have a stronger connection. |
| "Unable to load employees." | Employee dropdown couldn't populate after a site selection. | Try a different site or pick "All Sites" then pull-to-refresh. |
Regularize errors
| If you see… | It means | Do this |
|---|---|---|
| "Please enter at least a check-in or check-out time" | Both time fields are empty in the Regularize sheet. | Type at least one time in HH:mm. |
| "Invalid check-in time format. Use HH:mm" | The check-in field doesn't parse — wrong shape, non-numeric, or out-of-range hour/minute. | Use 24-hour HH:mm exactly. Examples: 09:00, 14:30, 23:45. |
| "Invalid check-out time format. Use HH:mm" | Same problem on the check-out field. | Same fix. |
| "Invalid pay rate value" | The pay rate field doesn't parse as a decimal number. | Type only digits and a single decimal point — e.g., 22.50. No $, no spaces. |
| "Failed to regularize attendance." | Server rejected the regularize submission, or a network drop mid-submit. | Re-open the card, tap Regularize again. If it fails twice, contact Operations. |
| "Unable to regularize attendance." | Network exception (no response). Same as above but a different code path. | Switch to wifi and retry. |
| "Attendance regularized successfully" | Success — the change was saved. | The list refreshes automatically. The card now has the orange "Regularized" chip. |
Empty / pre-filter states
| If you see… | It means | Do this |
|---|---|---|
| "Apply Filters to View Attendance — Select date range and optionally filter by site or employee, then click 'Apply Filters'" | Filters haven't been applied yet (or the auto-apply is still loading). | Set From / To, optionally pick a site / employee, then tap Apply Filters. |
| "No attendance records found — Try adjusting your filters or date range" | Filters were applied successfully but the result set is empty. | Broaden the date range, drop the employee filter, or check spelling in Search. |
FAQ
Why is the page empty when I first open it?
It's not empty — the auto-apply is loading. The page asks the server for today's org date and the site list before applying filters automatically. If that takes more than a second on a slow connection, you'll see the "Apply Filters to View Attendance" prompt briefly. Wait, then either the records appear (auto-apply succeeded) or they don't (something failed silently — see Section 8).
Can I filter by multiple sites at once?
Not in the UI. The Site dropdown is single-select. Internally the API accepts multiple site IDs (the field is plural siteIds), but it isn't exposed yet. If you need cross-site reporting, work around it by picking "All Sites" and using Search.
What's the difference between "Not Started" and "No Show"?
This page only shows "Not Started" — meaning no check-in time was recorded. It does not classify No-Show. A "Not Started" record could be a no-show, a guard whose shift hadn't begun yet, or a guard who worked but never tapped check-in. Verify with the site lead before treating it as a no-show.
What does "ADMIN" on a method badge mean?
That time was entered by a supervisor via Regularize, not by the guard. If both check-in and check-out badges show ADMIN, the entire record was supervisor-entered. The Regularization section in the expanded detail tells you who and when.
Can I un-regularize a record?
Not directly — there's no "undo regularize" button. The only way to revert is to regularize again, putting the original time back. The audit trail will show your second regularization, not the original record. If a deeper revert is needed, contact Operations.
How many records does the page load at once?
10 per page (page size 10). Scroll to the bottom and the next 10 load automatically. You'll briefly see a small spinner. If pagination fails, you'll see "Unable to load more records." — pull-to-refresh.
What if a guard's name shows as "Unknown"?
The record's empName field was empty and the cached employee list couldn't resolve the empId. This is rare. Fix the underlying employee record (in the Employees admin section), or contact Operations.
Why is "View on Map" doing nothing when I tap it?
Your phone OS couldn't launch the maps URL — there's no maps app installed, or the URL launcher is blocked. Copy the address from the row, paste into a browser, and search there.
Can I edit the address or notes on a record?
No — Regularize only edits Check-in Time, Check-out Time, and Pay Rate. Addresses are auto-captured at check-in. Notes are entered by the guard or by payroll elsewhere. To change them, talk to Operations.
What's "Show Favorites Only"?
A toggle that limits records to employees you've marked as favorites. The favoriting itself happens in the Employees admin module, not here. Off by default. If you don't use favorites, ignore the toggle.
The "From / To" pickers default to today — can I change the default?
Not in the UI. The default is hard-coded to today's org date so that supervisors landing on the page see today's coverage immediately. If you want a different default, save your filters as a habit (e.g., always tap "This Week" first).
Can I export the records to CSV / Excel?
Not from this page. The Reports module has CSV export. Talk to Operations.
The "Regularized" chip is orange but the status pill is still green — is that a bug?
No, that's intentional. The status pill (Completed / In Progress / Not Started) is derived from the actual check-in / check-out timestamps, after regularization. The orange Regularized chip is a separate signal that an admin edited the record. They coexist on purpose.
What happens if I regularize a record from yesterday but payroll already ran for last week?
The record updates in Stafferin but payroll won't re-run automatically. You'll need to tell Payroll there's an adjustment. The audit trail (Regularized By, Regularized At) gives them the timestamp they need.
Why are the check-in / check-out times shown in 12-hour but I have to type 24-hour to regularize?
Display uses the org's locale formatter (which usually picks 12-hour with AM/PM). Input is fixed to 24-hour HH:mm because it's unambiguous and shorter. So you'll read "5:02 PM" on the card but type "17:02" in the regularize sheet.
Quick reference card
Print this section and keep it taped above your desk for the first week. After ten regularizations, you won't need it.
Regularization affects payroll. Always have a documented reason before editing a record. Your name and timestamp go into the audit trail forever.