Skip to documentation
ReferenceImplementation

Implementation

Suite parameter guide

Meaning, authoring detail, optional values, and runtime behavior for every current scenario parameter.

This guide describes the current Scenario type. The profile-schema download defines structural requiredness and the validator applies additional constraints. Optional means a value may be omitted; it does not mean normal, negative, or zero. Arrays contain separate items; text records map an authored heading to a finding.

metadata.title (string): a concise case title that distinguishes it in a library. metadata.description (string): the premise, scope, and intended activity; include what makes the scenario useful without relying on the title alone. metadata.author (string): attribution as one display string, not an account identifier or a structured contributor list.

metadata.diagnosis (optional string): the authored diagnostic or subject-matter focus, such as “Communication rehearsal.” metadata.specialty (optional string): the intended discipline. metadata.level (optional string): expected learner stage; explain assumed capability in prerequisites instead of relying solely on “Intermediate.” These strings are descriptive metadata, not enforced taxonomies or access controls.

metadata.durationMinutes (optional number): planned scenario duration in minutes, accepted from 0 through 1440. It neither starts a timer nor ends a run. Put setup and debrief expectations in preparation or education text; no separate structured setup/debrief duration exists in this profile.

patients (object): one patient profile despite the plural name. patients.name (string) is the fictional display name. patients.context (string) explains why the patient is here and the immediate situation. Multiple simultaneous patients require a future schema and runtime change; do not place an array here.

patients.demographics.age (optional number): authored age; use years consistently in current content and state finer infant age in the narrative when needed, because this field has no age-unit discriminator. gender (optional string): the person's authored gender description. weightKg and heightCm (optional numbers): weight in kilograms and height in centimeters. These values do not automatically calculate dosing or other physiology.

patients.history.chiefComplaint (optional string): the presenting concern in the patient's or referring team's words. presentIllness (optional string): onset, sequence, progression, relevant associated findings, and interventions before arrival. Keep the timeline consistent with the baseline state and available results.

patients.history.medical and surgical (optional string arrays): separate relevant conditions and prior procedures, with timing or consequences when useful. medications (optional string array): background medication history, including an authored dose, route, frequency, or last use in text when relevant; this is not an executable medication order. allergies (optional array, maximum 64 entries): { substance: string, reaction?: string, severity?: mild | moderate | severe | unknown }. Each text field permits up to 1,000 characters. Severity describes the authored reaction, not predicted future risk; omitted means unspecified and unknown is explicit. Text entries are also accepted, including unknown or no-known-allergy statements. Never infer reaction or severity from free text. An empty list does not establish that allergies were checked.

patients.history.family and social (optional strings): relevant family context, living situation, supports, exposures, and functional context. patients.history.ros (optional string record): system name to authored symptom findings, for example general → “No additional symptoms reported when asked.” Record explicit negatives only when authored; omission has no clinical meaning. For a wholly unobtainable ROS, use a single key “Unable to obtain” with an explicit reason statement (usim:unavailable-ros@1.0.0); do not combine this status with normal system defaults or infer it from the diagnosis.

patients.examination (optional string record): examination heading to observable finding. Include method or access conditions when relevant, such as a finding revealed only on a focused examination. These strings describe content; they do not create examination-triggered events. Use actions and states to model an explicit decision path.

patients.vitals (optional object): initial authored numeric measurements. hr is heart rate in beats/minute; sbp and dbp are systolic and diastolic pressure in mmHg; rr is breaths/minute; spo2 is percent from 0 to 100; temperature follows the current example's Celsius convention; etco2 follows its mmHg convention. The current payload has no unit field or conversion mechanism, so do not mix temperature or gas-pressure conventions. These are measurement labels, not target ranges.

Vital value validation: all supplied numbers must be finite and nonnegative; spo2 is capped at 100 and the other measurements at 1000. These broad software limits are not physiologic reference intervals. Missing measurements remain unspecified at initialization. Later partial overrides retain prior measurements; zero is a supplied value and never a missing-data marker.

environment.setting (string): clinical or learning location and the circumstances in that location. requirements (string array): tasks the simulation center must complete before the session, one concrete action and setup outcome per entry (for example, program initial manikin vitals, stage result cards for timed release, or brief actors). Do not list equipment here or disguise inventory items with "Ensure available" or "Prepare". equipment (optional string array): named equipment, supplies, manikins, documents, and other resources with relevant configuration or substitutions. These are portable content requirements, not Center inventory counts or room bookings.

environment.actors (optional array): each actor has id, name, role, and brief strings. Optional demographics contains age (years, 0–150) and gender; voice mode uses these authored values for voice selection and delivery, with a neutral adult fallback. No demographics are inferred from names or occupations. id distinguishes the actor; name is the displayed person or character; role describes the simulation responsibility; brief contains opening behavior, information boundaries, cues, and responses. An actor does not become a logged-in facilitator or an automated agent merely by being listed.

education.objectives (array): observable learning outcomes, each either text or { id, statement, acgmeCompetencies? }. Structured objectives have stable IDs and optional unique ACGME core competency codes PC, MK, PBLI, ICS, PROF, SBP. education.assessment[].objectiveId optionally links an action-based assessment criterion to a structured objective. Mappings do not establish Milestone levels or competence. debrief (string): prompts connecting observations and decisions to the objectives. audience (optional string): who the exercise is for. prerequisites (optional Markdown string): formatted instructions and module links for knowledge, technical skills, or preparation assumed. prerequisiteDocuments (optional array): uploaded preparation files with id, name, and dataUrl; use the upload control, never invent document bytes. Learners can download these before starting; completion is not tracked. rationale (optional string): why this scenario and its decisions address the learning need.

events.states (array): the scenario's phases. Each id is a stable reference used by actions; title is the human-facing name and can change independently. kind is baseline, triggered, scheduled, or conclusion. Author exactly one baseline and at least one conclusion. A scheduled kind alone does not schedule anything: an incoming action with trigger scheduled supplies the timer.

patients.monitor and state.monitor optionally select a schematic monitor rhythm using a canonical rhythm identifier; pulsePresent is a separate boolean. An explicit state rhythm replaces the preceding rhythm/pulse configuration; a connection-only event preserves it. State monitor connections patch only supplied channels and persist until changed. Never infer current rhythm solely from the diagnosis or heart rate. See docs/monitor-rhythms.md.

State learnerNote (string): the prompt or information intended for the learner at this phase. tutorNote (string): expected behavior, facilitation instructions, cues, and the reason for the transition. key (optional boolean): marks an educationally important phase; it is not a passing score or a guarantee that all paths visit it. vitals (optional vital object): values overlaid when entering the state, retaining other measurements.

events.actions (array): directed transitions. id identifies the edge; label describes the choice or timed event; from and to reference existing state IDs. Separate edges represent the same decision in different source states. Labels use 2–6 words, at most 48 characters, describing observable actions or timed events. Put conditions and what happens in the optional description string (up to 6000 characters). Do not append destination titles.

Action trigger (optional enum action or scheduled): omitted represents a learner activity completed by AI interpretation, optional direct resource recognition, or explicit learner/facilitator confirmation. completionCriteria supplies the AI criterion; omitted criteria fall back to the label and description. delaySeconds (optional number): for a scheduled edge, a strictly positive delay of at most 86400 simulated seconds measured from source-state entry. A delay on a manual edge does not postpone the click. Each scheduled edge starts once on the first occurrence of its source event and remains pending across later events. Multiple outgoing timers run independently; re-entry does not restart them. Explicit cancellation or conclusion stops pending timers.

Action labels name learner activities. Suite completionCriteria is an optional plain-language criterion evaluated by the AI against learner intent, conversation, and simulator interactions; equivalent wording is accepted. If omitted, the label and description provide the criterion. The AI returns evidence-backed executions separately from ambiguous choices. Multiple explicit orders can be recorded in one atomic batch before evaluating authored transitions. Only currently available actions qualify, including selected timer-canceling actions whose source events have occurred; stale interpretations and competing state transitions are rejected. Fulfilled actions that converge on the same destination without transition effects may be recorded together; the destination is entered once. The AI cannot invent states or patient effects. Explicit facilitator confirmation remains available. Optional completion { mode: any | all, objectIds: Resource ID[] } adds direct resource recognition; automatic state releases do not count. Request completion remains distinct from delayed result availability.

Suite scheduled transitions may declare cancelOnActionIds: Action ID[]. Completion of any referenced learner action prevents the scheduled transition for the rest of that run, including after re-entry; self-loop actions can cancel deterioration without changing the current state or restarting its timer. Cancellation never reverses an event that already fired. While a timer is pending, selected unfinished actions remain available after their source event has occurred, even if another event is current. Future-source actions stay unavailable; completion still follows the selected action's destination, and a self-loop stays in the current event. Conclusion states do not allow this recovery. Scheduled delays are relative to the first occurrence of the source event and remain pending after other events occur. Each scheduled edge fires at most once per run. At a deadline, commands are processed in order: a completion saved before clock advancement cancels the pending transition; advancing the clock to the deadline first fires it.

Suite facilitator confirmation requests every selected resource for an all-resource action if not already requested. For any-resource actions, confirmation records the observed activity without guessing which alternative was used; record the specific resource separately when results are needed. Automatic recognition does not request unchosen alternatives. Builder authors resource links only in the state inspector under Results → Configure resources, using releaseOnStateId to reveal a resource on state entry. Transitions expose no linked-resource picker or resource configuration sheet; Edit destination state opens the owning state inspector. action.objectId requests a resource during a transition. state.resourceTrigger enters a state when its requested results are available.

Action objectId (optional string): requests the resource during the transition if not already used. Builder authors resource links in the state inspector under Results → Configure resources. effects (optional vital object): absolute vital values applied during the transition. Builder authors scenario-specific patient changes on destination state vitals. For an immediate object-linked transition, object effects apply first, action effects second, and destination-state values last. Avoid overlapping values unless that precedence is intentional.

State resourceTrigger (optional { mode: any | all, objectIds: string[] }): enters the state once when any or all selected learner-requested resources have available results, after their response delays. A request alone does not satisfy a delayed result. Incoming transitions remain alternative paths. For labs-resulted events, select the labs here rather than creating a transition that enters the state immediately when ordering them.

events.objects (optional array): reusable resources. id identifies the resource; type is medication, diagnostic, procedure, equipment, consultation, or information. Diagnostic resources require diagnosticCategory: lab, imaging, or physiologic; other types must omit it. Procedures include actions performed on the patient by nursing, physicians, or other clinicians. Equipment identifies the device, not its insertion or application. name is the label; description supplies context and purpose. Classification does not activate a type-specific physiology engine.

Object labResults (optional array of name/value/unit strings) preserves editable laboratory values including decimals and qualitative results. image (optional dataUrl/description object) embeds a validated PNG, JPEG, or WebP, at most 12 MiB of data URL characters. releaseOnStateId (optional state ID) releases once on entry to that event after delaySeconds, blocking early manual requests; this takes precedence over action objectId requests. Deleting the state unlinks the release. advanceToStateId enters an existing event when the response is released; this excludes resource vital effects. effectPercent applies signed percentages to current values at response time and excludes absolute effects. Lab values precede result notes in learner output.

Object result (optional string): learner-facing information returned on use; blank or omitted result falls back to description. delaySeconds (optional number): time from request until availability, from 0 through 86400 simulated seconds; omitted means immediate. source (optional string): provenance or source citation text, not a bundled asset, authenticated URL, or clinical verification flag.

Object effects (optional vital object): absolute values applied when the result becomes available, immediately for a zero delay. The object can be requested directly by the runtime or through an action reference; each object is used once per run. A later action linked to an already-used object still transitions but does not request it again. Repeated dose or serial-result behavior needs distinct objects.

Timing collisions: delayed result effects due at a scheduled transition's instant apply before the transition's action and destination values. All equally due scheduled edges fire in action array order, unless an earlier event ends the scenario. Later events overwrite only the vital values they specify. A delayed result can arrive after leaving the state that requested it. Conclusion stops further clock advancement, so do not rely on a later result for essential closure.

Scenario content excludes graph positions, publication revision identity, scheduled delivery dates, learner identities, and run observations. Use the Suite package envelope for import/export; the downloadable scenario example is the inner content only. New clinical variables, media manifests, conditional rules, or assessment structures require explicit profile support rather than extra undocumented JSON keys.

Field reference

metadata

metadata

object · Required when the parent is present

Case identification, authorship, and the teaching context used to find and select this scenario.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 3
    }
  },
  "type": "object",
  "required": [
    "title",
    "description",
    "author"
  ],
  "properties": {
    "title": {
      "title": "Title",
      "maxLength": 160,
      "x-usim": {
        "authoring": {
          "span": "full"
        }
      },
      "type": "string",
      "description": "A concise case title that helps authors and learners identify this scenario."
    },
    "description": {
      "title": "Description",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea",
          "span": "full"
        }
      },
      "type": "string",
      "description": "The scenario premise, scope, and intended learning activity."
    },
    "author": {
      "title": "Author",
      "maxLength": 160,
      "x-usim": {
        "authoring": {
          "span": "full"
        }
      },
      "type": "string",
      "description": "The person or team credited with creating this scenario."
    },
    "diagnosis": {
      "title": "Diagnosis or case theme",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {
          "editor": "diagnosis",
          "span": "full",
          "group": "Scenario context"
        }
      },
      "type": "string",
      "description": "The main diagnosis or case theme that guides the scenario."
    },
    "specialty": {
      "title": "Specialty",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {
          "editor": "specialty",
          "group": "Scenario context"
        }
      },
      "type": "string",
      "description": "The clinical specialty or specialties relevant to this scenario."
    },
    "level": {
      "title": "Learner level",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {
          "editor": "level",
          "group": "Scenario context"
        }
      },
      "type": "string",
      "description": "The intended learner level and experience."
    },
    "durationMinutes": {
      "title": "Suggested duration · minutes",
      "minimum": 1,
      "maximum": 1440,
      "x-usim": {
        "unit": "min",
        "authoring": {
          "group": "Scenario context"
        }
      },
      "type": "number",
      "description": "The suggested scenario duration in minutes; this does not control the simulation clock."
    }
  },
  "description": "Case identification, authorship, and the teaching context used to find and select this scenario."
}

Title

metadata.title

string · Required when the parent is present

A concise case title that helps authors and learners identify this scenario.

  • Maximum length: 160 characters

Field schema

{
  "title": "Title",
  "maxLength": 160,
  "x-usim": {
    "authoring": {
      "span": "full"
    }
  },
  "type": "string",
  "description": "A concise case title that helps authors and learners identify this scenario."
}

Description

metadata.description

string · Required when the parent is present

The scenario premise, scope, and intended learning activity.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Description",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea",
      "span": "full"
    }
  },
  "type": "string",
  "description": "The scenario premise, scope, and intended learning activity."
}

Author

metadata.author

string · Required when the parent is present

The person or team credited with creating this scenario.

  • Maximum length: 160 characters

Field schema

{
  "title": "Author",
  "maxLength": 160,
  "x-usim": {
    "authoring": {
      "span": "full"
    }
  },
  "type": "string",
  "description": "The person or team credited with creating this scenario."
}

Diagnosis or case theme

metadata.diagnosis

string · Optional; an omitted value is not a normal, negative, or zero value

The main diagnosis or case theme that guides the scenario.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Diagnosis or case theme",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {
      "editor": "diagnosis",
      "span": "full",
      "group": "Scenario context"
    }
  },
  "type": "string",
  "description": "The main diagnosis or case theme that guides the scenario."
}

Specialty

metadata.specialty

string · Optional; an omitted value is not a normal, negative, or zero value

The clinical specialty or specialties relevant to this scenario.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Specialty",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {
      "editor": "specialty",
      "group": "Scenario context"
    }
  },
  "type": "string",
  "description": "The clinical specialty or specialties relevant to this scenario."
}

Learner level

metadata.level

string · Optional; an omitted value is not a normal, negative, or zero value

The intended learner level and experience.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Learner level",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {
      "editor": "level",
      "group": "Scenario context"
    }
  },
  "type": "string",
  "description": "The intended learner level and experience."
}

Suggested duration · minutes

metadata.durationMinutes

number · Optional; an omitted value is not a normal, negative, or zero value

The suggested scenario duration in minutes; this does not control the simulation clock.

  • Minimum: 1
  • Maximum: 1440

Field schema

{
  "title": "Suggested duration · minutes",
  "minimum": 1,
  "maximum": 1440,
  "x-usim": {
    "unit": "min",
    "authoring": {
      "group": "Scenario context"
    }
  },
  "type": "number",
  "description": "The suggested scenario duration in minutes; this does not control the simulation clock."
}

patients

patients

object · Required when the parent is present

The fictional patient's presentation, history, examination, and starting observations.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "name",
    "context"
  ],
  "properties": {
    "name": {
      "title": "Patient name",
      "maxLength": 160,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The fictional patient's display name."
    },
    "context": {
      "title": "Patient context",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "description": "The patient's opening situation and the context available at the start of the scenario."
    },
    "photo": {
      "title": "Patient photo",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "editor": "patient-photo",
          "span": "full"
        }
      },
      "type": "object",
      "required": [
        "dataUrl",
        "description"
      ],
      "properties": {
        "dataUrl": {
          "title": "Photo",
          "maxLength": 12582912,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "The patient photo encoded as a data URL. Use the photo upload control to populate it."
        },
        "description": {
          "title": "Photo description",
          "maxLength": 1000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "Describe the patient's appearance for readers who cannot see the photo."
        }
      },
      "description": "An optional embedded patient photo that travels with the scenario. Upload a PNG, JPEG, or WebP image."
    },
    "demographics": {
      "title": "Demographics",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "editor": "demographics"
        }
      },
      "type": "object",
      "properties": {
        "age": {
          "title": "Age · years",
          "minimum": 0,
          "maximum": 150,
          "x-usim": {
            "unit": "years",
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 150,
                "step": 1
              }
            }
          },
          "type": "number",
          "description": "Patient age in years. Use the patient narrative to clarify a young infant's age when needed."
        },
        "weightKg": {
          "title": "Weight · kg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "kg",
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 300,
                "step": 1,
                "style": "ruler"
              }
            }
          },
          "type": "number",
          "description": "Patient weight, stored in kilograms. The editor can also display pounds."
        },
        "heightCm": {
          "title": "Height · cm",
          "minimum": 0,
          "maximum": 400,
          "x-usim": {
            "unit": "cm",
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 250,
                "step": 1,
                "style": "ruler"
              }
            }
          },
          "type": "number",
          "description": "Patient height, stored in centimeters. The editor can also display feet and inches."
        },
        "gender": {
          "title": "Gender",
          "maxLength": 160,
          "x-usim": {
            "authoring": {
              "editor": "gender"
            }
          },
          "type": "string",
          "description": "The patient's authored gender description."
        },
        "heightUnit": {
          "type": "string",
          "title": "Height display unit",
          "enum": [
            "cm",
            "in",
            "ft-in"
          ],
          "x-usim": {
            "authoring": {
              "hidden": true
            }
          },
          "description": "Preferred height display unit in the scenario editor; the measurement remains stored in centimeters."
        },
        "weightUnit": {
          "type": "string",
          "title": "Weight display unit",
          "enum": [
            "kg",
            "lb"
          ],
          "x-usim": {
            "authoring": {
              "hidden": true
            }
          },
          "description": "Preferred weight display unit in the scenario editor; the measurement remains stored in kilograms."
        }
      },
      "description": "Patient age, gender, height, and weight used to describe the case."
    },
    "history": {
      "title": "History",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "columns": 6
        }
      },
      "type": "object",
      "properties": {
        "chiefComplaint": {
          "title": "Chief complaint",
          "maxLength": 8000,
          "x-usim": {
            "authoring": {
              "span": "full"
            }
          },
          "type": "string",
          "description": "The main symptom or concern prompting care, ideally in the patient's own words. This is the scenario title shown to learners."
        },
        "presentIllness": {
          "title": "History of present illness",
          "maxLength": 8000,
          "x-usim": {
            "authoring": {
              "editor": "textarea",
              "span": "full"
            }
          },
          "type": "string",
          "description": "Describe symptom onset, progression, associated symptoms, relevant negatives, and treatment before arrival."
        },
        "medical": {
          "title": "Medical history / comorbidities",
          "maxItems": 64,
          "x-usim": {
            "authoring": {
              "addLabel": "Add item",
              "span": 2
            }
          },
          "type": "array",
          "items": {
            "title": "Item",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "One prior diagnosis or ongoing condition, with relevant severity or treatment."
          },
          "description": "Relevant diagnoses and comorbidities, one condition per entry. Include details that affect decisions in this case."
        },
        "surgical": {
          "title": "Surgical history",
          "maxItems": 64,
          "x-usim": {
            "authoring": {
              "addLabel": "Add item",
              "span": 2
            }
          },
          "type": "array",
          "items": {
            "title": "Item",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "One previous operation or procedure, including its approximate date and relevant outcome."
          },
          "description": "Previous operations or procedures relevant to the case, with timing and complications when useful."
        },
        "medications": {
          "title": "Home medications",
          "maxItems": 64,
          "x-usim": {
            "authoring": {
              "addLabel": "Add item",
              "span": 2
            }
          },
          "type": "array",
          "items": {
            "title": "Item",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "One home medication, using its generic name and relevant dose, route, and frequency."
          },
          "description": "Medications taken before this encounter. Include dose, route, frequency, and adherence when relevant."
        },
        "allergies": {
          "title": "Allergies",
          "maxItems": 64,
          "x-usim": {
            "authoring": {
              "editor": "allergies",
              "span": "full"
            }
          },
          "type": "array",
          "items": {
            "anyOf": [
              {
                "maxLength": 1000,
                "description": "A concise allergy history entry naming the substance and known reaction, or explicitly stating no known allergies or unknown history.",
                "type": "string"
              },
              {
                "additionalProperties": false,
                "x-usim": {
                  "authoring": {}
                },
                "type": "object",
                "required": [
                  "substance"
                ],
                "properties": {
                  "substance": {
                    "title": "Substance",
                    "maxLength": 1000,
                    "x-usim": {
                      "authoring": {}
                    },
                    "type": "string",
                    "description": "The medication, food, or other substance associated with the allergy."
                  },
                  "reaction": {
                    "title": "Reaction",
                    "maxLength": 1000,
                    "x-usim": {
                      "authoring": {}
                    },
                    "type": "string",
                    "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown."
                  },
                  "severity": {
                    "type": "string",
                    "title": "Severity",
                    "enum": [
                      "mild",
                      "moderate",
                      "severe",
                      "unknown"
                    ],
                    "description": "The reported severity of the allergic reaction; choose unknown when it has not been established."
                  }
                }
              }
            ],
            "description": "One allergy as text or as a substance, reaction, and severity record."
          },
          "description": "Known allergies and reactions. Distinguish no known allergies from an unknown allergy history."
        },
        "family": {
          "title": "Family history",
          "maxLength": 8000,
          "x-usim": {
            "authoring": {
              "editor": "textarea",
              "span": 3
            }
          },
          "type": "string",
          "description": "Family conditions or inherited risks relevant to the presentation; include pertinent negative history."
        },
        "social": {
          "title": "Social history",
          "maxLength": 8000,
          "x-usim": {
            "authoring": {
              "editor": "textarea",
              "span": 3
            }
          },
          "type": "string",
          "description": "Living situation, supports, occupation, exposures, and substance use relevant to care."
        },
        "ros": {
          "title": "Review of systems",
          "maxProperties": 64,
          "propertyNames": {
            "maxLength": 100,
            "not": {
              "enum": [
                "__proto__",
                "constructor",
                "prototype"
              ]
            }
          },
          "x-usim": {
            "authoring": {
              "editor": "ros",
              "span": "full"
            }
          },
          "type": "object",
          "patternProperties": {
            "^(.*)$": {
              "maxLength": 4000,
              "type": "string"
            }
          },
          "description": "Symptoms reported by body system, including relevant positives and negatives. Record examination findings separately."
        }
      },
      "description": "The history available about this patient, including symptoms, background, medications, and allergies."
    },
    "examination": {
      "title": "Examination",
      "maxProperties": 64,
      "propertyNames": {
        "maxLength": 100,
        "not": {
          "enum": [
            "__proto__",
            "constructor",
            "prototype"
          ]
        }
      },
      "x-usim": {
        "authoring": {
          "editor": "examination",
          "span": "full"
        }
      },
      "type": "object",
      "patternProperties": {
        "^(.*)$": {
          "maxLength": 4000,
          "type": "string"
        }
      },
      "description": "The physical examination findings available to the learner."
    },
    "monitor": {
      "title": "Monitor",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "editor": "monitor"
        }
      },
      "type": "object",
      "properties": {
        "rhythm": {
          "type": "string",
          "title": "Monitor rhythm",
          "enum": [
            "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"
          ],
          "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
        },
        "pulsePresent": {
          "title": "Pulse present",
          "type": "boolean",
          "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
        },
        "connections": {
          "title": "Monitor connections",
          "additionalProperties": false,
          "x-usim": {
            "authoring": {}
          },
          "type": "object",
          "properties": {
            "ecg": {
              "title": "ECG",
              "type": "boolean",
              "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "bloodPressure": {
              "title": "Blood pressure cuff",
              "type": "boolean",
              "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "spo2": {
              "title": "Pulse oximetry",
              "type": "boolean",
              "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "respiration": {
              "title": "Respiratory monitoring",
              "type": "boolean",
              "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "temperature": {
              "title": "Temperature probe",
              "type": "boolean",
              "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "capnography": {
              "title": "Capnography",
              "type": "boolean",
              "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "arterialPressure": {
              "title": "Arterial pressure",
              "type": "boolean",
              "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
            }
          },
          "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."
        }
      },
      "description": "The monitor configuration used to present patient observations."
    },
    "vitals": {
      "title": "Vital signs",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "columns": 3
        }
      },
      "type": "object",
      "properties": {
        "hr": {
          "title": "Heart rate · bpm",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "beats/min",
            "referenceRange": {
              "minimum": 60,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 250,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "sbp": {
          "title": "Systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 90,
              "maximum": 120,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 300,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "dbp": {
          "title": "Diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 60,
              "maximum": 80,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 200,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "rr": {
          "title": "Respiratory rate · /min",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "breaths/min",
            "referenceRange": {
              "minimum": 12,
              "maximum": 18,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 80,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "spo2": {
          "title": "Oxygen saturation · %",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "%",
            "referenceRange": {
              "minimum": 95,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 100,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "temperature": {
          "title": "Temperature · °C",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "Cel",
            "referenceRange": {
              "minimum": 36.5,
              "maximum": 37.3,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 25,
                "maximum": 45,
                "step": 0.1
              }
            }
          },
          "type": "number",
          "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."
        },
        "etco2": {
          "title": "End-tidal CO₂ · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artSbp": {
          "title": "Arterial systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artDbp": {
          "title": "Arterial diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        }
      },
      "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."
    }
  },
  "description": "The fictional patient's presentation, history, examination, and starting observations."
}

Patient name

patients.name

string · Required when the parent is present

The fictional patient's display name.

  • Maximum length: 160 characters

Field schema

{
  "title": "Patient name",
  "maxLength": 160,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The fictional patient's display name."
}

Patient context

patients.context

string · Required when the parent is present

The patient's opening situation and the context available at the start of the scenario.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Patient context",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "description": "The patient's opening situation and the context available at the start of the scenario."
}

Patient photo

patients.photo

object · Optional; an omitted value is not a normal, negative, or zero value

An optional embedded patient photo that travels with the scenario. Upload a PNG, JPEG, or WebP image.

Field schema

{
  "title": "Patient photo",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "editor": "patient-photo",
      "span": "full"
    }
  },
  "type": "object",
  "required": [
    "dataUrl",
    "description"
  ],
  "properties": {
    "dataUrl": {
      "title": "Photo",
      "maxLength": 12582912,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The patient photo encoded as a data URL. Use the photo upload control to populate it."
    },
    "description": {
      "title": "Photo description",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "Describe the patient's appearance for readers who cannot see the photo."
    }
  },
  "description": "An optional embedded patient photo that travels with the scenario. Upload a PNG, JPEG, or WebP image."
}

Photo

patients.photo.dataUrl

string · Required when the parent is present

The patient photo encoded as a data URL. Use the photo upload control to populate it.

  • Maximum length: 12582912 characters

Field schema

{
  "title": "Photo",
  "maxLength": 12582912,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The patient photo encoded as a data URL. Use the photo upload control to populate it."
}

Photo description

patients.photo.description

string · Required when the parent is present

Describe the patient's appearance for readers who cannot see the photo.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Photo description",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "Describe the patient's appearance for readers who cannot see the photo."
}

Demographics

patients.demographics

object · Optional; an omitted value is not a normal, negative, or zero value

Patient age, gender, height, and weight used to describe the case.

Field schema

{
  "title": "Demographics",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "editor": "demographics"
    }
  },
  "type": "object",
  "properties": {
    "age": {
      "title": "Age · years",
      "minimum": 0,
      "maximum": 150,
      "x-usim": {
        "unit": "years",
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 150,
            "step": 1
          }
        }
      },
      "type": "number",
      "description": "Patient age in years. Use the patient narrative to clarify a young infant's age when needed."
    },
    "weightKg": {
      "title": "Weight · kg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "kg",
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 300,
            "step": 1,
            "style": "ruler"
          }
        }
      },
      "type": "number",
      "description": "Patient weight, stored in kilograms. The editor can also display pounds."
    },
    "heightCm": {
      "title": "Height · cm",
      "minimum": 0,
      "maximum": 400,
      "x-usim": {
        "unit": "cm",
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 250,
            "step": 1,
            "style": "ruler"
          }
        }
      },
      "type": "number",
      "description": "Patient height, stored in centimeters. The editor can also display feet and inches."
    },
    "gender": {
      "title": "Gender",
      "maxLength": 160,
      "x-usim": {
        "authoring": {
          "editor": "gender"
        }
      },
      "type": "string",
      "description": "The patient's authored gender description."
    },
    "heightUnit": {
      "type": "string",
      "title": "Height display unit",
      "enum": [
        "cm",
        "in",
        "ft-in"
      ],
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "description": "Preferred height display unit in the scenario editor; the measurement remains stored in centimeters."
    },
    "weightUnit": {
      "type": "string",
      "title": "Weight display unit",
      "enum": [
        "kg",
        "lb"
      ],
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "description": "Preferred weight display unit in the scenario editor; the measurement remains stored in kilograms."
    }
  },
  "description": "Patient age, gender, height, and weight used to describe the case."
}

Age · years

patients.demographics.age

number · Optional; an omitted value is not a normal, negative, or zero value

Patient age in years. Use the patient narrative to clarify a young infant's age when needed.

  • Minimum: 0
  • Maximum: 150

Field schema

{
  "title": "Age · years",
  "minimum": 0,
  "maximum": 150,
  "x-usim": {
    "unit": "years",
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 150,
        "step": 1
      }
    }
  },
  "type": "number",
  "description": "Patient age in years. Use the patient narrative to clarify a young infant's age when needed."
}

Weight · kg

patients.demographics.weightKg

number · Optional; an omitted value is not a normal, negative, or zero value

Patient weight, stored in kilograms. The editor can also display pounds.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Weight · kg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "kg",
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 300,
        "step": 1,
        "style": "ruler"
      }
    }
  },
  "type": "number",
  "description": "Patient weight, stored in kilograms. The editor can also display pounds."
}

Height · cm

patients.demographics.heightCm

number · Optional; an omitted value is not a normal, negative, or zero value

Patient height, stored in centimeters. The editor can also display feet and inches.

  • Minimum: 0
  • Maximum: 400

Field schema

{
  "title": "Height · cm",
  "minimum": 0,
  "maximum": 400,
  "x-usim": {
    "unit": "cm",
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 250,
        "step": 1,
        "style": "ruler"
      }
    }
  },
  "type": "number",
  "description": "Patient height, stored in centimeters. The editor can also display feet and inches."
}

Gender

patients.demographics.gender

string · Optional; an omitted value is not a normal, negative, or zero value

The patient's authored gender description.

  • Maximum length: 160 characters

Field schema

{
  "title": "Gender",
  "maxLength": 160,
  "x-usim": {
    "authoring": {
      "editor": "gender"
    }
  },
  "type": "string",
  "description": "The patient's authored gender description."
}

Height display unit

patients.demographics.heightUnit

string · Optional; an omitted value is not a normal, negative, or zero value

Preferred height display unit in the scenario editor; the measurement remains stored in centimeters.

Allowed values: cm, in, ft-in

Field schema

{
  "type": "string",
  "title": "Height display unit",
  "enum": [
    "cm",
    "in",
    "ft-in"
  ],
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "description": "Preferred height display unit in the scenario editor; the measurement remains stored in centimeters."
}

Weight display unit

patients.demographics.weightUnit

string · Optional; an omitted value is not a normal, negative, or zero value

Preferred weight display unit in the scenario editor; the measurement remains stored in kilograms.

Allowed values: kg, lb

Field schema

{
  "type": "string",
  "title": "Weight display unit",
  "enum": [
    "kg",
    "lb"
  ],
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "description": "Preferred weight display unit in the scenario editor; the measurement remains stored in kilograms."
}

History

patients.history

object · Optional; an omitted value is not a normal, negative, or zero value

The history available about this patient, including symptoms, background, medications, and allergies.

Field schema

{
  "title": "History",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 6
    }
  },
  "type": "object",
  "properties": {
    "chiefComplaint": {
      "title": "Chief complaint",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "span": "full"
        }
      },
      "type": "string",
      "description": "The main symptom or concern prompting care, ideally in the patient's own words. This is the scenario title shown to learners."
    },
    "presentIllness": {
      "title": "History of present illness",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea",
          "span": "full"
        }
      },
      "type": "string",
      "description": "Describe symptom onset, progression, associated symptoms, relevant negatives, and treatment before arrival."
    },
    "medical": {
      "title": "Medical history / comorbidities",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "addLabel": "Add item",
          "span": 2
        }
      },
      "type": "array",
      "items": {
        "title": "Item",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "One prior diagnosis or ongoing condition, with relevant severity or treatment."
      },
      "description": "Relevant diagnoses and comorbidities, one condition per entry. Include details that affect decisions in this case."
    },
    "surgical": {
      "title": "Surgical history",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "addLabel": "Add item",
          "span": 2
        }
      },
      "type": "array",
      "items": {
        "title": "Item",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "One previous operation or procedure, including its approximate date and relevant outcome."
      },
      "description": "Previous operations or procedures relevant to the case, with timing and complications when useful."
    },
    "medications": {
      "title": "Home medications",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "addLabel": "Add item",
          "span": 2
        }
      },
      "type": "array",
      "items": {
        "title": "Item",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "One home medication, using its generic name and relevant dose, route, and frequency."
      },
      "description": "Medications taken before this encounter. Include dose, route, frequency, and adherence when relevant."
    },
    "allergies": {
      "title": "Allergies",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "editor": "allergies",
          "span": "full"
        }
      },
      "type": "array",
      "items": {
        "anyOf": [
          {
            "maxLength": 1000,
            "description": "A concise allergy history entry naming the substance and known reaction, or explicitly stating no known allergies or unknown history.",
            "type": "string"
          },
          {
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "substance"
            ],
            "properties": {
              "substance": {
                "title": "Substance",
                "maxLength": 1000,
                "x-usim": {
                  "authoring": {}
                },
                "type": "string",
                "description": "The medication, food, or other substance associated with the allergy."
              },
              "reaction": {
                "title": "Reaction",
                "maxLength": 1000,
                "x-usim": {
                  "authoring": {}
                },
                "type": "string",
                "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown."
              },
              "severity": {
                "type": "string",
                "title": "Severity",
                "enum": [
                  "mild",
                  "moderate",
                  "severe",
                  "unknown"
                ],
                "description": "The reported severity of the allergic reaction; choose unknown when it has not been established."
              }
            }
          }
        ],
        "description": "One allergy as text or as a substance, reaction, and severity record."
      },
      "description": "Known allergies and reactions. Distinguish no known allergies from an unknown allergy history."
    },
    "family": {
      "title": "Family history",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea",
          "span": 3
        }
      },
      "type": "string",
      "description": "Family conditions or inherited risks relevant to the presentation; include pertinent negative history."
    },
    "social": {
      "title": "Social history",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea",
          "span": 3
        }
      },
      "type": "string",
      "description": "Living situation, supports, occupation, exposures, and substance use relevant to care."
    },
    "ros": {
      "title": "Review of systems",
      "maxProperties": 64,
      "propertyNames": {
        "maxLength": 100,
        "not": {
          "enum": [
            "__proto__",
            "constructor",
            "prototype"
          ]
        }
      },
      "x-usim": {
        "authoring": {
          "editor": "ros",
          "span": "full"
        }
      },
      "type": "object",
      "patternProperties": {
        "^(.*)$": {
          "maxLength": 4000,
          "type": "string"
        }
      },
      "description": "Symptoms reported by body system, including relevant positives and negatives. Record examination findings separately."
    }
  },
  "description": "The history available about this patient, including symptoms, background, medications, and allergies."
}

Chief complaint

patients.history.chiefComplaint

string · Optional; an omitted value is not a normal, negative, or zero value

The main symptom or concern prompting care, ideally in the patient's own words. This is the scenario title shown to learners.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Chief complaint",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "span": "full"
    }
  },
  "type": "string",
  "description": "The main symptom or concern prompting care, ideally in the patient's own words. This is the scenario title shown to learners."
}

History of present illness

patients.history.presentIllness

string · Optional; an omitted value is not a normal, negative, or zero value

Describe symptom onset, progression, associated symptoms, relevant negatives, and treatment before arrival.

  • Maximum length: 8000 characters

Field schema

{
  "title": "History of present illness",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea",
      "span": "full"
    }
  },
  "type": "string",
  "description": "Describe symptom onset, progression, associated symptoms, relevant negatives, and treatment before arrival."
}

Medical history / comorbidities

patients.history.medical

array · Optional; an omitted value is not a normal, negative, or zero value

Relevant diagnoses and comorbidities, one condition per entry. Include details that affect decisions in this case.

  • Maximum entries: 64

Field schema

{
  "title": "Medical history / comorbidities",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "addLabel": "Add item",
      "span": 2
    }
  },
  "type": "array",
  "items": {
    "title": "Item",
    "maxLength": 1000,
    "x-usim": {
      "authoring": {}
    },
    "type": "string",
    "description": "One prior diagnosis or ongoing condition, with relevant severity or treatment."
  },
  "description": "Relevant diagnoses and comorbidities, one condition per entry. Include details that affect decisions in this case."
}

Item

patients.history.medical.*

string · Required when the parent is present

One prior diagnosis or ongoing condition, with relevant severity or treatment.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Item",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "One prior diagnosis or ongoing condition, with relevant severity or treatment."
}

Surgical history

patients.history.surgical

array · Optional; an omitted value is not a normal, negative, or zero value

Previous operations or procedures relevant to the case, with timing and complications when useful.

  • Maximum entries: 64

Field schema

{
  "title": "Surgical history",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "addLabel": "Add item",
      "span": 2
    }
  },
  "type": "array",
  "items": {
    "title": "Item",
    "maxLength": 1000,
    "x-usim": {
      "authoring": {}
    },
    "type": "string",
    "description": "One previous operation or procedure, including its approximate date and relevant outcome."
  },
  "description": "Previous operations or procedures relevant to the case, with timing and complications when useful."
}

Item

patients.history.surgical.*

string · Required when the parent is present

One previous operation or procedure, including its approximate date and relevant outcome.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Item",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "One previous operation or procedure, including its approximate date and relevant outcome."
}

Home medications

patients.history.medications

array · Optional; an omitted value is not a normal, negative, or zero value

Medications taken before this encounter. Include dose, route, frequency, and adherence when relevant.

  • Maximum entries: 64

Field schema

{
  "title": "Home medications",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "addLabel": "Add item",
      "span": 2
    }
  },
  "type": "array",
  "items": {
    "title": "Item",
    "maxLength": 1000,
    "x-usim": {
      "authoring": {}
    },
    "type": "string",
    "description": "One home medication, using its generic name and relevant dose, route, and frequency."
  },
  "description": "Medications taken before this encounter. Include dose, route, frequency, and adherence when relevant."
}

Item

patients.history.medications.*

string · Required when the parent is present

One home medication, using its generic name and relevant dose, route, and frequency.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Item",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "One home medication, using its generic name and relevant dose, route, and frequency."
}

Allergies

patients.history.allergies

array · Optional; an omitted value is not a normal, negative, or zero value

Known allergies and reactions. Distinguish no known allergies from an unknown allergy history.

  • Maximum entries: 64

Field schema

{
  "title": "Allergies",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "editor": "allergies",
      "span": "full"
    }
  },
  "type": "array",
  "items": {
    "anyOf": [
      {
        "maxLength": 1000,
        "description": "A concise allergy history entry naming the substance and known reaction, or explicitly stating no known allergies or unknown history.",
        "type": "string"
      },
      {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "substance"
        ],
        "properties": {
          "substance": {
            "title": "Substance",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The medication, food, or other substance associated with the allergy."
          },
          "reaction": {
            "title": "Reaction",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown."
          },
          "severity": {
            "type": "string",
            "title": "Severity",
            "enum": [
              "mild",
              "moderate",
              "severe",
              "unknown"
            ],
            "description": "The reported severity of the allergic reaction; choose unknown when it has not been established."
          }
        }
      }
    ],
    "description": "One allergy as text or as a substance, reaction, and severity record."
  },
  "description": "Known allergies and reactions. Distinguish no known allergies from an unknown allergy history."
}

*

patients.history.allergies.*

Value · Required when the parent is present

One allergy as text or as a substance, reaction, and severity record.

Field schema

{
  "anyOf": [
    {
      "maxLength": 1000,
      "description": "A concise allergy history entry naming the substance and known reaction, or explicitly stating no known allergies or unknown history.",
      "type": "string"
    },
    {
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "substance"
      ],
      "properties": {
        "substance": {
          "title": "Substance",
          "maxLength": 1000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "The medication, food, or other substance associated with the allergy."
        },
        "reaction": {
          "title": "Reaction",
          "maxLength": 1000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown."
        },
        "severity": {
          "type": "string",
          "title": "Severity",
          "enum": [
            "mild",
            "moderate",
            "severe",
            "unknown"
          ],
          "description": "The reported severity of the allergic reaction; choose unknown when it has not been established."
        }
      }
    }
  ],
  "description": "One allergy as text or as a substance, reaction, and severity record."
}

Substance

patients.history.allergies.*.substance

string · Optional; an omitted value is not a normal, negative, or zero value

The medication, food, or other substance associated with the allergy.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Substance",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The medication, food, or other substance associated with the allergy."
}

Reaction

patients.history.allergies.*.reaction

string · Optional; an omitted value is not a normal, negative, or zero value

What happened after exposure, such as hives or wheezing. State when the reaction is unknown.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Reaction",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "What happened after exposure, such as hives or wheezing. State when the reaction is unknown."
}

Severity

patients.history.allergies.*.severity

string · Optional; an omitted value is not a normal, negative, or zero value

The reported severity of the allergic reaction; choose unknown when it has not been established.

Allowed values: mild, moderate, severe, unknown

Field schema

{
  "type": "string",
  "title": "Severity",
  "enum": [
    "mild",
    "moderate",
    "severe",
    "unknown"
  ],
  "description": "The reported severity of the allergic reaction; choose unknown when it has not been established."
}

Family history

patients.history.family

string · Optional; an omitted value is not a normal, negative, or zero value

Family conditions or inherited risks relevant to the presentation; include pertinent negative history.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Family history",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea",
      "span": 3
    }
  },
  "type": "string",
  "description": "Family conditions or inherited risks relevant to the presentation; include pertinent negative history."
}

Social history

patients.history.social

string · Optional; an omitted value is not a normal, negative, or zero value

Living situation, supports, occupation, exposures, and substance use relevant to care.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Social history",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea",
      "span": 3
    }
  },
  "type": "string",
  "description": "Living situation, supports, occupation, exposures, and substance use relevant to care."
}

Review of systems

patients.history.ros

object · Optional; an omitted value is not a normal, negative, or zero value

Symptoms reported by body system, including relevant positives and negatives. Record examination findings separately.

Field schema

{
  "title": "Review of systems",
  "maxProperties": 64,
  "propertyNames": {
    "maxLength": 100,
    "not": {
      "enum": [
        "__proto__",
        "constructor",
        "prototype"
      ]
    }
  },
  "x-usim": {
    "authoring": {
      "editor": "ros",
      "span": "full"
    }
  },
  "type": "object",
  "patternProperties": {
    "^(.*)$": {
      "maxLength": 4000,
      "type": "string"
    }
  },
  "description": "Symptoms reported by body system, including relevant positives and negatives. Record examination findings separately."
}

Examination

patients.examination

object · Optional; an omitted value is not a normal, negative, or zero value

The physical examination findings available to the learner.

Field schema

{
  "title": "Examination",
  "maxProperties": 64,
  "propertyNames": {
    "maxLength": 100,
    "not": {
      "enum": [
        "__proto__",
        "constructor",
        "prototype"
      ]
    }
  },
  "x-usim": {
    "authoring": {
      "editor": "examination",
      "span": "full"
    }
  },
  "type": "object",
  "patternProperties": {
    "^(.*)$": {
      "maxLength": 4000,
      "type": "string"
    }
  },
  "description": "The physical examination findings available to the learner."
}

Monitor

patients.monitor

object · Optional; an omitted value is not a normal, negative, or zero value

The monitor configuration used to present patient observations.

Field schema

{
  "title": "Monitor",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "editor": "monitor"
    }
  },
  "type": "object",
  "properties": {
    "rhythm": {
      "type": "string",
      "title": "Monitor rhythm",
      "enum": [
        "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"
      ],
      "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
    },
    "pulsePresent": {
      "title": "Pulse present",
      "type": "boolean",
      "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
    },
    "connections": {
      "title": "Monitor connections",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "properties": {
        "ecg": {
          "title": "ECG",
          "type": "boolean",
          "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "bloodPressure": {
          "title": "Blood pressure cuff",
          "type": "boolean",
          "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "spo2": {
          "title": "Pulse oximetry",
          "type": "boolean",
          "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "respiration": {
          "title": "Respiratory monitoring",
          "type": "boolean",
          "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "temperature": {
          "title": "Temperature probe",
          "type": "boolean",
          "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "capnography": {
          "title": "Capnography",
          "type": "boolean",
          "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "arterialPressure": {
          "title": "Arterial pressure",
          "type": "boolean",
          "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
        }
      },
      "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."
    }
  },
  "description": "The monitor configuration used to present patient observations."
}

Monitor rhythm

patients.monitor.rhythm

string · Optional; an omitted value is not a normal, negative, or zero value

The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse.

Allowed values: 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

Field schema

{
  "type": "string",
  "title": "Monitor rhythm",
  "enum": [
    "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"
  ],
  "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
}

Pulse present

patients.monitor.pulsePresent

boolean · Optional; an omitted value is not a normal, negative, or zero value

Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm.

Field schema

{
  "title": "Pulse present",
  "type": "boolean",
  "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
}

Monitor connections

patients.monitor.connections

object · Optional; an omitted value is not a normal, negative, or zero value

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.

Field schema

{
  "title": "Monitor connections",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "properties": {
    "ecg": {
      "title": "ECG",
      "type": "boolean",
      "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "bloodPressure": {
      "title": "Blood pressure cuff",
      "type": "boolean",
      "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "spo2": {
      "title": "Pulse oximetry",
      "type": "boolean",
      "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "respiration": {
      "title": "Respiratory monitoring",
      "type": "boolean",
      "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "temperature": {
      "title": "Temperature probe",
      "type": "boolean",
      "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "capnography": {
      "title": "Capnography",
      "type": "boolean",
      "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "arterialPressure": {
      "title": "Arterial pressure",
      "type": "boolean",
      "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
    }
  },
  "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."
}

ECG

patients.monitor.connections.ecg

boolean · Optional; an omitted value is not a normal, negative, or zero value

ECG: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "ECG",
  "type": "boolean",
  "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Blood pressure cuff

patients.monitor.connections.bloodPressure

boolean · Optional; an omitted value is not a normal, negative, or zero value

Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Blood pressure cuff",
  "type": "boolean",
  "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Pulse oximetry

patients.monitor.connections.spo2

boolean · Optional; an omitted value is not a normal, negative, or zero value

Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Pulse oximetry",
  "type": "boolean",
  "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Respiratory monitoring

patients.monitor.connections.respiration

boolean · Optional; an omitted value is not a normal, negative, or zero value

Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Respiratory monitoring",
  "type": "boolean",
  "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Temperature probe

patients.monitor.connections.temperature

boolean · Optional; an omitted value is not a normal, negative, or zero value

Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Temperature probe",
  "type": "boolean",
  "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Capnography

patients.monitor.connections.capnography

boolean · Optional; an omitted value is not a normal, negative, or zero value

Capnography: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Capnography",
  "type": "boolean",
  "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Arterial pressure

patients.monitor.connections.arterialPressure

boolean · Optional; an omitted value is not a normal, negative, or zero value

Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Arterial pressure",
  "type": "boolean",
  "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Vital signs

patients.vitals

object · Optional; an omitted value is not a normal, negative, or zero value

Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.

Field schema

{
  "title": "Vital signs",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 3
    }
  },
  "type": "object",
  "properties": {
    "hr": {
      "title": "Heart rate · bpm",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "beats/min",
        "referenceRange": {
          "minimum": 60,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 250,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "sbp": {
      "title": "Systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 90,
          "maximum": 120,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 300,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "dbp": {
      "title": "Diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 60,
          "maximum": 80,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 200,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "rr": {
      "title": "Respiratory rate · /min",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "breaths/min",
        "referenceRange": {
          "minimum": 12,
          "maximum": 18,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 80,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "spo2": {
      "title": "Oxygen saturation · %",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "%",
        "referenceRange": {
          "minimum": 95,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 100,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "temperature": {
      "title": "Temperature · °C",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "Cel",
        "referenceRange": {
          "minimum": 36.5,
          "maximum": 37.3,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 25,
            "maximum": 45,
            "step": 0.1
          }
        }
      },
      "type": "number",
      "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."
    },
    "etco2": {
      "title": "End-tidal CO₂ · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artSbp": {
      "title": "Arterial systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artDbp": {
      "title": "Arterial diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    }
  },
  "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."
}

Heart rate · bpm

patients.vitals.hr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Heart rate · bpm",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "beats/min",
    "referenceRange": {
      "minimum": 60,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 250,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Systolic BP · mmHg

patients.vitals.sbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 90–120 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 90,
      "maximum": 120,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 300,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Diastolic BP · mmHg

patients.vitals.dbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–80 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 60,
      "maximum": 80,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 200,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Respiratory rate · /min

patients.vitals.rr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 12–18 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Respiratory rate · /min",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "breaths/min",
    "referenceRange": {
      "minimum": 12,
      "maximum": 18,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 80,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Oxygen saturation · %

patients.vitals.spo2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 100

Reference range: 95–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Oxygen saturation · %",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "%",
    "referenceRange": {
      "minimum": 95,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 100,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Temperature · °C

patients.vitals.temperature

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 36.5–37.3 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Temperature · °C",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "Cel",
    "referenceRange": {
      "minimum": 36.5,
      "maximum": 37.3,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 25,
        "maximum": 45,
        "step": 0.1
      }
    }
  },
  "type": "number",
  "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."
}

End-tidal CO₂ · mmHg

patients.vitals.etco2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "End-tidal CO₂ · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial systolic BP · mmHg

patients.vitals.artSbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial diastolic BP · mmHg

patients.vitals.artDbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

environment

environment

object · Required when the parent is present

The location, preparation, equipment, and people needed to deliver the simulation.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "setting",
    "requirements"
  ],
  "properties": {
    "setting": {
      "title": "Setting",
      "maxLength": 2000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "description": "Where the scenario takes place and the relevant features of the care environment."
    },
    "requirements": {
      "title": "Preparation requirements",
      "maxItems": 32,
      "description": "Pre-session tasks for the simulation center, each with a concrete action and setup outcome. Equipment and supplies belong in equipment.",
      "x-usim": {
        "authoring": {
          "addLabel": "Add requirement"
        }
      },
      "type": "array",
      "items": {
        "title": "Requirement",
        "maxLength": 240,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "One pre-session setup task with a concrete outcome, such as programming initial manikin observations or briefing an actor."
      }
    },
    "equipment": {
      "title": "Equipment",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "addLabel": "Add item"
        }
      },
      "type": "array",
      "items": {
        "title": "Item",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "One item of equipment or supplies needed for the session, with configuration or an acceptable substitute when useful."
      },
      "description": "The equipment and supplies needed to run the scenario."
    },
    "actors": {
      "title": "Scenario actors",
      "maxItems": 32,
      "x-usim": {
        "authoring": {
          "addLabel": "Add actor"
        }
      },
      "type": "array",
      "items": {
        "title": "Actor",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "role",
          "brief"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
          },
          "name": {
            "title": "Actor name",
            "maxLength": 160,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The character's name or role-player label used to identify this actor."
          },
          "role": {
            "title": "Actor role",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant."
          },
          "brief": {
            "title": "Actor brief",
            "maxLength": 8000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "description": "Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions."
          },
          "demographics": {
            "title": "Voice demographics",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "properties": {
              "age": {
                "title": "Age · years",
                "minimum": 0,
                "maximum": 150,
                "x-usim": {
                  "unit": "years",
                  "authoring": {}
                },
                "type": "number",
                "description": "The character's age in years, used to guide natural voice delivery without exaggeration."
              },
              "gender": {
                "title": "Gender",
                "maxLength": 160,
                "x-usim": {
                  "authoring": {
                    "editor": "gender"
                  }
                },
                "type": "string",
                "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation."
              }
            },
            "description": "Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default."
          }
        },
        "description": "One role-player's identity, role in the case, and instructions for responding to learners."
      },
      "description": "The people portraying scenario roles, with their names, roles, and briefing instructions."
    },
    "patientScene": {
      "title": "Patient scene",
      "additionalProperties": false,
      "x-usim": {
        "import": false,
        "authoring": {
          "editor": "scene"
        }
      },
      "type": "object",
      "required": [
        "modelUrl",
        "attribution",
        "markers"
      ],
      "properties": {
        "modelUrl": {
          "title": "Patient model URL",
          "minLength": 1,
          "maxLength": 2000,
          "type": "string",
          "description": "The URL of the patient model to load in the 3D scene. Use a model accessible to the simulation viewer."
        },
        "attribution": {
          "title": "Model attribution",
          "maxLength": 2000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "Credit the model creator and record the source and license or permission to use it."
        },
        "markers": {
          "maxItems": 128,
          "type": "array",
          "items": {
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "actionId",
              "position",
              "normal"
            ],
            "properties": {
              "actionId": {
                "title": "Marker action",
                "maxLength": 128,
                "minLength": 1,
                "pattern": "\\S",
                "x-usim": {
                  "reference": {
                    "collection": "events.actions",
                    "label": "label",
                    "excludeScheduled": true
                  },
                  "authoring": {}
                },
                "type": "string",
                "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected."
              },
              "position": {
                "minLength": 1,
                "maxLength": 160,
                "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
                "type": "string",
                "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m."
              },
              "normal": {
                "minLength": 1,
                "maxLength": 160,
                "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
                "type": "string",
                "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1."
              }
            },
            "description": "One interaction hotspot with an action, a model-space position, and an outward-facing direction."
          },
          "description": "Clickable locations on the patient model, each linked to an existing learner interaction."
        }
      },
      "description": "The patient model and scene configuration shown during the simulation."
    }
  },
  "description": "The location, preparation, equipment, and people needed to deliver the simulation."
}

Setting

environment.setting

string · Required when the parent is present

Where the scenario takes place and the relevant features of the care environment.

  • Maximum length: 2000 characters

Field schema

{
  "title": "Setting",
  "maxLength": 2000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "description": "Where the scenario takes place and the relevant features of the care environment."
}

Preparation requirements

environment.requirements

array · Required when the parent is present

Pre-session tasks for the simulation center, each with a concrete action and setup outcome. Equipment and supplies belong in equipment.

  • Maximum entries: 32

Field schema

{
  "title": "Preparation requirements",
  "maxItems": 32,
  "description": "Pre-session tasks for the simulation center, each with a concrete action and setup outcome. Equipment and supplies belong in equipment.",
  "x-usim": {
    "authoring": {
      "addLabel": "Add requirement"
    }
  },
  "type": "array",
  "items": {
    "title": "Requirement",
    "maxLength": 240,
    "x-usim": {
      "authoring": {}
    },
    "type": "string",
    "description": "One pre-session setup task with a concrete outcome, such as programming initial manikin observations or briefing an actor."
  }
}

Requirement

environment.requirements.*

string · Required when the parent is present

One pre-session setup task with a concrete outcome, such as programming initial manikin observations or briefing an actor.

  • Maximum length: 240 characters

Field schema

{
  "title": "Requirement",
  "maxLength": 240,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "One pre-session setup task with a concrete outcome, such as programming initial manikin observations or briefing an actor."
}

Equipment

environment.equipment

array · Optional; an omitted value is not a normal, negative, or zero value

The equipment and supplies needed to run the scenario.

  • Maximum entries: 64

Field schema

{
  "title": "Equipment",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "addLabel": "Add item"
    }
  },
  "type": "array",
  "items": {
    "title": "Item",
    "maxLength": 1000,
    "x-usim": {
      "authoring": {}
    },
    "type": "string",
    "description": "One item of equipment or supplies needed for the session, with configuration or an acceptable substitute when useful."
  },
  "description": "The equipment and supplies needed to run the scenario."
}

Item

environment.equipment.*

string · Required when the parent is present

One item of equipment or supplies needed for the session, with configuration or an acceptable substitute when useful.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Item",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "One item of equipment or supplies needed for the session, with configuration or an acceptable substitute when useful."
}

Scenario actors

environment.actors

array · Optional; an omitted value is not a normal, negative, or zero value

The people portraying scenario roles, with their names, roles, and briefing instructions.

  • Maximum entries: 32

Field schema

{
  "title": "Scenario actors",
  "maxItems": 32,
  "x-usim": {
    "authoring": {
      "addLabel": "Add actor"
    }
  },
  "type": "array",
  "items": {
    "title": "Actor",
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "name",
      "role",
      "brief"
    ],
    "properties": {
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
      },
      "name": {
        "title": "Actor name",
        "maxLength": 160,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The character's name or role-player label used to identify this actor."
      },
      "role": {
        "title": "Actor role",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant."
      },
      "brief": {
        "title": "Actor brief",
        "maxLength": 8000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "description": "Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions."
      },
      "demographics": {
        "title": "Voice demographics",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "properties": {
          "age": {
            "title": "Age · years",
            "minimum": 0,
            "maximum": 150,
            "x-usim": {
              "unit": "years",
              "authoring": {}
            },
            "type": "number",
            "description": "The character's age in years, used to guide natural voice delivery without exaggeration."
          },
          "gender": {
            "title": "Gender",
            "maxLength": 160,
            "x-usim": {
              "authoring": {
                "editor": "gender"
              }
            },
            "type": "string",
            "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation."
          }
        },
        "description": "Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default."
      }
    },
    "description": "One role-player's identity, role in the case, and instructions for responding to learners."
  },
  "description": "The people portraying scenario roles, with their names, roles, and briefing instructions."
}

Actor

environment.actors.*

object · Required when the parent is present

One role-player's identity, role in the case, and instructions for responding to learners.

Field schema

{
  "title": "Actor",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "name",
    "role",
    "brief"
  ],
  "properties": {
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
    },
    "name": {
      "title": "Actor name",
      "maxLength": 160,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The character's name or role-player label used to identify this actor."
    },
    "role": {
      "title": "Actor role",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant."
    },
    "brief": {
      "title": "Actor brief",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "description": "Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions."
    },
    "demographics": {
      "title": "Voice demographics",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "properties": {
        "age": {
          "title": "Age · years",
          "minimum": 0,
          "maximum": 150,
          "x-usim": {
            "unit": "years",
            "authoring": {}
          },
          "type": "number",
          "description": "The character's age in years, used to guide natural voice delivery without exaggeration."
        },
        "gender": {
          "title": "Gender",
          "maxLength": 160,
          "x-usim": {
            "authoring": {
              "editor": "gender"
            }
          },
          "type": "string",
          "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation."
        }
      },
      "description": "Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default."
    }
  },
  "description": "One role-player's identity, role in the case, and instructions for responding to learners."
}

Identifier

environment.actors.*.id

string · Required when the parent is present

A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
}

Actor name

environment.actors.*.name

string · Required when the parent is present

The character's name or role-player label used to identify this actor.

  • Maximum length: 160 characters

Field schema

{
  "title": "Actor name",
  "maxLength": 160,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The character's name or role-player label used to identify this actor."
}

Actor role

environment.actors.*.role

string · Required when the parent is present

The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Actor role",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The character's relationship to the patient or care team, such as parent, bedside nurse, or consultant."
}

Actor brief

environment.actors.*.brief

string · Required when the parent is present

Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Actor brief",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "description": "Tell the actor what they know, how to behave, what to disclose, and how to respond to likely learner actions."
}

Voice demographics

environment.actors.*.demographics

object · Optional; an omitted value is not a normal, negative, or zero value

Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default.

Field schema

{
  "title": "Voice demographics",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "properties": {
    "age": {
      "title": "Age · years",
      "minimum": 0,
      "maximum": 150,
      "x-usim": {
        "unit": "years",
        "authoring": {}
      },
      "type": "number",
      "description": "The character's age in years, used to guide natural voice delivery without exaggeration."
    },
    "gender": {
      "title": "Gender",
      "maxLength": 160,
      "x-usim": {
        "authoring": {
          "editor": "gender"
        }
      },
      "type": "string",
      "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation."
    }
  },
  "description": "Optional authored age and gender for voice casting. Omit unknown details; voice uses a neutral adult default."
}

Age · years

environment.actors.*.demographics.age

number · Optional; an omitted value is not a normal, negative, or zero value

The character's age in years, used to guide natural voice delivery without exaggeration.

  • Minimum: 0
  • Maximum: 150

Field schema

{
  "title": "Age · years",
  "minimum": 0,
  "maximum": 150,
  "x-usim": {
    "unit": "years",
    "authoring": {}
  },
  "type": "number",
  "description": "The character's age in years, used to guide natural voice delivery without exaggeration."
}

Gender

environment.actors.*.demographics.gender

string · Optional; an omitted value is not a normal, negative, or zero value

The character's authored gender, used for default voice selection. Never inferred from their name or occupation.

  • Maximum length: 160 characters

Field schema

{
  "title": "Gender",
  "maxLength": 160,
  "x-usim": {
    "authoring": {
      "editor": "gender"
    }
  },
  "type": "string",
  "description": "The character's authored gender, used for default voice selection. Never inferred from their name or occupation."
}

Patient scene

environment.patientScene

object · Optional; an omitted value is not a normal, negative, or zero value

The patient model and scene configuration shown during the simulation.

Field schema

{
  "title": "Patient scene",
  "additionalProperties": false,
  "x-usim": {
    "import": false,
    "authoring": {
      "editor": "scene"
    }
  },
  "type": "object",
  "required": [
    "modelUrl",
    "attribution",
    "markers"
  ],
  "properties": {
    "modelUrl": {
      "title": "Patient model URL",
      "minLength": 1,
      "maxLength": 2000,
      "type": "string",
      "description": "The URL of the patient model to load in the 3D scene. Use a model accessible to the simulation viewer."
    },
    "attribution": {
      "title": "Model attribution",
      "maxLength": 2000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "Credit the model creator and record the source and license or permission to use it."
    },
    "markers": {
      "maxItems": 128,
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "actionId",
          "position",
          "normal"
        ],
        "properties": {
          "actionId": {
            "title": "Marker action",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.actions",
                "label": "label",
                "excludeScheduled": true
              },
              "authoring": {}
            },
            "type": "string",
            "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected."
          },
          "position": {
            "minLength": 1,
            "maxLength": 160,
            "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
            "type": "string",
            "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m."
          },
          "normal": {
            "minLength": 1,
            "maxLength": 160,
            "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
            "type": "string",
            "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1."
          }
        },
        "description": "One interaction hotspot with an action, a model-space position, and an outward-facing direction."
      },
      "description": "Clickable locations on the patient model, each linked to an existing learner interaction."
    }
  },
  "description": "The patient model and scene configuration shown during the simulation."
}

Patient model URL

environment.patientScene.modelUrl

string · Required when the parent is present

The URL of the patient model to load in the 3D scene. Use a model accessible to the simulation viewer.

  • Minimum length: 1
  • Maximum length: 2000 characters

Field schema

{
  "title": "Patient model URL",
  "minLength": 1,
  "maxLength": 2000,
  "type": "string",
  "description": "The URL of the patient model to load in the 3D scene. Use a model accessible to the simulation viewer."
}

Model attribution

environment.patientScene.attribution

string · Required when the parent is present

Credit the model creator and record the source and license or permission to use it.

  • Maximum length: 2000 characters

Field schema

{
  "title": "Model attribution",
  "maxLength": 2000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "Credit the model creator and record the source and license or permission to use it."
}

markers

environment.patientScene.markers

array · Required when the parent is present

Clickable locations on the patient model, each linked to an existing learner interaction.

  • Maximum entries: 128

Field schema

{
  "maxItems": 128,
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "actionId",
      "position",
      "normal"
    ],
    "properties": {
      "actionId": {
        "title": "Marker action",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.actions",
            "label": "label",
            "excludeScheduled": true
          },
          "authoring": {}
        },
        "type": "string",
        "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected."
      },
      "position": {
        "minLength": 1,
        "maxLength": 160,
        "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
        "type": "string",
        "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m."
      },
      "normal": {
        "minLength": 1,
        "maxLength": 160,
        "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
        "type": "string",
        "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1."
      }
    },
    "description": "One interaction hotspot with an action, a model-space position, and an outward-facing direction."
  },
  "description": "Clickable locations on the patient model, each linked to an existing learner interaction."
}

*

environment.patientScene.markers.*

object · Required when the parent is present

One interaction hotspot with an action, a model-space position, and an outward-facing direction.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "actionId",
    "position",
    "normal"
  ],
  "properties": {
    "actionId": {
      "title": "Marker action",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.actions",
          "label": "label",
          "excludeScheduled": true
        },
        "authoring": {}
      },
      "type": "string",
      "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected."
    },
    "position": {
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
      "type": "string",
      "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m."
    },
    "normal": {
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
      "type": "string",
      "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1."
    }
  },
  "description": "One interaction hotspot with an action, a model-space position, and an outward-facing direction."
}

Marker action

environment.patientScene.markers.*.actionId

string · Required when the parent is present

The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.actions using label as the display label.

Field schema

{
  "title": "Marker action",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.actions",
      "label": "label",
      "excludeScheduled": true
    },
    "authoring": {}
  },
  "type": "string",
  "description": "The existing learner action to invoke when this hotspot is selected; scheduled transitions cannot be selected."
}

position

environment.patientScene.markers.*.position

string · Required when the parent is present

Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m.

  • Minimum length: 1
  • Maximum length: 160 characters
  • Pattern: ^-?\d+(?:\.\d+)?(?:m)?\s+-?\d+(?:\.\d+)?(?:m)?\s+-?\d+(?:\.\d+)?(?:m)?$

Field schema

{
  "minLength": 1,
  "maxLength": 160,
  "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
  "type": "string",
  "description": "Hotspot location as three space-separated model-space coordinates (x y z), for example 0m 1m 0m."
}

normal

environment.patientScene.markers.*.normal

string · Required when the parent is present

Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1.

  • Minimum length: 1
  • Maximum length: 160 characters
  • Pattern: ^-?\d+(?:\.\d+)?(?:m)?\s+-?\d+(?:\.\d+)?(?:m)?\s+-?\d+(?:\.\d+)?(?:m)?$

Field schema

{
  "minLength": 1,
  "maxLength": 160,
  "pattern": "^-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?\\s+-?\\d+(?:\\.\\d+)?(?:m)?$",
  "type": "string",
  "description": "Hotspot surface direction as three space-separated vector components (x y z), for example 0 0 1."
}

education

education

object · Required when the parent is present

Learning goals, learner preparation, assessment criteria, and guidance for reflection after the case.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "objectives",
    "debrief"
  ],
  "properties": {
    "objectives": {
      "title": "Learning objectives",
      "maxItems": 32,
      "x-usim": {
        "authoring": {
          "editor": "objectives"
        }
      },
      "type": "array",
      "items": {
        "anyOf": [
          {
            "title": "Learning objective",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string"
          },
          {
            "title": "Learning objective",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "id",
              "statement"
            ],
            "properties": {
              "id": {
                "title": "Identifier",
                "minLength": 1,
                "maxLength": 128,
                "pattern": "\\S",
                "x-usim": {
                  "authoring": {
                    "hidden": true
                  }
                },
                "type": "string",
                "description": "A stable objective identifier. Preserve it when editing or reordering the objective."
              },
              "statement": {
                "title": "Learning objective",
                "maxLength": 1000,
                "x-usim": {
                  "authoring": {}
                },
                "type": "string",
                "description": "An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate."
              },
              "acgmeCompetencies": {
                "title": "ACGME core competencies",
                "maxItems": 6,
                "uniqueItems": true,
                "type": "array",
                "items": {
                  "type": "string",
                  "title": "ACGME core competency",
                  "enum": [
                    "PC",
                    "MK",
                    "PBLI",
                    "ICS",
                    "PROF",
                    "SBP"
                  ],
                  "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective."
                },
                "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."
              }
            }
          }
        ],
        "description": "One observable learning goal, using an action verb such as recognize, assess, communicate, or initiate."
      },
      "description": "The observable knowledge, skills, or behaviors learners should demonstrate."
    },
    "debrief": {
      "title": "Debrief prompts",
      "maxLength": 12000,
      "x-usim": {
        "authoring": {
          "editor": "markdown"
        }
      },
      "type": "string",
      "description": "Prompts for facilitated reflection after the scenario. Formatting is stored as Markdown."
    },
    "audience": {
      "title": "Intended audience",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "group": "Teaching context"
        }
      },
      "type": "string",
      "description": "Who the scenario is designed for, including profession, training stage, and team composition."
    },
    "prerequisites": {
      "title": "Prerequisites",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "markdown",
          "links": true,
          "group": "Teaching context"
        }
      },
      "type": "string",
      "description": "Rich-text instructions stored as Markdown for knowledge, skills, modules, or preparation learners should complete before starting."
    },
    "prerequisiteDocuments": {
      "title": "Prerequisite documents",
      "maxItems": 8,
      "x-usim": {
        "import": false,
        "authoring": {
          "editor": "prerequisite-documents",
          "group": "Teaching context"
        }
      },
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "dataUrl"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "Stable attachment identifier."
          },
          "name": {
            "title": "Document name",
            "maxLength": 255,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "Original document filename, including its extension."
          },
          "dataUrl": {
            "title": "Document",
            "maxLength": 6990668,
            "pattern": "^data:(application/pdf|application/vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document|application/vnd\\.openxmlformats-officedocument\\.presentationml\\.presentation|text/plain|text/markdown);base64,[A-Za-z0-9+/]*={0,2}$",
            "type": "string",
            "description": "Uploaded document bytes stored as a data URL so the material travels with the scenario."
          }
        },
        "description": "One preparation document with an identifier, filename, and embedded file content."
      },
      "description": "Downloadable learning materials attached by the author for learners to complete before starting. This does not track completion."
    },
    "rationale": {
      "title": "Educational rationale",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea",
          "group": "Teaching context"
        }
      },
      "type": "string",
      "description": "Explain why this case is educationally useful and how its decisions and challenges support the learning objectives."
    },
    "assessment": {
      "title": "Assessment & learning materials",
      "maxItems": 64,
      "x-usim": {
        "authoring": {
          "editor": "assessment"
        }
      },
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "label",
          "actionId",
          "points",
          "feedback"
        ],
        "properties": {
          "objectiveId": {
            "title": "Learning objective",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "education.objectives",
                "label": "statement",
                "excludeScheduled": false
              },
              "authoring": {
                "emptyLabel": "No linked objective"
              }
            },
            "type": "string",
            "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."
          },
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
          },
          "label": {
            "title": "Skill or objective",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "minLength": 1,
            "pattern": "\\S",
            "description": "Name the observable skill or objective being assessed, such as recognizing deterioration."
          },
          "actionId": {
            "title": "Required action",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.actions",
                "label": "label",
                "excludeScheduled": true
              },
              "authoring": {
                "emptyLabel": "Choose an action"
              }
            },
            "type": "string",
            "description": "Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit."
          },
          "objectId": {
            "title": "Equivalent resource",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.objects",
                "label": "name",
                "excludeScheduled": false
              },
              "authoring": {
                "emptyLabel": "No equivalent resource"
              }
            },
            "type": "string",
            "description": "Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted."
          },
          "objectIds": {
            "title": "Equivalent resources",
            "minItems": 1,
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "title": "Equivalent resource",
              "maxLength": 128,
              "minLength": 1,
              "pattern": "\\S",
              "x-usim": {
                "reference": {
                  "collection": "events.objects",
                  "label": "name",
                  "excludeScheduled": false
                },
                "authoring": {}
              },
              "type": "string",
              "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion."
            },
            "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."
          },
          "points": {
            "title": "Points",
            "minimum": 1,
            "maximum": 100,
            "x-usim": {
              "authoring": {}
            },
            "type": "number",
            "description": "The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met."
          },
          "withinSeconds": {
            "title": "Deadline · seconds",
            "minimum": 0,
            "maximum": 86400,
            "x-usim": {
              "unit": "s",
              "authoring": {}
            },
            "type": "number",
            "description": "Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline."
          },
          "feedback": {
            "title": "Debrief guidance",
            "maxLength": 8000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "description": "Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed."
          },
          "learningUrl": {
            "title": "Learning material URL",
            "maxLength": 2000,
            "pattern": "^https://[^\\s]+$",
            "type": "string",
            "description": "An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource."
          }
        },
        "description": "One scored criterion linking an observable skill to a recorded action, with points and debrief feedback."
      },
      "description": "The authored criteria used to assess learner performance."
    }
  },
  "description": "Learning goals, learner preparation, assessment criteria, and guidance for reflection after the case."
}

Learning objectives

education.objectives

array · Required when the parent is present

The observable knowledge, skills, or behaviors learners should demonstrate.

  • Maximum entries: 32

Field schema

{
  "title": "Learning objectives",
  "maxItems": 32,
  "x-usim": {
    "authoring": {
      "editor": "objectives"
    }
  },
  "type": "array",
  "items": {
    "anyOf": [
      {
        "title": "Learning objective",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string"
      },
      {
        "title": "Learning objective",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "statement"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable objective identifier. Preserve it when editing or reordering the objective."
          },
          "statement": {
            "title": "Learning objective",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate."
          },
          "acgmeCompetencies": {
            "title": "ACGME core competencies",
            "maxItems": 6,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string",
              "title": "ACGME core competency",
              "enum": [
                "PC",
                "MK",
                "PBLI",
                "ICS",
                "PROF",
                "SBP"
              ],
              "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective."
            },
            "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."
          }
        }
      }
    ],
    "description": "One observable learning goal, using an action verb such as recognize, assess, communicate, or initiate."
  },
  "description": "The observable knowledge, skills, or behaviors learners should demonstrate."
}

*

education.objectives.*

Value · Required when the parent is present

One observable learning goal, using an action verb such as recognize, assess, communicate, or initiate.

Field schema

{
  "anyOf": [
    {
      "title": "Learning objective",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string"
    },
    {
      "title": "Learning objective",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "id",
        "statement"
      ],
      "properties": {
        "id": {
          "title": "Identifier",
          "minLength": 1,
          "maxLength": 128,
          "pattern": "\\S",
          "x-usim": {
            "authoring": {
              "hidden": true
            }
          },
          "type": "string",
          "description": "A stable objective identifier. Preserve it when editing or reordering the objective."
        },
        "statement": {
          "title": "Learning objective",
          "maxLength": 1000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate."
        },
        "acgmeCompetencies": {
          "title": "ACGME core competencies",
          "maxItems": 6,
          "uniqueItems": true,
          "type": "array",
          "items": {
            "type": "string",
            "title": "ACGME core competency",
            "enum": [
              "PC",
              "MK",
              "PBLI",
              "ICS",
              "PROF",
              "SBP"
            ],
            "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective."
          },
          "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."
        }
      }
    }
  ],
  "description": "One observable learning goal, using an action verb such as recognize, assess, communicate, or initiate."
}

Identifier

education.objectives.*.id

string · Optional; an omitted value is not a normal, negative, or zero value

A stable objective identifier. Preserve it when editing or reordering the objective.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable objective identifier. Preserve it when editing or reordering the objective."
}

Learning objective

education.objectives.*.statement

string · Optional; an omitted value is not a normal, negative, or zero value

An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Learning objective",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "An observable learning outcome, using an action verb such as recognize, assess, communicate, or initiate."
}

ACGME core competencies

education.objectives.*.acgmeCompetencies

array · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum entries: 6

Field schema

{
  "title": "ACGME core competencies",
  "maxItems": 6,
  "uniqueItems": true,
  "type": "array",
  "items": {
    "type": "string",
    "title": "ACGME core competency",
    "enum": [
      "PC",
      "MK",
      "PBLI",
      "ICS",
      "PROF",
      "SBP"
    ],
    "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective."
  },
  "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."
}

ACGME core competency

education.objectives.*.acgmeCompetencies.*

string · Required when the parent is present

One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective.

Allowed values: PC, MK, PBLI, ICS, PROF, SBP

Field schema

{
  "type": "string",
  "title": "ACGME core competency",
  "enum": [
    "PC",
    "MK",
    "PBLI",
    "ICS",
    "PROF",
    "SBP"
  ],
  "description": "One of the six ACGME core domain codes: PC, MK, PBLI, ICS, PROF, or SBP. Each code may appear only once per objective."
}

Debrief prompts

education.debrief

string · Required when the parent is present

Prompts for facilitated reflection after the scenario. Formatting is stored as Markdown.

  • Maximum length: 12000 characters

Field schema

{
  "title": "Debrief prompts",
  "maxLength": 12000,
  "x-usim": {
    "authoring": {
      "editor": "markdown"
    }
  },
  "type": "string",
  "description": "Prompts for facilitated reflection after the scenario. Formatting is stored as Markdown."
}

Intended audience

education.audience

string · Optional; an omitted value is not a normal, negative, or zero value

Who the scenario is designed for, including profession, training stage, and team composition.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Intended audience",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "group": "Teaching context"
    }
  },
  "type": "string",
  "description": "Who the scenario is designed for, including profession, training stage, and team composition."
}

Prerequisites

education.prerequisites

string · Optional; an omitted value is not a normal, negative, or zero value

Rich-text instructions stored as Markdown for knowledge, skills, modules, or preparation learners should complete before starting.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Prerequisites",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "markdown",
      "links": true,
      "group": "Teaching context"
    }
  },
  "type": "string",
  "description": "Rich-text instructions stored as Markdown for knowledge, skills, modules, or preparation learners should complete before starting."
}

Prerequisite documents

education.prerequisiteDocuments

array · Optional; an omitted value is not a normal, negative, or zero value

Downloadable learning materials attached by the author for learners to complete before starting. This does not track completion.

  • Maximum entries: 8

Field schema

{
  "title": "Prerequisite documents",
  "maxItems": 8,
  "x-usim": {
    "import": false,
    "authoring": {
      "editor": "prerequisite-documents",
      "group": "Teaching context"
    }
  },
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "name",
      "dataUrl"
    ],
    "properties": {
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "Stable attachment identifier."
      },
      "name": {
        "title": "Document name",
        "maxLength": 255,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "Original document filename, including its extension."
      },
      "dataUrl": {
        "title": "Document",
        "maxLength": 6990668,
        "pattern": "^data:(application/pdf|application/vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document|application/vnd\\.openxmlformats-officedocument\\.presentationml\\.presentation|text/plain|text/markdown);base64,[A-Za-z0-9+/]*={0,2}$",
        "type": "string",
        "description": "Uploaded document bytes stored as a data URL so the material travels with the scenario."
      }
    },
    "description": "One preparation document with an identifier, filename, and embedded file content."
  },
  "description": "Downloadable learning materials attached by the author for learners to complete before starting. This does not track completion."
}

*

education.prerequisiteDocuments.*

object · Required when the parent is present

One preparation document with an identifier, filename, and embedded file content.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "name",
    "dataUrl"
  ],
  "properties": {
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "Stable attachment identifier."
    },
    "name": {
      "title": "Document name",
      "maxLength": 255,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "Original document filename, including its extension."
    },
    "dataUrl": {
      "title": "Document",
      "maxLength": 6990668,
      "pattern": "^data:(application/pdf|application/vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document|application/vnd\\.openxmlformats-officedocument\\.presentationml\\.presentation|text/plain|text/markdown);base64,[A-Za-z0-9+/]*={0,2}$",
      "type": "string",
      "description": "Uploaded document bytes stored as a data URL so the material travels with the scenario."
    }
  },
  "description": "One preparation document with an identifier, filename, and embedded file content."
}

Identifier

education.prerequisiteDocuments.*.id

string · Required when the parent is present

Stable attachment identifier.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "Stable attachment identifier."
}

Document name

education.prerequisiteDocuments.*.name

string · Required when the parent is present

Original document filename, including its extension.

  • Maximum length: 255 characters

Field schema

{
  "title": "Document name",
  "maxLength": 255,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "Original document filename, including its extension."
}

Document

education.prerequisiteDocuments.*.dataUrl

string · Required when the parent is present

Uploaded document bytes stored as a data URL so the material travels with the scenario.

  • Maximum length: 6990668 characters
  • Pattern: ^data:(application/pdf|application/vnd\.openxmlformats-officedocument\.wordprocessingml\.document|application/vnd\.openxmlformats-officedocument\.presentationml\.presentation|text/plain|text/markdown);base64,[A-Za-z0-9+/]*={0,2}$

Field schema

{
  "title": "Document",
  "maxLength": 6990668,
  "pattern": "^data:(application/pdf|application/vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document|application/vnd\\.openxmlformats-officedocument\\.presentationml\\.presentation|text/plain|text/markdown);base64,[A-Za-z0-9+/]*={0,2}$",
  "type": "string",
  "description": "Uploaded document bytes stored as a data URL so the material travels with the scenario."
}

Educational rationale

education.rationale

string · Optional; an omitted value is not a normal, negative, or zero value

Explain why this case is educationally useful and how its decisions and challenges support the learning objectives.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Educational rationale",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea",
      "group": "Teaching context"
    }
  },
  "type": "string",
  "description": "Explain why this case is educationally useful and how its decisions and challenges support the learning objectives."
}

Assessment & learning materials

education.assessment

array · Optional; an omitted value is not a normal, negative, or zero value

The authored criteria used to assess learner performance.

  • Maximum entries: 64

Field schema

{
  "title": "Assessment & learning materials",
  "maxItems": 64,
  "x-usim": {
    "authoring": {
      "editor": "assessment"
    }
  },
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "label",
      "actionId",
      "points",
      "feedback"
    ],
    "properties": {
      "objectiveId": {
        "title": "Learning objective",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "education.objectives",
            "label": "statement",
            "excludeScheduled": false
          },
          "authoring": {
            "emptyLabel": "No linked objective"
          }
        },
        "type": "string",
        "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."
      },
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
      },
      "label": {
        "title": "Skill or objective",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "minLength": 1,
        "pattern": "\\S",
        "description": "Name the observable skill or objective being assessed, such as recognizing deterioration."
      },
      "actionId": {
        "title": "Required action",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.actions",
            "label": "label",
            "excludeScheduled": true
          },
          "authoring": {
            "emptyLabel": "Choose an action"
          }
        },
        "type": "string",
        "description": "Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit."
      },
      "objectId": {
        "title": "Equivalent resource",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.objects",
            "label": "name",
            "excludeScheduled": false
          },
          "authoring": {
            "emptyLabel": "No equivalent resource"
          }
        },
        "type": "string",
        "description": "Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted."
      },
      "objectIds": {
        "title": "Equivalent resources",
        "minItems": 1,
        "maxItems": 1000,
        "uniqueItems": true,
        "type": "array",
        "items": {
          "title": "Equivalent resource",
          "maxLength": 128,
          "minLength": 1,
          "pattern": "\\S",
          "x-usim": {
            "reference": {
              "collection": "events.objects",
              "label": "name",
              "excludeScheduled": false
            },
            "authoring": {}
          },
          "type": "string",
          "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion."
        },
        "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."
      },
      "points": {
        "title": "Points",
        "minimum": 1,
        "maximum": 100,
        "x-usim": {
          "authoring": {}
        },
        "type": "number",
        "description": "The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met."
      },
      "withinSeconds": {
        "title": "Deadline · seconds",
        "minimum": 0,
        "maximum": 86400,
        "x-usim": {
          "unit": "s",
          "authoring": {}
        },
        "type": "number",
        "description": "Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline."
      },
      "feedback": {
        "title": "Debrief guidance",
        "maxLength": 8000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "description": "Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed."
      },
      "learningUrl": {
        "title": "Learning material URL",
        "maxLength": 2000,
        "pattern": "^https://[^\\s]+$",
        "type": "string",
        "description": "An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource."
      }
    },
    "description": "One scored criterion linking an observable skill to a recorded action, with points and debrief feedback."
  },
  "description": "The authored criteria used to assess learner performance."
}

*

education.assessment.*

object · Required when the parent is present

One scored criterion linking an observable skill to a recorded action, with points and debrief feedback.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "label",
    "actionId",
    "points",
    "feedback"
  ],
  "properties": {
    "objectiveId": {
      "title": "Learning objective",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "education.objectives",
          "label": "statement",
          "excludeScheduled": false
        },
        "authoring": {
          "emptyLabel": "No linked objective"
        }
      },
      "type": "string",
      "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."
    },
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
    },
    "label": {
      "title": "Skill or objective",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "minLength": 1,
      "pattern": "\\S",
      "description": "Name the observable skill or objective being assessed, such as recognizing deterioration."
    },
    "actionId": {
      "title": "Required action",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.actions",
          "label": "label",
          "excludeScheduled": true
        },
        "authoring": {
          "emptyLabel": "Choose an action"
        }
      },
      "type": "string",
      "description": "Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit."
    },
    "objectId": {
      "title": "Equivalent resource",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.objects",
          "label": "name",
          "excludeScheduled": false
        },
        "authoring": {
          "emptyLabel": "No equivalent resource"
        }
      },
      "type": "string",
      "description": "Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted."
    },
    "objectIds": {
      "title": "Equivalent resources",
      "minItems": 1,
      "maxItems": 1000,
      "uniqueItems": true,
      "type": "array",
      "items": {
        "title": "Equivalent resource",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.objects",
            "label": "name",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion."
      },
      "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."
    },
    "points": {
      "title": "Points",
      "minimum": 1,
      "maximum": 100,
      "x-usim": {
        "authoring": {}
      },
      "type": "number",
      "description": "The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met."
    },
    "withinSeconds": {
      "title": "Deadline · seconds",
      "minimum": 0,
      "maximum": 86400,
      "x-usim": {
        "unit": "s",
        "authoring": {}
      },
      "type": "number",
      "description": "Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline."
    },
    "feedback": {
      "title": "Debrief guidance",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "description": "Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed."
    },
    "learningUrl": {
      "title": "Learning material URL",
      "maxLength": 2000,
      "pattern": "^https://[^\\s]+$",
      "type": "string",
      "description": "An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource."
    }
  },
  "description": "One scored criterion linking an observable skill to a recorded action, with points and debrief feedback."
}

Learning objective

education.assessment.*.objectiveId

string · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References education.objectives using statement as the display label.

Field schema

{
  "title": "Learning objective",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "education.objectives",
      "label": "statement",
      "excludeScheduled": false
    },
    "authoring": {
      "emptyLabel": "No linked objective"
    }
  },
  "type": "string",
  "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."
}

Identifier

education.assessment.*.id

string · Required when the parent is present

A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
}

Skill or objective

education.assessment.*.label

string · Required when the parent is present

Name the observable skill or objective being assessed, such as recognizing deterioration.

  • Minimum length: 1
  • Maximum length: 1000 characters
  • Pattern: \S

Field schema

{
  "title": "Skill or objective",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "minLength": 1,
  "pattern": "\\S",
  "description": "Name the observable skill or objective being assessed, such as recognizing deterioration."
}

Required action

education.assessment.*.actionId

string · Required when the parent is present

Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.actions using label as the display label.

Field schema

{
  "title": "Required action",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.actions",
      "label": "label",
      "excludeScheduled": true
    },
    "authoring": {
      "emptyLabel": "Choose an action"
    }
  },
  "type": "string",
  "description": "Select the learner action that earns credit for this criterion. Scheduled transitions cannot earn action credit."
}

Equivalent resource

education.assessment.*.objectId

string · Optional; an omitted value is not a normal, negative, or zero value

Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.objects using name as the display label.

Field schema

{
  "title": "Equivalent resource",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.objects",
      "label": "name",
      "excludeScheduled": false
    },
    "authoring": {
      "emptyLabel": "No equivalent resource"
    }
  },
  "type": "string",
  "description": "Single equivalent resource. Used when objectIds is omitted; the required action's linked resource is used when both are omitted."
}

Equivalent resources

education.assessment.*.objectIds

array · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum entries: 1000

Field schema

{
  "title": "Equivalent resources",
  "minItems": 1,
  "maxItems": 1000,
  "uniqueItems": true,
  "type": "array",
  "items": {
    "title": "Equivalent resource",
    "maxLength": 128,
    "minLength": 1,
    "pattern": "\\S",
    "x-usim": {
      "reference": {
        "collection": "events.objects",
        "label": "name",
        "excludeScheduled": false
      },
      "authoring": {}
    },
    "type": "string",
    "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion."
  },
  "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."
}

Equivalent resource

education.assessment.*.objectIds.*

string · Required when the parent is present

The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.objects using name as the display label.

Field schema

{
  "title": "Equivalent resource",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.objects",
      "label": "name",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "The identifier of a learner-requestable resource accepted as an alternative for this assessment criterion."
}

Points

education.assessment.*.points

number · Required when the parent is present

The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met.

  • Minimum: 1
  • Maximum: 100

Field schema

{
  "title": "Points",
  "minimum": 1,
  "maximum": 100,
  "x-usim": {
    "authoring": {}
  },
  "type": "number",
  "description": "The weight of this criterion in the total score, from 1 to 100. Credit is awarded once when the criterion is met."
}

Deadline · seconds

education.assessment.*.withinSeconds

number · Optional; an omitted value is not a normal, negative, or zero value

Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline.

  • Minimum: 0
  • Maximum: 86400

Field schema

{
  "title": "Deadline · seconds",
  "minimum": 0,
  "maximum": 86400,
  "x-usim": {
    "unit": "s",
    "authoring": {}
  },
  "type": "number",
  "description": "Latest qualifying action time in seconds from the start of the run, inclusive. Omit to assess the action without a deadline."
}

Debrief guidance

education.assessment.*.feedback

string · Required when the parent is present

Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Debrief guidance",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "description": "Explain the expected behavior, why it matters, and what to discuss when the action is completed or missed."
}

Learning material URL

education.assessment.*.learningUrl

string · Optional; an omitted value is not a normal, negative, or zero value

An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource.

  • Maximum length: 2000 characters
  • Pattern: ^https://[^\s]+$

Field schema

{
  "title": "Learning material URL",
  "maxLength": 2000,
  "pattern": "^https://[^\\s]+$",
  "type": "string",
  "description": "An HTTPS link to learning material relevant to this criterion, such as a guideline or teaching resource."
}

events

events

object · Required when the parent is present

The patient phases, transitions, and requestable resources that define how the scenario progresses.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "states",
    "actions"
  ],
  "properties": {
    "states": {
      "title": "States",
      "maxItems": 128,
      "x-usim": {
        "authoring": {
          "editor": "graph"
        }
      },
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "kind",
          "learnerNote",
          "tutorNote"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
          },
          "title": {
            "title": "State title",
            "maxLength": 240,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "A short name for this phase, such as Initial assessment or Worsening respiratory distress."
          },
          "kind": {
            "type": "string",
            "title": "State kind",
            "enum": [
              "baseline",
              "triggered",
              "scheduled",
              "conclusion"
            ],
            "description": "Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction."
          },
          "learnerNote": {
            "title": "Learner prompt",
            "maxLength": 8000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "tutorNote": {
            "title": "Tutor prompt",
            "maxLength": 8000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "vitals": {
            "title": "Vital signs",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {
                "columns": 3
              }
            },
            "type": "object",
            "properties": {
              "hr": {
                "title": "Heart rate · bpm",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "beats/min",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 250,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "sbp": {
                "title": "Systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 90,
                    "maximum": 120,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 300,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "dbp": {
                "title": "Diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 80,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 200,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "rr": {
                "title": "Respiratory rate · /min",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "breaths/min",
                  "referenceRange": {
                    "minimum": 12,
                    "maximum": 18,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 80,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "spo2": {
                "title": "Oxygen saturation · %",
                "minimum": 0,
                "maximum": 100,
                "x-usim": {
                  "unit": "%",
                  "referenceRange": {
                    "minimum": 95,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 100,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "temperature": {
                "title": "Temperature · °C",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "Cel",
                  "referenceRange": {
                    "minimum": 36.5,
                    "maximum": 37.3,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 25,
                      "maximum": 45,
                      "step": 0.1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "etco2": {
                "title": "End-tidal CO₂ · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artSbp": {
                "title": "Arterial systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artDbp": {
                "title": "Arterial diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              }
            },
            "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."
          },
          "vitalTrendSeconds": {
            "title": "Vital trend · seconds",
            "minimum": 0,
            "maximum": 86400,
            "x-usim": {
              "unit": "s",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "monitor": {
            "title": "Monitor",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {
                "editor": "monitor"
              }
            },
            "type": "object",
            "properties": {
              "rhythm": {
                "type": "string",
                "title": "Monitor rhythm",
                "enum": [
                  "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"
                ],
                "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
              },
              "pulsePresent": {
                "title": "Pulse present",
                "type": "boolean",
                "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
              },
              "connections": {
                "title": "Monitor connections",
                "additionalProperties": false,
                "x-usim": {
                  "authoring": {}
                },
                "type": "object",
                "properties": {
                  "ecg": {
                    "title": "ECG",
                    "type": "boolean",
                    "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "bloodPressure": {
                    "title": "Blood pressure cuff",
                    "type": "boolean",
                    "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "spo2": {
                    "title": "Pulse oximetry",
                    "type": "boolean",
                    "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "respiration": {
                    "title": "Respiratory monitoring",
                    "type": "boolean",
                    "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "temperature": {
                    "title": "Temperature probe",
                    "type": "boolean",
                    "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "capnography": {
                    "title": "Capnography",
                    "type": "boolean",
                    "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
                  },
                  "arterialPressure": {
                    "title": "Arterial pressure",
                    "type": "boolean",
                    "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
                  }
                },
                "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."
              }
            },
            "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."
          },
          "key": {
            "title": "Key state",
            "type": "boolean",
            "description": "Mark an educationally important phase. This does not award points or require every path to pass through the phase."
          },
          "resourceTrigger": {
            "title": "Enter when resource results are available",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "mode",
              "objectIds"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "title": "Results required",
                "enum": [
                  "any",
                  "all"
                ],
                "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."
              },
              "objectIds": {
                "title": "Selected resources",
                "minItems": 1,
                "maxItems": 1000,
                "uniqueItems": true,
                "type": "array",
                "items": {
                  "title": "Resource",
                  "maxLength": 128,
                  "minLength": 1,
                  "pattern": "\\S",
                  "x-usim": {
                    "reference": {
                      "collection": "events.objects",
                      "label": "name",
                      "excludeScheduled": false
                    },
                    "authoring": {}
                  },
                  "type": "string",
                  "description": "The identifier of a learner-requestable resource required by this event result trigger."
                },
                "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event."
              }
            },
            "description": "Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event."
          }
        },
        "description": "One phase of the case, with learner information, tutor guidance, and any changed patient observations."
      },
      "description": "Patient phases in the scenario. Include exactly one baseline and at least one conclusion; connect phases with interactions."
    },
    "actions": {
      "title": "Interactions",
      "maxItems": 512,
      "x-usim": {
        "authoring": {
          "addLabel": "Add interaction"
        }
      },
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "label",
          "from",
          "to"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
          },
          "label": {
            "title": "Interaction",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "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."
          },
          "description": {
            "title": "Description",
            "maxLength": 6000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "from": {
            "title": "From state",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.states",
                "label": "title",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "description": "The phase in which this interaction is available or its scheduled timer begins."
          },
          "to": {
            "title": "Leads to",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.states",
                "label": "title",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "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."
          },
          "trigger": {
            "type": "string",
            "title": "Trigger",
            "enum": [
              "action",
              "scheduled"
            ],
            "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."
          },
          "delaySeconds": {
            "title": "Delay · seconds",
            "minimum": 0,
            "maximum": 86400,
            "x-usim": {
              "unit": "s",
              "authoring": {
                "visibleWhen": {
                  "property": "trigger",
                  "equals": "scheduled"
                }
              }
            },
            "type": "number",
            "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."
          },
          "objectId": {
            "title": "Linked resource",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.objects",
                "label": "name",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "deprecated": true,
            "description": "Requests a resource when this transition fires. Builder authors resource links on the state under Results."
          },
          "completionCriteria": {
            "title": "When this action is complete",
            "maxLength": 6000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "completion": {
            "title": "Action recognition",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "mode",
              "objectIds"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "title": "Resources required",
                "enum": [
                  "any",
                  "all"
                ],
                "description": "Choose whether any or all selected resource requests complete this action."
              },
              "objectIds": {
                "title": "Recognize resource interactions",
                "minItems": 1,
                "maxItems": 1000,
                "uniqueItems": true,
                "type": "array",
                "items": {
                  "title": "Resource",
                  "maxLength": 128,
                  "minLength": 1,
                  "pattern": "\\S",
                  "x-usim": {
                    "reference": {
                      "collection": "events.objects",
                      "label": "name",
                      "excludeScheduled": false
                    },
                    "authoring": {}
                  },
                  "type": "string",
                  "description": "A learner-requestable resource used to recognize the action."
                },
                "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."
              }
            },
            "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."
          },
          "cancelOnActionIds": {
            "title": "Cancel when action completes",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "title": "Completed action",
              "maxLength": 128,
              "minLength": 1,
              "pattern": "\\S",
              "x-usim": {
                "reference": {
                  "collection": "events.actions",
                  "label": "label",
                  "excludeScheduled": false
                },
                "authoring": {}
              },
              "type": "string",
              "description": "A learner action whose completion prevents this scheduled transition from firing."
            },
            "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."
          },
          "effects": {
            "title": "Vital signs",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {
                "columns": 3
              }
            },
            "type": "object",
            "properties": {
              "hr": {
                "title": "Heart rate · bpm",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "beats/min",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 250,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "sbp": {
                "title": "Systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 90,
                    "maximum": 120,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 300,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "dbp": {
                "title": "Diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 80,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 200,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "rr": {
                "title": "Respiratory rate · /min",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "breaths/min",
                  "referenceRange": {
                    "minimum": 12,
                    "maximum": 18,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 80,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "spo2": {
                "title": "Oxygen saturation · %",
                "minimum": 0,
                "maximum": 100,
                "x-usim": {
                  "unit": "%",
                  "referenceRange": {
                    "minimum": 95,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 100,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "temperature": {
                "title": "Temperature · °C",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "Cel",
                  "referenceRange": {
                    "minimum": 36.5,
                    "maximum": 37.3,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 25,
                      "maximum": 45,
                      "step": 0.1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "etco2": {
                "title": "End-tidal CO₂ · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artSbp": {
                "title": "Arterial systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artDbp": {
                "title": "Arterial diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              }
            },
            "description": "Vital values applied during the transition. Builder authors patient changes on destination state vitals.",
            "deprecated": true
          }
        },
        "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."
      },
      "description": "Connections between phases, activated by a learner action or a timer measured from entry into the source phase."
    },
    "objects": {
      "title": "Resources",
      "maxItems": 2048,
      "x-usim": {
        "authoring": {
          "editor": "resources"
        }
      },
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "id",
          "type",
          "name"
        ],
        "properties": {
          "id": {
            "title": "Identifier",
            "minLength": 1,
            "maxLength": 128,
            "pattern": "\\S",
            "x-usim": {
              "authoring": {
                "hidden": true
              }
            },
            "type": "string",
            "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
          },
          "type": {
            "type": "string",
            "title": "Resource type",
            "enum": [
              "medication",
              "diagnostic",
              "procedure",
              "equipment",
              "consultation",
              "information"
            ],
            "description": "Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects."
          },
          "name": {
            "title": "Resource name",
            "maxLength": 240,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices."
          },
          "diagnosticCategory": {
            "type": "string",
            "title": "Diagnostic category",
            "enum": [
              "lab",
              "imaging",
              "physiologic"
            ],
            "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."
          },
          "description": {
            "title": "Description shown to the learner",
            "maxLength": 8000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "result": {
            "title": "Learner result",
            "maxLength": 12000,
            "x-usim": {
              "authoring": {
                "editor": "textarea"
              }
            },
            "type": "string",
            "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."
          },
          "labResults": {
            "title": "Lab results",
            "maxItems": 64,
            "type": "array",
            "items": {
              "additionalProperties": false,
              "x-usim": {
                "authoring": {}
              },
              "type": "object",
              "required": [
                "name",
                "value",
                "unit"
              ],
              "properties": {
                "name": {
                  "title": "Test",
                  "maxLength": 120,
                  "x-usim": {
                    "authoring": {}
                  },
                  "type": "string",
                  "description": "The test or analyte name, such as Hemoglobin."
                },
                "value": {
                  "title": "Value",
                  "maxLength": 80,
                  "x-usim": {
                    "authoring": {}
                  },
                  "type": "string",
                  "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
                },
                "unit": {
                  "title": "Unit",
                  "maxLength": 80,
                  "x-usim": {
                    "authoring": {}
                  },
                  "type": "string",
                  "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
                }
              },
              "description": "One laboratory measurement, with its test name, reported value, and unit."
            },
            "description": "Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred."
          },
          "image": {
            "title": "Image",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "dataUrl",
              "description"
            ],
            "properties": {
              "dataUrl": {
                "title": "Image",
                "maxLength": 12582912,
                "x-usim": {
                  "authoring": {}
                },
                "type": "string",
                "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it."
              },
              "description": {
                "title": "Image description",
                "maxLength": 1000,
                "x-usim": {
                  "authoring": {}
                },
                "type": "string",
                "description": "Describe the image and relevant visible findings for readers who cannot see it."
              }
            },
            "description": "An embedded image released with this resource, with a text description of its content."
          },
          "releaseOnStateId": {
            "title": "Release result",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.states",
                "label": "title",
                "excludeScheduled": false
              },
              "authoring": {
                "emptyLabel": "When requested by the learner"
              }
            },
            "type": "string",
            "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."
          },
          "delaySeconds": {
            "title": "Response delay · seconds",
            "minimum": 0,
            "maximum": 86400,
            "x-usim": {
              "unit": "s",
              "authoring": {}
            },
            "type": "number",
            "description": "Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate."
          },
          "effects": {
            "title": "Vital signs",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {
                "columns": 3
              }
            },
            "type": "object",
            "properties": {
              "hr": {
                "title": "Heart rate · bpm",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "beats/min",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 250,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "sbp": {
                "title": "Systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 90,
                    "maximum": 120,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 300,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "dbp": {
                "title": "Diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "referenceRange": {
                    "minimum": 60,
                    "maximum": 80,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 200,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "rr": {
                "title": "Respiratory rate · /min",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "breaths/min",
                  "referenceRange": {
                    "minimum": 12,
                    "maximum": 18,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 80,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "spo2": {
                "title": "Oxygen saturation · %",
                "minimum": 0,
                "maximum": 100,
                "x-usim": {
                  "unit": "%",
                  "referenceRange": {
                    "minimum": 95,
                    "maximum": 100,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 0,
                      "maximum": 100,
                      "step": 1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "temperature": {
                "title": "Temperature · °C",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "Cel",
                  "referenceRange": {
                    "minimum": 36.5,
                    "maximum": 37.3,
                    "minimumAgeYears": 18,
                    "label": "Adult resting reference",
                    "source": "https://medlineplus.gov/ency/article/002341.htm"
                  },
                  "authoring": {
                    "slider": {
                      "minimum": 25,
                      "maximum": 45,
                      "step": 0.1
                    }
                  }
                },
                "type": "number",
                "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."
              },
              "etco2": {
                "title": "End-tidal CO₂ · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artSbp": {
                "title": "Arterial systolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              },
              "artDbp": {
                "title": "Arterial diastolic BP · mmHg",
                "minimum": 0,
                "maximum": 1000,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "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."
              }
            },
            "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."
          },
          "advanceToStateId": {
            "title": "Destination event",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.states",
                "label": "title",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "description": "Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent."
          },
          "effectPercent": {
            "additionalProperties": false,
            "type": "object",
            "properties": {
              "hr": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "sbp": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "dbp": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "rr": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "spo2": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "temperature": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "etco2": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "artSbp": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              },
              "artDbp": {
                "minimum": -100,
                "maximum": 1000,
                "type": "number",
                "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."
              }
            },
            "description": "Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId."
          },
          "monitorConnection": {
            "title": "Monitor connection",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "channel",
              "connected"
            ],
            "properties": {
              "channel": {
                "type": "string",
                "title": "Monitor channel",
                "enum": [
                  "ecg",
                  "bloodPressure",
                  "spo2",
                  "respiration",
                  "temperature",
                  "capnography",
                  "arterialPressure",
                  "all",
                  "standard"
                ],
                "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate."
              },
              "connected": {
                "title": "Connected",
                "type": "boolean",
                "description": "True connects this channel; false disconnects it."
              }
            },
            "description": "Connect or disconnect an equipment channel when this resource response is released."
          },
          "orthostaticResponse": {
            "title": "Orthostatic BP response",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "required": [
              "systolicDrop",
              "diastolicDrop"
            ],
            "properties": {
              "systolicDrop": {
                "title": "Systolic drop · mmHg",
                "minimum": 0,
                "maximum": 100,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result."
              },
              "diastolicDrop": {
                "title": "Diastolic drop · mmHg",
                "minimum": 0,
                "maximum": 100,
                "x-usim": {
                  "unit": "mmHg",
                  "authoring": {}
                },
                "type": "number",
                "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result."
              }
            },
            "description": "Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence."
          },
          "medicationResponse": {
            "type": "string",
            "title": "Medication response preset",
            "enum": [
              "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"
            ],
            "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."
          },
          "source": {
            "title": "Source / attribution",
            "maxLength": 2000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy."
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "monitorConnection": {}
              },
              "required": [
                "monitorConnection"
              ]
            },
            "then": {
              "properties": {
                "type": {
                  "const": "equipment"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "orthostaticResponse": {}
              },
              "required": [
                "orthostaticResponse"
              ]
            },
            "then": {
              "properties": {
                "type": {
                  "const": "diagnostic"
                },
                "diagnosticCategory": {
                  "const": "physiologic"
                }
              },
              "required": [
                "diagnosticCategory"
              ],
              "not": {
                "anyOf": [
                  {
                    "properties": {
                      "effects": {}
                    },
                    "required": [
                      "effects"
                    ]
                  },
                  {
                    "properties": {
                      "effectPercent": {}
                    },
                    "required": [
                      "effectPercent"
                    ]
                  },
                  {
                    "properties": {
                      "medicationResponse": {}
                    },
                    "required": [
                      "medicationResponse"
                    ]
                  }
                ]
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "diagnostic"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "diagnosticCategory": {}
              },
              "required": [
                "diagnosticCategory"
              ]
            },
            "else": {
              "not": {
                "properties": {
                  "diagnosticCategory": {}
                },
                "required": [
                  "diagnosticCategory"
                ]
              }
            }
          },
          {
            "if": {
              "properties": {
                "medicationResponse": {}
              },
              "required": [
                "medicationResponse"
              ]
            },
            "then": {
              "properties": {
                "type": {
                  "const": "medication"
                }
              },
              "not": {
                "anyOf": [
                  {
                    "properties": {
                      "effects": {}
                    },
                    "required": [
                      "effects"
                    ]
                  },
                  {
                    "properties": {
                      "effectPercent": {}
                    },
                    "required": [
                      "effectPercent"
                    ]
                  },
                  {
                    "properties": {
                      "advanceToStateId": {}
                    },
                    "required": [
                      "advanceToStateId"
                    ]
                  }
                ]
              }
            }
          }
        ],
        "description": "One resource with learner-facing information, release timing, and any authored response or patient changes."
      },
      "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."
    }
  },
  "description": "The patient phases, transitions, and requestable resources that define how the scenario progresses."
}

States

events.states

array · Required when the parent is present

Patient phases in the scenario. Include exactly one baseline and at least one conclusion; connect phases with interactions.

  • Maximum entries: 128

Field schema

{
  "title": "States",
  "maxItems": 128,
  "x-usim": {
    "authoring": {
      "editor": "graph"
    }
  },
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "title",
      "kind",
      "learnerNote",
      "tutorNote"
    ],
    "properties": {
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
      },
      "title": {
        "title": "State title",
        "maxLength": 240,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "A short name for this phase, such as Initial assessment or Worsening respiratory distress."
      },
      "kind": {
        "type": "string",
        "title": "State kind",
        "enum": [
          "baseline",
          "triggered",
          "scheduled",
          "conclusion"
        ],
        "description": "Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction."
      },
      "learnerNote": {
        "title": "Learner prompt",
        "maxLength": 8000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "tutorNote": {
        "title": "Tutor prompt",
        "maxLength": 8000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "vitals": {
        "title": "Vital signs",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {
            "columns": 3
          }
        },
        "type": "object",
        "properties": {
          "hr": {
            "title": "Heart rate · bpm",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "beats/min",
              "referenceRange": {
                "minimum": 60,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 250,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "sbp": {
            "title": "Systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 90,
                "maximum": 120,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 300,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "dbp": {
            "title": "Diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 60,
                "maximum": 80,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 200,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "rr": {
            "title": "Respiratory rate · /min",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "breaths/min",
              "referenceRange": {
                "minimum": 12,
                "maximum": 18,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 80,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "spo2": {
            "title": "Oxygen saturation · %",
            "minimum": 0,
            "maximum": 100,
            "x-usim": {
              "unit": "%",
              "referenceRange": {
                "minimum": 95,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 100,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "temperature": {
            "title": "Temperature · °C",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "Cel",
              "referenceRange": {
                "minimum": 36.5,
                "maximum": 37.3,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 25,
                  "maximum": 45,
                  "step": 0.1
                }
              }
            },
            "type": "number",
            "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."
          },
          "etco2": {
            "title": "End-tidal CO₂ · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artSbp": {
            "title": "Arterial systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artDbp": {
            "title": "Arterial diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          }
        },
        "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."
      },
      "vitalTrendSeconds": {
        "title": "Vital trend · seconds",
        "minimum": 0,
        "maximum": 86400,
        "x-usim": {
          "unit": "s",
          "authoring": {}
        },
        "type": "number",
        "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."
      },
      "monitor": {
        "title": "Monitor",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {
            "editor": "monitor"
          }
        },
        "type": "object",
        "properties": {
          "rhythm": {
            "type": "string",
            "title": "Monitor rhythm",
            "enum": [
              "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"
            ],
            "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
          },
          "pulsePresent": {
            "title": "Pulse present",
            "type": "boolean",
            "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
          },
          "connections": {
            "title": "Monitor connections",
            "additionalProperties": false,
            "x-usim": {
              "authoring": {}
            },
            "type": "object",
            "properties": {
              "ecg": {
                "title": "ECG",
                "type": "boolean",
                "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "bloodPressure": {
                "title": "Blood pressure cuff",
                "type": "boolean",
                "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "spo2": {
                "title": "Pulse oximetry",
                "type": "boolean",
                "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "respiration": {
                "title": "Respiratory monitoring",
                "type": "boolean",
                "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "temperature": {
                "title": "Temperature probe",
                "type": "boolean",
                "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "capnography": {
                "title": "Capnography",
                "type": "boolean",
                "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
              },
              "arterialPressure": {
                "title": "Arterial pressure",
                "type": "boolean",
                "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
              }
            },
            "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."
          }
        },
        "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."
      },
      "key": {
        "title": "Key state",
        "type": "boolean",
        "description": "Mark an educationally important phase. This does not award points or require every path to pass through the phase."
      },
      "resourceTrigger": {
        "title": "Enter when resource results are available",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "mode",
          "objectIds"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "title": "Results required",
            "enum": [
              "any",
              "all"
            ],
            "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."
          },
          "objectIds": {
            "title": "Selected resources",
            "minItems": 1,
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "title": "Resource",
              "maxLength": 128,
              "minLength": 1,
              "pattern": "\\S",
              "x-usim": {
                "reference": {
                  "collection": "events.objects",
                  "label": "name",
                  "excludeScheduled": false
                },
                "authoring": {}
              },
              "type": "string",
              "description": "The identifier of a learner-requestable resource required by this event result trigger."
            },
            "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event."
          }
        },
        "description": "Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event."
      }
    },
    "description": "One phase of the case, with learner information, tutor guidance, and any changed patient observations."
  },
  "description": "Patient phases in the scenario. Include exactly one baseline and at least one conclusion; connect phases with interactions."
}

*

events.states.*

object · Required when the parent is present

One phase of the case, with learner information, tutor guidance, and any changed patient observations.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "title",
    "kind",
    "learnerNote",
    "tutorNote"
  ],
  "properties": {
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
    },
    "title": {
      "title": "State title",
      "maxLength": 240,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "A short name for this phase, such as Initial assessment or Worsening respiratory distress."
    },
    "kind": {
      "type": "string",
      "title": "State kind",
      "enum": [
        "baseline",
        "triggered",
        "scheduled",
        "conclusion"
      ],
      "description": "Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction."
    },
    "learnerNote": {
      "title": "Learner prompt",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "tutorNote": {
      "title": "Tutor prompt",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "vitals": {
      "title": "Vital signs",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "columns": 3
        }
      },
      "type": "object",
      "properties": {
        "hr": {
          "title": "Heart rate · bpm",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "beats/min",
            "referenceRange": {
              "minimum": 60,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 250,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "sbp": {
          "title": "Systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 90,
              "maximum": 120,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 300,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "dbp": {
          "title": "Diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 60,
              "maximum": 80,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 200,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "rr": {
          "title": "Respiratory rate · /min",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "breaths/min",
            "referenceRange": {
              "minimum": 12,
              "maximum": 18,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 80,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "spo2": {
          "title": "Oxygen saturation · %",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "%",
            "referenceRange": {
              "minimum": 95,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 100,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "temperature": {
          "title": "Temperature · °C",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "Cel",
            "referenceRange": {
              "minimum": 36.5,
              "maximum": 37.3,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 25,
                "maximum": 45,
                "step": 0.1
              }
            }
          },
          "type": "number",
          "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."
        },
        "etco2": {
          "title": "End-tidal CO₂ · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artSbp": {
          "title": "Arterial systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artDbp": {
          "title": "Arterial diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        }
      },
      "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."
    },
    "vitalTrendSeconds": {
      "title": "Vital trend · seconds",
      "minimum": 0,
      "maximum": 86400,
      "x-usim": {
        "unit": "s",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "monitor": {
      "title": "Monitor",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "editor": "monitor"
        }
      },
      "type": "object",
      "properties": {
        "rhythm": {
          "type": "string",
          "title": "Monitor rhythm",
          "enum": [
            "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"
          ],
          "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
        },
        "pulsePresent": {
          "title": "Pulse present",
          "type": "boolean",
          "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
        },
        "connections": {
          "title": "Monitor connections",
          "additionalProperties": false,
          "x-usim": {
            "authoring": {}
          },
          "type": "object",
          "properties": {
            "ecg": {
              "title": "ECG",
              "type": "boolean",
              "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "bloodPressure": {
              "title": "Blood pressure cuff",
              "type": "boolean",
              "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "spo2": {
              "title": "Pulse oximetry",
              "type": "boolean",
              "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "respiration": {
              "title": "Respiratory monitoring",
              "type": "boolean",
              "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "temperature": {
              "title": "Temperature probe",
              "type": "boolean",
              "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "capnography": {
              "title": "Capnography",
              "type": "boolean",
              "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
            },
            "arterialPressure": {
              "title": "Arterial pressure",
              "type": "boolean",
              "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
            }
          },
          "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."
        }
      },
      "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."
    },
    "key": {
      "title": "Key state",
      "type": "boolean",
      "description": "Mark an educationally important phase. This does not award points or require every path to pass through the phase."
    },
    "resourceTrigger": {
      "title": "Enter when resource results are available",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "mode",
        "objectIds"
      ],
      "properties": {
        "mode": {
          "type": "string",
          "title": "Results required",
          "enum": [
            "any",
            "all"
          ],
          "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."
        },
        "objectIds": {
          "title": "Selected resources",
          "minItems": 1,
          "maxItems": 1000,
          "uniqueItems": true,
          "type": "array",
          "items": {
            "title": "Resource",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.objects",
                "label": "name",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "description": "The identifier of a learner-requestable resource required by this event result trigger."
          },
          "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event."
        }
      },
      "description": "Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event."
    }
  },
  "description": "One phase of the case, with learner information, tutor guidance, and any changed patient observations."
}

Identifier

events.states.*.id

string · Required when the parent is present

A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
}

State title

events.states.*.title

string · Required when the parent is present

A short name for this phase, such as Initial assessment or Worsening respiratory distress.

  • Maximum length: 240 characters

Field schema

{
  "title": "State title",
  "maxLength": 240,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "A short name for this phase, such as Initial assessment or Worsening respiratory distress."
}

State kind

events.states.*.kind

string · Required when the parent is present

Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction.

Allowed values: baseline, triggered, scheduled, conclusion

Field schema

{
  "type": "string",
  "title": "State kind",
  "enum": [
    "baseline",
    "triggered",
    "scheduled",
    "conclusion"
  ],
  "description": "Baseline starts the case; triggered and scheduled describe intermediate phases; conclusion ends the run. A scheduled phase still needs an incoming timed interaction."
}

Learner prompt

events.states.*.learnerNote

string · Required when the parent is present

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.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Learner prompt",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

Tutor prompt

events.states.*.tutorNote

string · Required when the parent is present

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.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Tutor prompt",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

Vital signs

events.states.*.vitals

object · Optional; an omitted value is not a normal, negative, or zero value

Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.

Field schema

{
  "title": "Vital signs",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 3
    }
  },
  "type": "object",
  "properties": {
    "hr": {
      "title": "Heart rate · bpm",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "beats/min",
        "referenceRange": {
          "minimum": 60,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 250,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "sbp": {
      "title": "Systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 90,
          "maximum": 120,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 300,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "dbp": {
      "title": "Diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 60,
          "maximum": 80,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 200,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "rr": {
      "title": "Respiratory rate · /min",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "breaths/min",
        "referenceRange": {
          "minimum": 12,
          "maximum": 18,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 80,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "spo2": {
      "title": "Oxygen saturation · %",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "%",
        "referenceRange": {
          "minimum": 95,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 100,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "temperature": {
      "title": "Temperature · °C",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "Cel",
        "referenceRange": {
          "minimum": 36.5,
          "maximum": 37.3,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 25,
            "maximum": 45,
            "step": 0.1
          }
        }
      },
      "type": "number",
      "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."
    },
    "etco2": {
      "title": "End-tidal CO₂ · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artSbp": {
      "title": "Arterial systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artDbp": {
      "title": "Arterial diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    }
  },
  "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."
}

Heart rate · bpm

events.states.*.vitals.hr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Heart rate · bpm",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "beats/min",
    "referenceRange": {
      "minimum": 60,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 250,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Systolic BP · mmHg

events.states.*.vitals.sbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 90–120 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 90,
      "maximum": 120,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 300,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Diastolic BP · mmHg

events.states.*.vitals.dbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–80 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 60,
      "maximum": 80,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 200,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Respiratory rate · /min

events.states.*.vitals.rr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 12–18 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Respiratory rate · /min",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "breaths/min",
    "referenceRange": {
      "minimum": 12,
      "maximum": 18,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 80,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Oxygen saturation · %

events.states.*.vitals.spo2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 100

Reference range: 95–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Oxygen saturation · %",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "%",
    "referenceRange": {
      "minimum": 95,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 100,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Temperature · °C

events.states.*.vitals.temperature

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 36.5–37.3 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Temperature · °C",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "Cel",
    "referenceRange": {
      "minimum": 36.5,
      "maximum": 37.3,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 25,
        "maximum": 45,
        "step": 0.1
      }
    }
  },
  "type": "number",
  "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."
}

End-tidal CO₂ · mmHg

events.states.*.vitals.etco2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "End-tidal CO₂ · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial systolic BP · mmHg

events.states.*.vitals.artSbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial diastolic BP · mmHg

events.states.*.vitals.artDbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Vital trend · seconds

events.states.*.vitalTrendSeconds

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 86400

Field schema

{
  "title": "Vital trend · seconds",
  "minimum": 0,
  "maximum": 86400,
  "x-usim": {
    "unit": "s",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Monitor

events.states.*.monitor

object · Optional; an omitted value is not a normal, negative, or zero value

Monitor rhythm, pulse status, and channel connection overrides for this phase. Connection-only overrides preserve the preceding rhythm; omitted channels keep their preceding connection.

Field schema

{
  "title": "Monitor",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "editor": "monitor"
    }
  },
  "type": "object",
  "properties": {
    "rhythm": {
      "type": "string",
      "title": "Monitor rhythm",
      "enum": [
        "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"
      ],
      "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
    },
    "pulsePresent": {
      "title": "Pulse present",
      "type": "boolean",
      "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
    },
    "connections": {
      "title": "Monitor connections",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "properties": {
        "ecg": {
          "title": "ECG",
          "type": "boolean",
          "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "bloodPressure": {
          "title": "Blood pressure cuff",
          "type": "boolean",
          "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "spo2": {
          "title": "Pulse oximetry",
          "type": "boolean",
          "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "respiration": {
          "title": "Respiratory monitoring",
          "type": "boolean",
          "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "temperature": {
          "title": "Temperature probe",
          "type": "boolean",
          "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "capnography": {
          "title": "Capnography",
          "type": "boolean",
          "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
        },
        "arterialPressure": {
          "title": "Arterial pressure",
          "type": "boolean",
          "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
        }
      },
      "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."
    }
  },
  "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."
}

Monitor rhythm

events.states.*.monitor.rhythm

string · Optional; an omitted value is not a normal, negative, or zero value

The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse.

Allowed values: 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

Field schema

{
  "type": "string",
  "title": "Monitor rhythm",
  "enum": [
    "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"
  ],
  "description": "The ECG rhythm displayed on the monitor. Select the rhythm separately from whether the patient has a palpable pulse."
}

Pulse present

events.states.*.monitor.pulsePresent

boolean · Optional; an omitted value is not a normal, negative, or zero value

Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm.

Field schema

{
  "title": "Pulse present",
  "type": "boolean",
  "description": "Whether a palpable pulse is present. Use this to distinguish perfusing and pulseless presentations of the displayed rhythm."
}

Monitor connections

events.states.*.monitor.connections

object · Optional; an omitted value is not a normal, negative, or zero value

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.

Field schema

{
  "title": "Monitor connections",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "properties": {
    "ecg": {
      "title": "ECG",
      "type": "boolean",
      "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "bloodPressure": {
      "title": "Blood pressure cuff",
      "type": "boolean",
      "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "spo2": {
      "title": "Pulse oximetry",
      "type": "boolean",
      "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "respiration": {
      "title": "Respiratory monitoring",
      "type": "boolean",
      "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "temperature": {
      "title": "Temperature probe",
      "type": "boolean",
      "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "capnography": {
      "title": "Capnography",
      "type": "boolean",
      "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
    },
    "arterialPressure": {
      "title": "Arterial pressure",
      "type": "boolean",
      "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
    }
  },
  "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."
}

ECG

events.states.*.monitor.connections.ecg

boolean · Optional; an omitted value is not a normal, negative, or zero value

ECG: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "ECG",
  "type": "boolean",
  "description": "ECG: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Blood pressure cuff

events.states.*.monitor.connections.bloodPressure

boolean · Optional; an omitted value is not a normal, negative, or zero value

Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Blood pressure cuff",
  "type": "boolean",
  "description": "Blood pressure cuff: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Pulse oximetry

events.states.*.monitor.connections.spo2

boolean · Optional; an omitted value is not a normal, negative, or zero value

Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Pulse oximetry",
  "type": "boolean",
  "description": "Pulse oximetry: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Respiratory monitoring

events.states.*.monitor.connections.respiration

boolean · Optional; an omitted value is not a normal, negative, or zero value

Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Respiratory monitoring",
  "type": "boolean",
  "description": "Respiratory monitoring: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Temperature probe

events.states.*.monitor.connections.temperature

boolean · Optional; an omitted value is not a normal, negative, or zero value

Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Temperature probe",
  "type": "boolean",
  "description": "Temperature probe: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Capnography

events.states.*.monitor.connections.capnography

boolean · Optional; an omitted value is not a normal, negative, or zero value

Capnography: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Capnography",
  "type": "boolean",
  "description": "Capnography: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Arterial pressure

events.states.*.monitor.connections.arterialPressure

boolean · Optional; an omitted value is not a normal, negative, or zero value

Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology.

Field schema

{
  "title": "Arterial pressure",
  "type": "boolean",
  "description": "Arterial pressure: connected exposes the available measurement; disconnected hides it without changing physiology."
}

Key state

events.states.*.key

boolean · Optional; an omitted value is not a normal, negative, or zero value

Mark an educationally important phase. This does not award points or require every path to pass through the phase.

Field schema

{
  "title": "Key state",
  "type": "boolean",
  "description": "Mark an educationally important phase. This does not award points or require every path to pass through the phase."
}

Enter when resource results are available

events.states.*.resourceTrigger

object · Optional; an omitted value is not a normal, negative, or zero value

Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event.

Field schema

{
  "title": "Enter when resource results are available",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "mode",
    "objectIds"
  ],
  "properties": {
    "mode": {
      "type": "string",
      "title": "Results required",
      "enum": [
        "any",
        "all"
      ],
      "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."
    },
    "objectIds": {
      "title": "Selected resources",
      "minItems": 1,
      "maxItems": 1000,
      "uniqueItems": true,
      "type": "array",
      "items": {
        "title": "Resource",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.objects",
            "label": "name",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "The identifier of a learner-requestable resource required by this event result trigger."
      },
      "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event."
    }
  },
  "description": "Enter this event once when selected learner-requested resource results become available. Incoming transitions remain alternative paths into the event."
}

Results required

events.states.*.resourceTrigger.mode

string · Required when the parent is present

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.

Allowed values: any, all

Field schema

{
  "type": "string",
  "title": "Results required",
  "enum": [
    "any",
    "all"
  ],
  "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."
}

Selected resources

events.states.*.resourceTrigger.objectIds

array · Required when the parent is present

Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event.

  • Maximum entries: 1000

Field schema

{
  "title": "Selected resources",
  "minItems": 1,
  "maxItems": 1000,
  "uniqueItems": true,
  "type": "array",
  "items": {
    "title": "Resource",
    "maxLength": 128,
    "minLength": 1,
    "pattern": "\\S",
    "x-usim": {
      "reference": {
        "collection": "events.objects",
        "label": "name",
        "excludeScheduled": false
      },
      "authoring": {}
    },
    "type": "string",
    "description": "The identifier of a learner-requestable resource required by this event result trigger."
  },
  "description": "Scenario resources whose completed results trigger this event. Select learner-requestable resources without a separate resource destination event."
}

Resource

events.states.*.resourceTrigger.objectIds.*

string · Required when the parent is present

The identifier of a learner-requestable resource required by this event result trigger.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.objects using name as the display label.

Field schema

{
  "title": "Resource",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.objects",
      "label": "name",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "The identifier of a learner-requestable resource required by this event result trigger."
}

Interactions

events.actions

array · Required when the parent is present

Connections between phases, activated by a learner action or a timer measured from entry into the source phase.

  • Maximum entries: 512

Field schema

{
  "title": "Interactions",
  "maxItems": 512,
  "x-usim": {
    "authoring": {
      "addLabel": "Add interaction"
    }
  },
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "label",
      "from",
      "to"
    ],
    "properties": {
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
      },
      "label": {
        "title": "Interaction",
        "maxLength": 1000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "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."
      },
      "description": {
        "title": "Description",
        "maxLength": 6000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "from": {
        "title": "From state",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.states",
            "label": "title",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "The phase in which this interaction is available or its scheduled timer begins."
      },
      "to": {
        "title": "Leads to",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.states",
            "label": "title",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "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."
      },
      "trigger": {
        "type": "string",
        "title": "Trigger",
        "enum": [
          "action",
          "scheduled"
        ],
        "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."
      },
      "delaySeconds": {
        "title": "Delay · seconds",
        "minimum": 0,
        "maximum": 86400,
        "x-usim": {
          "unit": "s",
          "authoring": {
            "visibleWhen": {
              "property": "trigger",
              "equals": "scheduled"
            }
          }
        },
        "type": "number",
        "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."
      },
      "objectId": {
        "title": "Linked resource",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.objects",
            "label": "name",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "deprecated": true,
        "description": "Requests a resource when this transition fires. Builder authors resource links on the state under Results."
      },
      "completionCriteria": {
        "title": "When this action is complete",
        "maxLength": 6000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "completion": {
        "title": "Action recognition",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "mode",
          "objectIds"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "title": "Resources required",
            "enum": [
              "any",
              "all"
            ],
            "description": "Choose whether any or all selected resource requests complete this action."
          },
          "objectIds": {
            "title": "Recognize resource interactions",
            "minItems": 1,
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "title": "Resource",
              "maxLength": 128,
              "minLength": 1,
              "pattern": "\\S",
              "x-usim": {
                "reference": {
                  "collection": "events.objects",
                  "label": "name",
                  "excludeScheduled": false
                },
                "authoring": {}
              },
              "type": "string",
              "description": "A learner-requestable resource used to recognize the action."
            },
            "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."
          }
        },
        "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."
      },
      "cancelOnActionIds": {
        "title": "Cancel when action completes",
        "maxItems": 1000,
        "uniqueItems": true,
        "type": "array",
        "items": {
          "title": "Completed action",
          "maxLength": 128,
          "minLength": 1,
          "pattern": "\\S",
          "x-usim": {
            "reference": {
              "collection": "events.actions",
              "label": "label",
              "excludeScheduled": false
            },
            "authoring": {}
          },
          "type": "string",
          "description": "A learner action whose completion prevents this scheduled transition from firing."
        },
        "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."
      },
      "effects": {
        "title": "Vital signs",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {
            "columns": 3
          }
        },
        "type": "object",
        "properties": {
          "hr": {
            "title": "Heart rate · bpm",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "beats/min",
              "referenceRange": {
                "minimum": 60,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 250,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "sbp": {
            "title": "Systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 90,
                "maximum": 120,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 300,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "dbp": {
            "title": "Diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 60,
                "maximum": 80,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 200,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "rr": {
            "title": "Respiratory rate · /min",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "breaths/min",
              "referenceRange": {
                "minimum": 12,
                "maximum": 18,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 80,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "spo2": {
            "title": "Oxygen saturation · %",
            "minimum": 0,
            "maximum": 100,
            "x-usim": {
              "unit": "%",
              "referenceRange": {
                "minimum": 95,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 100,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "temperature": {
            "title": "Temperature · °C",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "Cel",
              "referenceRange": {
                "minimum": 36.5,
                "maximum": 37.3,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 25,
                  "maximum": 45,
                  "step": 0.1
                }
              }
            },
            "type": "number",
            "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."
          },
          "etco2": {
            "title": "End-tidal CO₂ · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artSbp": {
            "title": "Arterial systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artDbp": {
            "title": "Arterial diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          }
        },
        "description": "Vital values applied during the transition. Builder authors patient changes on destination state vitals.",
        "deprecated": true
      }
    },
    "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."
  },
  "description": "Connections between phases, activated by a learner action or a timer measured from entry into the source phase."
}

*

events.actions.*

object · Required when the parent is present

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.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "label",
    "from",
    "to"
  ],
  "properties": {
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
    },
    "label": {
      "title": "Interaction",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "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."
    },
    "description": {
      "title": "Description",
      "maxLength": 6000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "from": {
      "title": "From state",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.states",
          "label": "title",
          "excludeScheduled": false
        },
        "authoring": {}
      },
      "type": "string",
      "description": "The phase in which this interaction is available or its scheduled timer begins."
    },
    "to": {
      "title": "Leads to",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.states",
          "label": "title",
          "excludeScheduled": false
        },
        "authoring": {}
      },
      "type": "string",
      "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."
    },
    "trigger": {
      "type": "string",
      "title": "Trigger",
      "enum": [
        "action",
        "scheduled"
      ],
      "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."
    },
    "delaySeconds": {
      "title": "Delay · seconds",
      "minimum": 0,
      "maximum": 86400,
      "x-usim": {
        "unit": "s",
        "authoring": {
          "visibleWhen": {
            "property": "trigger",
            "equals": "scheduled"
          }
        }
      },
      "type": "number",
      "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."
    },
    "objectId": {
      "title": "Linked resource",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.objects",
          "label": "name",
          "excludeScheduled": false
        },
        "authoring": {}
      },
      "type": "string",
      "deprecated": true,
      "description": "Requests a resource when this transition fires. Builder authors resource links on the state under Results."
    },
    "completionCriteria": {
      "title": "When this action is complete",
      "maxLength": 6000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "completion": {
      "title": "Action recognition",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "mode",
        "objectIds"
      ],
      "properties": {
        "mode": {
          "type": "string",
          "title": "Resources required",
          "enum": [
            "any",
            "all"
          ],
          "description": "Choose whether any or all selected resource requests complete this action."
        },
        "objectIds": {
          "title": "Recognize resource interactions",
          "minItems": 1,
          "maxItems": 1000,
          "uniqueItems": true,
          "type": "array",
          "items": {
            "title": "Resource",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "\\S",
            "x-usim": {
              "reference": {
                "collection": "events.objects",
                "label": "name",
                "excludeScheduled": false
              },
              "authoring": {}
            },
            "type": "string",
            "description": "A learner-requestable resource used to recognize the action."
          },
          "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."
        }
      },
      "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."
    },
    "cancelOnActionIds": {
      "title": "Cancel when action completes",
      "maxItems": 1000,
      "uniqueItems": true,
      "type": "array",
      "items": {
        "title": "Completed action",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.actions",
            "label": "label",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "A learner action whose completion prevents this scheduled transition from firing."
      },
      "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."
    },
    "effects": {
      "title": "Vital signs",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "columns": 3
        }
      },
      "type": "object",
      "properties": {
        "hr": {
          "title": "Heart rate · bpm",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "beats/min",
            "referenceRange": {
              "minimum": 60,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 250,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "sbp": {
          "title": "Systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 90,
              "maximum": 120,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 300,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "dbp": {
          "title": "Diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 60,
              "maximum": 80,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 200,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "rr": {
          "title": "Respiratory rate · /min",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "breaths/min",
            "referenceRange": {
              "minimum": 12,
              "maximum": 18,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 80,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "spo2": {
          "title": "Oxygen saturation · %",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "%",
            "referenceRange": {
              "minimum": 95,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 100,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "temperature": {
          "title": "Temperature · °C",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "Cel",
            "referenceRange": {
              "minimum": 36.5,
              "maximum": 37.3,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 25,
                "maximum": 45,
                "step": 0.1
              }
            }
          },
          "type": "number",
          "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."
        },
        "etco2": {
          "title": "End-tidal CO₂ · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artSbp": {
          "title": "Arterial systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artDbp": {
          "title": "Arterial diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        }
      },
      "description": "Vital values applied during the transition. Builder authors patient changes on destination state vitals.",
      "deprecated": true
    }
  },
  "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."
}

Identifier

events.actions.*.id

string · Required when the parent is present

A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
}

Interaction

events.actions.*.label

string · Required when the parent is present

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.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Interaction",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "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."
}

Description

events.actions.*.description

string · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum length: 6000 characters

Field schema

{
  "title": "Description",
  "maxLength": 6000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

From state

events.actions.*.from

string · Required when the parent is present

The phase in which this interaction is available or its scheduled timer begins.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.states using title as the display label.

Field schema

{
  "title": "From state",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.states",
      "label": "title",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "The phase in which this interaction is available or its scheduled timer begins."
}

Leads to

events.actions.*.to

string · Required when the parent is present

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.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.states using title as the display label.

Field schema

{
  "title": "Leads to",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.states",
      "label": "title",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "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."
}

Trigger

events.actions.*.trigger

string · Optional; an omitted value is not a normal, negative, or zero value

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.

Allowed values: action, scheduled

Field schema

{
  "type": "string",
  "title": "Trigger",
  "enum": [
    "action",
    "scheduled"
  ],
  "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."
}

Delay · seconds

events.actions.*.delaySeconds

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 86400

Field schema

{
  "title": "Delay · seconds",
  "minimum": 0,
  "maximum": 86400,
  "x-usim": {
    "unit": "s",
    "authoring": {
      "visibleWhen": {
        "property": "trigger",
        "equals": "scheduled"
      }
    }
  },
  "type": "number",
  "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."
}

Linked resource

events.actions.*.objectId

string · Optional; an omitted value is not a normal, negative, or zero value

Requests a resource when this transition fires. Builder authors resource links on the state under Results.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.objects using name as the display label.

Field schema

{
  "title": "Linked resource",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.objects",
      "label": "name",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "deprecated": true,
  "description": "Requests a resource when this transition fires. Builder authors resource links on the state under Results."
}

When this action is complete

events.actions.*.completionCriteria

string · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum length: 6000 characters

Field schema

{
  "title": "When this action is complete",
  "maxLength": 6000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

Action recognition

events.actions.*.completion

object · Optional; an omitted value is not a normal, negative, or zero value

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.

Field schema

{
  "title": "Action recognition",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "mode",
    "objectIds"
  ],
  "properties": {
    "mode": {
      "type": "string",
      "title": "Resources required",
      "enum": [
        "any",
        "all"
      ],
      "description": "Choose whether any or all selected resource requests complete this action."
    },
    "objectIds": {
      "title": "Recognize resource interactions",
      "minItems": 1,
      "maxItems": 1000,
      "uniqueItems": true,
      "type": "array",
      "items": {
        "title": "Resource",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.objects",
            "label": "name",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "A learner-requestable resource used to recognize the action."
      },
      "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."
    }
  },
  "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."
}

Resources required

events.actions.*.completion.mode

string · Required when the parent is present

Choose whether any or all selected resource requests complete this action.

Allowed values: any, all

Field schema

{
  "type": "string",
  "title": "Resources required",
  "enum": [
    "any",
    "all"
  ],
  "description": "Choose whether any or all selected resource requests complete this action."
}

Recognize resource interactions

events.actions.*.completion.objectIds

array · Required when the parent is present

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.

  • Maximum entries: 1000

Field schema

{
  "title": "Recognize resource interactions",
  "minItems": 1,
  "maxItems": 1000,
  "uniqueItems": true,
  "type": "array",
  "items": {
    "title": "Resource",
    "maxLength": 128,
    "minLength": 1,
    "pattern": "\\S",
    "x-usim": {
      "reference": {
        "collection": "events.objects",
        "label": "name",
        "excludeScheduled": false
      },
      "authoring": {}
    },
    "type": "string",
    "description": "A learner-requestable resource used to recognize the action."
  },
  "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."
}

Resource

events.actions.*.completion.objectIds.*

string · Required when the parent is present

A learner-requestable resource used to recognize the action.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.objects using name as the display label.

Field schema

{
  "title": "Resource",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.objects",
      "label": "name",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "A learner-requestable resource used to recognize the action."
}

Cancel when action completes

events.actions.*.cancelOnActionIds

array · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum entries: 1000

Field schema

{
  "title": "Cancel when action completes",
  "maxItems": 1000,
  "uniqueItems": true,
  "type": "array",
  "items": {
    "title": "Completed action",
    "maxLength": 128,
    "minLength": 1,
    "pattern": "\\S",
    "x-usim": {
      "reference": {
        "collection": "events.actions",
        "label": "label",
        "excludeScheduled": false
      },
      "authoring": {}
    },
    "type": "string",
    "description": "A learner action whose completion prevents this scheduled transition from firing."
  },
  "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."
}

Completed action

events.actions.*.cancelOnActionIds.*

string · Required when the parent is present

A learner action whose completion prevents this scheduled transition from firing.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.actions using label as the display label.

Field schema

{
  "title": "Completed action",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.actions",
      "label": "label",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "A learner action whose completion prevents this scheduled transition from firing."
}

Vital signs

events.actions.*.effects

object · Optional; an omitted value is not a normal, negative, or zero value

Vital values applied during the transition. Builder authors patient changes on destination state vitals.

Field schema

{
  "title": "Vital signs",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 3
    }
  },
  "type": "object",
  "properties": {
    "hr": {
      "title": "Heart rate · bpm",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "beats/min",
        "referenceRange": {
          "minimum": 60,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 250,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "sbp": {
      "title": "Systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 90,
          "maximum": 120,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 300,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "dbp": {
      "title": "Diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 60,
          "maximum": 80,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 200,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "rr": {
      "title": "Respiratory rate · /min",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "breaths/min",
        "referenceRange": {
          "minimum": 12,
          "maximum": 18,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 80,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "spo2": {
      "title": "Oxygen saturation · %",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "%",
        "referenceRange": {
          "minimum": 95,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 100,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "temperature": {
      "title": "Temperature · °C",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "Cel",
        "referenceRange": {
          "minimum": 36.5,
          "maximum": 37.3,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 25,
            "maximum": 45,
            "step": 0.1
          }
        }
      },
      "type": "number",
      "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."
    },
    "etco2": {
      "title": "End-tidal CO₂ · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artSbp": {
      "title": "Arterial systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artDbp": {
      "title": "Arterial diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    }
  },
  "description": "Vital values applied during the transition. Builder authors patient changes on destination state vitals.",
  "deprecated": true
}

Heart rate · bpm

events.actions.*.effects.hr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Heart rate · bpm",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "beats/min",
    "referenceRange": {
      "minimum": 60,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 250,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Systolic BP · mmHg

events.actions.*.effects.sbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 90–120 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 90,
      "maximum": 120,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 300,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Diastolic BP · mmHg

events.actions.*.effects.dbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–80 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 60,
      "maximum": 80,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 200,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Respiratory rate · /min

events.actions.*.effects.rr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 12–18 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Respiratory rate · /min",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "breaths/min",
    "referenceRange": {
      "minimum": 12,
      "maximum": 18,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 80,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Oxygen saturation · %

events.actions.*.effects.spo2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 100

Reference range: 95–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Oxygen saturation · %",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "%",
    "referenceRange": {
      "minimum": 95,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 100,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Temperature · °C

events.actions.*.effects.temperature

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 36.5–37.3 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Temperature · °C",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "Cel",
    "referenceRange": {
      "minimum": 36.5,
      "maximum": 37.3,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 25,
        "maximum": 45,
        "step": 0.1
      }
    }
  },
  "type": "number",
  "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."
}

End-tidal CO₂ · mmHg

events.actions.*.effects.etco2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "End-tidal CO₂ · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial systolic BP · mmHg

events.actions.*.effects.artSbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial diastolic BP · mmHg

events.actions.*.effects.artDbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Resources

events.objects

array · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum entries: 2048

Field schema

{
  "title": "Resources",
  "maxItems": 2048,
  "x-usim": {
    "authoring": {
      "editor": "resources"
    }
  },
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "id",
      "type",
      "name"
    ],
    "properties": {
      "id": {
        "title": "Identifier",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "\\S",
        "x-usim": {
          "authoring": {
            "hidden": true
          }
        },
        "type": "string",
        "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
      },
      "type": {
        "type": "string",
        "title": "Resource type",
        "enum": [
          "medication",
          "diagnostic",
          "procedure",
          "equipment",
          "consultation",
          "information"
        ],
        "description": "Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects."
      },
      "name": {
        "title": "Resource name",
        "maxLength": 240,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices."
      },
      "diagnosticCategory": {
        "type": "string",
        "title": "Diagnostic category",
        "enum": [
          "lab",
          "imaging",
          "physiologic"
        ],
        "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."
      },
      "description": {
        "title": "Description shown to the learner",
        "maxLength": 8000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "result": {
        "title": "Learner result",
        "maxLength": 12000,
        "x-usim": {
          "authoring": {
            "editor": "textarea"
          }
        },
        "type": "string",
        "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."
      },
      "labResults": {
        "title": "Lab results",
        "maxItems": 64,
        "type": "array",
        "items": {
          "additionalProperties": false,
          "x-usim": {
            "authoring": {}
          },
          "type": "object",
          "required": [
            "name",
            "value",
            "unit"
          ],
          "properties": {
            "name": {
              "title": "Test",
              "maxLength": 120,
              "x-usim": {
                "authoring": {}
              },
              "type": "string",
              "description": "The test or analyte name, such as Hemoglobin."
            },
            "value": {
              "title": "Value",
              "maxLength": 80,
              "x-usim": {
                "authoring": {}
              },
              "type": "string",
              "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
            },
            "unit": {
              "title": "Unit",
              "maxLength": 80,
              "x-usim": {
                "authoring": {}
              },
              "type": "string",
              "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
            }
          },
          "description": "One laboratory measurement, with its test name, reported value, and unit."
        },
        "description": "Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred."
      },
      "image": {
        "title": "Image",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "dataUrl",
          "description"
        ],
        "properties": {
          "dataUrl": {
            "title": "Image",
            "maxLength": 12582912,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it."
          },
          "description": {
            "title": "Image description",
            "maxLength": 1000,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "Describe the image and relevant visible findings for readers who cannot see it."
          }
        },
        "description": "An embedded image released with this resource, with a text description of its content."
      },
      "releaseOnStateId": {
        "title": "Release result",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.states",
            "label": "title",
            "excludeScheduled": false
          },
          "authoring": {
            "emptyLabel": "When requested by the learner"
          }
        },
        "type": "string",
        "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."
      },
      "delaySeconds": {
        "title": "Response delay · seconds",
        "minimum": 0,
        "maximum": 86400,
        "x-usim": {
          "unit": "s",
          "authoring": {}
        },
        "type": "number",
        "description": "Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate."
      },
      "effects": {
        "title": "Vital signs",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {
            "columns": 3
          }
        },
        "type": "object",
        "properties": {
          "hr": {
            "title": "Heart rate · bpm",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "beats/min",
              "referenceRange": {
                "minimum": 60,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 250,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "sbp": {
            "title": "Systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 90,
                "maximum": 120,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 300,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "dbp": {
            "title": "Diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "referenceRange": {
                "minimum": 60,
                "maximum": 80,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 200,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "rr": {
            "title": "Respiratory rate · /min",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "breaths/min",
              "referenceRange": {
                "minimum": 12,
                "maximum": 18,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 80,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "spo2": {
            "title": "Oxygen saturation · %",
            "minimum": 0,
            "maximum": 100,
            "x-usim": {
              "unit": "%",
              "referenceRange": {
                "minimum": 95,
                "maximum": 100,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
              },
              "authoring": {
                "slider": {
                  "minimum": 0,
                  "maximum": 100,
                  "step": 1
                }
              }
            },
            "type": "number",
            "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."
          },
          "temperature": {
            "title": "Temperature · °C",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "Cel",
              "referenceRange": {
                "minimum": 36.5,
                "maximum": 37.3,
                "minimumAgeYears": 18,
                "label": "Adult resting reference",
                "source": "https://medlineplus.gov/ency/article/002341.htm"
              },
              "authoring": {
                "slider": {
                  "minimum": 25,
                  "maximum": 45,
                  "step": 0.1
                }
              }
            },
            "type": "number",
            "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."
          },
          "etco2": {
            "title": "End-tidal CO₂ · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artSbp": {
            "title": "Arterial systolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          },
          "artDbp": {
            "title": "Arterial diastolic BP · mmHg",
            "minimum": 0,
            "maximum": 1000,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "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."
          }
        },
        "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."
      },
      "advanceToStateId": {
        "title": "Destination event",
        "maxLength": 128,
        "minLength": 1,
        "pattern": "\\S",
        "x-usim": {
          "reference": {
            "collection": "events.states",
            "label": "title",
            "excludeScheduled": false
          },
          "authoring": {}
        },
        "type": "string",
        "description": "Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent."
      },
      "effectPercent": {
        "additionalProperties": false,
        "type": "object",
        "properties": {
          "hr": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "sbp": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "dbp": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "rr": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "spo2": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "temperature": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "etco2": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "artSbp": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          },
          "artDbp": {
            "minimum": -100,
            "maximum": 1000,
            "type": "number",
            "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."
          }
        },
        "description": "Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId."
      },
      "monitorConnection": {
        "title": "Monitor connection",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "channel",
          "connected"
        ],
        "properties": {
          "channel": {
            "type": "string",
            "title": "Monitor channel",
            "enum": [
              "ecg",
              "bloodPressure",
              "spo2",
              "respiration",
              "temperature",
              "capnography",
              "arterialPressure",
              "all",
              "standard"
            ],
            "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate."
          },
          "connected": {
            "title": "Connected",
            "type": "boolean",
            "description": "True connects this channel; false disconnects it."
          }
        },
        "description": "Connect or disconnect an equipment channel when this resource response is released."
      },
      "orthostaticResponse": {
        "title": "Orthostatic BP response",
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "systolicDrop",
          "diastolicDrop"
        ],
        "properties": {
          "systolicDrop": {
            "title": "Systolic drop · mmHg",
            "minimum": 0,
            "maximum": 100,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result."
          },
          "diastolicDrop": {
            "title": "Diastolic drop · mmHg",
            "minimum": 0,
            "maximum": 100,
            "x-usim": {
              "unit": "mmHg",
              "authoring": {}
            },
            "type": "number",
            "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result."
          }
        },
        "description": "Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence."
      },
      "medicationResponse": {
        "type": "string",
        "title": "Medication response preset",
        "enum": [
          "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"
        ],
        "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."
      },
      "source": {
        "title": "Source / attribution",
        "maxLength": 2000,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy."
      }
    },
    "allOf": [
      {
        "if": {
          "properties": {
            "monitorConnection": {}
          },
          "required": [
            "monitorConnection"
          ]
        },
        "then": {
          "properties": {
            "type": {
              "const": "equipment"
            }
          }
        }
      },
      {
        "if": {
          "properties": {
            "orthostaticResponse": {}
          },
          "required": [
            "orthostaticResponse"
          ]
        },
        "then": {
          "properties": {
            "type": {
              "const": "diagnostic"
            },
            "diagnosticCategory": {
              "const": "physiologic"
            }
          },
          "required": [
            "diagnosticCategory"
          ],
          "not": {
            "anyOf": [
              {
                "properties": {
                  "effects": {}
                },
                "required": [
                  "effects"
                ]
              },
              {
                "properties": {
                  "effectPercent": {}
                },
                "required": [
                  "effectPercent"
                ]
              },
              {
                "properties": {
                  "medicationResponse": {}
                },
                "required": [
                  "medicationResponse"
                ]
              }
            ]
          }
        }
      },
      {
        "if": {
          "properties": {
            "type": {
              "const": "diagnostic"
            }
          },
          "required": [
            "type"
          ]
        },
        "then": {
          "properties": {
            "diagnosticCategory": {}
          },
          "required": [
            "diagnosticCategory"
          ]
        },
        "else": {
          "not": {
            "properties": {
              "diagnosticCategory": {}
            },
            "required": [
              "diagnosticCategory"
            ]
          }
        }
      },
      {
        "if": {
          "properties": {
            "medicationResponse": {}
          },
          "required": [
            "medicationResponse"
          ]
        },
        "then": {
          "properties": {
            "type": {
              "const": "medication"
            }
          },
          "not": {
            "anyOf": [
              {
                "properties": {
                  "effects": {}
                },
                "required": [
                  "effects"
                ]
              },
              {
                "properties": {
                  "effectPercent": {}
                },
                "required": [
                  "effectPercent"
                ]
              },
              {
                "properties": {
                  "advanceToStateId": {}
                },
                "required": [
                  "advanceToStateId"
                ]
              }
            ]
          }
        }
      }
    ],
    "description": "One resource with learner-facing information, release timing, and any authored response or patient changes."
  },
  "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."
}

*

events.objects.*

object · Required when the parent is present

One resource with learner-facing information, release timing, and any authored response or patient changes.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "id",
    "type",
    "name"
  ],
  "properties": {
    "id": {
      "title": "Identifier",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "\\S",
      "x-usim": {
        "authoring": {
          "hidden": true
        }
      },
      "type": "string",
      "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
    },
    "type": {
      "type": "string",
      "title": "Resource type",
      "enum": [
        "medication",
        "diagnostic",
        "procedure",
        "equipment",
        "consultation",
        "information"
      ],
      "description": "Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects."
    },
    "name": {
      "title": "Resource name",
      "maxLength": 240,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices."
    },
    "diagnosticCategory": {
      "type": "string",
      "title": "Diagnostic category",
      "enum": [
        "lab",
        "imaging",
        "physiologic"
      ],
      "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."
    },
    "description": {
      "title": "Description shown to the learner",
      "maxLength": 8000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "result": {
      "title": "Learner result",
      "maxLength": 12000,
      "x-usim": {
        "authoring": {
          "editor": "textarea"
        }
      },
      "type": "string",
      "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."
    },
    "labResults": {
      "title": "Lab results",
      "maxItems": 64,
      "type": "array",
      "items": {
        "additionalProperties": false,
        "x-usim": {
          "authoring": {}
        },
        "type": "object",
        "required": [
          "name",
          "value",
          "unit"
        ],
        "properties": {
          "name": {
            "title": "Test",
            "maxLength": 120,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The test or analyte name, such as Hemoglobin."
          },
          "value": {
            "title": "Value",
            "maxLength": 80,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
          },
          "unit": {
            "title": "Unit",
            "maxLength": 80,
            "x-usim": {
              "authoring": {}
            },
            "type": "string",
            "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
          }
        },
        "description": "One laboratory measurement, with its test name, reported value, and unit."
      },
      "description": "Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred."
    },
    "image": {
      "title": "Image",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "dataUrl",
        "description"
      ],
      "properties": {
        "dataUrl": {
          "title": "Image",
          "maxLength": 12582912,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it."
        },
        "description": {
          "title": "Image description",
          "maxLength": 1000,
          "x-usim": {
            "authoring": {}
          },
          "type": "string",
          "description": "Describe the image and relevant visible findings for readers who cannot see it."
        }
      },
      "description": "An embedded image released with this resource, with a text description of its content."
    },
    "releaseOnStateId": {
      "title": "Release result",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.states",
          "label": "title",
          "excludeScheduled": false
        },
        "authoring": {
          "emptyLabel": "When requested by the learner"
        }
      },
      "type": "string",
      "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."
    },
    "delaySeconds": {
      "title": "Response delay · seconds",
      "minimum": 0,
      "maximum": 86400,
      "x-usim": {
        "unit": "s",
        "authoring": {}
      },
      "type": "number",
      "description": "Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate."
    },
    "effects": {
      "title": "Vital signs",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {
          "columns": 3
        }
      },
      "type": "object",
      "properties": {
        "hr": {
          "title": "Heart rate · bpm",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "beats/min",
            "referenceRange": {
              "minimum": 60,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 250,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "sbp": {
          "title": "Systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 90,
              "maximum": 120,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 300,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "dbp": {
          "title": "Diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "referenceRange": {
              "minimum": 60,
              "maximum": 80,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 200,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "rr": {
          "title": "Respiratory rate · /min",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "breaths/min",
            "referenceRange": {
              "minimum": 12,
              "maximum": 18,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 80,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "spo2": {
          "title": "Oxygen saturation · %",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "%",
            "referenceRange": {
              "minimum": 95,
              "maximum": 100,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
            },
            "authoring": {
              "slider": {
                "minimum": 0,
                "maximum": 100,
                "step": 1
              }
            }
          },
          "type": "number",
          "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."
        },
        "temperature": {
          "title": "Temperature · °C",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "Cel",
            "referenceRange": {
              "minimum": 36.5,
              "maximum": 37.3,
              "minimumAgeYears": 18,
              "label": "Adult resting reference",
              "source": "https://medlineplus.gov/ency/article/002341.htm"
            },
            "authoring": {
              "slider": {
                "minimum": 25,
                "maximum": 45,
                "step": 0.1
              }
            }
          },
          "type": "number",
          "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."
        },
        "etco2": {
          "title": "End-tidal CO₂ · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artSbp": {
          "title": "Arterial systolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        },
        "artDbp": {
          "title": "Arterial diastolic BP · mmHg",
          "minimum": 0,
          "maximum": 1000,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "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."
        }
      },
      "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."
    },
    "advanceToStateId": {
      "title": "Destination event",
      "maxLength": 128,
      "minLength": 1,
      "pattern": "\\S",
      "x-usim": {
        "reference": {
          "collection": "events.states",
          "label": "title",
          "excludeScheduled": false
        },
        "authoring": {}
      },
      "type": "string",
      "description": "Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent."
    },
    "effectPercent": {
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "hr": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "sbp": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "dbp": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "rr": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "spo2": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "temperature": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "etco2": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "artSbp": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        },
        "artDbp": {
          "minimum": -100,
          "maximum": 1000,
          "type": "number",
          "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."
        }
      },
      "description": "Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId."
    },
    "monitorConnection": {
      "title": "Monitor connection",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "channel",
        "connected"
      ],
      "properties": {
        "channel": {
          "type": "string",
          "title": "Monitor channel",
          "enum": [
            "ecg",
            "bloodPressure",
            "spo2",
            "respiration",
            "temperature",
            "capnography",
            "arterialPressure",
            "all",
            "standard"
          ],
          "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate."
        },
        "connected": {
          "title": "Connected",
          "type": "boolean",
          "description": "True connects this channel; false disconnects it."
        }
      },
      "description": "Connect or disconnect an equipment channel when this resource response is released."
    },
    "orthostaticResponse": {
      "title": "Orthostatic BP response",
      "additionalProperties": false,
      "x-usim": {
        "authoring": {}
      },
      "type": "object",
      "required": [
        "systolicDrop",
        "diastolicDrop"
      ],
      "properties": {
        "systolicDrop": {
          "title": "Systolic drop · mmHg",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result."
        },
        "diastolicDrop": {
          "title": "Diastolic drop · mmHg",
          "minimum": 0,
          "maximum": 100,
          "x-usim": {
            "unit": "mmHg",
            "authoring": {}
          },
          "type": "number",
          "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result."
        }
      },
      "description": "Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence."
    },
    "medicationResponse": {
      "type": "string",
      "title": "Medication response preset",
      "enum": [
        "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"
      ],
      "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."
    },
    "source": {
      "title": "Source / attribution",
      "maxLength": 2000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy."
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "monitorConnection": {}
        },
        "required": [
          "monitorConnection"
        ]
      },
      "then": {
        "properties": {
          "type": {
            "const": "equipment"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "orthostaticResponse": {}
        },
        "required": [
          "orthostaticResponse"
        ]
      },
      "then": {
        "properties": {
          "type": {
            "const": "diagnostic"
          },
          "diagnosticCategory": {
            "const": "physiologic"
          }
        },
        "required": [
          "diagnosticCategory"
        ],
        "not": {
          "anyOf": [
            {
              "properties": {
                "effects": {}
              },
              "required": [
                "effects"
              ]
            },
            {
              "properties": {
                "effectPercent": {}
              },
              "required": [
                "effectPercent"
              ]
            },
            {
              "properties": {
                "medicationResponse": {}
              },
              "required": [
                "medicationResponse"
              ]
            }
          ]
        }
      }
    },
    {
      "if": {
        "properties": {
          "type": {
            "const": "diagnostic"
          }
        },
        "required": [
          "type"
        ]
      },
      "then": {
        "properties": {
          "diagnosticCategory": {}
        },
        "required": [
          "diagnosticCategory"
        ]
      },
      "else": {
        "not": {
          "properties": {
            "diagnosticCategory": {}
          },
          "required": [
            "diagnosticCategory"
          ]
        }
      }
    },
    {
      "if": {
        "properties": {
          "medicationResponse": {}
        },
        "required": [
          "medicationResponse"
        ]
      },
      "then": {
        "properties": {
          "type": {
            "const": "medication"
          }
        },
        "not": {
          "anyOf": [
            {
              "properties": {
                "effects": {}
              },
              "required": [
                "effects"
              ]
            },
            {
              "properties": {
                "effectPercent": {}
              },
              "required": [
                "effectPercent"
              ]
            },
            {
              "properties": {
                "advanceToStateId": {}
              },
              "required": [
                "advanceToStateId"
              ]
            }
          ]
        }
      }
    }
  ],
  "description": "One resource with learner-facing information, release timing, and any authored response or patient changes."
}

Identifier

events.objects.*.id

string · Required when the parent is present

A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

Field schema

{
  "title": "Identifier",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "\\S",
  "x-usim": {
    "authoring": {
      "hidden": true
    }
  },
  "type": "string",
  "description": "A stable identifier used to reference this entry. Keep it unchanged when editing the entry's name or content."
}

Resource type

events.objects.*.type

string · Required when the parent is present

Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects.

Allowed values: medication, diagnostic, procedure, equipment, consultation, information

Field schema

{
  "type": "string",
  "title": "Resource type",
  "enum": [
    "medication",
    "diagnostic",
    "procedure",
    "equipment",
    "consultation",
    "information"
  ],
  "description": "Categorize the resource for selection and display. Choosing a type alone does not define its physiologic effects."
}

Resource name

events.objects.*.name

string · Required when the parent is present

The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices.

  • Maximum length: 240 characters

Field schema

{
  "title": "Resource name",
  "maxLength": 240,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The name learners use to identify or request this resource. Include the dose or study details needed to distinguish similar choices."
}

Diagnostic category

events.objects.*.diagnosticCategory

string · Optional; an omitted value is not a normal, negative, or zero value

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.

Allowed values: lab, imaging, physiologic

Field schema

{
  "type": "string",
  "title": "Diagnostic category",
  "enum": [
    "lab",
    "imaging",
    "physiologic"
  ],
  "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."
}

Description shown to the learner

events.objects.*.description

string · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Maximum length: 8000 characters

Field schema

{
  "title": "Description shown to the learner",
  "maxLength": 8000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

Learner result

events.objects.*.result

string · Optional; an omitted value is not a normal, negative, or zero value

Information shown when the resource response is released, such as a report, consultation advice, or procedure outcome. If empty, the description is shown instead.

  • Maximum length: 12000 characters

Field schema

{
  "title": "Learner result",
  "maxLength": 12000,
  "x-usim": {
    "authoring": {
      "editor": "textarea"
    }
  },
  "type": "string",
  "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."
}

Lab results

events.objects.*.labResults

array · Optional; an omitted value is not a normal, negative, or zero value

Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred.

  • Maximum entries: 64

Field schema

{
  "title": "Lab results",
  "maxItems": 64,
  "type": "array",
  "items": {
    "additionalProperties": false,
    "x-usim": {
      "authoring": {}
    },
    "type": "object",
    "required": [
      "name",
      "value",
      "unit"
    ],
    "properties": {
      "name": {
        "title": "Test",
        "maxLength": 120,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The test or analyte name, such as Hemoglobin."
      },
      "value": {
        "title": "Value",
        "maxLength": 80,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
      },
      "unit": {
        "title": "Unit",
        "maxLength": 80,
        "x-usim": {
          "authoring": {}
        },
        "type": "string",
        "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
      }
    },
    "description": "One laboratory measurement, with its test name, reported value, and unit."
  },
  "description": "Structured test results shown before the result notes. Supply the fictional case's values and units; missing results are not inferred."
}

*

events.objects.*.labResults.*

object · Required when the parent is present

One laboratory measurement, with its test name, reported value, and unit.

Field schema

{
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "name",
    "value",
    "unit"
  ],
  "properties": {
    "name": {
      "title": "Test",
      "maxLength": 120,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The test or analyte name, such as Hemoglobin."
    },
    "value": {
      "title": "Value",
      "maxLength": 80,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
    },
    "unit": {
      "title": "Unit",
      "maxLength": 80,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
    }
  },
  "description": "One laboratory measurement, with its test name, reported value, and unit."
}

Test

events.objects.*.labResults.*.name

string · Required when the parent is present

The test or analyte name, such as Hemoglobin.

  • Maximum length: 120 characters

Field schema

{
  "title": "Test",
  "maxLength": 120,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The test or analyte name, such as Hemoglobin."
}

Value

events.objects.*.labResults.*.value

string · Required when the parent is present

The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative.

  • Maximum length: 80 characters

Field schema

{
  "title": "Value",
  "maxLength": 80,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The reported result as text, preserving decimals, inequalities, or qualitative values such as Negative."
}

Unit

events.objects.*.labResults.*.unit

string · Required when the parent is present

The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result.

  • Maximum length: 80 characters

Field schema

{
  "title": "Unit",
  "maxLength": 80,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The unit accompanying this result, such as g/dL or mmol/L. Leave empty for a unitless or qualitative result."
}

Image

events.objects.*.image

object · Optional; an omitted value is not a normal, negative, or zero value

An embedded image released with this resource, with a text description of its content.

Field schema

{
  "title": "Image",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "dataUrl",
    "description"
  ],
  "properties": {
    "dataUrl": {
      "title": "Image",
      "maxLength": 12582912,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it."
    },
    "description": {
      "title": "Image description",
      "maxLength": 1000,
      "x-usim": {
        "authoring": {}
      },
      "type": "string",
      "description": "Describe the image and relevant visible findings for readers who cannot see it."
    }
  },
  "description": "An embedded image released with this resource, with a text description of its content."
}

Image

events.objects.*.image.dataUrl

string · Required when the parent is present

The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it.

  • Maximum length: 12582912 characters

Field schema

{
  "title": "Image",
  "maxLength": 12582912,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "The image encoded as a data URL so it travels with the scenario. Use the image upload control to populate it."
}

Image description

events.objects.*.image.description

string · Required when the parent is present

Describe the image and relevant visible findings for readers who cannot see it.

  • Maximum length: 1000 characters

Field schema

{
  "title": "Image description",
  "maxLength": 1000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "Describe the image and relevant visible findings for readers who cannot see it."
}

Release result

events.objects.*.releaseOnStateId

string · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.states using title as the display label.

Field schema

{
  "title": "Release result",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.states",
      "label": "title",
      "excludeScheduled": false
    },
    "authoring": {
      "emptyLabel": "When requested by the learner"
    }
  },
  "type": "string",
  "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."
}

Response delay · seconds

events.objects.*.delaySeconds

number · Optional; an omitted value is not a normal, negative, or zero value

Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate.

  • Minimum: 0
  • Maximum: 86400

Field schema

{
  "title": "Response delay · seconds",
  "minimum": 0,
  "maximum": 86400,
  "x-usim": {
    "unit": "s",
    "authoring": {}
  },
  "type": "number",
  "description": "Seconds from the learner request or linked event until the response and its effects become available. Zero or omitted means immediate."
}

Vital signs

events.objects.*.effects

object · Optional; an omitted value is not a normal, negative, or zero value

Absolute resulting measurements, never signed deltas. Omitted values are unspecified or inherited in an event context. Bounds are storage limits, not clinical reference intervals.

Field schema

{
  "title": "Vital signs",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {
      "columns": 3
    }
  },
  "type": "object",
  "properties": {
    "hr": {
      "title": "Heart rate · bpm",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "beats/min",
        "referenceRange": {
          "minimum": 60,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 250,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "sbp": {
      "title": "Systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 90,
          "maximum": 120,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 300,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "dbp": {
      "title": "Diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "referenceRange": {
          "minimum": 60,
          "maximum": 80,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 200,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "rr": {
      "title": "Respiratory rate · /min",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "breaths/min",
        "referenceRange": {
          "minimum": 12,
          "maximum": 18,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 80,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "spo2": {
      "title": "Oxygen saturation · %",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "%",
        "referenceRange": {
          "minimum": 95,
          "maximum": 100,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
        },
        "authoring": {
          "slider": {
            "minimum": 0,
            "maximum": 100,
            "step": 1
          }
        }
      },
      "type": "number",
      "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."
    },
    "temperature": {
      "title": "Temperature · °C",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "Cel",
        "referenceRange": {
          "minimum": 36.5,
          "maximum": 37.3,
          "minimumAgeYears": 18,
          "label": "Adult resting reference",
          "source": "https://medlineplus.gov/ency/article/002341.htm"
        },
        "authoring": {
          "slider": {
            "minimum": 25,
            "maximum": 45,
            "step": 0.1
          }
        }
      },
      "type": "number",
      "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."
    },
    "etco2": {
      "title": "End-tidal CO₂ · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artSbp": {
      "title": "Arterial systolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    },
    "artDbp": {
      "title": "Arterial diastolic BP · mmHg",
      "minimum": 0,
      "maximum": 1000,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "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."
    }
  },
  "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."
}

Heart rate · bpm

events.objects.*.effects.hr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Heart rate · bpm",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "beats/min",
    "referenceRange": {
      "minimum": 60,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 250,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Systolic BP · mmHg

events.objects.*.effects.sbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 90–120 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 90,
      "maximum": 120,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 300,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Diastolic BP · mmHg

events.objects.*.effects.dbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 60–80 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "referenceRange": {
      "minimum": 60,
      "maximum": 80,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 200,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Respiratory rate · /min

events.objects.*.effects.rr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 12–18 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Respiratory rate · /min",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "breaths/min",
    "referenceRange": {
      "minimum": 12,
      "maximum": 18,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 80,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Oxygen saturation · %

events.objects.*.effects.spo2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 100

Reference range: 95–100 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Oxygen saturation · %",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "%",
    "referenceRange": {
      "minimum": 95,
      "maximum": 100,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://www.fda.gov/consumers/consumer-updates/pulse-oximeter-basics"
    },
    "authoring": {
      "slider": {
        "minimum": 0,
        "maximum": 100,
        "step": 1
      }
    }
  },
  "type": "number",
  "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."
}

Temperature · °C

events.objects.*.effects.temperature

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Reference range: 36.5–37.3 (Adult resting reference). This is display guidance, not a validation limit.

Field schema

{
  "title": "Temperature · °C",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "Cel",
    "referenceRange": {
      "minimum": 36.5,
      "maximum": 37.3,
      "minimumAgeYears": 18,
      "label": "Adult resting reference",
      "source": "https://medlineplus.gov/ency/article/002341.htm"
    },
    "authoring": {
      "slider": {
        "minimum": 25,
        "maximum": 45,
        "step": 0.1
      }
    }
  },
  "type": "number",
  "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."
}

End-tidal CO₂ · mmHg

events.objects.*.effects.etco2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "End-tidal CO₂ · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial systolic BP · mmHg

events.objects.*.effects.artSbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial systolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Arterial diastolic BP · mmHg

events.objects.*.effects.artDbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: 0
  • Maximum: 1000

Field schema

{
  "title": "Arterial diastolic BP · mmHg",
  "minimum": 0,
  "maximum": 1000,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "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."
}

Destination event

events.objects.*.advanceToStateId

string · Optional; an omitted value is not a normal, negative, or zero value

Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent.

  • Minimum length: 1
  • Maximum length: 128 characters
  • Pattern: \S

References events.states using title as the display label.

Field schema

{
  "title": "Destination event",
  "maxLength": 128,
  "minLength": 1,
  "pattern": "\\S",
  "x-usim": {
    "reference": {
      "collection": "events.states",
      "label": "title",
      "excludeScheduled": false
    },
    "authoring": {}
  },
  "type": "string",
  "description": "Enter this event when the resource response is released. Destination vitals replace resource effects; do not combine with effects or effectPercent."
}

effectPercent

events.objects.*.effectPercent

object · Optional; an omitted value is not a normal, negative, or zero value

Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId.

Field schema

{
  "additionalProperties": false,
  "type": "object",
  "properties": {
    "hr": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "sbp": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "dbp": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "rr": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "spo2": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "temperature": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "etco2": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "artSbp": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    },
    "artDbp": {
      "minimum": -100,
      "maximum": 1000,
      "type": "number",
      "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."
    }
  },
  "description": "Signed percentage changes applied once to current vitals at response time. Missing values stay unspecified. Mutually exclusive with effects and advanceToStateId."
}

hr

events.objects.*.effectPercent.hr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

sbp

events.objects.*.effectPercent.sbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

dbp

events.objects.*.effectPercent.dbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

rr

events.objects.*.effectPercent.rr

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

spo2

events.objects.*.effectPercent.spo2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

temperature

events.objects.*.effectPercent.temperature

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

etco2

events.objects.*.effectPercent.etco2

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

artSbp

events.objects.*.effectPercent.artSbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

artDbp

events.objects.*.effectPercent.artDbp

number · Optional; an omitted value is not a normal, negative, or zero value

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.

  • Minimum: -100
  • Maximum: 1000

Field schema

{
  "minimum": -100,
  "maximum": 1000,
  "type": "number",
  "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."
}

Monitor connection

events.objects.*.monitorConnection

object · Optional; an omitted value is not a normal, negative, or zero value

Connect or disconnect an equipment channel when this resource response is released.

Field schema

{
  "title": "Monitor connection",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "channel",
    "connected"
  ],
  "properties": {
    "channel": {
      "type": "string",
      "title": "Monitor channel",
      "enum": [
        "ecg",
        "bloodPressure",
        "spo2",
        "respiration",
        "temperature",
        "capnography",
        "arterialPressure",
        "all",
        "standard"
      ],
      "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate."
    },
    "connected": {
      "title": "Connected",
      "type": "boolean",
      "description": "True connects this channel; false disconnects it."
    }
  },
  "description": "Connect or disconnect an equipment channel when this resource response is released."
}

Monitor channel

events.objects.*.monitorConnection.channel

string · Required when the parent is present

The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate.

Allowed values: ecg, bloodPressure, spo2, respiration, temperature, capnography, arterialPressure, all, standard

Field schema

{
  "type": "string",
  "title": "Monitor channel",
  "enum": [
    "ecg",
    "bloodPressure",
    "spo2",
    "respiration",
    "temperature",
    "capnography",
    "arterialPressure",
    "all",
    "standard"
  ],
  "description": "The monitor channel controlled by this equipment resource; all controls every channel; standard controls ECG, SpO2, NIBP, temperature, and respiratory rate."
}

Connected

events.objects.*.monitorConnection.connected

boolean · Required when the parent is present

True connects this channel; false disconnects it.

Field schema

{
  "title": "Connected",
  "type": "boolean",
  "description": "True connects this channel; false disconnects it."
}

Orthostatic BP response

events.objects.*.orthostaticResponse

object · Optional; an omitted value is not a normal, negative, or zero value

Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence.

Field schema

{
  "title": "Orthostatic BP response",
  "additionalProperties": false,
  "x-usim": {
    "authoring": {}
  },
  "type": "object",
  "required": [
    "systolicDrop",
    "diastolicDrop"
  ],
  "properties": {
    "systolicDrop": {
      "title": "Systolic drop · mmHg",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result."
    },
    "diastolicDrop": {
      "title": "Diastolic drop · mmHg",
      "minimum": 0,
      "maximum": 100,
      "x-usim": {
        "unit": "mmHg",
        "authoring": {}
      },
      "type": "number",
      "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result."
    }
  },
  "description": "Report standing BP relative to current resting BP when requested, without changing resting physiology. An authored learner result takes precedence."
}

Systolic drop · mmHg

events.objects.*.orthostaticResponse.systolicDrop

number · Required when the parent is present

Subtract this many mmHg from the request-time resting systolic BP for the standing result.

  • Minimum: 0
  • Maximum: 100

Field schema

{
  "title": "Systolic drop · mmHg",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "description": "Subtract this many mmHg from the request-time resting systolic BP for the standing result."
}

Diastolic drop · mmHg

events.objects.*.orthostaticResponse.diastolicDrop

number · Required when the parent is present

Subtract this many mmHg from the request-time resting diastolic BP for the standing result.

  • Minimum: 0
  • Maximum: 100

Field schema

{
  "title": "Diastolic drop · mmHg",
  "minimum": 0,
  "maximum": 100,
  "x-usim": {
    "unit": "mmHg",
    "authoring": {}
  },
  "type": "number",
  "description": "Subtract this many mmHg from the request-time resting diastolic BP for the standing result."
}

Medication response preset

events.objects.*.medicationResponse

string · Optional; an omitted value is not a normal, negative, or zero value

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.

Allowed values: 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

Field schema

{
  "type": "string",
  "title": "Medication response preset",
  "enum": [
    "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"
  ],
  "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."
}

Source / attribution

events.objects.*.source

string · Optional; an omitted value is not a normal, negative, or zero value

Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy.

  • Maximum length: 2000 characters

Field schema

{
  "title": "Source / attribution",
  "maxLength": 2000,
  "x-usim": {
    "authoring": {}
  },
  "type": "string",
  "description": "Credit the source of the resource content, including a citation or URL when available. Attribution alone does not verify clinical accuracy."
}