Files

199 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 | 5190 | 4150 or 91110 | ≤40 or ≥111 |
| RESP_RATE | /min | 1220 | 911 or 2124 | ≤8 or ≥25 |
| SYSTOLIC_BP | mmHg | 111219 | 101110 | ≤100 or ≥220 |
| DIASTOLIC_BP | mmHg | 6090 | 5059 or 91100 | ≤49 or ≥101 |
| TEMP_C | °C | 36.138.0 | 35.136.0 or 38.139.0 | ≤35.0 or ≥39.1 |
| SPO2 | % | 96100 | 9495 | ≤93 |
| AVPU | score | 0 (Alert) | — | 1 (Voice) 2 (Pain) 3 (Unresponsive) |
| SUPPLEMENTAL_O2 | flag | 0 (No) | — | 1 (Yes) |
| WBC_K_UL | ×10³/µL | 4.511.0 | — | <4.0 or >12.0 |
| POTASSIUM_MEQ_L | mEq/L | 3.55.0 | 3.03.4 or 5.15.5 | <3.0 or >5.5 |
| LACTATE_MMOL_L | mmol/L | 0.51.5 | 1.62.0 | >2.0 |
| GLUCOSE_MG_DL | mg/dL | 70140 | 141180 | <70 or >180 |
### Clinical Scoring Rules
**NEWS2** (computed from: HEART_RATE, RESP_RATE, SYSTOLIC_BP, TEMP_C, SPO2, AVPU, SUPPLEMENTAL_O2):
- Total score 56 → `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 1560 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 26 hours: HR 80 → 88 → 95 → 102 → 110 → 118. Each step is 1560 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 ±25% 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.