Location Profile¶
| Canonical | ../StructureDefinition/nexus-emr-core-location |
|---|---|
| Status | draft · 1.26.0 |
| Base | Location (constraint) |
| Source | FSH · JSON |
Generic Nexus EMR core profile for Location, represents an EMR 'location' or 'site' -- basically whatever the EMR uses to break the EMR up into separate slices (often for multisite clinics using the same EMR instance) For single-site clinics, at least one Location object must exist that represents the main site: this makes downstream consumers of the FHIR data easier to write as they can always assume Locations exist. Also, note that NexusEmrAppointment REQUIRES a Location as a participant.
FSH
The authored source of truth: resources/StructureDefinition-nexus-emr-core-location.fsh (edit on GitHub). One FSH file may define several related artifacts.
// NexusEmrCoreLocation.fsh
Alias: $NexusEmrCoreLocation = ../StructureDefinition/nexus-emr-core-location
Profile: NexusEmrCoreLocation
Parent: Location
Id: nexus-emr-core-location
Title: "Location Profile"
Description: """
Generic Nexus EMR core profile for Location, represents an EMR 'location' or 'site' --
basically whatever the EMR uses to break the EMR up into separate slices
(often for multisite clinics using the same EMR instance)
For single-site clinics, at least one Location object must exist that represents the main site: this
makes downstream consumers of the FHIR data easier to write as they can always assume Locations exist.
Also, note that NexusEmrAppointment REQUIRES a Location as a participant.
"""
// THE effective date for this profile (see the EffectiveDate / NoEffectiveDate
// RuleSets): one date concept per resource, declared here rather than guessed.
* insert NoEffectiveDate
// SMART on FHIR exposure -- READ-ONLY. An app may read and search this resource but not
// create, update or delete it: this is reference/directory data, maintained by the EMR
// rather than by third-party apps, and a delete here is data loss rather than workflow.
* insert SmartExposedReadOnly(location)
* ^url = $NexusEmrCoreLocation // Canonical URL from alias
* ^status = #draft
* ^publisher = "WELLSTAR Technologies Corp."
// --- Element Constraints ---
* . ^short = "Nexus EMR Location Core"
* . ^definition = """
Represents physical locations where healthcare services are provided, capturing key details
like name, address, type, and managing organization using standard Nexus EMR references.
Uses instance-specific identifiers for tracking locations across systems.
"""
* meta.source 0..1 MS
* meta.source ^short = "Identifies EMR instance & pipeline version the resource came from"
* meta.source ^definition = "A URI that identifies the EMR pipeline and version from which this resource originated. This tells you which EMR instance (recommend using the instance identifier), and the version of the pipeline code/transformations."
* text 0..1 MS // Narrative element with human-readable summary
* text ^short = "Narrative"
* text ^definition = "A human-readable narrative summary of the NexusEmrCoreLocation resource for human interpretation."
// Identifier
* identifier 0..* MS
* identifier.system 1..1
* identifier.value 1..1
* identifier ^short = "Business identifier(s) for location"
* identifier ^definition = """
Unique identifiers for the location.
A business identifier is recommended but not required (identifier is 0..*). Where available, carry the source-system identifier using the most appropriate system URI. No specific canonical system is mandated.
A source system's own identifier SHOULD be carried alongside this one, flagged `use = secondary`. See [Carrying the raw code](../guide/patterns/raw-codes.md).
"""
// Identifier slicing setup
* identifier ^slicing.discriminator.type = #pattern
* identifier ^slicing.discriminator.path = "system"
* identifier ^slicing.rules = #open
* identifier ^slicing.description = "Slice identifiers by system"
* identifier contains
sliCode 0..1 MS
// SLI Code slice (optional — Ontario Service Location Indicator for billing)
* identifier[sliCode] ^short = "Ontario Service Location Indicator (SLI)"
* identifier[sliCode] ^definition = """
Ontario Service Location Indicator — the physical-site code that Ontario billing submissions
(OHIP bills) carry on `billing_on_cheader1.location`. Referenced from `NexusEmrCoreInvoice` via
the `oscar-service-location-extension` so each bill resolves to a typed Location rather than
carrying the raw code directly.
"""
* identifier[sliCode].system 1..1
* identifier[sliCode].system = $OntarioSLICode (exactly)
* identifier[sliCode].system ^short = "Must be ../NamingSystem/on-sli-code"
* identifier[sliCode].value 1..1
* identifier[sliCode].value ^short = "The SLI code value (string, as stored in billing_on_cheader1.location)"
* identifier[sliCode].use = #usual
// Status: active | suspended | inactive. MS per CA-Core.
* status 0..1 MS
* status ^short = "active | suspended | inactive"
* status ^definition = "The operational status of the location. Indicates if the location is still in use."
* status ^comment = "Locations can be temporarily suspended or permanently inactive."
* status from http://hl7.org/fhir/ValueSet/location-status (required)
// Operational Status: Optional, MS per CA-Core.
// Not included based on minimal modeling principle unless specifically required.
// Type: Type of function performed at the location
* type 0..* MS
* type ^short = "Location type with raw code support"
* insert SourceCoding(type)
* type ^definition = """
Type of function performed at the location (e.g., hospital, clinic, pharmacy).
RECOMMENDED: Standard terminology codes when available
OPTIONAL: Raw EMR codes for source system preservation
"""
// Name (C2): Name of the location. MS per CA-Core.
* name 0..1 MS
* name ^short = "Name of the location as used by humans"
* name ^definition = "The name of the location as commonly displayed. This does not need to be unique."
* name ^comment = "The name is what people call the location, not necessarily its formal or unique name."
// Alias: Optional alternate names. Not MS per CA-Core.
* alias 0..*
* alias ^short = "List of alternate names"
* alias ^definition = "Alternative names by which the location is also known."
* alias ^comment = "May include historical names or colloquial names."
// Description: Optional details. Not MS per CA-Core.
* description 0..1
* description ^short = "Additional details about the location"
* description ^definition = "Additional information to locate or identify the location beyond its address and name."
* description ^comment = "May include directions, landmarks, or special instructions."
// Mode: instance | kind. Optional, not MS per CA-Core.
* mode 0..1
* mode ^short = "instance | kind"
* mode ^definition = "Whether this represents a specific location (instance) or a class of locations (kind)."
* mode ^comment = "Most locations are instances. Kind is used for location types or templates."
// Telecom: Contact details. MS per CA-Core.
* telecom 0..* MS
* telecom ^short = "Contact details of the location"
* telecom ^definition = "The contact details of communication devices available at the location."
* telecom ^comment = "May include phone, fax, email, website, etc."
* telecom.system 0..1 MS
* telecom.system ^short = "phone | fax | email | pager | url | sms | other"
* telecom.value 1..1 MS // Value is MS if telecom is present
* telecom.value ^short = "The actual contact point details"
// Address (C4): Postal address.
* address 0..1 MS
* address ^short = "Physical location address"
* address ^definition = "The physical address where the location can be found."
* address ^comment = "This is the address where services are provided or where the physical building is located."
// Physical Type: Optional physical form. Not MS per CA-Core.
* physicalType 0..1 MS
* physicalType ^short = "Physical type with raw code support"
* physicalType ^definition = """
Physical form of the location (e.g., building, room, vehicle, house).
RECOMMENDED: Standard terminology codes when available
OPTIONAL: Raw EMR codes for source system preservation
"""
// Position: Optional geographic location. Not MS per CA-Core.
/// XXX may be removed.
* position 0..1
// Managing Organization: Org responsible. MS per CA-Core. Use identifier reference.
* managingOrganization 0..1 MS
* managingOrganization only Reference($NexusEmrCoreOrganization)
// Part Of: Parent location. MS per CA-Core. Use identifier reference.
* partOf 0..1 MS
* partOf only Reference($NexusEmrCoreLocation)
// Hours Of Operation: Optional. Not MS per CA-Core.
/// XXX may be removed.
* hoursOfOperation 0..*
// Availability Exceptions: Optional. Not MS per CA-Core.
/// XXX may be removed.
* availabilityExceptions 0..1
// Endpoint: Optional technical endpoints. Not MS per CA-Core.
/// XXX may be removed.
* endpoint 0..*