Problem State Protocols
Understanding the Core Componentsβ
To grasp problem state protocols, it's essential to understand four fundamental concepts: Problems, Status, States, and Interventions.
What is a Problem?β
A Problem represents a specific health concern or condition that requires clinical attention. For example:
- Depression Symptoms
- Eye Health Concerns
- Diabetes Management
- Anxiety Disorders
- Housing
- Food Insecurity
- Financial Insecurity
Each problem follows a structured lifecycle. Many are managed through our protocol system, while others may still use manual or legacy processes as protocols are gradually rolled out.
Problem Status (Goal-Level Tracking)β
Problem Status tracks the high-level progress toward resolving the entire problem:
enum ProblemGoalStatus {
NEW = 'new', // Problem has been identified
IN_PROGRESS = 'in_progress', // Problem is actively being addressed
COMPLETED = 'completed', // Problem has been successfully resolved
HOLD = 'hold', // Problem is temporarily paused and not currently being addressed
CANCELLED = 'cancelled', // Problem has been discontinued or withdrawn
}
Status Flow Example:
const problemGoalStatusFlow = {
'new' β 'in_progress',
'in_progress' β 'completed',
'in_progress' β 'hold',
'in_progress' β 'cancelled',
'hold' β 'in_progress'
};
Problem State (Granular Clinical Tracking)β
Problem State provides detailed, condition-specific progression tracking. Unlike status transitions, state transitions are not necessarily linearβsome problems follow a straightforward, step-by-step progression, while others allow movement in multiple directions based on patient progress, setbacks, or changing clinical conditions.
β οΈ Disclaimer: The following examples illustrate possible problem states and transitions for clarity. Actual state names and transitions may differ from those implemented in the codebase.
Depression Example
- Possible states:
assess
,at_risk
,moderate
,severe
,severe_si_risk
,remission_recent
,remission_maintained
- Non-linear transitions: A patient can move from
at_risk
βsevere
(worsening),severe
βremission_recent
(improvement), orremission_recent
βmoderate
(relapse). Special escalation tosevere_si_risk
can occur from any state when suicide risk is identified. - Severity levels:
severe
andsevere_si_risk
are marked asacute
severityremission_maintained
is marked asstable
severity
- Key triggers:
- PHQ-9 scores determine most transitions
- Suicide risk assessment immediately escalates to
severe_si_risk
- Two consecutive PHQ-9 scores under 10 transition from
remission_recent
toremission_maintained
- View protocol source code
Eye Health Example
- Possible states:
Assess
,Completed
- Simple flow:
Assess
βCompleted
- View protocol source code
Diabetes Example
- Possible states:
Assess
,Controlled
,Uncontrolled
,Stable
- Patients can cycle between:
Controlled
βUncontrolled
- View protocol source code
Note: The protocol system evaluates current patient data and current state to determine the appropriate state transition.
Interventions: The Clinical Actionsβ
Interventions are specific, actionable steps performed by care team membersβincluding Lead Care Managers (LCMs), Registered Nurses (RNs), Nurse Practitioners (NPs), and othersβto address problems:
β‘οΈ Learn more about Interventions
Depression Interventions:β
- Complete Forms: PHQ9
- Coordinate Pair Team Appointment
Eye Health Interventions:β
- Coordinate Eye Care Appointment
Problem State Protocols: Automation & Intelligenceβ
Protocols are decision-support systems that automate many state transitions, but also support manual transitions when needed. For some protocols, manual transitions are required to ensure clinical judgment and flexibility in patient care.
- Analyze the current problem state
- Determine appropriate interventions
- Automatically trigger necessary actions
- Guide LCMs through evidence-based care paths
Note: The in_progress
status is broad and covers many different steps. Inside in_progress
, we use more detailed problem states to track exactly what is happening with the patient. This gives us a clearer and more accurate picture of their progress.
By implementing problem state protocols, LCMs can focus on patient care rather than administrative decision-making, while ensuring consistent, high-quality treatment approaches across all patients and conditions.
Technical Implementationβ
We are implementing problem state protocols to define how each problem should behave throughout its lifecycle. These protocols determine:
- The set of possible states for a problem
- Which interventions are linked to each state
- How transitions between states occur
π§ Main Componentsβ
π Protocol Definition Schemaβ
Defines the structure of a protocol, including its states and transitions.
β‘οΈ Read more
π§ Protocol Definitionβ
Responsible for evaluating a problem goal's state by iterating through transition rules.
β‘οΈ View code
Key behavior:
- Calls the fetcher to get the current values and applies the operator and value defined in the protocol.
- If any rule evaluates truthfuly, it will return the new state in the response object.
- The order of the transitions is important, since they will be evaluated from top to bottom, and will return the state of the first one that evaluates to true.
- Returns a
EvaluationResults::EvaluationResult
.
βοΈ Problem State Processorβ
Evaluates and updates the problem's state using the protocol definition.
Also handles creation of interventions and other side effects.
β‘οΈ Read more
π Data Fetcherβ
Fetches data from ARC used in state evaluations to decide if it should transition states.
β‘οΈ Read more
π‘οΈ Guardianβ
Determines if a problem should be evaluated.
β‘οΈ View code
Conditions:
:problem_states
feature flag is enabled- The problem goal already has a protocol associated (if it was already evaluated, it will keep being evaluated even if patient in not enabled pod or problem no longer supported)
- Patient is in an enabled care pod for the problem: (
APP_CONFIG.ProblemStates.ProtocolRolloutConfig
)
π§ͺ Frontend Feature Flagβ
The UI uses its own feature flag: :problem_states_ui
, enabled per user email.
π Collector (Instrumentation)β
Responsible for observability over the protocol executions.
β‘οΈ View code
Tracked data includes:
- Trigger source
- Manual transitions
- Evaluation results
- Intervention created
- Intervention updated
- Transition and condition evaluation
- Callback executions
π§ Userflowβ
We use Userflow to help care team members understand the current state and next steps.
- Tooltips are placed using CSS selectors and element IDs
- All relevant element ids should use the
userflow-
prefix - If a flow needs to target a new element, add the corresponding ID
π Added id example
π οΈ Creating or Updating a Protocolβ
Complete guide for setting up new protocols or updating existing ones.
β‘οΈ Read more