{
  "name": "SeniorCRE Workforce Intelligence methodology",
  "publisher": "SeniorCRE, LLC",
  "url": "https://seniorcre.com/workforce-intelligence",
  "version": "2026-09-17",
  "lastReviewed": "September 17, 2026",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "evidencePosture": "Everything described here is built. It is not accompanied by published operator-production outcome data, and no savings figure or payback period is claimed. Industry ranges shown are published third-party ranges used to size exposure and to model a case from an operator’s own history.",
  "resources": [
    {
      "href": "/workforce-intelligence/best-practices",
      "title": "Retention analytics best practices",
      "question": "How do senior housing & care operators use analytics to improve retention?",
      "desc": "Metric definitions, a 13-week workforce forecast example, human-reviewed retention signals, data requirements, measurement plans, and downloadable methodology.",
      "url": "https://seniorcre.com/workforce-intelligence/best-practices"
    },
    {
      "href": "/workforce-intelligence/roi-calculator",
      "title": "Retention ROI calculator and model",
      "question": "How do you build a defensible retention ROI and agency-labor savings case?",
      "desc": "The interactive model plus the structure behind it: components, source authority for each line, frozen-baseline rules, attribution discipline, and the limitations that invalidate a result.",
      "url": "https://seniorcre.com/workforce-intelligence/roi-calculator"
    },
    {
      "href": "/workforce-intelligence/payroll-forecasting",
      "title": "Payroll forecasting: method, checklist, and variance review",
      "question": "How do you forecast payroll and labor cost for a senior housing portfolio?",
      "desc": "Seven forecast components held separately, five accuracy measures, a readiness checklist across data, model, controls, and governance, and the weekly variance review that keeps a 13-week forecast honest.",
      "url": "https://seniorcre.com/workforce-intelligence/payroll-forecasting"
    },
    {
      "href": "/workforce-intelligence/agency-labor-reduction",
      "title": "Agency labor reduction",
      "question": "How do operators reduce agency labor without losing coverage?",
      "desc": "Where premium labor originates, how invoices are reconciled against worked hours, and the internal-fill sequence that has to work before agency hours come down.",
      "url": "https://seniorcre.com/workforce-intelligence/agency-labor-reduction"
    },
    {
      "href": "/workforce-intelligence/benchmarks",
      "title": "Workforce benchmarks and the Senior Care Workforce Risk Benchmark",
      "question": "What workforce benchmarks exist and how are they measured?",
      "desc": "Frozen measures, system-derived collection, suppression rules, participation floor, published field dates, and stated sample limitations. No edition published yet.",
      "url": "https://seniorcre.com/workforce-intelligence/benchmarks"
    },
    {
      "href": "/workforce-intelligence/methodology",
      "title": "Measurement methodology",
      "question": "How are the workforce numbers defined and produced?",
      "desc": "Definitions, hours reconciliation, human-confirmed intervention, frozen baselines, and honest accuracy reporting, each with the test for whether it is actually in place.",
      "url": "https://seniorcre.com/workforce-intelligence/methodology"
    }
  ],
  "modelInputs": [
    {
      "signal": "Overtime density (OT hours / scheduled hours, rolling 4 weeks)",
      "source": "Payroll and time-and-attendance",
      "rationale": "Sustained OT concentration on the same employees is the most consistently observable precursor to voluntary exit in shift-based care work.",
      "cadence": "Daily"
    },
    {
      "signal": "Consecutive-day and clopen patterns",
      "source": "Scheduling system",
      "rationale": "Recovery-time compression predicts call-offs first and exits second.",
      "cadence": "Daily"
    },
    {
      "signal": "Shift-swap, no-show, and late-clock behavior",
      "source": "Scheduling + time clock",
      "rationale": "Disengagement usually appears as schedule friction weeks before a resignation.",
      "cadence": "Daily"
    },
    {
      "signal": "Earnings variance vs. the employee’s own trailing 8-week average",
      "source": "Payroll",
      "rationale": "Falling or erratic take-home pay is a stronger driver than absolute wage level for caregivers and aides.",
      "cadence": "Per pay period"
    },
    {
      "signal": "Acuity-weighted workload per worked hour",
      "source": "Clinical / care-plan data reconciled to census",
      "rationale": "Headcount can be flat while the work itself intensifies; unweighted ratios hide that entirely.",
      "cadence": "Daily"
    },
    {
      "signal": "Early-tenure isolation (days 1–90: orientation completion, preceptor continuity, unit consistency)",
      "source": "HRIS + scheduling",
      "rationale": "A large share of caregiver separations occur inside the first ninety days, where the causes are onboarding-operational rather than compensation.",
      "cadence": "Weekly"
    },
    {
      "signal": "Primary-caregiver continuity on assigned residents",
      "source": "Scheduling + assignment data",
      "rationale": "Continuity breakdown correlates with both resident-experience decline and caregiver exit.",
      "cadence": "Weekly"
    },
    {
      "signal": "Open-shift exposure on the employee’s unit and shift",
      "source": "Scheduling",
      "rationale": "Chronic vacancy on a unit transfers load to the people who stay, which is how one exit becomes three.",
      "cadence": "Daily"
    },
    {
      "signal": "Agency mix on the employee’s shift",
      "source": "Scheduling + agency invoices",
      "rationale": "High contract-labor mix changes both workload distribution and perceived pay equity on the floor.",
      "cadence": "Weekly"
    },
    {
      "signal": "Manager-span and supervisor-change events",
      "source": "HRIS",
      "rationale": "Supervisor change is a discrete, dateable risk event that is trivially available and frequently unused.",
      "cadence": "Event-driven"
    },
    {
      "signal": "Commute-band and internal transfer history",
      "source": "HRIS (coarse, non-address band)",
      "rationale": "Coarse distance bands carry signal without storing home address in the model.",
      "cadence": "Monthly"
    },
    {
      "signal": "Role-and-market wage position vs. BLS OEWS for the same role and MSA",
      "source": "BLS OEWS (public) reconciled to payroll",
      "rationale": "Public wage benchmarks make a pay-position finding defensible to an owner or lender.",
      "cadence": "Annual (BLS release) with quarterly reconciliation"
    }
  ],
  "excludedInputs": [
    {
      "input": "Race, ethnicity, national origin, sex, religion",
      "reason": "Protected characteristics are excluded from features and from any derived interaction term. Adverse-impact monitoring is run on outputs instead."
    },
    {
      "input": "Age and date of birth",
      "reason": "Excluded as a feature. Tenure is used instead, which is the operationally relevant variable."
    },
    {
      "input": "Pregnancy, disability, leave type, and any health information",
      "reason": "Excluded. Leave presence may be used only as an availability fact for scheduling, never as a risk feature."
    },
    {
      "input": "Union status and protected concerted activity",
      "reason": "Excluded categorically. Prediction must not touch protected activity."
    },
    {
      "input": "Home address, precise geolocation, and personal device data",
      "reason": "Excluded. Only coarse commute bands are used."
    },
    {
      "input": "Survey sentiment as a primary driver",
      "reason": "Not excluded, but never a standalone trigger: response bias and cadence make it unusable as the basis for an individual-level action."
    },
    {
      "input": "Immigration status and visa detail",
      "reason": "Excluded from the model entirely; handled only in compliance workflows."
    }
  ],
  "interventionWorkflow": [
    {
      "window": "Days 0–7 (confirm before you act)",
      "objective": "Establish that the score reflects reality on the floor before anyone is contacted.",
      "owner": "Community executive director with the regional workforce lead",
      "actions": [
        "Review the ranked flight-risk list with the driver contributions shown per employee — never a bare score.",
        "Mark each name confirmed, not-confirmed, or insufficient-information. Not-confirmed is a first-class outcome and is retained for model review.",
        "Suppress any name where the driver is a data artifact (missed punch batch, mis-mapped unit, agency worker in the employee table).",
        "Record the confirmation decision, the decider, and the timestamp in the audit trail."
      ],
      "exitCriteria": "Every high-risk name has a dated human decision. Nothing is auto-actioned."
    },
    {
      "window": "Days 1–30 (remove the operational cause)",
      "objective": "Act on the driver, not the score.",
      "owner": "Scheduler and unit manager, tracked by the ED",
      "actions": [
        "Overtime-density driver: rebalance the next two schedule cycles and cap consecutive days for the named employees.",
        "Earnings-variance driver: correct the schedule shortfall or the differential error before any conversation about pay.",
        "Early-tenure driver: assign a named preceptor, hold unit and shift constant for the remainder of the ninety days, and complete the day-14 and day-30 check-ins.",
        "Continuity driver: restore primary-caregiver assignment consistency on the affected residents.",
        "Log each action against the employee record with the driver it addresses."
      ],
      "exitCriteria": "Each confirmed name has at least one logged action mapped to a specific driver, with a due date."
    },
    {
      "window": "Days 31–60 (verify the driver actually moved)",
      "objective": "Check that the operational condition changed, independent of whether the employee stayed.",
      "owner": "Regional workforce lead",
      "actions": [
        "Re-measure the driver metric for each named employee against its value on the confirmation date.",
        "Escalate any name where the driver is unchanged after two schedule cycles — that is a scheduling-capacity problem, not a retention problem.",
        "Review the unit-level pattern: three or more confirmed names on one unit and shift is a staffing-structure finding, not twelve individual conversations.",
        "Feed suppression reasons back into the data-quality backlog."
      ],
      "exitCriteria": "Driver movement is recorded per name; unit-level findings are opened as structural items."
    },
    {
      "window": "Days 61–90 (attribute honestly)",
      "objective": "Close the loop at the ninety-day milestone with an attribution a CFO can defend.",
      "owner": "Finance owner with the regional workforce lead",
      "actions": [
        "Report retained / separated / transferred for every confirmed name, alongside the not-confirmed cohort as a comparison group.",
        "Attribute only where a driver moved and an action was logged; everything else is reported as unattributed.",
        "Publish the model’s precision at the operating threshold, plus the count of suppressed and not-confirmed names.",
        "Re-freeze the baseline for the next quarter and version the model."
      ],
      "exitCriteria": "A dated ninety-day cohort report exists with attributed, unattributed, and suppressed counts separated."
    }
  ],
  "metricDefinitions": [
    {
      "metric": "Annualized voluntary turnover rate",
      "formula": "(voluntary separations in period / average active headcount in period) × (12 / months in period)",
      "numeratorDenominator": "Numerator excludes involuntary terminations, RIFs, and internal transfers. Denominator is average active headcount, not period-end headcount.",
      "commonError": "Mixing voluntary and involuntary separations, or using period-end headcount, which inflates the rate in a shrinking portfolio."
    },
    {
      "metric": "90-day new-hire survival",
      "formula": "hires still active on day 90 / hires in the cohort",
      "numeratorDenominator": "Cohort is defined by hire date, not by month of report. Rehires within twelve months are flagged separately.",
      "commonError": "Reporting a rolling snapshot instead of a closed cohort, which makes the number move for reasons unrelated to retention."
    },
    {
      "metric": "Regrettable turnover",
      "formula": "voluntary separations flagged regrettable / total voluntary separations",
      "numeratorDenominator": "Regrettable requires a documented manager designation at separation, not a retrospective judgment.",
      "commonError": "Backfilling the flag after the fact, which makes the metric unauditable."
    },
    {
      "metric": "Agency share of worked hours",
      "formula": "agency worked hours / (agency worked hours + employee worked hours)",
      "numeratorDenominator": "Agency hours come from invoices reconciled to the schedule, not from the schedule alone.",
      "commonError": "Using scheduled rather than invoiced agency hours, which understates share whenever cancellations are billed."
    },
    {
      "metric": "Overtime density",
      "formula": "OT hours / total worked hours, by role and shift",
      "numeratorDenominator": "Computed at role-and-shift level; portfolio averages hide the concentration that drives exits.",
      "commonError": "Reporting a single portfolio OT percentage."
    },
    {
      "metric": "Vacancy duration (time-to-fill)",
      "formula": "median days from requisition open to first worked shift",
      "numeratorDenominator": "Ends at first worked shift, not at offer acceptance.",
      "commonError": "Measuring to offer acceptance, which omits the no-show and orientation-attrition window."
    },
    {
      "metric": "Primary-caregiver continuity",
      "formula": "resident-days covered by the top-two assigned caregivers / total resident-days",
      "numeratorDenominator": "Measured per resident, then rolled up. Agency coverage counts against continuity.",
      "commonError": "Measuring at the unit level, which averages away the residents with the worst continuity."
    },
    {
      "metric": "Cost-to-fill an open shift",
      "formula": "incremental premium (agency rate differential + OT premium + guarantee + travel/orientation) for one covered shift",
      "numeratorDenominator": "Incremental cost only — base hours the operator would have paid regardless are excluded.",
      "commonError": "Charging the full agency invoice as incremental, which overstates avoidable cost."
    },
    {
      "metric": "Fully loaded cost per separation",
      "formula": "separation + vacancy coverage premium + recruiting + onboarding + ramp productivity loss",
      "numeratorDenominator": "Built from the operator’s own payroll, invoice, and recruiting cost lines; industry ranges are used only to sanity-check.",
      "commonError": "Adopting a published per-separation figure as if it were the operator’s own cost."
    }
  ],
  "roiFormulas": [
    {
      "name": "Avoided-separation value",
      "expression": "AS = (B_sep − M_sep) × C_sep_loaded",
      "variables": [
        "B_sep = separations in the frozen baseline period, same roles, same communities, seasonally aligned",
        "M_sep = separations in the measured period",
        "C_sep_loaded = fully loaded cost per separation, built from the operator’s own cost lines"
      ],
      "guardrail": "Only counted where a driver moved and an action was logged. Report the rest as unattributed."
    },
    {
      "name": "Avoided agency premium",
      "expression": "AA = Σ (H_agency_baseline − H_agency_measured) × (R_agency − R_internal_loaded)",
      "variables": [
        "H = invoiced agency hours by role and shift",
        "R_agency = effective invoiced agency rate including guarantees and cancellations",
        "R_internal_loaded = internal wage plus burden for the same role and shift"
      ],
      "guardrail": "Rate differential only. Hours the operator would have paid internally are not savings."
    },
    {
      "name": "Avoided overtime premium",
      "expression": "AO = (H_ot_baseline − H_ot_measured) × 0.5 × R_base_loaded",
      "variables": [
        "H_ot = overtime hours by role and shift",
        "R_base_loaded = base wage plus burden"
      ],
      "guardrail": "Only the 0.5 premium portion counts. Counting the full OT hour double-counts base labor."
    },
    {
      "name": "Census-protection value (reported separately, never blended)",
      "expression": "CP = Δ occupied units × net revenue per unit per month × months",
      "variables": [
        "Δ occupied units attributable to staffing capacity, evidenced by a documented admission hold released"
      ],
      "guardrail": "Reported as a separate, clearly-labelled scenario line. Never added into the retention ROI total without a documented hold."
    },
    {
      "name": "Net program value",
      "expression": "NPV_program = (AS + AA + AO) − (platform cost + internal effort cost)",
      "variables": [
        "internal effort cost = loaded hours spent by EDs, schedulers, and finance on the workflow"
      ],
      "guardrail": "Internal effort is never excluded. A model that omits operator labor is not a model an owner will accept."
    }
  ],
  "sensitivityTreatment": [
    {
      "variable": "Fully loaded cost per separation",
      "treatment": "Run low / base / high from the operator’s own cost lines. Publish all three; lead with low."
    },
    {
      "variable": "Attribution share",
      "treatment": "Default to attributing only the confirmed-and-actioned cohort. Show a 0% attribution floor case so the downside is visible."
    },
    {
      "variable": "Agency rate differential",
      "treatment": "Use the trailing three months of invoices, not the contracted rate card."
    },
    {
      "variable": "Seasonality",
      "treatment": "Align the baseline and measured periods to the same calendar quarters, or state the adjustment."
    },
    {
      "variable": "Portfolio change",
      "treatment": "Exclude acquisitions, dispositions, and units in lease-up from both periods."
    }
  ],
  "limitations": [
    {
      "limitation": "No operator-production workflow is published as of September 29, 2026.",
      "consequence": "Every capability statement is at the built level. Ask for a back-test against your own history rather than a reference outcome."
    },
    {
      "limitation": "Prediction cannot establish causation.",
      "consequence": "A flight-risk score identifies conditions that precede exits. It does not prove an intervention caused a retention. Attribution is reported, not asserted."
    },
    {
      "limitation": "Model quality is bounded by the worst input feed.",
      "consequence": "Unreconciled agency invoices, missing punches, or mis-mapped units degrade scores faster than any modeling choice improves them."
    },
    {
      "limitation": "Small communities produce unstable rates.",
      "consequence": "Below roughly 40 FTEs in a role, quarterly turnover rates swing on single events. Use counts and rolling twelve-month windows instead."
    },
    {
      "limitation": "Cold-start requires history.",
      "consequence": "Roughly twelve to eighteen months of separation history per role family is needed before scores are worth acting on; before that the workflow still runs on driver metrics alone."
    },
    {
      "limitation": "Labor markets shift underneath the model.",
      "consequence": "Wage compression, a new competitor opening, or a rate-card change invalidates a stale baseline. Re-freeze quarterly."
    },
    {
      "limitation": "Published industry cost ranges are not operator results.",
      "consequence": "They size exposure. They are never presented as savings achieved, and no payback period is published."
    },
    {
      "limitation": "Adverse-impact risk is real and must be monitored.",
      "consequence": "Protected characteristics are excluded as inputs, but outputs are still monitored for disparate distribution, and monitoring results are part of the audit record."
    }
  ],
  "caseStudyFormat": [
    {
      "section": "1. Operator profile",
      "requirement": "Portfolio size, care types, states, bed/unit count, and payer mix. No named operator without written consent."
    },
    {
      "section": "2. Frozen baseline",
      "requirement": "Named period, exact metric definitions used, and the data sources reconciled. Baseline is frozen before the first intervention and never restated."
    },
    {
      "section": "3. Data readiness at start",
      "requirement": "Which historical exports, representative records, sandbox feeds, or manual inputs were used, and which reconciliation exceptions were open at the start."
    },
    {
      "section": "4. Intervention log",
      "requirement": "Confirmed names, drivers addressed, actions logged, and dates. Includes suppressed and not-confirmed counts."
    },
    {
      "section": "5. Measured period result",
      "requirement": "The same metrics, same definitions, seasonally aligned, with attributed / unattributed / suppressed reported separately."
    },
    {
      "section": "6. Model performance",
      "requirement": "Precision and recall at the operating threshold, model version, and drift notes for the period."
    },
    {
      "section": "7. Economics",
      "requirement": "ROI formulas applied with the operator’s own cost lines, low/base/high sensitivity, and internal effort cost included."
    },
    {
      "section": "8. Confounders and limitations",
      "requirement": "Wage actions, market events, acquisitions, leadership changes, and anything else that could explain the result."
    },
    {
      "section": "9. Sources and verification",
      "requirement": "Public sources cited with access dates. Operator-supplied figures marked as operator-reported and reviewed by a named operator signatory."
    },
    {
      "section": "10. Evidence class",
      "requirement": "Every figure tagged: A public primary source, B vendor public materials, C operator-reported, D design target not yet operator-proven."
    }
  ],
  "sources": [
    {
      "label": "BLS Occupational Employment and Wage Statistics (OEWS)",
      "url": "https://www.bls.gov/oes/",
      "use": "Wage position by role, state, and MSA."
    },
    {
      "label": "BLS Job Openings and Labor Turnover Survey (JOLTS)",
      "url": "https://www.bls.gov/jlt/",
      "use": "Sector-level quits and openings context for the baseline period."
    },
    {
      "label": "CMS Payroll-Based Journal (PBJ) staffing data",
      "url": "https://data.cms.gov/provider-data/",
      "use": "Reported nurse-staffing hours and turnover measures for skilled nursing."
    },
    {
      "label": "CMS Care Compare / Five-Star staffing measures",
      "url": "https://www.medicare.gov/care-compare/",
      "use": "Publicly reported staffing and turnover measures used for peer comparison."
    },
    {
      "label": "BLS Current Employment Statistics — healthcare and residential care",
      "url": "https://www.bls.gov/ces/",
      "use": "Employment trend context for the market in the measured period."
    }
  ]
}
