App Device Profile¶
| Canonical | ../StructureDefinition/nexus-emr-core-appdevice |
|---|---|
| Status | draft · 1.26.0 |
| Base | Device (constraint) |
| Source | FSH · JSON |
Simple profile for applications that integrate with patient data and require consent tracking. Contains just the essential information: app name, client_id, and basic details.
Overview
Overview
The Nexus EMR Core App Device profile is the registration record for a third-party application that
integrates with patient data: its name, its OAuth client_id, and whether the registration is
active. It exists so consent can name an application:
NexusEmrCoreAppConsent references it from
provision.actor.reference, which is restricted to this profile. The Device therefore has to exist
before the consent that points at it.
The profile is deliberately minimal — it carries app identity, not app capability. Nothing about scopes, endpoints, or authorization state is modelled here.
App Device and EMR Device are siblings on Device
Device carries two NexusEmr profiles for two different things, and meta.profile is what separates
them:
- nexus-emr-core-appdevice (this profile) — a third-party application, the actor of an app
consent. Only
deviceName(withdeviceName.name) andstatusare mandatory. - nexus-emr-core-emrdevice — an EMR software
product or instance, used for provenance. It mandates
manufacturer,deviceName.nameand.type,type(withtype.textfixed tosoftware),version.value, andownerreferencing a NexusEmrCoreOrganization — all1..1.
A reader that validates an application registration against the EMR profile collects failures on
five mandatory elements that an app has no values for, so confirm which profile a Device claims
before treating its absent elements as data quality problems. Conversely, an app-device instance is
not a source-system descriptor: do not read it as provenance for clinical data.
What the profile constrains
Every constrained element is must-support:
deviceName 1..1withdeviceName.name 1..1— the app name shown to staff and patients. Narrower than baseDevice.deviceName(0..*), so exactly one name is carried.deviceName.typeis left as inherited, unlike the EMR profile which requires it.status 1..1—activeorinactive, meaning whether the registration itself is live. It says nothing about whether any patient has consented; that answer lives in the Consent resource.identifier 0..*— include the OAuthclient_id. No canonical system is mandated, so use the registry's own system URI where there is one. The identifier is the join between the FHIR record and the authorization layer, so an app registration without one is hard to reconcile in practice even though the profile permits it.manufacturer 0..1— the developer or company.type 0..1— the kind of software application. Unlike the EMR profile, nothing is fixed here.note 0..1— a brief description. Narrowed from base0..*, so a producer emitting several notes fails validation; use one.
Exposure
The profile is exposed to SMART apps read-only (device:read). This is a security boundary
rather than a preference: the resource is the application registration and carries the OAuth
client_id, so an app able to write Device could mutate registrations — its own or another
application's. SMART exposure is declared per resource type, so the EMR Device profile is read-only
for the same reason. Registrations are created and maintained through EMR-side administration, not
through the SMART API.