Implementation
Execution capabilities
The exact representation accepted by the current application.
There is one .usim scenario schema. Builder, Marketplace, Campus and Workspace retain that same document representation. A valid document may include capabilities that a particular consumer does not execute.
The current simulator executes one patient and the documented action, schedule, observation and response behaviors. Multiple-patient content and other future features remain valid and are preserved; unsupported required behavior prevents a run before it starts.
Authoring annotations select controls and provide guidance. They do not define a separate data format. Consumers must preserve unedited fields, report unsupported behavior, and never silently strip future content.
Profile fields
Requiredness is relative to the containing object. Optional groups can be omitted; their required children apply when the group is provided. The scenario schema supplies these fields, Builder controls, AI schemas, and structural validation. The runtime adds graph and execution checks.
Download the authoring specification
| Path | Shape | Presence | Constraints / editor |
|---|---|---|---|
format | string | Required | — |
formatVersion | string | Required | — |
scenarioId | string | Required | 128 characters |
executionProfile | object | Optional | — |
executionProfile.id | string | Required | — |
executionProfile.version | string | Required | — |
executionProfile.requiredCapabilities | array | Required | — |
executionProfile.requiredCapabilities.* | string | Optional | — |
executionProfile.optionalCapabilities | array | Required | — |
executionProfile.optionalCapabilities.* | string | Optional | — |
extensions | object | Optional | — |
vocabularies | array | Optional | — |
vocabularies.* | object | Optional | — |
vocabularies.*.id | string | Required | — |
vocabularies.*.version | string | Required | — |
vocabularies.*.kind | union | Required | — |
vocabularies.*.sha256 | string | Required | — |
vocabularies.*.assetId | string | Optional | 128 characters |
dependencies | array | Optional | — |
dependencies.* | object | Optional | — |
dependencies.*.id | string | Required | 128 characters |
dependencies.*.scenarioId | string | Required | 128 characters |
dependencies.*.revision | integer | Required | min 1 |
dependencies.*.sha256 | string | Required | — |
composition | object | Optional | — |
composition.overrides | array | Required | — |
composition.overrides.* | object | Optional | — |
composition.overrides.*.targetId | string | Required | 128 characters |
composition.overrides.*.path | string | Required | — |
composition.overrides.*.value | union | Required | — |
outputs | object | Optional | — |
outputs.views | array | Required | — |
outputs.views.* | object | Optional | — |
outputs.views.*.id | string | Required | 128 characters |
outputs.views.*.audience | union | Required | — |
outputs.views.*.kind | union | Required | — |
outputs.views.*.includeIds | array | Required | — |
outputs.views.*.includeIds.* | string | Optional | 128 characters |
metadata | object | Required | — |
metadata.title | string | Required | 160 characters |
metadata.summary | string | Required | 8000 characters · textarea |
metadata.contributors | array | Required | credits |
metadata.contributors.* | object | Optional | — |
metadata.contributors.*.id | string | Required | 128 characters |
metadata.contributors.*.name | string | Required | 160 characters |
metadata.contributors.*.roles | array | Required | — |
metadata.contributors.*.roles.* | string | Optional | 160 characters |
metadata.contributors.*.affiliation | string | Optional | 240 characters |
metadata.revision | integer | Required | min 1 |
metadata.license | object | Required | — |
metadata.license.identifier | string | Required | 240 characters |
metadata.license.textAssetId | string | Optional | 128 characters |
metadata.review | object | Required | — |
metadata.review.status | string | Required | — |
metadata.review.reviewedAt | string | Optional | 80 characters |
metadata.review.reviewerIds | array | Required | — |
metadata.review.reviewerIds.* | string | Optional | 128 characters |
metadata.review.sourceIds | array | Required | — |
metadata.review.sourceIds.* | string | Optional | 128 characters |
metadata.sources | array | Required | — |
metadata.sources.* | object | Optional | — |
metadata.sources.*.id | string | Required | 128 characters |
metadata.sources.*.citation | string | Required | 8000 characters · textarea |
metadata.sources.*.url | string | Optional | — |
metadata.sources.*.accessedAt | string | Optional | 80 characters |
metadata.diagnosis | string | Optional | 1000 characters · diagnosis |
metadata.specialty | string | Optional | 1000 characters · specialty |
metadata.level | string | Optional | 1000 characters · level |
metadata.durationMinutes | number | Optional | min 1 · max 1440 · min |
metadata.learnerTitle | string | Optional | 160 characters |
metadata.learnerDescription | string | Optional | 2000 characters · textarea |
metadata.coverPhoto | object | Optional | cover-photo |
metadata.coverPhoto.dataUrl | string | Required | 12582912 characters |
metadata.coverPhoto.description | string | Required | 1000 characters |
patients | array | Required | — |
patients.* | object | Optional | — |
patients.*.id | string | Required | 128 characters |
patients.*.name | string | Required | 160 characters |
patients.*.preferredName | string | Optional | 160 characters |
patients.*.baselineFunction | string | Optional | 2000 characters · textarea |
patients.*.communication | object | Optional | — |
patients.*.communication.preferredLanguage | string | Optional | 160 characters |
patients.*.communication.interpreterNeeds | string | Optional | 1000 characters · textarea |
patients.*.communication.method | string | Optional | 500 characters |
patients.*.communication.supports | string | Optional | 2000 characters · textarea |
patients.*.demographics | object | Optional | demographics |
patients.*.demographics.age | object | Optional | age |
patients.*.demographics.age.value | number | Required | min 0 |
patients.*.demographics.age.unit | union | Required | — |
patients.*.demographics.weight | object | Optional | — |
patients.*.demographics.weight.value | number | Required | min 0 · max 1000 |
patients.*.demographics.weight.unit | string | Required | — |
patients.*.demographics.height | object | Optional | — |
patients.*.demographics.height.value | number | Required | min 0 · max 400 |
patients.*.demographics.height.unit | string | Required | — |
patients.*.demographics.gender | string | Optional | 160 characters · gender |
patients.*.demographics.pronouns | string | Optional | 160 characters |
patients.*.demographics.sexualOrientation | string | Optional | 160 characters |
patients.*.demographics.sexAssignedAtBirth | string | Optional | 160 characters |
patients.*.demographics.heightUnit | string | Optional | — |
patients.*.demographics.weightUnit | string | Optional | — |
patients.*.history | array | Optional | history |
patients.*.history.* | union | Optional | — |
patients.*.history.*.id | string | Required | 128 characters |
patients.*.history.*.content | string | Required | — |
patients.*.history.*.disclosure | union | Required | — |
patients.*.history.*.disclosure.audience | array | Required | — |
patients.*.history.*.disclosure.audience.* | union | Optional | — |
patients.*.history.*.disclosure.mode | union | Required | — |
patients.*.history.*.disclosure.resourceId | string | Optional | 128 characters |
patients.*.history.*.disclosure.actionId | string | Optional | 128 characters |
patients.*.history.*.disclosure.conditionId | string | Optional | 128 characters |
patients.*.history.*.occurredAtSeconds | number | Optional | — |
patients.*.history.*.category | union | Required | — |
patients.*.history.*.allergy | object | Optional | — |
patients.*.history.*.allergy.substance | string | Required | 1000 characters |
patients.*.history.*.allergy.reaction | string | Optional | 1000 characters |
patients.*.history.*.allergy.severity | union | Optional | — |
patients.*.reviewOfSystems | array | Optional | — |
patients.*.reviewOfSystems.* | object | Optional | — |
patients.*.reviewOfSystems.*.system | string | Required | — |
patients.*.reviewOfSystems.*.observationIds | array | Required | — |
patients.*.reviewOfSystems.*.observationIds.* | string | Optional | 128 characters |
patients.*.variables | array | Optional | variables |
patients.*.variables.* | object | Optional | — |
patients.*.variables.*.id | string | Required | 128 characters |
patients.*.variables.*.concept | string | Required | — |
patients.*.variables.*.value | number | Optional | — |
patients.*.variables.*.unit | string | Required | — |
patients.*.monitor | object | Optional | monitor |
patients.*.monitor.rhythm | string | Optional | — |
patients.*.monitor.pulsePresent | boolean | Optional | — |
patients.*.monitor.connections | object | Optional | — |
patients.*.monitor.connections.ecg | boolean | Optional | — |
patients.*.monitor.connections.bloodPressure | boolean | Optional | — |
patients.*.monitor.connections.spo2 | boolean | Optional | — |
patients.*.monitor.connections.respiration | boolean | Optional | — |
patients.*.monitor.connections.temperature | boolean | Optional | — |
patients.*.monitor.connections.capnography | boolean | Optional | — |
patients.*.monitor.connections.arterialPressure | boolean | Optional | — |
patients.*.airway | union | Optional | — |
patients.*.airway.status | string | Required | — |
patients.*.airway.deviceId | string | Optional | 128 characters |
patients.*.context | string | Required | 8000 characters · textarea |
patients.*.photo | object | Optional | patient-photo |
patients.*.photo.dataUrl | string | Required | 12582912 characters |
patients.*.photo.description | string | Required | 1000 characters |
assets | array | Optional | — |
assets.* | union | Optional | — |
assets.*.id | string | Required | 128 characters |
assets.*.mediaType | string | Required | — |
assets.*.description | string | Required | — |
assets.*.license | string | Required | — |
assets.*.attribution | string | Required | — |
assets.*.label | string | Optional | — |
assets.*.transcriptAssetId | string | Optional | 128 characters |
assets.*.path | string | Optional | — |
assets.*.sha256 | string | Optional | — |
assets.*.dataUrl | string | Optional | — |
assets.*.uri | string | Optional | — |
observations | array | Optional | observations |
observations.* | union | Optional | — |
observations.*.id | string | Required | 128 characters |
observations.*.patientId | string | Required | 128 characters |
observations.*.code | string | Required | — |
observations.*.kind | union | Required | — |
observations.*.collectedAtSeconds | number | Optional | — |
observations.*.availableAtSeconds | number | Optional | min 0 |
observations.*.method | string | Optional | — |
observations.*.disclosure | union | Required | — |
observations.*.disclosure.audience | array | Required | — |
observations.*.disclosure.audience.* | union | Optional | — |
observations.*.disclosure.mode | union | Required | — |
observations.*.disclosure.resourceId | string | Optional | 128 characters |
observations.*.disclosure.actionId | string | Optional | 128 characters |
observations.*.disclosure.conditionId | string | Optional | 128 characters |
observations.*.reportedByActorId | string | Optional | 128 characters |
observations.*.reliabilityNote | string | Optional | — |
observations.*.variableId | string | Optional | 128 characters |
observations.*.referenceInterval | object | Optional | — |
observations.*.referenceInterval.low | number | Optional | — |
observations.*.referenceInterval.high | number | Optional | — |
observations.*.referenceInterval.text | string | Optional | — |
observations.*.referenceInterval.unit | string | Optional | — |
observations.*.referenceInterval.context | string | Required | — |
observations.*.flag | union | Optional | — |
observations.*.status | string | Required | — |
observations.*.value | number | Optional | — |
observations.*.unit | string | Optional | — |
environment | object | Required | — |
environment.setting | string | Required | 2000 characters · textarea |
environment.teamRoles | array | Optional | — |
environment.teamRoles.* | object | Optional | — |
environment.teamRoles.*.id | string | Required | 128 characters |
environment.teamRoles.*.name | string | Required | — |
environment.teamRoles.*.minCount | integer | Required | min 0 |
environment.teamRoles.*.maxCount | integer | Required | min 0 |
environment.teamRoles.*.brief | string | Required | textarea |
environment.requirements | array | Required | 32 items · requirements |
environment.requirements.* | object | Optional | — |
environment.requirements.*.id | string | Required | 128 characters |
environment.requirements.*.description | string | Required | 240 characters |
environment.requirements.*.resourceIds | array | Optional | — |
environment.requirements.*.resourceIds.* | string | Optional | 128 characters |
environment.requirements.*.substitutions | array | Optional | — |
environment.requirements.*.substitutions.* | string | Optional | — |
environment.requirements.*.required | boolean | Optional | — |
environment.actors | array | Optional | 32 items |
environment.actors.* | object | Optional | — |
environment.actors.*.id | string | Required | 128 characters |
environment.actors.*.name | string | Required | 160 characters |
environment.actors.*.role | string | Required | 1000 characters |
environment.actors.*.opening | string | Optional | textarea |
environment.actors.*.knowledge | array | Optional | — |
environment.actors.*.knowledge.* | string | Optional | — |
environment.actors.*.affect | string | Optional | textarea |
environment.actors.*.cues | array | Optional | — |
environment.actors.*.cues.* | object | Optional | — |
environment.actors.*.cues.*.id | string | Required | 128 characters |
environment.actors.*.cues.*.conditionId | string | Required | 128 characters |
environment.actors.*.cues.*.line | string | Required | textarea |
environment.actors.*.cues.*.delivery | union | Required | — |
environment.actors.*.cues.*.maxUses | integer | Required | min 1 |
environment.actors.*.brief | string | Required | 8000 characters · textarea |
environment.actors.*.demographics | object | Optional | — |
environment.actors.*.demographics.age | object | Optional | age |
environment.actors.*.demographics.age.value | number | Required | min 0 |
environment.actors.*.demographics.age.unit | union | Required | — |
environment.actors.*.demographics.gender | string | Optional | 160 characters · gender |
environment.resetSteps | array | Optional | — |
environment.resetSteps.* | string | Optional | — |
environment.equipment | array | Optional | 64 items |
environment.equipment.* | string | Optional | 1000 characters |
environment.patientScene | object | Optional | scene |
environment.patientScene.modelUrl | string | Required | 2000 characters |
environment.patientScene.attribution | string | Required | 2000 characters |
environment.patientScene.markers | array | Required | 128 items |
environment.patientScene.markers.* | object | Optional | — |
environment.patientScene.markers.*.actionId | string | Required | 128 characters |
environment.patientScene.markers.*.position | string | Required | 160 characters |
environment.patientScene.markers.*.normal | string | Required | 160 characters |
education | object | Required | — |
education.rationale | string | Optional | 8000 characters · textarea |
education.preparation | array | Optional | preparation |
education.preparation.* | object | Optional | — |
education.preparation.*.id | string | Required | 128 characters |
education.preparation.*.audience | union | Required | — |
education.preparation.*.instructions | string | Required | markdown |
education.preparation.*.assetIds | array | Required | — |
education.preparation.*.assetIds.* | string | Optional | 128 characters |
education.objectives | array | Required | 32 items · objectives |
education.objectives.* | object | Optional | — |
education.objectives.*.id | string | Required | 128 characters |
education.objectives.*.statement | string | Required | 1000 characters |
education.objectives.*.evidenceActionIds | array | Optional | — |
education.objectives.*.evidenceActionIds.* | string | Optional | 128 characters |
education.objectives.*.acgmeCompetencies | array | Optional | 6 items |
education.objectives.*.acgmeCompetencies.* | union | Optional | — |
education.objectives.*.domain | union | Optional | — |
education.objectives.*.performance | object | Optional | — |
education.objectives.*.performance.context | string | Required | — |
education.objectives.*.performance.expectedBehavior | string | Required | — |
education.objectives.*.performance.successCriteria | string | Required | — |
education.objectives.*.performance.scope | union | Required | — |
education.objectives.*.curriculumMappings | array | Optional | — |
education.objectives.*.curriculumMappings.* | object | Optional | — |
education.objectives.*.curriculumMappings.*.framework | string | Required | — |
education.objectives.*.curriculumMappings.*.version | string | Required | — |
education.objectives.*.curriculumMappings.*.code | string | Required | — |
education.objectives.*.curriculumMappings.*.label | string | Required | — |
education.objectives.*.learnerBrief | string | Optional | — |
education.debriefPrompts | array | Required | debrief |
education.debriefPrompts.* | object | Optional | — |
education.debriefPrompts.*.id | string | Required | 128 characters |
education.debriefPrompts.*.objectiveIds | array | Optional | — |
education.debriefPrompts.*.objectiveIds.* | string | Optional | 128 characters |
education.debriefPrompts.*.question | string | Required | 12000 characters |
education.debriefPrompts.*.facilitatorRationale | string | Optional | textarea |
education.assessment | array | Optional | 64 items · assessment |
education.assessment.* | object | Optional | — |
education.assessment.*.objectiveId | string | Optional | 128 characters |
education.assessment.*.id | string | Required | 128 characters |
education.assessment.*.label | string | Required | 1000 characters |
education.assessment.*.actionId | string | Required | 128 characters |
education.assessment.*.objectId | string | Optional | 128 characters |
education.assessment.*.objectIds | array | Optional | 1000 items |
education.assessment.*.objectIds.* | string | Optional | 128 characters |
education.assessment.*.points | number | Required | min 1 · max 100 |
education.assessment.*.withinSeconds | number | Optional | min 0 · max 86400 · s |
education.assessment.*.feedback | string | Required | 8000 characters · textarea |
education.assessment.*.learningUrl | string | Optional | 2000 characters |
resources | array | Optional | 2048 items · resources |
resources.* | object | Optional | — |
resources.*.id | string | Required | 128 characters |
resources.*.kind | string | Required | — |
resources.*.name | string | Required | 240 characters |
resources.*.builderTitle | string | Optional | 240 characters |
resources.*.diagnostic | object | Optional | — |
resources.*.diagnostic.category | union | Required | — |
resources.*.diagnostic.specimen | string | Optional | — |
resources.*.diagnostic.collectionInstructions | string | Optional | — |
resources.*.diagnostic.resultIds | array | Optional | — |
resources.*.diagnostic.resultIds.* | string | Optional | 128 characters |
resources.*.diagnostic.acquisition | object | Optional | — |
resources.*.diagnostic.acquisition.bodyRegion | string | Optional | — |
resources.*.diagnostic.acquisition.view | string | Optional | — |
resources.*.diagnostic.acquisition.technique | string | Optional | — |
resources.*.diagnostic.orthostaticResponse | object | Optional | — |
resources.*.diagnostic.orthostaticResponse.patientId | string | Optional | 128 characters |
resources.*.diagnostic.orthostaticResponse.systolicVariableId | string | Optional | 128 characters |
resources.*.diagnostic.orthostaticResponse.diastolicVariableId | string | Optional | 128 characters |
resources.*.diagnostic.orthostaticResponse.systolicDrop | number | Required | min 0 · max 100 |
resources.*.diagnostic.orthostaticResponse.diastolicDrop | number | Required | min 0 · max 100 |
resources.*.diagnostic.ecg | object | Optional | — |
resources.*.diagnostic.ecg.leadConfiguration | string | Required | — |
resources.*.diagnostic.ecg.paperSpeedMmPerSecond | number | Optional | — |
resources.*.diagnostic.ecg.gainMmPerMv | number | Optional | — |
resources.*.diagnostic.ecg.rhythmObservationId | string | Optional | 128 characters |
resources.*.diagnostic.ecg.findingObservationIds | array | Required | — |
resources.*.diagnostic.ecg.findingObservationIds.* | string | Optional | 128 characters |
resources.*.diagnostic.ecg.recordingAssetId | string | Required | 128 characters |
resources.*.description | string | Optional | 8000 characters · textarea |
resources.*.equipment | object | Optional | — |
resources.*.equipment.type | string | Optional | — |
resources.*.equipment.status | union | Optional | — |
resources.*.equipment.patientId | string | Optional | 128 characters |
resources.*.equipment.site | string | Optional | — |
resources.*.equipment.size | string | Optional | — |
resources.*.equipment.measurementIds | array | Optional | — |
resources.*.equipment.measurementIds.* | string | Optional | 128 characters |
resources.*.equipment.placement | object | Optional | — |
resources.*.equipment.placement.placedAtSeconds | number | Optional | — |
resources.*.equipment.placement.confirmation | union | Required | — |
resources.*.equipment.placement.note | string | Optional | — |
resources.*.equipment.capabilities | array | Optional | — |
resources.*.equipment.capabilities.* | string | Optional | — |
resources.*.equipment.monitorConnection | object | Optional | — |
resources.*.equipment.monitorConnection.channel | union | Required | — |
resources.*.equipment.monitorConnection.connected | boolean | Required | — |
resources.*.equipment.ventilation | object | Optional | — |
resources.*.equipment.ventilation.mode | string | Required | — |
resources.*.equipment.ventilation.settings | array | Required | — |
resources.*.equipment.ventilation.settings.* | object | Optional | — |
resources.*.equipment.ventilation.settings.*.name | string | Required | — |
resources.*.equipment.ventilation.settings.*.value | number | Required | — |
resources.*.equipment.ventilation.settings.*.unit | string | Required | — |
resources.*.equipment.ventilation.measurementIds | array | Required | — |
resources.*.equipment.ventilation.measurementIds.* | string | Optional | 128 characters |
resources.*.equipment.ventilation.alarms | array | Required | — |
resources.*.equipment.ventilation.alarms.* | object | Optional | — |
resources.*.equipment.ventilation.alarms.*.id | string | Required | 128 characters |
resources.*.equipment.ventilation.alarms.*.conditionId | string | Required | 128 characters |
resources.*.equipment.ventilation.alarms.*.message | string | Required | — |
resources.*.equipment.ventilation.alarms.*.severity | union | Required | — |
resources.*.source | string | Optional | 2000 characters |
resources.*.response | object | Optional | — |
resources.*.response.releaseOnStateId | string | Optional | 128 characters |
resources.*.response.delaySeconds | number | Optional | min 0 |
resources.*.response.effectIds | array | Optional | — |
resources.*.response.effectIds.* | string | Optional | 128 characters |
resources.*.response.nextStateId | string | Optional | 128 characters |
resources.*.sourceIds | array | Optional | — |
resources.*.sourceIds.* | string | Optional | 128 characters |
resources.*.medication | object | Optional | — |
resources.*.medication.ingredient | string | Required | — |
resources.*.medication.formulation | string | Required | — |
resources.*.medication.concentration | object | Optional | — |
resources.*.medication.concentration.numerator | object | Required | — |
resources.*.medication.concentration.numerator.value | number | Required | — |
resources.*.medication.concentration.numerator.unit | string | Required | — |
resources.*.medication.concentration.denominator | object | Required | — |
resources.*.medication.concentration.denominator.value | number | Required | — |
resources.*.medication.concentration.denominator.unit | string | Required | — |
resources.*.medication.allowedRoutes | array | Required | — |
resources.*.medication.allowedRoutes.* | string | Optional | — |
resources.*.consultation | object | Optional | — |
resources.*.consultation.service | string | Required | — |
resources.*.consultation.actorId | string | Required | 128 characters |
resources.*.consultation.requestedInformation | array | Required | — |
resources.*.consultation.requestedInformation.* | string | Optional | — |
resources.*.consultation.responseResultIds | array | Required | — |
resources.*.consultation.responseResultIds.* | string | Optional | 128 characters |
resources.*.procedure | object | Optional | — |
resources.*.procedure.indication | string | Required | — |
resources.*.procedure.requiredResourceIds | array | Required | — |
resources.*.procedure.requiredResourceIds.* | string | Optional | 128 characters |
resources.*.procedure.steps | array | Required | — |
resources.*.procedure.steps.* | union | Optional | — |
resources.*.procedure.steps.*.id | string | Required | 128 characters |
resources.*.procedure.steps.*.instruction | string | Required | — |
resources.*.procedure.steps.*.evidence | string | Required | — |
resources.*.procedure.steps.*.critical | boolean | Required | — |
resources.*.procedure.steps.*.actionId | string | Optional | 128 characters |
resources.*.procedure.outcomeActionId | string | Required | 128 characters |
resources.*.procedure.complications | array | Optional | — |
resources.*.procedure.complications.* | object | Optional | — |
resources.*.procedure.complications.*.id | string | Required | 128 characters |
resources.*.procedure.complications.*.description | string | Required | — |
resources.*.procedure.complications.*.conditionId | string | Required | 128 characters |
resources.*.procedure.complications.*.effectIds | array | Required | — |
resources.*.procedure.complications.*.effectIds.* | string | Optional | 128 characters |
resources.*.results | array | Optional | — |
resources.*.results.* | object | Optional | — |
resources.*.results.*.id | string | Required | 128 characters |
resources.*.results.*.content | string | Required | — |
resources.*.results.*.observationIds | array | Required | — |
resources.*.results.*.observationIds.* | string | Optional | 128 characters |
resources.*.results.*.assetIds | array | Required | — |
resources.*.results.*.assetIds.* | string | Optional | 128 characters |
resources.*.results.*.disclosure | union | Required | — |
resources.*.results.*.disclosure.audience | array | Required | — |
resources.*.results.*.disclosure.audience.* | union | Optional | — |
resources.*.results.*.disclosure.mode | union | Required | — |
resources.*.results.*.disclosure.resourceId | string | Optional | 128 characters |
resources.*.results.*.disclosure.actionId | string | Optional | 128 characters |
resources.*.results.*.disclosure.conditionId | string | Optional | 128 characters |
resources.*.results.*.interpretation | object | Optional | — |
resources.*.results.*.interpretation.learner | string | Optional | — |
resources.*.results.*.interpretation.facilitator | string | Required | — |
resources.*.results.*.panelName | string | Optional | — |
resources.*.results.*.specimenStatus | union | Optional | — |
events | object | Required | — |
events.flags | array | Optional | — |
events.flags.* | object | Optional | — |
events.flags.*.id | string | Required | 128 characters |
events.flags.*.initialValue | boolean | Required | — |
events.conditions | array | Optional | — |
events.conditions.* | object | Optional | — |
events.conditions.*.id | string | Required | 128 characters |
events.conditions.*.all | array | Required | — |
events.conditions.*.all.* | union | Optional | — |
events.conditions.*.all.*.targetId | string | Required | 128 characters |
events.conditions.*.all.*.operator | union | Required | — |
events.conditions.*.all.*.value | number | Required | — |
events.schedules | array | Optional | — |
events.schedules.* | union | Optional | — |
events.schedules.*.id | string | Required | 128 characters |
events.schedules.*.label | string | Optional | — |
events.schedules.*.description | string | Optional | — |
events.schedules.*.resourceId | string | Optional | 128 characters |
events.schedules.*.cancelOnActionIds | array | Optional | — |
events.schedules.*.cancelOnActionIds.* | string | Optional | 128 characters |
events.schedules.*.delaySeconds | number | Required | — |
events.schedules.*.conditionId | string | Optional | 128 characters |
events.schedules.*.priority | integer | Required | — |
events.schedules.*.effectIds | array | Required | — |
events.schedules.*.effectIds.* | string | Optional | 128 characters |
events.schedules.*.nextStateId | string | Optional | 128 characters |
events.schedules.*.repeat | object | Optional | — |
events.schedules.*.repeat.intervalSeconds | number | Required | — |
events.schedules.*.repeat.count | integer | Required | min 1 |
events.schedules.*.anchor | object | Required | — |
events.schedules.*.anchor.kind | string | Required | — |
events.schedules.*.onAnchorStateExit | union | Optional | — |
events.effects | array | Optional | — |
events.effects.* | union | Optional | — |
events.effects.*.id | string | Required | 128 characters |
events.effects.*.kind | string | Required | — |
events.effects.*.targetId | string | Optional | 128 characters |
events.effects.*.value | number | Optional | — |
events.effects.*.unit | string | Optional | — |
events.effects.*.durationSeconds | number | Optional | — |
events.effects.*.interpolation | string | Optional | — |
events.effects.*.percent | number | Optional | min -100 · max 1000 |
events.effects.*.patientId | string | Optional | 128 characters |
events.effects.*.modelId | string | Optional | — |
events.effects.*.channel | union | Optional | — |
events.states | array | Required | 128 items · graph |
events.states.* | object | Optional | — |
events.states.*.id | string | Required | 128 characters |
events.states.*.title | string | Required | 240 characters |
events.states.*.entryConditionId | string | Optional | 128 characters |
events.states.*.exitConditionId | string | Optional | 128 characters |
events.states.*.onEnterEffectIds | array | Optional | — |
events.states.*.onEnterEffectIds.* | string | Optional | 128 characters |
events.states.*.onExitEffectIds | array | Optional | — |
events.states.*.onExitEffectIds.* | string | Optional | 128 characters |
events.states.*.learnerBrief | string | Required | 8000 characters · textarea |
events.states.*.facilitatorBrief | string | Required | 8000 characters · textarea |
events.states.*.objectiveIds | array | Optional | — |
events.states.*.objectiveIds.* | string | Optional | 128 characters |
events.states.*.kind | string | Required | — |
events.states.*.monitor | object | Optional | monitor |
events.states.*.monitor.rhythm | string | Optional | — |
events.states.*.monitor.pulsePresent | boolean | Optional | — |
events.states.*.monitor.connections | object | Optional | — |
events.states.*.monitor.connections.ecg | boolean | Optional | — |
events.states.*.monitor.connections.bloodPressure | boolean | Optional | — |
events.states.*.monitor.connections.spo2 | boolean | Optional | — |
events.states.*.monitor.connections.respiration | boolean | Optional | — |
events.states.*.monitor.connections.temperature | boolean | Optional | — |
events.states.*.monitor.connections.capnography | boolean | Optional | — |
events.states.*.monitor.connections.arterialPressure | boolean | Optional | — |
events.states.*.key | boolean | Optional | — |
events.states.*.resourceTrigger | object | Optional | — |
events.states.*.resourceTrigger.mode | string | Required | — |
events.states.*.resourceTrigger.objectIds | array | Required | 1000 items |
events.states.*.resourceTrigger.objectIds.* | string | Optional | 128 characters |
events.actions | array | Required | 512 items |
events.actions.* | object | Optional | — |
events.actions.*.id | string | Required | 128 characters |
events.actions.*.label | string | Required | 1000 characters |
events.actions.*.description | string | Optional | 6000 characters · textarea |
events.actions.*.patientId | string | Optional | 128 characters |
events.actions.*.resourceId | string | Optional | 128 characters |
events.actions.*.completionCriteria | string | Optional | 6000 characters · textarea |
events.actions.*.completion | object | Optional | — |
events.actions.*.completion.mode | string | Required | — |
events.actions.*.completion.resourceIds | array | Required | 1000 items |
events.actions.*.completion.resourceIds.* | string | Optional | 128 characters |
events.actions.*.availableInStateIds | array | Required | — |
events.actions.*.availableInStateIds.* | string | Optional | 128 characters |
events.actions.*.conditionId | string | Optional | 128 characters |
events.actions.*.durationSeconds | number | Optional | min 0 |
events.actions.*.repeat | object | Optional | — |
events.actions.*.repeat.maxUses | integer | Optional | min 1 |
events.actions.*.repeat.cooldownSeconds | number | Required | min 0 |
events.actions.*.cancellable | boolean | Optional | — |
events.actions.*.onPhaseExit | union | Optional | — |
events.actions.*.outcomes | array | Required | — |
events.actions.*.outcomes.* | object | Optional | — |
events.actions.*.outcomes.*.id | string | Required | 128 characters |
events.actions.*.outcomes.*.whenConditionId | string | Optional | 128 characters |
events.actions.*.outcomes.*.effectIds | array | Required | — |
events.actions.*.outcomes.*.effectIds.* | string | Optional | 128 characters |
events.actions.*.outcomes.*.nextStateId | string | Optional | 128 characters |
events.actions.*.kind | string | Optional | — |
events.actions.*.medicationOrder | object | Optional | — |
events.actions.*.medicationOrder.resourceId | string | Required | 128 characters |
events.actions.*.medicationOrder.patientId | string | Required | 128 characters |
events.actions.*.medicationOrder.dose | object | Required | — |
events.actions.*.medicationOrder.dose.value | number | Required | — |
events.actions.*.medicationOrder.dose.unit | string | Required | — |
events.actions.*.medicationOrder.route | string | Required | — |
events.actions.*.medicationOrder.rate | object | Optional | — |
events.actions.*.medicationOrder.rate.numerator | object | Required | — |
events.actions.*.medicationOrder.rate.numerator.value | number | Required | — |
events.actions.*.medicationOrder.rate.numerator.unit | string | Required | — |
events.actions.*.medicationOrder.rate.denominator | object | Required | — |
events.actions.*.medicationOrder.rate.denominator.value | number | Required | — |
events.actions.*.medicationOrder.rate.denominator.unit | string | Required | — |
events.actions.*.administration | union | Optional | — |
events.actions.*.administration.orderActionId | string | Required | 128 characters |
events.actions.*.administration.mode | union | Required | — |
events.actions.*.administration.rate | object | Optional | — |
events.actions.*.administration.rate.numerator | object | Required | — |
events.actions.*.administration.rate.numerator.value | number | Required | — |
events.actions.*.administration.rate.numerator.unit | string | Required | — |
events.actions.*.administration.rate.denominator | object | Required | — |
events.actions.*.administration.rate.denominator.value | number | Required | — |
events.actions.*.administration.rate.denominator.unit | string | Required | — |
A complete scenario
Execution capabilities · Fictional authored example
{
"format": "usim-scenario",
"formatVersion": "2.0",
"scenarioId": "usim-reference-1",
"metadata": {
"revision": 1,
"license": {
"identifier": "All rights reserved"
},
"review": {
"status": "draft",
"reviewerIds": [],
"sourceIds": []
},
"sources": [],
"title": "A clear handoff",
"summary": "Fictional team communication practice with a delayed result and two approaches to clarifying the situation.",
"contributors": [
{
"id": "contributor-author",
"roles": [
"author"
],
"name": "u-sim example team"
}
],
"diagnosis": "Communication rehearsal",
"specialty": "Simulation education",
"level": "Intermediate",
"durationMinutes": 10
},
"patients": [
{
"id": "patient-primary",
"name": "Alex Morgan (fictional)",
"context": "A fictional adult is awaiting handoff. The incoming team needs a shared understanding of the situation and who will follow up an outstanding result.",
"demographics": {
"age": {
"value": 40,
"unit": "years"
},
"gender": "Not specified",
"weight": {
"value": 70,
"unit": "kg"
},
"height": {
"value": 170,
"unit": "cm"
}
},
"monitor": {
"connections": {}
},
"variables": [
{
"id": "patient-primary-hr",
"concept": "usim:hr",
"value": 80,
"unit": "beats/min"
},
{
"id": "patient-primary-sbp",
"concept": "usim:sbp",
"value": 120,
"unit": "mmHg"
},
{
"id": "patient-primary-dbp",
"concept": "usim:dbp",
"value": 75,
"unit": "mmHg"
},
{
"id": "patient-primary-rr",
"concept": "usim:rr",
"value": 16,
"unit": "breaths/min"
},
{
"id": "patient-primary-spo2",
"concept": "usim:spo2",
"value": 98,
"unit": "%"
},
{
"id": "patient-primary-temperature",
"concept": "usim:temperature",
"value": 37,
"unit": "Cel"
},
{
"id": "patient-primary-etco2",
"concept": "usim:etco2",
"value": 35,
"unit": "mmHg"
}
],
"history": [
{
"id": "patient-primary-history-chief-complaint-1",
"content": "Awaiting a team handoff",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "chief-complaint"
},
{
"id": "patient-primary-history-present-illness-1",
"content": "The current care summary is incomplete in this fictional exercise.",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "present-illness"
},
{
"id": "patient-primary-history-medical-1",
"content": "No additional history authored",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "medical"
},
{
"id": "patient-primary-history-allergy-1",
"content": "Example substance — Reaction: Authored rash — Reaction severity: mild",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "allergy",
"allergy": {
"substance": "Example substance",
"reaction": "Authored rash",
"severity": "mild"
}
},
{
"id": "patient-primary-history-family-1",
"content": "Not part of this exercise",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "family"
},
{
"id": "patient-primary-history-social-1",
"content": "Fictional training context",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"category": "social"
}
]
}
],
"environment": {
"setting": "A simulated handoff space",
"requirements": [
{
"id": "requirement-1",
"description": "Facilitator brief reviewed"
},
{
"id": "requirement-2",
"description": "Learner roles assigned"
}
],
"equipment": [
"Handoff note"
],
"actors": [
{
"id": "outgoing-team",
"name": "Outgoing colleague",
"role": "Facilitator",
"brief": "Reveal missing context when the learner asks a focused question."
}
]
},
"education": {
"objectives": [
{
"id": "objective-1",
"statement": "Clarify missing information"
},
{
"id": "objective-2",
"statement": "Agree on ownership of the next step"
}
],
"debriefPrompts": [
{
"id": "debrief-1",
"question": "How did you establish a shared understanding? Who took responsibility for the outstanding result?"
}
],
"preparation": [
{
"id": "preparation-handoff",
"audience": "learner",
"instructions": "Familiarity with a local handoff framework",
"assetIds": []
}
],
"rationale": "Practice explicit communication and follow-up ownership."
},
"events": {
"states": [
{
"id": "baseline",
"title": "Receive the handoff",
"kind": "baseline",
"key": true,
"learnerBrief": "The outgoing colleague is ready. How will you establish the shared picture?",
"facilitatorBrief": "Offer incomplete context, then respond to the learner’s approach."
},
{
"id": "assessment",
"title": "Clarify the context",
"kind": "phase",
"key": true,
"learnerBrief": "You have clarified the missing information. Agree on the next step.",
"facilitatorBrief": "Ask the learner to make ownership explicit."
},
{
"id": "waiting",
"title": "Await the update",
"kind": "phase",
"learnerBrief": "A result is pending. Agree who will review it while the simulated clock advances.",
"facilitatorBrief": "Advance simulated time to allow the update."
},
{
"id": "update",
"title": "The update arrives",
"kind": "phase",
"learnerBrief": "The pending update is available. Confirm who will communicate the result.",
"facilitatorBrief": "Ask for a closed-loop confirmation.",
"onEnterEffectIds": [
"update-hr"
]
},
{
"id": "conclusion",
"title": "Handoff complete",
"kind": "conclusion",
"key": true,
"learnerBrief": "The team has confirmed the situation and the next step. Pause for reflection.",
"facilitatorBrief": "Use the debrief prompts to compare both approaches."
}
],
"effects": [
{
"id": "update-hr",
"targetId": "patient-primary-hr",
"value": 82,
"unit": "beats/min",
"kind": "set-variable"
}
],
"actions": [
{
"id": "clarify",
"label": "Ask for missing context",
"availableInStateIds": [
"baseline"
],
"outcomes": [
{
"id": "clarify-outcome",
"effectIds": [],
"nextStateId": "assessment"
}
]
},
{
"id": "review",
"label": "Review the summary and pending result",
"availableInStateIds": [
"baseline"
],
"outcomes": [
{
"id": "review-outcome",
"effectIds": [],
"nextStateId": "waiting"
}
],
"resourceId": "handoff-result"
},
{
"id": "confirm",
"label": "Confirm responsibilities with a read-back",
"availableInStateIds": [
"assessment"
],
"outcomes": [
{
"id": "confirm-outcome",
"effectIds": [],
"nextStateId": "conclusion"
}
]
},
{
"id": "close",
"label": "Confirm who will communicate the result",
"availableInStateIds": [
"update"
],
"outcomes": [
{
"id": "close-outcome",
"effectIds": [],
"nextStateId": "conclusion"
}
]
}
],
"schedules": [
{
"id": "update-due",
"label": "Receive the scheduled update",
"anchor": {
"kind": "state-entry",
"refId": "waiting"
},
"delaySeconds": 30,
"priority": 0,
"effectIds": [],
"nextStateId": "update",
"onAnchorStateExit": "continue"
}
]
},
"resources": [
{
"id": "handoff-result",
"kind": "information",
"name": "Pending handoff update",
"description": "A fictional delayed update used to rehearse follow-up ownership.",
"source": "Authored fictional documentation example",
"results": [
{
"id": "handoff-result-result",
"content": "The requested handoff information is now available. Confirm that the incoming colleague has received it.",
"observationIds": [],
"assetIds": [],
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "on-resource-response",
"resourceId": "handoff-result"
}
}
],
"response": {
"delaySeconds": 30
}
}
],
"observations": [
{
"id": "patient-primary-examination-general",
"patientId": "patient-primary",
"code": "usim:examination:general",
"kind": "finding",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"status": "known",
"value": "Comfortable and speaking with the team"
},
{
"id": "patient-primary-ros-general",
"patientId": "patient-primary",
"code": "usim:ros:general",
"kind": "symptom",
"disclosure": {
"audience": [
"learner",
"facilitator"
],
"mode": "initial"
},
"status": "known",
"value": "No additional symptoms authored"
}
]
}This is a raw scenario object. Package envelopes add publication and format metadata around it. The structural schema does not replace reference, timing, or publication validation.