{
  "title": "u-sim field catalog",
  "catalogVersion": 1,
  "scope": "Field definitions generated from the application scenario schema. Array entries use * in documentation paths.",
  "fields": [
    {
      "path": "metadata",
      "label": "metadata",
      "type": "object",
      "group": "metadata",
      "description": "Case identification, authorship, and the teaching context used to find and select this scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.title",
      "label": "Title",
      "type": "string",
      "group": "metadata",
      "description": "A concise case title that helps authors and learners identify this scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.description",
      "label": "Description",
      "type": "string",
      "group": "metadata",
      "description": "The scenario premise, scope, and intended learning activity.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.author",
      "label": "Author",
      "type": "string",
      "group": "metadata",
      "description": "The person or team credited with creating this scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.diagnosis",
      "label": "Diagnosis or case theme",
      "type": "string",
      "group": "metadata",
      "description": "The main diagnosis or case theme that guides the scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.specialty",
      "label": "Specialty",
      "type": "string",
      "group": "metadata",
      "description": "The clinical specialty or specialties relevant to this scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.level",
      "label": "Learner level",
      "type": "string",
      "group": "metadata",
      "description": "The intended learner level and experience.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "metadata.durationMinutes",
      "label": "Suggested duration · minutes",
      "type": "number",
      "group": "metadata",
      "description": "The suggested scenario duration in minutes; this does not control the simulation clock.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients",
      "label": "patients",
      "type": "object",
      "group": "scenario-model",
      "description": "The fictional patient's presentation, history, examination, and starting observations.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.name",
      "label": "Patient name",
      "type": "string",
      "group": "scenario-model",
      "description": "The fictional patient's display name.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.context",
      "label": "Patient context",
      "type": "string",
      "group": "scenario-model",
      "description": "The patient's opening situation and the context available at the start of the scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.photo",
      "label": "Patient photo",
      "type": "object",
      "group": "scenario-model",
      "description": "An optional embedded patient photo that travels with the scenario. Upload a PNG, JPEG, or WebP image.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.photo.dataUrl",
      "label": "Photo",
      "type": "string",
      "group": "scenario-model",
      "description": "The patient photo encoded as a data URL. Use the photo upload control to populate it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.photo.description",
      "label": "Photo description",
      "type": "string",
      "group": "scenario-model",
      "description": "Describe the patient's appearance for readers who cannot see the photo.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics",
      "label": "Demographics",
      "type": "object",
      "group": "demographics",
      "description": "Patient age, gender, height, and weight used to describe the case.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.age",
      "label": "Age · years",
      "type": "number",
      "group": "demographics",
      "description": "Patient age in years. Use the patient narrative to clarify a young infant's age when needed.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.weightKg",
      "label": "Weight · kg",
      "type": "number",
      "group": "demographics",
      "description": "Patient weight, stored in kilograms. The editor can also display pounds.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.heightCm",
      "label": "Height · cm",
      "type": "number",
      "group": "demographics",
      "description": "Patient height, stored in centimeters. The editor can also display feet and inches.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.gender",
      "label": "Gender",
      "type": "string",
      "group": "demographics",
      "description": "The patient's authored gender description.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.heightUnit",
      "label": "Height display unit",
      "type": "string",
      "group": "demographics",
      "description": "Preferred height display unit in the scenario editor; the measurement remains stored in centimeters.",
      "defaultValue": null,
      "options": [
        "cm",
        "in",
        "ft-in"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.demographics.weightUnit",
      "label": "Weight display unit",
      "type": "string",
      "group": "demographics",
      "description": "Preferred weight display unit in the scenario editor; the measurement remains stored in kilograms.",
      "defaultValue": null,
      "options": [
        "kg",
        "lb"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history",
      "label": "History",
      "type": "object",
      "group": "history",
      "description": "The history available about this patient, including symptoms, background, medications, and allergies.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.chiefComplaint",
      "label": "Chief complaint",
      "type": "string",
      "group": "history",
      "description": "The main symptom or concern prompting care, ideally in the patient's own words. This is the scenario title shown to learners.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.presentIllness",
      "label": "History of present illness",
      "type": "string",
      "group": "history",
      "description": "Describe symptom onset, progression, associated symptoms, relevant negatives, and treatment before arrival.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.medical",
      "label": "Medical history / comorbidities",
      "type": "array",
      "group": "history",
      "description": "Relevant diagnoses and comorbidities, one condition per entry. Include details that affect decisions in this case.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.medical.*",
      "label": "Item",
      "type": "string",
      "group": "history",
      "description": "One prior diagnosis or ongoing condition, with relevant severity or treatment.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.surgical",
      "label": "Surgical history",
      "type": "array",
      "group": "history",
      "description": "Previous operations or procedures relevant to the case, with timing and complications when useful.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.surgical.*",
      "label": "Item",
      "type": "string",
      "group": "history",
      "description": "One previous operation or procedure, including its approximate date and relevant outcome.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.medications",
      "label": "Home medications",
      "type": "array",
      "group": "history",
      "description": "Medications taken before this encounter. Include dose, route, frequency, and adherence when relevant.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.medications.*",
      "label": "Item",
      "type": "string",
      "group": "history",
      "description": "One home medication, using its generic name and relevant dose, route, and frequency.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.allergies",
      "label": "Allergies",
      "type": "array",
      "group": "history",
      "description": "Known allergies and reactions. Distinguish no known allergies from an unknown allergy history.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.allergies.*",
      "label": "*",
      "type": "value",
      "group": "history",
      "description": "One allergy as text or as a substance, reaction, and severity record.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.allergies.*.substance",
      "label": "Substance",
      "type": "string",
      "group": "history",
      "description": "The medication, food, or other substance associated with the allergy.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.allergies.*.reaction",
      "label": "Reaction",
      "type": "string",
      "group": "history",
      "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.allergies.*.severity",
      "label": "Severity",
      "type": "string",
      "group": "history",
      "description": "The reported severity of the allergic reaction; choose unknown when it has not been established.",
      "defaultValue": null,
      "options": [
        "mild",
        "moderate",
        "severe",
        "unknown"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.family",
      "label": "Family history",
      "type": "string",
      "group": "history",
      "description": "Family conditions or inherited risks relevant to the presentation; include pertinent negative history.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.social",
      "label": "Social history",
      "type": "string",
      "group": "history",
      "description": "Living situation, supports, occupation, exposures, and substance use relevant to care.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.history.ros",
      "label": "Review of systems",
      "type": "object",
      "group": "review-of-systems",
      "description": "Symptoms reported by body system, including relevant positives and negatives. Record examination findings separately.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.examination",
      "label": "Examination",
      "type": "object",
      "group": "physical-examination",
      "description": "The physical examination findings available to the learner.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor",
      "label": "Monitor",
      "type": "object",
      "group": "ecg",
      "description": "The monitor configuration used to present patient observations.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.rhythm",
      "label": "Monitor rhythm",
      "type": "string",
      "group": "ecg",
      "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse.",
      "defaultValue": null,
      "options": [
        "sinus",
        "sinus_tachycardia",
        "sinus_bradycardia",
        "atrial_fibrillation",
        "atrial_flutter",
        "svt",
        "ventricular_tachycardia",
        "torsades",
        "ventricular_fibrillation",
        "asystole",
        "av_block_1",
        "av_block_2_mobitz_1",
        "av_block_2_mobitz_2",
        "av_block_3",
        "junctional",
        "ventricular_paced"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.pulsePresent",
      "label": "Pulse present",
      "type": "boolean",
      "group": "ecg",
      "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections",
      "label": "Monitor connections",
      "type": "object",
      "group": "ecg",
      "description": "Connected channels expose available measurements without changing physiology. An explicit empty patient connection map starts disconnected. Omitted event channels inherit their preceding connection. Omitting the patient connection map makes available channels connected.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.ecg",
      "label": "ECG",
      "type": "boolean",
      "group": "ecg",
      "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.bloodPressure",
      "label": "Blood pressure cuff",
      "type": "boolean",
      "group": "ecg",
      "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.spo2",
      "label": "Pulse oximetry",
      "type": "boolean",
      "group": "ecg",
      "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.respiration",
      "label": "Respiratory monitoring",
      "type": "boolean",
      "group": "ecg",
      "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.temperature",
      "label": "Temperature probe",
      "type": "boolean",
      "group": "ecg",
      "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.capnography",
      "label": "Capnography",
      "type": "boolean",
      "group": "ecg",
      "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.monitor.connections.arterialPressure",
      "label": "Arterial pressure",
      "type": "boolean",
      "group": "ecg",
      "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals",
      "label": "Vital signs",
      "type": "object",
      "group": "vital-signs",
      "description": "Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.hr",
      "label": "Heart rate · bpm",
      "type": "number",
      "group": "vital-signs",
      "description": "Heart rate in beats per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.sbp",
      "label": "Systolic BP · mmHg",
      "type": "number",
      "group": "vital-signs",
      "description": "Noninvasive systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.dbp",
      "label": "Diastolic BP · mmHg",
      "type": "number",
      "group": "vital-signs",
      "description": "Noninvasive diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.rr",
      "label": "Respiratory rate · /min",
      "type": "number",
      "group": "vital-signs",
      "description": "Respiratory rate in breaths per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.spo2",
      "label": "Oxygen saturation · %",
      "type": "number",
      "group": "vital-signs",
      "description": "Peripheral oxygen saturation as a percentage from 0 to 100. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.temperature",
      "label": "Temperature · °C",
      "type": "number",
      "group": "vital-signs",
      "description": "Body temperature in degrees Celsius. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.etco2",
      "label": "End-tidal CO₂ · mmHg",
      "type": "number",
      "group": "vital-signs",
      "description": "End-tidal carbon dioxide pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.artSbp",
      "label": "Arterial systolic BP · mmHg",
      "type": "number",
      "group": "vital-signs",
      "description": "Invasive arterial systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "patients.vitals.artDbp",
      "label": "Arterial diastolic BP · mmHg",
      "type": "number",
      "group": "vital-signs",
      "description": "Invasive arterial diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment",
      "label": "environment",
      "type": "object",
      "group": "environment",
      "description": "The location, preparation, equipment, and people needed to deliver the simulation.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.setting",
      "label": "Setting",
      "type": "string",
      "group": "environment",
      "description": "Where the scenario takes place and the relevant features of the care environment.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.requirements",
      "label": "Preparation requirements",
      "type": "array",
      "group": "environment",
      "description": "Pre-session tasks for the simulation center, each with a concrete action and setup outcome. Equipment and supplies belong in equipment.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.requirements.*",
      "label": "Requirement",
      "type": "string",
      "group": "environment",
      "description": "One pre-session setup task with a concrete outcome, such as programming initial manikin observations or briefing an actor.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.equipment",
      "label": "Equipment",
      "type": "array",
      "group": "environment",
      "description": "The equipment and supplies needed to run the scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.equipment.*",
      "label": "Item",
      "type": "string",
      "group": "environment",
      "description": "One item of equipment or supplies needed for the session, with configuration or an acceptable substitute when useful.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors",
      "label": "Scenario actors",
      "type": "array",
      "group": "environment",
      "description": "The people portraying scenario roles, with their names, roles, and briefing instructions.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*",
      "label": "Actor",
      "type": "object",
      "group": "environment",
      "description": "One role-player's identity, role in the case, and instructions for responding to learners.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "environment",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.name",
      "label": "Actor name",
      "type": "string",
      "group": "environment",
      "description": "The character's name or role-player label used to identify this actor.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.role",
      "label": "Actor role",
      "type": "string",
      "group": "environment",
      "description": "The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.brief",
      "label": "Actor brief",
      "type": "string",
      "group": "environment",
      "description": "Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.demographics",
      "label": "Voice demographics",
      "type": "object",
      "group": "environment",
      "description": "Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.demographics.age",
      "label": "Age · years",
      "type": "number",
      "group": "environment",
      "description": "The character's age in years, used to guide natural voice delivery without exaggeration.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.actors.*.demographics.gender",
      "label": "Gender",
      "type": "string",
      "group": "environment",
      "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene",
      "label": "Patient scene",
      "type": "object",
      "group": "environment",
      "description": "The patient model and scene configuration shown during the simulation.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.modelUrl",
      "label": "Patient model URL",
      "type": "string",
      "group": "environment",
      "description": "The URL of the patient model to load in the 3D scene. Use a model accessible to the simulation viewer.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.attribution",
      "label": "Model attribution",
      "type": "string",
      "group": "environment",
      "description": "Credit the model creator and record the source and license or permission to use it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.markers",
      "label": "markers",
      "type": "array",
      "group": "environment",
      "description": "Clickable locations on the patient model, each linked to an existing learner interaction.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.markers.*",
      "label": "*",
      "type": "object",
      "group": "environment",
      "description": "One interaction hotspot with an action, a model-space position, and an outward-facing direction.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.markers.*.actionId",
      "label": "Marker action",
      "type": "string",
      "group": "environment",
      "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.markers.*.position",
      "label": "position",
      "type": "string",
      "group": "environment",
      "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "environment.patientScene.markers.*.normal",
      "label": "normal",
      "type": "string",
      "group": "environment",
      "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education",
      "label": "education",
      "type": "object",
      "group": "education",
      "description": "Learning goals, learner preparation, assessment criteria, and guidance for reflection after the case.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives",
      "label": "Learning objectives",
      "type": "array",
      "group": "education",
      "description": "The observable knowledge, skills, or behaviors learners should demonstrate.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives.*",
      "label": "*",
      "type": "value",
      "group": "education",
      "description": "One observable learning goal, using an action verb such as recognize, assess, communicate, or initiate.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "education",
      "description": "A stable objective identifier. Preserve it when editing or reordering the objective.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives.*.statement",
      "label": "Learning objective",
      "type": "string",
      "group": "education",
      "description": "An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives.*.acgmeCompetencies",
      "label": "ACGME core competencies",
      "type": "array",
      "group": "education",
      "description": "Optional author-selected ACGME core competency codes. Omitted or empty means unmapped. This is not a Milestone level or a judgment of competence. Do not infer mappings from source text that does not explicitly supply them.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.objectives.*.acgmeCompetencies.*",
      "label": "ACGME core competency",
      "type": "string",
      "group": "education",
      "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective.",
      "defaultValue": null,
      "options": [
        "PC",
        "MK",
        "PBLI",
        "ICS",
        "PROF",
        "SBP"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.debrief",
      "label": "Debrief prompts",
      "type": "string",
      "group": "education",
      "description": "Prompts for facilitated reflection after the scenario. Formatting is stored as Markdown.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.audience",
      "label": "Intended audience",
      "type": "string",
      "group": "education",
      "description": "Who the scenario is designed for, including profession, training stage, and team composition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisites",
      "label": "Prerequisites",
      "type": "string",
      "group": "education",
      "description": "Rich-text instructions stored as Markdown for knowledge, skills, modules, or preparation learners should complete before starting.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisiteDocuments",
      "label": "Prerequisite documents",
      "type": "array",
      "group": "education",
      "description": "Downloadable learning materials attached by the author for learners to complete before starting. This does not track completion.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisiteDocuments.*",
      "label": "*",
      "type": "object",
      "group": "education",
      "description": "One preparation document with an identifier, filename, and embedded file content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisiteDocuments.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "education",
      "description": "Stable attachment identifier.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisiteDocuments.*.name",
      "label": "Document name",
      "type": "string",
      "group": "education",
      "description": "Original document filename, including its extension.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.prerequisiteDocuments.*.dataUrl",
      "label": "Document",
      "type": "string",
      "group": "education",
      "description": "Uploaded document bytes stored as a data URL so the material travels with the scenario.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.rationale",
      "label": "Educational rationale",
      "type": "string",
      "group": "education",
      "description": "Explain why this case is educationally useful and how its decisions and challenges support the learning objectives.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment",
      "label": "Assessment & learning materials",
      "type": "array",
      "group": "education",
      "description": "The authored criteria used to assess learner performance.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*",
      "label": "*",
      "type": "object",
      "group": "education",
      "description": "One scored criterion linking an observable skill to a recorded action, with points and debrief feedback.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.objectiveId",
      "label": "Learning objective",
      "type": "string",
      "group": "education",
      "description": "Optional link to the stable ID of a structured learning objective. Multiple criteria may support one objective. No link means unspecified, never a failed objective.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "education",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.label",
      "label": "Skill or objective",
      "type": "string",
      "group": "education",
      "description": "Name the observable skill or objective being assessed, such as recognizing deterioration.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.actionId",
      "label": "Required action",
      "type": "string",
      "group": "education",
      "description": "Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.objectId",
      "label": "Equivalent resource",
      "type": "string",
      "group": "education",
      "description": "Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.objectIds",
      "label": "Equivalent resources",
      "type": "array",
      "group": "education",
      "description": "Alternative learner-requestable resources that earn credit for this criterion. Any selected request qualifies, using the earliest request time regardless of result delay. Points are awarded once. Omit to use objectId or the required action's linked resource when present.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.objectIds.*",
      "label": "Equivalent resource",
      "type": "string",
      "group": "education",
      "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.points",
      "label": "Points",
      "type": "number",
      "group": "education",
      "description": "The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.withinSeconds",
      "label": "Deadline · seconds",
      "type": "number",
      "group": "education",
      "description": "Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.feedback",
      "label": "Debrief guidance",
      "type": "string",
      "group": "education",
      "description": "Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "education.assessment.*.learningUrl",
      "label": "Learning material URL",
      "type": "string",
      "group": "education",
      "description": "An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events",
      "label": "events",
      "type": "object",
      "group": "scenario-model",
      "description": "The patient phases, transitions, and requestable resources that define how the scenario progresses.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states",
      "label": "States",
      "type": "array",
      "group": "states",
      "description": "Patient phases in the scenario. Include exactly one baseline and at least one conclusion; connect phases with interactions.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*",
      "label": "*",
      "type": "object",
      "group": "states",
      "description": "One phase of the case, with learner information, tutor guidance, and any changed patient observations.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "states",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.title",
      "label": "State title",
      "type": "string",
      "group": "states",
      "description": "A short name for this phase, such as Initial assessment or Worsening respiratory distress.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.kind",
      "label": "State kind",
      "type": "string",
      "group": "states",
      "description": "Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction.",
      "defaultValue": null,
      "options": [
        "baseline",
        "triggered",
        "scheduled",
        "conclusion"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.learnerNote",
      "label": "Learner prompt",
      "type": "string",
      "group": "states",
      "description": "Information presented to the learner at this phase: the patient's condition, new findings, or an immediate task. Keep tutor instructions and unrevealed answers in the tutor prompt.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.tutorNote",
      "label": "Tutor prompt",
      "type": "string",
      "group": "states",
      "description": "Guide the tutor through this phase: expected learner actions, cues to offer if learners struggle, and when and why to advance. Include relevant reasoning and facilitation instructions.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals",
      "label": "Vital signs",
      "type": "object",
      "group": "states",
      "description": "Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.hr",
      "label": "Heart rate · bpm",
      "type": "number",
      "group": "states",
      "description": "Heart rate in beats per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.sbp",
      "label": "Systolic BP · mmHg",
      "type": "number",
      "group": "states",
      "description": "Noninvasive systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.dbp",
      "label": "Diastolic BP · mmHg",
      "type": "number",
      "group": "states",
      "description": "Noninvasive diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.rr",
      "label": "Respiratory rate · /min",
      "type": "number",
      "group": "states",
      "description": "Respiratory rate in breaths per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.spo2",
      "label": "Oxygen saturation · %",
      "type": "number",
      "group": "states",
      "description": "Peripheral oxygen saturation as a percentage from 0 to 100. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.temperature",
      "label": "Temperature · °C",
      "type": "number",
      "group": "states",
      "description": "Body temperature in degrees Celsius. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.etco2",
      "label": "End-tidal CO₂ · mmHg",
      "type": "number",
      "group": "states",
      "description": "End-tidal carbon dioxide pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.artSbp",
      "label": "Arterial systolic BP · mmHg",
      "type": "number",
      "group": "states",
      "description": "Invasive arterial systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitals.artDbp",
      "label": "Arterial diastolic BP · mmHg",
      "type": "number",
      "group": "states",
      "description": "Invasive arterial diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.vitalTrendSeconds",
      "label": "Vital trend · seconds",
      "type": "number",
      "group": "states",
      "description": "Seconds over which the current vital values move to this state’s authored targets. Zero or omitted applies the targets immediately. The trend follows simulation time and pauses with the run.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor",
      "label": "Monitor",
      "type": "object",
      "group": "states",
      "description": "Monitor rhythm, pulse status, and channel connection overrides for this phase. Connection-only overrides preserve the preceding rhythm; omitted channels keep their preceding connection.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.rhythm",
      "label": "Monitor rhythm",
      "type": "string",
      "group": "states",
      "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse.",
      "defaultValue": null,
      "options": [
        "sinus",
        "sinus_tachycardia",
        "sinus_bradycardia",
        "atrial_fibrillation",
        "atrial_flutter",
        "svt",
        "ventricular_tachycardia",
        "torsades",
        "ventricular_fibrillation",
        "asystole",
        "av_block_1",
        "av_block_2_mobitz_1",
        "av_block_2_mobitz_2",
        "av_block_3",
        "junctional",
        "ventricular_paced"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.pulsePresent",
      "label": "Pulse present",
      "type": "boolean",
      "group": "states",
      "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections",
      "label": "Monitor connections",
      "type": "object",
      "group": "states",
      "description": "Connected channels expose available measurements without changing physiology. An explicit empty patient connection map starts disconnected. Omitted event channels inherit their preceding connection. Omitting the patient connection map makes available channels connected.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.ecg",
      "label": "ECG",
      "type": "boolean",
      "group": "states",
      "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.bloodPressure",
      "label": "Blood pressure cuff",
      "type": "boolean",
      "group": "states",
      "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.spo2",
      "label": "Pulse oximetry",
      "type": "boolean",
      "group": "states",
      "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.respiration",
      "label": "Respiratory monitoring",
      "type": "boolean",
      "group": "states",
      "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.temperature",
      "label": "Temperature probe",
      "type": "boolean",
      "group": "states",
      "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.capnography",
      "label": "Capnography",
      "type": "boolean",
      "group": "states",
      "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.monitor.connections.arterialPressure",
      "label": "Arterial pressure",
      "type": "boolean",
      "group": "states",
      "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.key",
      "label": "Key state",
      "type": "boolean",
      "group": "states",
      "description": "Mark an educationally important phase. This does not award points or require every path to pass through the phase.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.resourceTrigger",
      "label": "Enter when resource results are available",
      "type": "object",
      "group": "states",
      "description": "Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.resourceTrigger.mode",
      "label": "Results required",
      "type": "string",
      "group": "states",
      "description": "All waits for every selected resource result; any enters on the first selected result. Requests alone do not satisfy the rule until their response delays elapse.",
      "defaultValue": null,
      "options": [
        "any",
        "all"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.resourceTrigger.objectIds",
      "label": "Selected resources",
      "type": "array",
      "group": "states",
      "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.states.*.resourceTrigger.objectIds.*",
      "label": "Resource",
      "type": "string",
      "group": "states",
      "description": "The identifier of a learner-requestable resource required by this event result trigger.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions",
      "label": "Interactions",
      "type": "array",
      "group": "actions",
      "description": "Connections between phases, activated by a learner action or a timer measured from entry into the source phase.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*",
      "label": "*",
      "type": "object",
      "group": "actions",
      "description": "One transition from a source phase to a destination, including its explicit learner choice or timer. Author resource links and patient changes on the destination state.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "actions",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.label",
      "label": "Interaction",
      "type": "string",
      "group": "actions",
      "description": "Use a short, observable action or timed-event label: 2–6 words, at most 48 characters. Put conditions, clinical detail, and what happens in description, not in the label. Do not append the destination state; from/to already identify it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.description",
      "label": "Description",
      "type": "string",
      "group": "actions",
      "description": "Longer explanation of the action or timed event, its conditions, and what happens. Plain-language context only; executable behavior remains in the selected trigger, timing, resource references, and destination state. Text does not automatically detect learner behavior. Optional when the label provides sufficient context.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.from",
      "label": "From state",
      "type": "string",
      "group": "actions",
      "description": "The phase in which this interaction is available or its scheduled timer begins.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.to",
      "label": "Leads to",
      "type": "string",
      "group": "actions",
      "description": "The phase entered when this interaction occurs. Set scenario-specific vitals, rhythm, and patient information here; reusable treatment responses stay with resources. Destination vital signs override overlapping transition effects.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.trigger",
      "label": "Trigger",
      "type": "string",
      "group": "actions",
      "description": "Action completes through AI interpretation of learner intent against its completion criterion, configured resource interactions, or explicit learner/facilitator confirmation. Scheduled runs automatically after its delay while the source phase remains active. Omitted means action.",
      "defaultValue": null,
      "options": [
        "action",
        "scheduled"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.delaySeconds",
      "label": "Delay · seconds",
      "type": "number",
      "group": "actions",
      "description": "For a scheduled interaction, seconds after the source event first occurs. Multiple timers run independently and survive other events. Each fires once per run; re-entry does not restart it. This does not delay manual actions.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.objectId",
      "label": "Linked resource",
      "type": "string",
      "group": "actions",
      "description": "Requests a resource when this transition fires. Builder authors resource links on the state under Results.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.completionCriteria",
      "label": "When this action is complete",
      "type": "string",
      "group": "actions",
      "description": "Describe the learner intent or behavior that fulfills this action. The AI interprets chat, conversation context, and simulator interactions against this criterion; equivalent wording is accepted. Distinguish an order from actual administration, and specify essential requirements. If omitted, the action label and description provide the criterion. Only available authored actions can advance the case; ambiguous intent requires clarification.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.completion",
      "label": "Action recognition",
      "type": "object",
      "group": "actions",
      "description": "Recognize this action from learner-requested resources while its source state is active. Any completes on the first selected request; all waits for all selected requests. Result delays do not delay action completion. Facilitators can confirm the same action directly. Confirming all requests every selected resource; confirming any does not guess which alternative was used. Omitted uses AI interpretation of completionCriteria (or label and description) or explicit confirmation.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.completion.mode",
      "label": "Resources required",
      "type": "string",
      "group": "actions",
      "description": "Choose whether any or all selected resource requests complete this action.",
      "defaultValue": null,
      "options": [
        "any",
        "all"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.completion.objectIds",
      "label": "Recognize resource interactions",
      "type": "array",
      "group": "actions",
      "description": "Select the resources that define the learner activity, such as BMP and CBC for Order labs. Only learner-requestable resources qualify. Automatic state releases do not count.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.completion.objectIds.*",
      "label": "Resource",
      "type": "string",
      "group": "actions",
      "description": "A learner-requestable resource used to recognize the action.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.cancelOnActionIds",
      "label": "Cancel when action completes",
      "type": "array",
      "group": "actions",
      "description": "For a scheduled transition, completion of any selected action cancels this timer for the rest of the run, including after state re-entry. The action may stay in its current state. Selected unfinished actions stay available while this timer is pending once their source event has occurred, even after another event becomes current. Future-source actions remain unavailable. Completing the action enters its destination; a self-loop stays in the current event. Conclusion states do not allow recovery. Cancellation does not undo a deterioration that already occurred. The timer starts when the source event first occurs and remains pending when other events occur. Ending the scenario cancels pending timers.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.cancelOnActionIds.*",
      "label": "Completed action",
      "type": "string",
      "group": "actions",
      "description": "A learner action whose completion prevents this scheduled transition from firing.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects",
      "label": "Vital signs",
      "type": "object",
      "group": "actions",
      "description": "Vital values applied during the transition. Builder authors patient changes on destination state vitals.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.hr",
      "label": "Heart rate · bpm",
      "type": "number",
      "group": "actions",
      "description": "Heart rate in beats per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.sbp",
      "label": "Systolic BP · mmHg",
      "type": "number",
      "group": "actions",
      "description": "Noninvasive systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.dbp",
      "label": "Diastolic BP · mmHg",
      "type": "number",
      "group": "actions",
      "description": "Noninvasive diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.rr",
      "label": "Respiratory rate · /min",
      "type": "number",
      "group": "actions",
      "description": "Respiratory rate in breaths per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.spo2",
      "label": "Oxygen saturation · %",
      "type": "number",
      "group": "actions",
      "description": "Peripheral oxygen saturation as a percentage from 0 to 100. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.temperature",
      "label": "Temperature · °C",
      "type": "number",
      "group": "actions",
      "description": "Body temperature in degrees Celsius. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.etco2",
      "label": "End-tidal CO₂ · mmHg",
      "type": "number",
      "group": "actions",
      "description": "End-tidal carbon dioxide pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.artSbp",
      "label": "Arterial systolic BP · mmHg",
      "type": "number",
      "group": "actions",
      "description": "Invasive arterial systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.actions.*.effects.artDbp",
      "label": "Arterial diastolic BP · mmHg",
      "type": "number",
      "group": "actions",
      "description": "Invasive arterial diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects",
      "label": "Resources",
      "type": "array",
      "group": "objects",
      "description": "Medications, tests, procedures, and other resources available in the case. Each resource can be used once per run; use separate entries for repeat doses or serial results.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*",
      "label": "*",
      "type": "object",
      "group": "objects",
      "description": "One resource with learner-facing information, release timing, and any authored response or patient changes.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.id",
      "label": "Identifier",
      "type": "string",
      "group": "objects",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.type",
      "label": "Resource type",
      "type": "string",
      "group": "objects",
      "description": "Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects.",
      "defaultValue": null,
      "options": [
        "medication",
        "diagnostic",
        "procedure",
        "equipment",
        "consultation",
        "information"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.name",
      "label": "Resource name",
      "type": "string",
      "group": "objects",
      "description": "The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.diagnosticCategory",
      "label": "Diagnostic category",
      "type": "string",
      "group": "objects",
      "description": "Required only for diagnostic resources: lab for specimen-based tests, imaging for images and reports, or physiologic for recordings and functional measurements such as ECG, EEG, and spirometry.",
      "defaultValue": null,
      "options": [
        "lab",
        "imaging",
        "physiologic"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required for diagnostic resources; omitted for other resource types."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.description",
      "label": "Description shown to the learner",
      "type": "string",
      "group": "objects",
      "description": "Optional context about the resource and why it is available. Leave blank when the name is sufficient. Put findings released after use in Learner result.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.result",
      "label": "Learner result",
      "type": "string",
      "group": "objects",
      "description": "Information shown when the resource response is released, such as a report, consultation advice, or procedure outcome. If empty, the description is shown instead.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.labResults",
      "label": "Lab results",
      "type": "array",
      "group": "objects",
      "description": "Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.labResults.*",
      "label": "*",
      "type": "object",
      "group": "objects",
      "description": "One laboratory measurement, with its test name, reported value, and unit.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.labResults.*.name",
      "label": "Test",
      "type": "string",
      "group": "objects",
      "description": "The test or analyte name, such as Hemoglobin.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.labResults.*.value",
      "label": "Value",
      "type": "string",
      "group": "objects",
      "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.labResults.*.unit",
      "label": "Unit",
      "type": "string",
      "group": "objects",
      "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.image",
      "label": "Image",
      "type": "object",
      "group": "objects",
      "description": "An embedded image released with this resource, with a text description of its content.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.image.dataUrl",
      "label": "Image",
      "type": "string",
      "group": "objects",
      "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.image.description",
      "label": "Image description",
      "type": "string",
      "group": "objects",
      "description": "Describe the image and relevant visible findings for readers who cannot see it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.releaseOnStateId",
      "label": "Release result",
      "type": "string",
      "group": "objects",
      "description": "Attach this result to a step. Diagnostics can also be requested individually; learner action completion does not deliver unrequested tests. Timed or facilitator event entry delivers linked results automatically. The response delay starts when the individual request or automatic delivery is recorded.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.delaySeconds",
      "label": "Response delay · seconds",
      "type": "number",
      "group": "objects",
      "description": "Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects",
      "label": "Vital signs",
      "type": "object",
      "group": "objects",
      "description": "Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.hr",
      "label": "Heart rate · bpm",
      "type": "number",
      "group": "objects",
      "description": "Heart rate in beats per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.sbp",
      "label": "Systolic BP · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Noninvasive systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.dbp",
      "label": "Diastolic BP · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Noninvasive diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.rr",
      "label": "Respiratory rate · /min",
      "type": "number",
      "group": "objects",
      "description": "Respiratory rate in breaths per minute. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.spo2",
      "label": "Oxygen saturation · %",
      "type": "number",
      "group": "objects",
      "description": "Peripheral oxygen saturation as a percentage from 0 to 100. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.temperature",
      "label": "Temperature · °C",
      "type": "number",
      "group": "objects",
      "description": "Body temperature in degrees Celsius. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.etco2",
      "label": "End-tidal CO₂ · mmHg",
      "type": "number",
      "group": "objects",
      "description": "End-tidal carbon dioxide pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.artSbp",
      "label": "Arterial systolic BP · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Invasive arterial systolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effects.artDbp",
      "label": "Arterial diastolic BP · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Invasive arterial diastolic blood pressure in mmHg. Enter the resulting measurement, not an amount of change; omit to leave it unspecified or retain the previous value during a transition.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.advanceToStateId",
      "label": "Destination event",
      "type": "string",
      "group": "objects",
      "description": "Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent",
      "label": "effectPercent",
      "type": "object",
      "group": "objects",
      "description": "Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.hr",
      "label": "hr",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to heart rate in beats per minute. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.sbp",
      "label": "sbp",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to noninvasive systolic blood pressure in mmhg. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.dbp",
      "label": "dbp",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to noninvasive diastolic blood pressure in mmhg. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.rr",
      "label": "rr",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to respiratory rate in breaths per minute. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.spo2",
      "label": "spo2",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to peripheral oxygen saturation as a percentage from 0 to 100. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.temperature",
      "label": "temperature",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to body temperature in degrees celsius. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.etco2",
      "label": "etco2",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to end-tidal carbon dioxide pressure in mmhg. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.artSbp",
      "label": "artSbp",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to invasive arterial systolic blood pressure in mmhg. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.effectPercent.artDbp",
      "label": "artDbp",
      "type": "number",
      "group": "objects",
      "description": "Percentage change to invasive arterial diastolic blood pressure in mmhg. Applied once when the resource response arrives: -20 reduces the current value by 20%; 20 increases it by 20%. Omit to leave unchanged.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.monitorConnection",
      "label": "Monitor connection",
      "type": "object",
      "group": "objects",
      "description": "Connect or disconnect an equipment channel when this resource response is released.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.monitorConnection.channel",
      "label": "Monitor channel",
      "type": "string",
      "group": "objects",
      "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate.",
      "defaultValue": null,
      "options": [
        "ecg",
        "bloodPressure",
        "spo2",
        "respiration",
        "temperature",
        "capnography",
        "arterialPressure",
        "all",
        "standard"
      ],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.monitorConnection.connected",
      "label": "Connected",
      "type": "boolean",
      "group": "objects",
      "description": "True connects this channel; false disconnects it.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.orthostaticResponse",
      "label": "Orthostatic BP response",
      "type": "object",
      "group": "objects",
      "description": "Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.orthostaticResponse.systolicDrop",
      "label": "Systolic drop · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.orthostaticResponse.diastolicDrop",
      "label": "Diastolic drop · mmHg",
      "type": "number",
      "group": "objects",
      "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Required when the containing object is present."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.medicationResponse",
      "label": "Medication response preset",
      "type": "string",
      "group": "objects",
      "description": "Versioned educational medication response, applied once to current vitals after the response delay. Requires a known patient age of at least 18 years. Do not combine with absolute, percentage or event responses. Exact changes are simulation assumptions; author condition-specific responses when needed.",
      "defaultValue": null,
      "options": [
        "fluid-250-v1",
        "fluid-500-v1",
        "fluid-1000-v1",
        "antipyretic-v1",
        "pressor-v1",
        "alpha-pressor-v1",
        "epinephrine-v1",
        "atropine-v1",
        "rate-control-v1",
        "beta-blocker-v1",
        "vasodilator-v1",
        "nitrate-v1",
        "sedative-v1",
        "propofol-sedation-v1",
        "propofol-induction-v1",
        "ketamine-analgesia-v1",
        "ketamine-induction-v1",
        "dexmedetomidine-v1"
      ],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    },
    {
      "path": "events.objects.*.source",
      "label": "Source / attribution",
      "type": "string",
      "group": "objects",
      "description": "Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy.",
      "defaultValue": null,
      "options": [],
      "source": "Scenario schema",
      "notes": [
        "Optional; omitted values remain unspecified."
      ],
      "status": "supported"
    }
  ]
}
