Every day

Presence and location

Presence comes from the chat client people already run; there is nothing to install on a laptop. Location is classified on the host from the network, only with consent, and the person can always see their own record.

Presence from the chat client

  • Every five minutes the chat server’s presence for each active person is sampled: online, away, offline, and whether the client reports the person as currently active.
  • Active versus idle uses that flag, so a client parked on green with nobody at the keyboard counts as idle.
  • The employee scoreboard shows a work-window presence pie; the live snapshot on the drawer refreshes every 30 seconds while it is open.
  • Organisation-wide online ratios typically run between 1% and 15%, so a low ratio on its own is context, never an accusation. The low-online signal can only exonerate on its own; it never raises a concern without corroboration.

Availability pings

Optional and off by default. When a team opts in, the bot occasionally sends a short question during working hours and any natural reply within the window confirms presence. Questions rotate so they never read identical twice in a row; there is no code to echo.

  • Default cadence roughly every two hours with a ten-minute window, about four pings in an eight-hour day; misses raise the odds of another ping that day.
  • Misses escalate in a day: a soft note, a formal warning, then a notice to the manager room on the third.
  • Never on days off, before sign-in, after sign-off or on leave. Replies faster than a human could type are not counted; repeated automated-looking replies are flagged.
  • A presence reply is always treated as a presence answer first, even when the bot has another question open for you.
  • In the score, answered pings feed the Integrity pillar; a late reply earns half credit; weeks with too few pings drop the pillar.
presence.pingpong_min_interval_min
presence.pingpong_response_window_s
presence.pingpong_max_per_day

Device and network integrity

The policy is detect, inform and flag; a confirmation is never rejected. A reply from a phone still counts, and the person gets a once-a-day reminder that checks are expected from the workstation. Repeated mobile confirmations (three in 14 days by default) are surfaced to oversight once a week. Per team, mobile replies can be weighted lower.

presence.mobile_detect_enabled
presence.mobile_flag_threshold
scoring.mobile_response_weight

Location, consented and offline

Sign-in networks are classified as office, home or on the go. Structural checks need no database at all; country, city and carrier come from a local IP database read on the host, so no employee address is ever sent to an external service. The person’s own tag (@office, @home) always wins over the guess.

  • Consent: a versioned IP-tracking agreement can be required per person; a global switch (on by default so the location mix works out of the box) lets an admin enforce per-person consent instead.
  • Anomalies such as a sign-in from another country or far from the usual city are shown to admins only, alongside the reason.
  • The hours-weighted location mix appears in the admin copy of reports and in the employee drawer; the unclassified bucket is labelled Other.
  • Refresh the databases weekly with the bundled script; stale data reduces accuracy but never breaks anything.
GEO_HOME_COUNTRY=DE
GEO_HOME_COORDS=52.52,13.40
scripts/update_geoip.sh

Day timeline

Managers can open one day of evidence for a person in that person’s own timezone: sign-in and sign-off, message counts per half hour (never message text), presence transitions, calls and anything the bot enforced. Network addresses appear only for roles already allowed to see them; everyone else is told they are hidden rather than shown an incomplete day.

Work health

An admin-only card shows an overwork risk from long days, days off worked, late finishes and runs without a break, with the evidence beside it. Leave taken lowers the score. It never feeds the efficiency score: someone working themselves into the ground would otherwise score better for it.

workhealth.long_day_hours
workhealth.no_break_days
workhealth.burnout_watch_at
workhealth.burnout_high_at