Inspiration

Emergency department triage prioritizes medical urgency. It does not measure lived burden.

Two patients with the same CTAS level and the same 90-minute wait can experience that wait completely differently. A patient with chronic pain, limited mobility, sensory sensitivity, cognitive strain, or a language barrier experiences compounded distress that traditional wait metrics do not capture.

CIHI reports that approximately 25–30% of patients who leave without being seen (LWBS) do so because the environment became unbearable, not because their medical urgency changed.

That gap is invisible in current systems.

We built FairQ to make accessibility-adjusted waiting burden measurable and actionable without replacing triage or interfering with clinical decision making.


What We Learned

Burden is nonlinear

Waiting distress escalates exponentially rather than linearly. Small increases in wait time can produce disproportionately large increases in distress for high-vulnerability patients.

Accessibility data becomes operational when modeled

When mobility, pain, sensory, cognitive, language, and social isolation flags are structured into a vulnerability multiplier, staff can intervene before disengagement occurs.

Real-time feedback changes prioritization

When burden and LWBS risk update instantly after a check-in, staff can shift from reactive responses to preventive action.


How We Built It

FairQ is a full-stack real-time system built with:

  • NestJS backend using Node.js and TypeScript
  • Angular frontend
  • Modular burden modeling engine
  • Real-time recomputation pipeline

We structured development into four components:

Component Focus
Math Engine Nonlinear hazard and burden modeling
API and State Real-time updates and patient state
Patient UI Accessibility-first intake and check-in
Staff and Admin UI Operational dashboard and equity view

The Burden Model

Each patient receives a Burden Index: $$ B \in [0,100] $$ $$ B = \operatorname{clip}\left(\left[S(t) + W(t) + \Delta_{\text{leave}} + \Delta_{\text{post87}}\right]\cdot(1+V),\,0,\,100\right) $$

Where:

  • ( S(t) ) models nonlinear distress
  • ( W(t) ) anchors wait impact to CIHI median stay
  • ( \Delta_{\text{leave}} ) escalates risk when intent to leave is signaled
  • ( \Delta_{\text{post87}} ) models post-median escalation
  • ( V ) is the vulnerability multiplier

Nonlinear Hazard Scaling

$$ H_0(t,c) = 0.001\,e^{0.02t}\,(6-c) $$

Where $$ c \in {1,2,3,4,5} $$ represents CTAS level.

This ensures higher urgency increases hazard growth without replacing triage.


CIHI-Anchored Wait Impact

Using Alberta NACRS median stay of 238 minutes:

$$ W(t) = \min\left(\frac{t}{238}\cdot 60 + 8\,\mathbf{1}_{t>90},\,75\right) $$

This grounds the model in public Canadian health data.


Vulnerability Multiplier

$$ V = \sum_i w_i f_i $$

Weights informed by Statistics Canada disability impact data:

  • Chronic pain: (0.25)
  • Mobility: (0.20)
  • Cognitive: (0.15)
  • Sensory: (0.15)
  • Language barrier: (0.10)
  • No support person: (0.10)

LWBS Escalation

$$ \Delta_{\text{leave}} = 15\cdot w_{\text{env}} $$

Where:

$$ w_{\text{env}} = \frac{\text{LWBS}_{\text{facility}}}{0.05} $$

This normalizes risk around Alberta’s 5% LWBS baseline.


Staff Dashboard

Staff see:

  • Real-time burden index
  • LWBS probability
  • Accessibility flags
  • Equity gap versus baseline
  • Suggested actions

Patients are prioritized using:

$$ P = 0.4\,\text{CTAS} + 0.4\,B(t) + 0.2\,V $$

Each check-in triggers full curve recomputation in under 50 milliseconds, enabling live updates.


Admin Dashboard

The admin interface provides:

  • Burden distribution
  • Equity gap by accessibility category
  • Simulation of facility-wide wait reductions

It does not override triage or clinical decisions.


Challenges

Calibrating nonlinear growth

Exponential hazard functions risk saturating too early. We tuned parameters against CIHI median benchmarks to maintain realistic escalation behavior.

Stacked escalation control

Vulnerability scaling, LWBS escalation, and post-median adjustment could compound excessively. We bounded escalation terms and clipped the final score to ensure stability.

Real-time performance

Each check-in recomputes burden curves across multiple time points per patient. Achieving sub-50 millisecond updates required minimizing memory allocation and redundant computation.

Designing for accessibility

The intake interface had to be usable one-handed, with large tap targets and minimal cognitive load, and completable in under 90 seconds. Building an accessibility tool that is itself accessible was a core design constraint.


Accomplishments That We Are Proud Of

  • Built a transparent, mathematically grounded equity model anchored in public health data
  • Delivered a working real-time full-stack system within a hackathon timeframe
  • Made accessibility measurable without interfering with medical workflows
  • Created an interpretable burden engine instead of a black-box model

What’s Next

We plan to:

  • Integrate real-time provincial wait time APIs
  • Validate vulnerability weights with clinicians and patient advisors
  • Expand multi-hospital analytics
  • Incorporate historical ED data for calibration
  • Conduct usability testing with patients with lived accessibility needs

Closing

FairQ does not replace triage.

It adds an equity layer to make invisible burden visible.

Built With

Share this project:

Updates