--- id: staffing-risk name: Staffing Risk description: Identify open roles that will not fill on their own, and say why. category: workforce pages: - positions - control-center status: active version: 1 triggers: - staffing risk - staffing gap # `*` stands for anything in between, so one line covers "roles at risk", # "roles that are at risk" and "roles most at risk" without listing each. - roles*at risk - positions*at risk - understaffed owliver: enabled: true suggestions: - label: Which roles are at risk? capability: list - label: Summarize staffing risk capability: summary capabilities: - summary - list - table - insight responses: summary: title: Staffing risk source: positions.risk list: title: Roles at risk source: positions.risk limit: 5 table: title: Roles at risk source: positions.risk insight: title: Biggest staffing risk source: positions.risk --- # Staffing Risk ## Purpose - Name the open roles that are not going to fill without intervention. - Say which of four distinct problems each one has, because each has a different fix. - Rank them so the reader knows which to deal with first. ## Capabilities - Count the open roles currently at risk. - List those roles, worst first, with the reason for each. - Identify the single role most in need of attention. ## Data Reads `positions.risk`, which joins open `JobPosting` records to their `JobApplication` records through the same `buildPosition` reading the Positions page renders from. No separate calculation, so a risk reported here and a health badge shown there cannot disagree. ## Analysis A role is at risk when any of the following is true. They are kept apart rather than combined into a score, because the score would hide the only part that tells the reader what to do: 1. **No applicants yet** — nobody has applied. Needs sourcing. 2. **No candidate scoring 70 or above** — people applied, none are viable. Needs the requirements or the pay revisiting. 3. **Three or more unscreened** — a backlog nobody has looked at. Needs screening. 4. **Someone awaiting a decision** — a strong candidate has been screened and not moved on. Needs a person to decide. Ranking weights an empty pipeline above a busy one that needs attention, since an empty pipeline takes longest to recover. ## Output A count of roles at risk, then a row per role naming its department and its reasons. A role with no problems is not listed. ## Limitations - Only open roles are considered. A paused or closed role is not at risk. - "Viable" means an AI score of 70 or above. An unscored candidate is not counted as viable, so a role whose applicants nobody has screened will report both an unscreened backlog and no viable candidate — those are two true statements about the same cause. - This reads the pipeline, not the roster. It does not know how many people a role needs, because no position in this workspace states a headcount.