{
"description": "A voice agent that conducts a spoken interview over the phone. Binds an instruction prompt to the questionnaires it can administer, so a Task focused on one of those questionnaires can find its agent without referencing voice at all. Speech and language models are optional overrides on top of the deployment defaults.",
"_filename": "StructureDefinition-SDCVoiceAgent.json",
"package_name": "io.health-samurai.sdc.r6",
"date": null,
"derivation": "specialization",
"publisher": "Health Samurai",
"fhirVersion": "6.0.0-ballot5",
"name": "SDCVoiceAgent",
"abstract": false,
"type": "SDCVoiceAgent",
"experimental": null,
"resourceType": "StructureDefinition",
"title": "SDC Voice Agent",
"package_version": "0.2608.0",
"extension": [ {
"url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-category",
"valueString": "Forms.Definitions"
} ],
"status": "active",
"id": "ecae85cf-bcd2-4ec2-916a-d5410f6ce632",
"kind": "resource",
"url": "http://health-samurai.io/fhir/sdc/StructureDefinition/SDCVoiceAgent",
"version": "0.2608.0",
"differential": {
"element": [ {
"id": "SDCVoiceAgent",
"max": "*",
"min": 0,
"path": "SDCVoiceAgent"
}, {
"id": "SDCVoiceAgent.url",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.url",
"type": [ {
"code": "uri"
} ],
"short": "Canonical identity of this agent."
}, {
"id": "SDCVoiceAgent.name",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.name",
"type": [ {
"code": "string"
} ],
"short": "Machine-readable name."
}, {
"id": "SDCVoiceAgent.title",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.title",
"type": [ {
"code": "string"
} ],
"short": "Human-readable name, shown when picking an agent."
}, {
"id": "SDCVoiceAgent.status",
"max": "1",
"min": 1,
"path": "SDCVoiceAgent.status",
"type": [ {
"code": "code"
} ],
"short": "draft | active | retired. Only active agents are selected for calls.",
"constraint": [ {
"key": "voice-agent-status-1",
"human": "Status must be one of: draft, active, retired",
"severity": "error",
"expression": "$this in ('draft' | 'active' | 'retired')"
} ]
}, {
"id": "SDCVoiceAgent.description",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.description",
"type": [ {
"code": "markdown"
} ],
"short": "What this agent is for."
}, {
"id": "SDCVoiceAgent.prompt",
"max": "1",
"min": 1,
"path": "SDCVoiceAgent.prompt",
"type": [ {
"code": "canonical",
"targetProfile": [ "http://health-samurai.io/fhir/sdc/StructureDefinition/SDCVoicePrompt" ]
} ],
"short": "SDCVoicePrompt lineage url. Version-less: the active revision is resolved when the call is placed."
}, {
"id": "SDCVoiceAgent.questionnaire",
"max": "*",
"min": 1,
"path": "SDCVoiceAgent.questionnaire",
"type": [ {
"code": "canonical",
"targetProfile": [ "http://hl7.org/fhir/StructureDefinition/Questionnaire" ]
} ],
"short": "Questionnaires this agent administers. Array order is interview order; a Task focused on any of these can be routed here. At least one is required — an agent without a questionnaire has nothing to ask."
}, {
"id": "SDCVoiceAgent.context",
"max": "*",
"min": 0,
"path": "SDCVoiceAgent.context",
"type": [ {
"code": "BackboneElement"
} ],
"short": "Resources this agent needs to hold the conversation. Declared here, supplied to $call, and validated against this list before the call is placed — the same contract as sdc-questionnaire-launchContext."
}, {
"id": "SDCVoiceAgent.context.name",
"max": "1",
"min": 1,
"path": "SDCVoiceAgent.context.name",
"type": [ {
"code": "code"
} ],
"short": "What this slot is called when passed to $call and when rendered into the prompt, e.g. patient, appointment, referrer. Distinguishes two slots of the same resource type."
}, {
"id": "SDCVoiceAgent.context.type",
"max": "1",
"min": 1,
"path": "SDCVoiceAgent.context.type",
"type": [ {
"code": "code"
} ],
"short": "Resource type accepted in this slot, e.g. Patient, Appointment, Coverage. Any FHIR resource type is allowed."
}, {
"id": "SDCVoiceAgent.context.label",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.context.label",
"type": [ {
"code": "string"
} ],
"short": "Human-readable name for the picker in the UI."
}, {
"id": "SDCVoiceAgent.stt",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.stt",
"type": [ {
"code": "Reference",
"targetProfile": [ "http://hl7.org/fhir/StructureDefinition/Device" ]
} ],
"short": "Speech-to-text model, as a Device. Falls back to the deployment default."
}, {
"id": "SDCVoiceAgent.tts",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.tts",
"type": [ {
"code": "Reference",
"targetProfile": [ "http://hl7.org/fhir/StructureDefinition/Device" ]
} ],
"short": "Text-to-speech voice, as a Device. Falls back to the deployment default."
}, {
"id": "SDCVoiceAgent.llm",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.llm",
"type": [ {
"code": "Reference",
"targetProfile": [ "http://hl7.org/fhir/StructureDefinition/Device" ]
} ],
"short": "Language model, as a Device. Falls back to the deployment default."
}, {
"id": "SDCVoiceAgent.extractorLlm",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.extractorLlm",
"type": [ {
"code": "Reference",
"targetProfile": [ "http://hl7.org/fhir/StructureDefinition/Device" ]
} ],
"short": "Model that turns the finished transcript into answers, as a Device. A separate call from the conversation, so it can be a cheaper or stricter model; falls back to llm."
}, {
"id": "SDCVoiceAgent.maxAttempts",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.maxAttempts",
"type": [ {
"code": "integer"
} ],
"short": "How many times to redial when nobody picks up. Defaults to a single attempt."
}, {
"id": "SDCVoiceAgent.retryDelayMinutes",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.retryDelayMinutes",
"type": [ {
"code": "integer"
} ],
"short": "Gap between redial attempts, in minutes."
}, {
"id": "SDCVoiceAgent.maxDurationMinutes",
"max": "1",
"min": 0,
"path": "SDCVoiceAgent.maxDurationMinutes",
"type": [ {
"code": "integer"
} ],
"short": "Hard cap on a single conversation; the call is hung up when it is reached."
} ]
},
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/DomainResource"
}