Urgent Cover
Operations controller sign in
Guard Cover Dispatcher
0 guards

Rota — week of

Double-click an empty cell to add a shift there. ⚠ = officer double-booked · 🔴 = SIA licence expired for that date.

Payroll

Choose a period and Generate to derive a paysheet from rostered shifts. Pay = hours × rate (shift rate → officer rate → £12 fallback). Overnight shifts crossing midnight are handled.

Saved pay runs

Loading…

Finance & Invoicing

Pick a billing period and Generate. One draft invoice is raised per client from delivered shifts (hours × the client's active contract bill rate), with 20% VAT.

Invoices

Loading…

Reports

Loading…

Vetting & screening (BS7858)

Loading…

Patrols & guard tours

Loading…

Daily Occurrence Book

Loading…

Administration

Loading…

Documents

Loading…

Welfare checks

Loading…

Leave & absence

Loading…

Client service requests

Loading…

Timesheets

Hours are derived from clock-in / clock-out pairs. Open shifts show as in progress. Estimated cost uses each shift's rate.

Live operations

Status is time-based for now (Upcoming / On now / Ended / Unassigned). Verified clock-in and “missed clock-in” arrive with the attendance module.

⚠ Reminders / Compliance — right to work

Security licences — SIA

Operational alerts

Loading…

Guard coverage map — click an area to see its guards

Click an area on the map above to list the guards based there.

Top areas by guard count

Status breakdown

Quick actions

Name Postcode Area Role Phone Status Rating Tags

UK guard density heat map

few more most · circle size & colour = number of guards in that postcode area · click a bubble to filter

Areas ranked by guard count

⚡ Urgent shift cover request

1 · Target guards

2 · Message

Automated bulk send (Twilio SMS + WhatsApp Business + email API) is wired as a stub — flip DEMO_MODE off once your backend keys are set (see the production plan). Right now each channel opens the pre-filled message per guard so you can send in one tap.

3 · Send

Import guards (CSV)

Columns accepted (header row, any order): name, email, phone, postcode, role, worker, car, sia, sia_expiry, ni, dob, share, rtw_expiry, tags, status, rating, site, notes. Rating 1–10; car = Yes/No; dates = YYYY-MM-DD. Tags separated by ; or |. Rows whose mobile or NI number already exists are skipped (both are unique). Photos aren't included in CSV. Handles tens of thousands of rows.
📁 Click to choose a CSV file, or drag & drop here
0 logged actions — every add, edit, delete, import, bulk change, dispatch and shift assignment is recorded here with who and when.
WhenWhoActionDetail