feature: Console Replay Simulator

This commit is contained in:
voltsrage
2026-06-19 15:22:14 +08:00
parent 835311dffc
commit abc781c9c0
50 changed files with 11158 additions and 612 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,985 @@
{
"scenario": {
"id": "hypothermia-elderly-01",
"name": "Elderly Hypothermia with Bradycardia \u2014 Rewarming Recovery",
"description": "81-year-old female found outdoors in winter with core temp 33.5\u00b0C on arrival. Presents with hypothermia-induced bradycardia, hypotension, and altered mentation. Gradual active rewarming over 4 hours with warm IV fluids and warming blankets leads to full recovery of vitals and consciousness.",
"durationMinutes": 240,
"tags": [
"hypothermia",
"bradycardia",
"elderly",
"rewarming",
"recovery",
"emergency",
"winter"
]
},
"patient": {
"firstName": "Margaret",
"lastName": "Thornton",
"dateOfBirth": "1945-01-14",
"gender": "Female"
},
"encounter": {
"department": "Emergency",
"encounterType": "Emergency",
"attendingPhysician": "Dr. Elena Vasquez",
"roomBed": "ED-03A",
"admissionReason": "Found unresponsive outdoors in winter, hypothermia, bradycardia"
},
"events": [
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 48,
"unit": "bpm",
"source": "Device"
},
"note": "Arrival \u2014 severe hypothermia, bradycardia, altered mentation. NEWS2=14 (EMERGENCY)"
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 10,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 96,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 54,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 33.5,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "SPO2",
"value": 93,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 0,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
},
"note": "Nasal cannula 2L/min started on arrival"
},
{
"offsetMinutes": 0,
"type": "order",
"data": {
"orderType": "Procedure",
"description": "Active warming protocol \u2014 forced-air warming blanket",
"orderedBy": "Dr. Elena Vasquez"
}
},
{
"offsetMinutes": 5,
"type": "order_result",
"data": {
"orderDescription": "Active warming protocol \u2014 forced-air warming blanket",
"resultSummary": "Bair Hugger warming blanket applied, set to 43\u00b0C"
},
"note": "Warming blanket order initiated"
},
{
"offsetMinutes": 8,
"type": "medication",
"data": {
"drugName": "sodium chloride 0.9% (warmed to 40\u00b0C)",
"dose": 1000,
"doseUnit": "mL",
"route": "IV",
"administeredBy": "nurse-rn-2"
},
"note": "Warm IV fluids \u2014 first bolus for active core rewarming and volume support"
},
{
"offsetMinutes": 15,
"type": "observation",
"data": {
"code": "GLUCOSE_MG_DL",
"value": 74,
"unit": "mg/dL",
"source": "Lab"
},
"note": "Initial labs \u2014 glucose low-normal, potassium borderline high (hypothermia shifts K+ extracellularly)"
},
{
"offsetMinutes": 15,
"type": "observation",
"data": {
"code": "POTASSIUM_MEQ_L",
"value": 5.4,
"unit": "mEq/L",
"source": "Lab"
}
},
{
"offsetMinutes": 15,
"type": "observation",
"data": {
"code": "LACTATE_MMOL_L",
"value": 2.3,
"unit": "mmol/L",
"source": "Lab"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 47,
"unit": "bpm",
"source": "Device"
},
"note": "Minimal change \u2014 rewarming just started. NEWS2=14 (EMERGENCY)"
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 10,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 94,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 53,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 33.7,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "SPO2",
"value": 93,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 20,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 46,
"unit": "bpm",
"source": "Device"
},
"note": "Slow rewarming \u2014 temp barely above 34\u00b0C. SpO2 slightly improved with O2. NEWS2=13 (EMERGENCY)"
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 11,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 95,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 55,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 34.0,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "SPO2",
"value": 94,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 45,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 50,
"type": "medication",
"data": {
"drugName": "sodium chloride 0.9% (warmed to 40\u00b0C)",
"dose": 500,
"doseUnit": "mL",
"route": "IV",
"administeredBy": "nurse-rn-2"
},
"note": "Second warm IV fluid bolus \u2014 continued active rewarming"
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 48,
"unit": "bpm",
"source": "Device"
},
"note": "One hour into rewarming \u2014 temp 34.3\u00b0C, still bradycardic. NEWS2=13 (EMERGENCY)"
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 11,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 97,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 56,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 34.3,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "SPO2",
"value": 94,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 60,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 50,
"unit": "bpm",
"source": "Device"
},
"note": "Temp approaching 35\u00b0C \u2014 HR and RR beginning to improve. NEWS2=12 (EMERGENCY)"
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 12,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 100,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 58,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 34.8,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "SPO2",
"value": 95,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 90,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 54,
"unit": "bpm",
"source": "Device"
},
"note": "Temp crosses 35\u00b0C threshold \u2014 major improvement. HR normalizing, BP improving. NEWS2=7 (EMERGENCY \u2014 AVPU still 3)"
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 13,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 104,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 62,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 35.2,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "SPO2",
"value": 96,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "AVPU",
"value": 1,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 120,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 125,
"type": "observation",
"data": {
"code": "GLUCOSE_MG_DL",
"value": 88,
"unit": "mg/dL",
"source": "Lab"
},
"note": "Repeat labs at T+120 \u2014 glucose normalizing, potassium trending down as rewarming drives K+ intracellularly"
},
{
"offsetMinutes": 125,
"type": "observation",
"data": {
"code": "POTASSIUM_MEQ_L",
"value": 4.6,
"unit": "mEq/L",
"source": "Lab"
}
},
{
"offsetMinutes": 125,
"type": "observation",
"data": {
"code": "LACTATE_MMOL_L",
"value": 1.7,
"unit": "mmol/L",
"source": "Lab"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 58,
"unit": "bpm",
"source": "Device"
},
"note": "Significant recovery \u2014 patient responding to name, temp 35.8\u00b0C. NEWS2=4 (below WARNING threshold)"
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 14,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 108,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 65,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 35.8,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "SPO2",
"value": 97,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "AVPU",
"value": 0,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 150,
"type": "observation",
"data": {
"code": "SUPPLEMENTAL_O2",
"value": 1,
"unit": "flag",
"source": "Manual"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 62,
"unit": "bpm",
"source": "Device"
},
"note": "Temp in normal range \u2014 all vitals normalizing. O2 weaned off. NEWS2=0"
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 15,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 112,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 68,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 36.2,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "SPO2",
"value": 97,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 180,
"type": "observation",
"data": {
"code": "AVPU",
"value": 0,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 65,
"unit": "bpm",
"source": "Device"
},
"note": "Continued monitoring \u2014 stable, fully alert. NEWS2=0"
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 15,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 118,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 70,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 36.4,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "SPO2",
"value": 98,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 210,
"type": "observation",
"data": {
"code": "AVPU",
"value": 0,
"unit": "score",
"source": "Manual"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "HEART_RATE",
"value": 68,
"unit": "bpm",
"source": "Device"
},
"note": "End of scenario \u2014 near-normal vitals, temp 36.5\u00b0C. Full recovery. NEWS2=0"
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "RESP_RATE",
"value": 16,
"unit": "/min",
"source": "Device"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "SYSTOLIC_BP",
"value": 122,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "DIASTOLIC_BP",
"value": 72,
"unit": "mmHg",
"source": "Device"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "TEMP_C",
"value": 36.5,
"unit": "\u00b0C",
"source": "Manual"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "SPO2",
"value": 98,
"unit": "%",
"source": "Device"
}
},
{
"offsetMinutes": 240,
"type": "observation",
"data": {
"code": "AVPU",
"value": 0,
"unit": "score",
"source": "Manual"
}
}
],
"expectedOutcomes": [
{
"afterOffsetMinutes": 0,
"type": "alert",
"alertType": "NEWS2_EMERGENCY",
"description": "NEWS2=14 on arrival: Temp 33.5\u21923, HR 48\u21921, SBP 96\u21922, RR 10\u21921, SpO2 93\u21922, AVPU 1\u21923, O2\u21922. Total \u22657 with multiple single-param 3s"
},
{
"afterOffsetMinutes": 0,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 14,
"description": "Initial NEWS2 of 14 \u2014 critically elevated due to severe hypothermia with multi-organ effects"
},
{
"afterOffsetMinutes": 0,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR 48 bpm in warning range (41-50) \u2014 hypothermia-induced bradycardia"
},
{
"afterOffsetMinutes": 0,
"type": "alert",
"alertType": "WARNING_POTASSIUM",
"description": "Potassium 5.4 mEq/L \u2014 borderline high (warning range 5.1-5.5) due to hypothermic cellular shifts"
},
{
"afterOffsetMinutes": 90,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 12,
"description": "NEWS2 decreasing to 12 at T+90: Temp 34.8\u21923, HR 50\u21921, SBP 100\u21922, RR 12\u21920, SpO2 95\u21921, AVPU 1\u21923, O2\u21922. Still EMERGENCY"
},
{
"afterOffsetMinutes": 120,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 7,
"description": "NEWS2 drops to 7 at T+120: Temp 35.2\u21921, HR 54\u21920, SBP 104\u21921, RR 13\u21920, SpO2 96\u21920, AVPU 1\u21923, O2\u21922. Still EMERGENCY due to AVPU=3"
},
{
"afterOffsetMinutes": 120,
"type": "alert",
"alertType": "NEWS2_EMERGENCY",
"description": "NEWS2 still \u22657 at T+120 \u2014 AVPU single-param score of 3 alone triggers EMERGENCY even as other parameters normalize"
},
{
"afterOffsetMinutes": 150,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 0,
"description": "NEWS2 drops to 4 at T+150: Temp 35.8\u21921, HR 58\u21920, SBP 108\u21921, RR 14\u21920, SpO2 97\u21920, AVPU 0\u21920, O2\u21922. Below WARNING threshold \u2014 recovery evident"
},
{
"afterOffsetMinutes": 180,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 0,
"description": "NEWS2 drops to 0 at T+180: all vitals in normal range, O2 weaned off. Full recovery from hypothermia"
},
{
"afterOffsetMinutes": 240,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 0,
"description": "NEWS2 remains 0 at end of scenario \u2014 sustained normothermia at 36.5\u00b0C with normal hemodynamics"
}
]
}
@@ -0,0 +1,602 @@
{
"scenario": {
"id": "medication-false-alarm-01",
"name": "Medication-Induced False Alarm (Stable Patient on Beta-Blocker)",
"description": "45-year-old female on metoprolol (beta-blocker) with baseline low HR (~52 bpm) and controlled hypertension. Vitals fluctuate near warning thresholds but patient never truly deteriorates. Tests the system's alert behavior near boundaries and alert-fatigue patterns.",
"durationMinutes": 180,
"tags": ["false-alarm", "beta-blocker", "bradycardia", "boundary-testing", "alert-fatigue", "stable"]
},
"patient": {
"firstName": "Sandra",
"lastName": "Kowalski",
"dateOfBirth": "1981-03-14",
"gender": "Female"
},
"encounter": {
"department": "GeneralMedicine",
"encounterType": "Inpatient",
"attendingPhysician": "Dr. Helen Tranh",
"roomBed": "GM-214A",
"admissionReason": "Observation for controlled hypertension, medication titration"
},
"events": [
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 54, "unit": "bpm", "source": "Device" },
"note": "Baseline vitals — patient on scheduled metoprolol, resting comfortably. NEWS2=0"
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 136, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 78, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.9, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 0,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 0,
"type": "medication",
"data": {
"drugName": "metoprolol tartrate",
"dose": 25,
"doseUnit": "mg",
"route": "PO",
"administeredBy": "nurse-rn-12"
},
"note": "Scheduled beta-blocker dose — expected to maintain low HR"
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 50, "unit": "bpm", "source": "Device" },
"note": "HR dips to lower boundary of warning range (41-50) post-dose. NEWS2=1 (HR=1)"
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 134, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 76, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.8, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 15,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 49, "unit": "bpm", "source": "Device" },
"note": "HR remains in warning range — metoprolol peak effect. NEWS2=1 (HR=1)"
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 132, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 75, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "TEMP_C", "value": 37.0, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 30,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 52, "unit": "bpm", "source": "Device" },
"note": "HR recovers to normal range (51-90). NEWS2=0"
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 130, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 74, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.9, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 45,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 51, "unit": "bpm", "source": "Device" },
"note": "Routine check — all within normal limits. NEWS2=0"
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 133, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 76, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "TEMP_C", "value": 37.0, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 60,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 48, "unit": "bpm", "source": "Device" },
"note": "HR dips again after position change — back into warning range. NEWS2=1 (HR=1)"
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 16, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 128, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 73, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.8, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 75,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 53, "unit": "bpm", "source": "Device" },
"note": "HR recovers again — normal range. NEWS2=0"
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 131, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 75, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "TEMP_C", "value": 37.0, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 90,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 55, "unit": "bpm", "source": "Device" },
"note": "Stable — metoprolol wearing off slightly before next dose. NEWS2=0"
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 130, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 74, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.9, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 105,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 120,
"type": "medication",
"data": {
"drugName": "metoprolol tartrate",
"dose": 25,
"doseUnit": "mg",
"route": "PO",
"administeredBy": "nurse-rn-12"
},
"note": "Second scheduled metoprolol dose"
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 52, "unit": "bpm", "source": "Device" },
"note": "Pre-dose vitals taken with medication. NEWS2=0"
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 126, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 72, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "TEMP_C", "value": 37.0, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 120,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 48, "unit": "bpm", "source": "Device" },
"note": "Post-dose HR dip — second metoprolol taking effect. NEWS2=1 (HR=1)"
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 112, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 68, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.8, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 135,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 47, "unit": "bpm", "source": "Device" },
"note": "Lowest HR of scenario — SBP also drifts near warning boundary. NEWS2=2 (HR=1, SBP=1)"
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 110, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 66, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.9, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 150,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 50, "unit": "bpm", "source": "Device" },
"note": "HR still in warning but recovering, SBP back to normal. NEWS2=1 (HR=1)"
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 14, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 114, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 70, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "TEMP_C", "value": 37.0, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "SPO2", "value": 98, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 165,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "HEART_RATE", "value": 52, "unit": "bpm", "source": "Device" },
"note": "End of scenario — patient stable, HR back in normal range. NEWS2=0"
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "RESP_RATE", "value": 15, "unit": "/min", "source": "Device" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "SYSTOLIC_BP", "value": 118, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "DIASTOLIC_BP", "value": 72, "unit": "mmHg", "source": "Device" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "TEMP_C", "value": 36.9, "unit": "°C", "source": "Manual" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "SPO2", "value": 97, "unit": "%", "source": "Device" }
},
{
"offsetMinutes": 180,
"type": "observation",
"data": { "code": "AVPU", "value": 0, "unit": "score", "source": "Manual" }
}
],
"expectedOutcomes": [
{
"afterOffsetMinutes": 15,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR drops to 50 bpm (warning range 41-50) after first metoprolol dose — expected medication effect"
},
{
"afterOffsetMinutes": 15,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 1,
"description": "NEWS2=1 (HR=1 only) — below WARNING threshold of 5, no escalation needed"
},
{
"afterOffsetMinutes": 30,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR 49 bpm — sustained warning-range bradycardia during metoprolol peak effect"
},
{
"afterOffsetMinutes": 45,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 0,
"description": "NEWS2=0 — HR recovers to 52 bpm (normal range), all parameters normal"
},
{
"afterOffsetMinutes": 75,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR dips to 48 bpm after position change — transient, self-resolving"
},
{
"afterOffsetMinutes": 135,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR 48 bpm after second metoprolol dose — repeat of earlier pattern"
},
{
"afterOffsetMinutes": 150,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR 47 bpm — lowest point of scenario, still within warning (not critical)"
},
{
"afterOffsetMinutes": 150,
"type": "alert",
"alertType": "WARNING_SYSTOLIC_BP",
"description": "SBP 110 mmHg — briefly enters warning range (101-110), self-resolves by T+165"
},
{
"afterOffsetMinutes": 150,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 2,
"description": "Peak NEWS2=2 (HR=1 + SBP=1) — maximum score in scenario, well below WARNING threshold of 5"
},
{
"afterOffsetMinutes": 165,
"type": "alert",
"alertType": "WARNING_HEART_RATE",
"description": "HR 50 bpm — still in warning range but trending upward toward recovery"
},
{
"afterOffsetMinutes": 180,
"type": "score",
"scoreType": "NEWS2",
"expectedMinimum": 0,
"description": "NEWS2=0 at end of scenario — patient fully stable, no active alerts. Confirms no escalation occurred."
}
]
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff