Interop & layering
DSP-FHIR is the write-side: ambient conversation → DSP payload → FHIR R4 artefacts. A downstream canonical patient-context store is the read-side: FHIR → copilot runtime / EHR of record. This page is the contract that keeps the two layers clean — identifiers, references, extensions, profile base, provenance, and the namespaces DSP-FHIR reserves so a downstream model can compose on top without collision.
Where DSP-FHIR sits in the stack
DSP-FHIR resources are complete-on-their-own R4 artefacts. They do not depend on any particular downstream model, and they compose cleanly into any canonical patient-context store that consumes standard FHIR.
- Ambient capture — microphone, speaker turns, transcript.
- DSP payload — Dragon Standard Payload 1.0 JSON envelope.
- DSP-FHIR Bundle — R4
BundleofEncounter,Composition, orders,DocumentReferences,Provenance. - Downstream canonical patient-context store — dedupes, reconciles, joins with the longitudinal record.
- EHR of record — persistent clinical system.
Each boundary in that chain is a standard FHIR exchange. DSP-FHIR's job is to emit resources that the next hop can ingest without custom glue — and to not quietly occupy namespaces a downstream layer will later need.
Identifier guidance
Every DSP-emitted resource SHOULD carry a stable
identifier so a downstream store can dedupe across
replays, re-posts, and version bumps. DSP-FHIR reserves an identifier system
family under https://dsp-fhir.org/identifier/....
| System URI | Carries | Appears on |
|---|---|---|
https://dsp-fhir.org/identifier/session | DSP session_id | Provenance, session-scoped resources |
https://dsp-fhir.org/identifier/payload | DSP payload GUID (one per envelope) | Bundle.identifier |
https://dsp-fhir.org/identifier/source-ref | Optional passthrough of an upstream source-of-truth identifier | Any resource that has an upstream pedigree |
Patient identifiers supplied by upstream DSP inputs
(MRN, tenant-specific IDs, visit numbers) SHOULD be preserved
verbatim on Patient.identifier with their original
system and type. The
downstream canonical store owns the mapping to its internal MRN / tenant
identifier space; DSP-FHIR does not invent or normalise those.
Passthrough Patient identifier:
{
"resourceType": "Patient",
"id": "pat-67890",
"identifier": [
{
"use": "usual",
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR", "display": "Medical record number"
}]
},
"system": "urn:ehr:mrn:example-health",
"value": "MRN-67890"
},
{
"use": "secondary",
"system": "https://dsp-fhir.org/identifier/source-ref",
"value": "dsp-upstream-ref-9f3e"
}
]
} Reference style
Inside a DSP-FHIR Bundle we reference resources by
urn:uuid:* so the Bundle is self-contained and
order-independent. When the Bundle is POSTed to a FHIR server, the server
rewrites those to relative or absolute references.
| Style | Example | When |
|---|---|---|
urn:uuid:* | urn:uuid:5b9c...e3 | Inside a DSP-FHIR Bundle before server ingest. Matches Bundle.entry.fullUrl. |
| Relative | Patient/pat-67890 | After server ingest, within the same FHIR base. |
| Absolute | https://fhir.example.org/Patient/pat-67890 | Cross-server reference from the downstream store to the write server. |
A downstream canonical store SHOULD accept all three and normalise internally. It MUST NOT assume a DSP-FHIR Bundle has already been posted to its own FHIR base.
Extension namespace
DSP-FHIR reserves https://dsp-fhir.org/StructureDefinition/*
for profiles and extensions. A downstream canonical patient-context model
SHOULD NOT mint extensions under this namespace; it should
carry its own canonical and either pass DSP extensions through verbatim or map
them into its own shape.
| Extension | Value type | Purpose |
|---|---|---|
payload-version | complex (major/minor/revision/quality) | DSP payload version carried on Bundle.meta and Encounter. Also denormalised to meta.tag. |
external-callback-url | valueUrl | DSP callback endpoint on Encounter. |
update-status | valueCode | Optional DSP NEW/UPDATED/DELETED; prefer Provenance. |
confidence-score | valueDecimal (0–1) | ASR / extraction confidence on orders (and any clinical assertion). |
transcript-turn-refs | complex (repeating turn valueInteger) | Grounding — turn indices in the referenced transcript. |
spoken-forms | complex (repeating form valueString) | Voice aliases for conditions, sections, orders. |
search-terms | complex (repeating valueString) | Synonyms / search surface for an assertion. |
speaker-count | valuePositiveInt | Number of distinct speakers on a transcript DocumentReference. |
recording-locale | valueCode (BCP-47) | Locale of the recording / transcript. |
dsp-timezone | valueString | IANA timezone of the session. |
dsp-tenant-organization | valueReference(Organization) | DSP tenant org (distinct from Encounter.serviceProvider). |
legacy-id | valueString | DSP legacy_id on Composition.section. |
rendered-dosage-instruction | valueString | R5 back-port on MedicationRequest. |
abbreviation | valueString | Order abbreviation (e.g. "CBC", "CMP") on lab ServiceRequest. |
bodysite-laterality | valueCode | Laterality on ServiceRequest.bodySite. |
imaging-modality | valueCoding (DCM) | Imaging modality on ServiceRequest. |
imaging-views | valueString | View count / description on imaging order. |
imaging-contrast | valueCode | With / without / with-and-without. |
procedure-devices | complex (repeating device valueString) | Devices mentioned on a procedure order. |
return-in | valueDuration | Follow-up window (alt to occurrenceTiming.boundsDuration). |
approximation | valueBoolean | Marks a Duration as approximate ("in about 2 weeks"). |
prn | valueBoolean | PRN flag on follow-up ServiceRequest. |
weight-limit | complex (Quantity) | Weight-bearing / lifting limit on activity restrictions. |
linkage-confidence | valueDecimal | Cross-resource linkage confidence (e.g. order↔condition). |
approximate-match | valueBoolean | Marks a resolved match (e.g. accompanying person) as approximate. |
dsp-payload-versions | complex | Advertised on CapabilityStatement.rest.resource. |
Profile base
DSP-FHIR profiles derive from base FHIR R4, not US Core, IPA, or any other jurisdictional family. The rationale is layering: downstream consumers routinely need to stack US Core, IPA, or a national profile on top, and a formal inheritance chain through a jurisdictional profile would force double-constraint work and collide with regional variants.
In practice DSP-FHIR remains compatible with US Core on the vast majority of elements (names, identifiers, codings, must-supports), but does not formally inherit from it. Jurisdictional layering is the downstream store's concern.
Self-tagging provenance
Every DSP-originated resource carries meta.source = "dsp://..."
and is referenced by a Provenance resource tied to
the session. Together with the cross-cutting extensions
(confidence-score, transcript-turn-refs,
spoken-forms, search-terms),
this is the downstream audit surface: any assertion can be filtered by
confidence, re-verified against its originating transcript turn, or routed for
human review without the downstream model inventing its own audit shape.
payload-version rides as a meta.tag
(as well as a structured extension) so downstream stores can filter by DSP
release — GET [base]/Encounter?_tag=https://dsp-fhir.org/CodeSystem/payload-version|1.0.0
— and evolve in step with DSP.
Recording payload — Media + optional Binary
DSP-FHIR references audio recordings via Media.content.url,
typically an external blob URL governed by the write side. A downstream server
MAY inline or re-host the payload as a Binary
resource referenced by the same Media. Both
patterns are conformant; the choice is an operational one about custody and
retention.
- External URL:
Media.content.url = "https://blob.example.org/rec/abc.wav" - Re-hosted:
Media.content.url = "Binary/bin-001"(or an absolute reference to the downstream server).
Out of scope for DSP-FHIR 1.0
The following resources are intentionally not emitted by DSP-FHIR 1.0. They are the downstream store's responsibility, either because they are reconciliation-shaped (not capture-shaped) or because they represent state that lives in the EHR of record.
| Resource | Why out of scope |
|---|---|
Observation | Vitals and discrete results are not dictated by DSP 1.0; they belong in the downstream EHR / context store. |
DiagnosticReport | Lab / imaging / pathology report finalisation is downstream. DSP emits the order (ServiceRequest), not the report. |
AllergyIntolerance | Allergy reconciliation is a downstream concern. Transcript-mentioned allergies ride as narrative in the Composition section and are surfaced for downstream reconciliation. |
MedicationStatement | DSP emits MedicationRequest (prescribing intent). "Patient reports taking X" without prescribing intent is out of scope for 1.0. |
RelatedPerson | Caregivers mentioned in dictation are narrative-only in 1.0; resolution to a typed resource is a downstream $match concern. |
Coverage | Insurance details are out of scope. |
Schedule, Task | Workflow state is a downstream concern; DSP emits the clinical intent, not the workflow tracking. |
Basic | DSP uses typed extensions on the appropriate resource; it never falls back to Basic. |
Namespace registry
The complete set of canonical URI namespaces DSP-FHIR owns. A downstream canonical patient-context model MUST NOT mint artefacts under these paths.
| Namespace | Contents |
|---|---|
https://dsp-fhir.org/StructureDefinition/* | DSP extensions and profiles. |
https://dsp-fhir.org/CodeSystem/* | DSP code systems (terminology appendix). |
https://dsp-fhir.org/ValueSet/* | DSP value sets. |
https://dsp-fhir.org/ConceptMap/* | DSP concept maps. |
https://dsp-fhir.org/StructureMap/* | FML maps (DSP → FHIR transforms). |
https://dsp-fhir.org/SearchParameter/* | DSP search parameters (operations). |
https://dsp-fhir.org/OperationDefinition/* | DSP operations (currently just $ground, and an IG-profiled RelatedPerson/$match). |
https://dsp-fhir.org/ActivityDefinition/* | DSP-published $apply templates (e.g. dsp-follow-up-appointment). |
https://dsp-fhir.org/identifier/* | DSP identifier systems (see #identifiers). |
https://dsp-fhir.org base is illustrative. A real
publication would mint these under an HL7-managed or vendor-owned canonical that
commits to long-term resolution — but the shape of the reservation
(one namespace per artefact kind, identifier systems separated from
StructureDefinition) is the part a downstream model
needs to respect.