ROKRescue Operator Knowledge

How it works

How recognition works

How training activity turns into points, streaks, badges and levels — what earns points, who decides a badge has been earned, and why reading never pays.

Recognition is ROK's optional layer of points, streaks, badges and levels on top of the training operators already do. By the end of this page you will know what earns what, who decides that a badge has been earned, and why a phone can never award a badge to itself.

How activity becomes points and badgesOperator appreplays its offline queueActivity rowsquiz, completion, ack, readDirect award writerefused: no write policyan app awarding itselfPoints ledgerquiz once · never a readStreakbonus on real-work daysevaluate_badges()the database decidesstreak bonusTotals + levelrecomputed each timeBadge awardbanks its pointspointsan award re-checks prerequisites and capstonesPoints and automatic awards are skipped while recognition is off; a badge granted by hand is still recorded.Opening content keeps a streak alive but earns nothing. Streak, time-with-agency and reading badges are checked once a day.
The app records activity. Everything after that — points, streaks, badges and the level — happens in the database.

Off until your agency switches it on

Recognition is opt-in per agency. Until someone who holds Manage settings turns it on under Settings → Recognition (opens the admin console), no points are banked for activity and nothing is awarded automatically. Badges, tracks and the level ladder can be built first and switched on when they are ready. Turning recognition off later deletes nothing.

One thing still works while it is off: a badge granted by hand on Awards (opens the admin console) is recorded with its points, and the member sees it once recognition is on. Everything is counted per agency — someone in two agencies has two separate sets of points, badges and levels (details).

What earns points

Each agency sets what an activity is worth. Points go into an append-only ledger: a revoked badge adds a negative entry rather than rewriting history, and changing a value applies from then on without recalculating anything already banked.

ActivityDefaultPaid
Passing a quiz25Once per quiz — only the first pass. Retakes earn nothing.
Completing an item10Once per item.
Signing an acknowledgment5Once for each version of the item you sign.
Extending a streak5At most once a day, and only on a day of real work.
A badgeSet on the badgeWhen it is awarded; taken back if it is revoked.

Opening content is deliberately not on the list. Paying per view would reward skimming safety material rather than learning it.

Streaks

A streak counts consecutive days with any activity — a quiz attempt (passed or not), a completion, an acknowledgment, or opening an item. Days are UTC days. Miss one and the streak starts again; a daily job resets the streaks of people who have stopped syncing.

The Extending a streak bonus is stricter. It is banked once per UTC day, on a day the streak is at least two days long, and only when that day includes real work: a passed quiz, a completion or an acknowledgment. Opening content, or a failed attempt, keeps the streak alive but earns nothing.

Badges: the database decides

A badge is a list of steps plus a rule for combining them (all, any one, or some). The app only records what the operator did; the awards table accepts writes only from functions inside the database.

When an activity row arrives — a quiz attempt, a completion, an acknowledgment — a trigger on that table runs the awarding engine, private.evaluate_badges(), for that member. It checks every badge your agency can award whose steps that activity could satisfy, and awards the ones now met. The offline queue replays into those same tables, so a quiz passed in a black spot earns its badge when the phone syncs, through the same check (how the queue works).

An award is an event too. It re-checks the badges that depend on it — a Hold another badge prerequisite, or a track's capstone — so one quiz can complete a chain. Steps with no activity to hang a trigger on — streaks, time with the agency, reading — are checked once a day for members active in the last 45 days. Re-earning a lapsed badge needs fresh evidence recorded after the previous award, so a recertification badge cannot re-issue itself from old history.

Awarding by hand (Awards) does not check the steps. A member's level is a rung on a points ladder that can also require badges, recomputed whenever their points or badges change (how levels gate).

The leaderboard

Off by default. When an agency turns it on — By group or Whole agency — it appears as a card on each member's badge wall (Account settings → Badges), ranked by points for all time, the last 30 days or the last 7 days. It lists the top 100; members with no points in the period are not ranked. The operator app does not show badges, points or the leaderboard yet.

  • Hide me takes a member off every board; the database accepts that change from them alone.
  • With Names hidden, everyone except the viewer appears as "Operator" and four characters, with no photo.
  • The database decides who appears, and returns nothing while recognition or the leaderboard is off.

What this means in practice

  • "I passed it — where is my badge?" It arrives when the attempt reaches the server. Badges built on streaks, time with the agency or reading arrive at the next daily check.
  • Changing a badge re-checks nobody on the spot. Members are evaluated against the new steps at their next qualifying activity.
  • Revoking costs points and can cost a level. The points are taken back and the level is worked out again immediately. Who can award, revoke or change settings is checked by the database, whatever a screen shows — see Badges.

See also

Last reviewed