199 lines
7.9 KiB
Markdown
199 lines
7.9 KiB
Markdown
# VigilCare Scenario Generator Prompt
|
||
|
||
Use the following prompt with Claude or any LLM to generate clinical scenario JSON files.
|
||
|
||
---
|
||
|
||
## Prompt
|
||
|
||
You are a clinical scenario generator for a hospital patient monitoring system called VigilCare. Generate a JSON file that simulates a patient's clinical journey through a hospital encounter.
|
||
|
||
### JSON Structure
|
||
|
||
```json
|
||
{
|
||
"scenario": {
|
||
"id": "kebab-case-id",
|
||
"name": "Human-readable scenario name",
|
||
"description": "1-2 sentence clinical summary",
|
||
"durationMinutes": 240,
|
||
"tags": ["sepsis", "ed", "deterioration"]
|
||
},
|
||
"patient": {
|
||
"firstName": "Eleanor",
|
||
"lastName": "Chen",
|
||
"dateOfBirth": "1954-03-15",
|
||
"gender": "Female"
|
||
},
|
||
"encounter": {
|
||
"department": "Emergency",
|
||
"encounterType": "Emergency | Inpatient | Outpatient",
|
||
"attendingPhysician": "Dr. Sarah Mitchell",
|
||
"roomBed": "ED-12A",
|
||
"admissionReason": "Fever, confusion, dysuria"
|
||
},
|
||
"events": [
|
||
{
|
||
"offsetMinutes": 0,
|
||
"type": "observation",
|
||
"data": {
|
||
"code": "HEART_RATE",
|
||
"value": 88,
|
||
"unit": "bpm",
|
||
"source": "Device"
|
||
}
|
||
},
|
||
{
|
||
"offsetMinutes": 60,
|
||
"type": "medication",
|
||
"data": {
|
||
"drugName": "ceftriaxone",
|
||
"dose": 1,
|
||
"doseUnit": "g",
|
||
"route": "IV",
|
||
"administeredBy": "nurse-rn-1"
|
||
}
|
||
},
|
||
{
|
||
"offsetMinutes": 45,
|
||
"type": "order",
|
||
"data": {
|
||
"orderType": "Lab",
|
||
"description": "Urinalysis with culture",
|
||
"orderedBy": "Dr. Sarah Mitchell"
|
||
}
|
||
},
|
||
{
|
||
"offsetMinutes": 45,
|
||
"type": "order_result",
|
||
"data": {
|
||
"orderDescription": "SEP-1: Blood cultures",
|
||
"resultSummary": "Pending gram stain"
|
||
}
|
||
}
|
||
],
|
||
"expectedOutcomes": [
|
||
{
|
||
"afterOffsetMinutes": 30,
|
||
"type": "alert",
|
||
"alertType": "WARNING_HEART_RATE",
|
||
"description": "HR enters warning range"
|
||
},
|
||
{
|
||
"afterOffsetMinutes": 120,
|
||
"type": "alert",
|
||
"alertType": "SEPSIS_WARNING",
|
||
"description": "SIRS criteria met"
|
||
},
|
||
{
|
||
"afterOffsetMinutes": 180,
|
||
"type": "score",
|
||
"scoreType": "NEWS2",
|
||
"expectedMinimum": 7,
|
||
"description": "NEWS2 reaches HIGH risk"
|
||
},
|
||
{
|
||
"afterOffsetMinutes": 120,
|
||
"type": "bundle",
|
||
"description": "Sepsis bundle auto-created with 4 orders"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### Available Observation Codes
|
||
|
||
| Code | Unit | Normal Range | Warning Range | Critical Range |
|
||
|------|------|-------------|---------------|----------------|
|
||
| HEART_RATE | bpm | 51–90 | 41–50 or 91–110 | ≤40 or ≥111 |
|
||
| RESP_RATE | /min | 12–20 | 9–11 or 21–24 | ≤8 or ≥25 |
|
||
| SYSTOLIC_BP | mmHg | 111–219 | 101–110 | ≤100 or ≥220 |
|
||
| DIASTOLIC_BP | mmHg | 60–90 | 50–59 or 91–100 | ≤49 or ≥101 |
|
||
| TEMP_C | °C | 36.1–38.0 | 35.1–36.0 or 38.1–39.0 | ≤35.0 or ≥39.1 |
|
||
| SPO2 | % | 96–100 | 94–95 | ≤93 |
|
||
| AVPU | score | 0 (Alert) | — | 1 (Voice) 2 (Pain) 3 (Unresponsive) |
|
||
| SUPPLEMENTAL_O2 | flag | 0 (No) | — | 1 (Yes) |
|
||
| WBC_K_UL | ×10³/µL | 4.5–11.0 | — | <4.0 or >12.0 |
|
||
| POTASSIUM_MEQ_L | mEq/L | 3.5–5.0 | 3.0–3.4 or 5.1–5.5 | <3.0 or >5.5 |
|
||
| LACTATE_MMOL_L | mmol/L | 0.5–1.5 | 1.6–2.0 | >2.0 |
|
||
| GLUCOSE_MG_DL | mg/dL | 70–140 | 141–180 | <70 or >180 |
|
||
|
||
### Clinical Scoring Rules
|
||
|
||
**NEWS2** (computed from: HEART_RATE, RESP_RATE, SYSTOLIC_BP, TEMP_C, SPO2, AVPU, SUPPLEMENTAL_O2):
|
||
- Total score 5–6 → `NEWS2_WARNING` alert
|
||
- Total score ≥7 OR any single parameter scores 3 → `NEWS2_EMERGENCY` alert
|
||
|
||
**SIRS** (≥2 of 4 criteria → `SEPSIS_WARNING`):
|
||
- Temperature >38.3°C or <36.0°C
|
||
- Heart rate >90 bpm
|
||
- Respiratory rate >20/min
|
||
- WBC >12.0 or <4.0 ×10³/µL
|
||
|
||
**qSOFA** (≥2 of 3 criteria → `QSOFA_WARNING`):
|
||
- Respiratory rate ≥22/min
|
||
- Systolic BP ≤100 mmHg
|
||
- AVPU ≥1 (any altered mentation)
|
||
|
||
**Trend alerts** — rapid rise or fall in a vital sign within a 30-minute sliding window triggers `RAPID_DETERIORATION`.
|
||
|
||
**Sepsis bundle** — when `SEPSIS_WARNING` or `QSOFA_WARNING` fires, the system auto-creates a sepsis bundle with 4 orders (use these **exact** descriptions in `order_result` events; do **not** add `order` events for them):
|
||
|
||
| Description |
|
||
|---|
|
||
| `SEP-1: Blood cultures` |
|
||
| `SEP-1: Serum lactate` |
|
||
| `SEP-1: Broad-spectrum antibiotics` |
|
||
| `SEP-1: IV fluid bolus` |
|
||
|
||
Place `order_result` events for bundle orders **after** the sepsis alert would fire. For any other lab/imaging order, add an `order` event before `order_result`.
|
||
|
||
### Order event types
|
||
|
||
Place order (required before `order_result` unless sepsis bundle auto-order):
|
||
```json
|
||
{
|
||
"offsetMinutes": 40,
|
||
"type": "order",
|
||
"data": {
|
||
"orderType": "Lab",
|
||
"description": "Urinalysis with culture",
|
||
"orderedBy": "Dr. Sarah Mitchell"
|
||
}
|
||
}
|
||
```
|
||
|
||
Valid `orderType` values: `Lab`, `Imaging`, `Medication`, `Procedure`. `orderedBy` defaults to `encounter.attendingPhysician` if omitted.
|
||
|
||
### Rules for Generating Realistic Scenarios
|
||
|
||
1. **Vital signs arrive in clusters.** In real hospitals, nurses take a full set of vitals every 15–60 minutes. Each cluster should include at minimum: HEART_RATE, RESP_RATE, SYSTOLIC_BP, TEMP_C, SPO2, AVPU. Add SUPPLEMENTAL_O2 only when oxygen is administered. Add lab values (WBC, LACTATE, POTASSIUM, GLUCOSE) only at specific lab draw times, not every cluster.
|
||
|
||
2. **Deterioration is gradual.** A patient does not jump from HR 80 to HR 130 in one reading. Realistic deterioration progresses over 2–6 hours: HR 80 → 88 → 95 → 102 → 110 → 118. Each step is 15–60 minutes apart.
|
||
|
||
3. **Vital signs correlate.** Sepsis shows rising HR + rising temp + rising RR + falling BP together. Hemorrhagic shock shows rising HR + falling BP + falling SpO2. Respiratory failure shows falling SpO2 + rising RR. Don't change vital signs independently.
|
||
|
||
4. **Include physiological noise.** Real vital signs fluctuate. A stable HR of 75 might read 73, 76, 74, 77 across 4 readings. Add ±2–5% variation on stable values.
|
||
|
||
5. **Start with a baseline.** The first event cluster (offsetMinutes: 0) should be a complete set of normal or near-normal vitals establishing the patient's baseline.
|
||
|
||
6. **offsetMinutes must be non-decreasing.** Events within the same minute are fine (a full vital sign set arrives at the same offset). Never go backwards.
|
||
|
||
7. **Max 10 observations per offset.** The API accepts at most 10 observations per batch. A full vital set is 7 codes (HR, RR, SBP, TEMP, SpO2, AVPU, plus SUPPLEMENTAL_O2 when on oxygen). If you add lab values at the same minute, keep the total ≤10 — e.g. put labs at `offsetMinutes + 1` when vitals + labs would exceed 10.
|
||
|
||
8. **Use realistic source values.** Observation source is `"Device"` for continuous monitoring (HR, SpO2, BP) or `"Manual"` for nurse-measured values (temp, AVPU, supplemental O2). Lab draws (WBC, lactate, potassium, glucose) are `"Lab"`.
|
||
|
||
9. **Medications need clinical justification.** Only include medication events that make clinical sense for the scenario. Include the medication type events only if the scenario involves treatment response.
|
||
|
||
10. **Orders before results.** Every `order_result` must have a matching pending order. Use an `order` event first for routine labs/imaging. Sepsis bundle orders are auto-created — only use `order_result` with the exact SEP-1 descriptions above.
|
||
|
||
11. **Expected outcomes must be achievable.** Only list expected outcomes that the given vital sign trajectory will actually trigger based on the scoring rules above. Calculate NEWS2 scores mentally. Count SIRS criteria. Check qSOFA thresholds.
|
||
|
||
### Generate This Scenario
|
||
|
||
- 72-year-old with UTI → sepsis over 4 hours
|
||
- Baseline normals → rising temp, HR, RR → SIRS triggers → qSOFA triggers → bundle auto-created
|
||
- Includes order results completing the sepsis bundle
|
||
- Expected: `SEPSIS_WARNING`, `QSOFA_WARNING`, `NEWS2_EMERGENCY`, sepsis bundle `COMPLIANT`
|
||
|
||
Output ONLY the JSON file. No explanation or commentary. |