AU Core Implementation Guide
1.0.0-ci-build - CI Build
AU Core Implementation Guide, published by HL7 Australia. This guide is not an authorized publication; it is the continuous build for version 1.0.0-ci-build built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/hl7au/au-fhir-core/ and changes regularly. See the Directory of published versions
Page standards status: Informative |
There are two different ways to implement AU Core:
The requirements of the FHIR standard and FHIR Conformance Rules apply, and define the use of terms in this guide including the conformance verbs - SHALL, SHALL NOT, SHOULD, SHOULD NOT, MAY.
Implementers are advised to be familiar with the requirements of the FHIR standard when implementing AU Core, in particular:
The Profiles and Extensions page lists the AU Core profiles and AU Core extensions defined for this implementation guide. An AU Core profile StructureDefinition defines the minimum elements, extensions, vocabularies and value sets that SHALL be present and constrains the way elements are used when conforming to the profile.
AU Core profile elements include mandatory and Must Support requirements. Mandatory elements are required and have a minimum cardinality of 1 (min=1). Must Support elements have defined conformance obligations in AU Core based on actor roles.
Systems may implement AU Core as:
The AU Core Requester CapabilityStatement defines the conformance requirements and expectations of an AU Core Requester actor responsible for initiating queries for information from an AU Core Responder. The complete list of FHIR profiles, REST API interactions, and search parameters that can be implemented by an AU Core Requester are defined in this capability statement.
The AU Core Responder CapabilityStatement defines the conformance requirements and expectations of an AU Core Responder actor responsible for providing responses to queries submitted by an AU Core Requester. The complete list of FHIR profiles, REST API interactions, and search parameters that can be implemented by an AU Core Responder are defined in this capability statement. An AU Core Responder declares conformance to this list of capabilities based on the resource types and interactions it implements.
A system that represents digital health information using the content models of AU Core profiles without the expectation to implement any AU Core interactions can declare Profile Only Support to one or more AU Core profiles.
A system that declares conformance as Profile Only Support to an AU Core profile:
A system is not required to declare Profile Only Support to all AU Core profiles. For example, a pathology laboratory system that implements the AU Core Pathology Result Observation profile, is not required to produce a MedicationRequest resource.
Profile Support + Interaction Support refers to a system that represents digital health information using the content models of AU Core profiles AND implement the REST API interactions defined by the applicable AU Core capability statement.
An AU Core Responder that declares Profile Support + Interaction Support conformance:
An AU Core Requester that declares Profile Support + Interaction Support conformance:
Mandatory elements are elements with minimum cardinality > 0. When an element is mandatory, the data is expected to always be present. Very rarely, it may not be, and in this circumstance the requirements in Missing Data SHALL be applied. An element can be both Must Support and mandatory, in which case the requirements for mandatory’s Missing Data requirements apply as described in Missing Must Support and Mandatory Data.
The convention in this guide is to mark all mandatory elements as Must Support unless they are nested under an optional element.
Labelling an element Must Support means that systems that produce or consume resources SHALL provide support for the element in some meaningful way. The FHIR standard does not define exactly what ‘meaningful’ support for an element means, but indicates that a profile SHALL make clear exactly what kind of support is required when an element is labelled as Must Support.
Because AU Core is a foundational standard, Must Support needs to be defined in a way that does not impede or prescribe what a system does with the data, so as not to impede each implementation’s ability to tighten and define expectations for use under their own business rules, regulations, policies, etc. There is also a challenge that comes from inheritance of Must Support flags into implementation guides that have strict definitions for Must Support (e.g., must be able to display this value to an end user). AU Core will only apply the Must Support flag on the elements that are necessary to support minimum requirements and are expected to be flagged as Must Support across the majority of Australian FHIR implementation guides.
In AU Core, the meaning of Must Support is specified in terms of Obligation Codes in obligation extensions on the element definition. The obligation codes used to define the minimum obligations of Must Support elements in this implementation guide are reiterated below.
Actor | Code | Display | Definition | Notes |
---|---|---|---|---|
AU Core Responder | SHALL:populate-if-known | SHALL populate if known | Conformant applications producing resources SHALL correctly populate this element if they know a value for the element, but it is acceptable if the system is unable to ever know a value for the element. | This obligation does not impose a requirement to be able to know a value, unlike populate and able-to-populate which do. ‘Knowing’ an element means that a value for the element is available in memory, persistent store, or is otherwise available within the system claiming conformance. |
AU Core Requester | SHALL:no-error | SHALL not error if present | Conformant applications SHALL accept resources containing any valid value for the element without error. | Applications are still able to inform the user that a value cannot be processed correctly and may ignore the data, but applications aren’t able to reject an instance merely because the element is present (which would be allowed for elements that do not have this obligation). A system MAY raise an error if the value provided is not valid or violates specific business rules. This obligation also applies to elements that only contain an extension in place of a value where (or equivalent), should either of these be allowed on the consumer obligations |
Must Support elements are treated differently between AU Core Responder and AU Core Requester actors. Must Support on a profile element SHALL be interpreted as follows.
An AU Core Responder:
When a Must Support element requires a more tightly stated obligation, this obligation is specified in the AU Core Responder obligation extension on the element definition.
An AU Core Requester:
How the system processes the resource depends on local requirements that could align with obligation terms such as reject invalid, correctly handle, persist, display, or ignore.
When a Must Support element requires a more tightly stated obligation, this obligation is specified in the AU Core Requester obligation extension on the element definition.
When rendered in an implementation guide each profile is presented in different formal views under tabs labelled “Differential Table”, “Key Elements Table”, and “Snapshot Table”.
The elements labelled Must Support in these views are flagged with an S. Implementers should refer to the “Key Elements Table” to see the full set of elements that are mandatory or Must Support, and the full set of terminology requirements.
Implementers should take note that the full set of constraints (i.e. invariants) are only presented in the “Detailed Descriptions” tab or the raw representation (e.g. XML or JSON) of the profile.
When viewing the raw representation (e.g. XML or JSON) of a profile, elements labelled Must Support are flagged as mustSupport
set to “true”.
Example: AU Core AllergyIntolerance profile showing clinicalStatus and verificationStatus labelled Must Support
{
"resourceType" : "StructureDefinition",
...
"url" : "http://hl7.org.au/fhir/core/StructureDefinition/au-core-allergyintolerance",
...
"type" : "AllergyIntolerance",
"baseDefinition" : "http://hl7.org.au/fhir/StructureDefinition/au-allergyintolerance",
...
{
"id" : "AllergyIntolerance.clinicalStatus",
"path" : "AllergyIntolerance.clinicalStatus",
"mustSupport" : true
},
{
"id" : "AllergyIntolerance.verificationStatus",
"path" : "AllergyIntolerance.verificationStatus",
"mustSupport" : true
},
...
}
Profiles defined in this implementation publication flag Must Support on elements (e.g. Patient.name
) and sub-elements of a data type (e.g. Patient.name.use
).
The explanation on how to interpret Must Support for an element does not address rules defined in each profile - which may limit or extend what is allowed for each element.
The sub-elements for each supported element in a profile are defined by a combination of the data type from the core specification and any additional rules included in the profile. A profile may include rules that:
For example, the profile AU Core Patient limits what is considered valid for the element Patient.name
with the invariant “au-core-pat-02: At least one patient name shall have a family name”.
Typically AU Core profiles will inherit extended sub-elements from a HL7 AU Base profile, e.g. the element Medication.code
in profile AU Core Medication is of type CodeableConcept and is extended by inheriting a medicine specific sub-element Medication.code.coding.extension
Medication Type extension from AU Base Medication.
The full set of sub-elements is visible in the “Key Elements Table” or “Snapshot Table” which shows the sub-elements defined in this profile (shown in the “Differential Table”) and the sub-elements inherited from a base profile.
Primitive elements are single elements with a primitive value. If a primitive element is labelled as Must Support:
For example, the AU Core Organization Profile name
element is a primitive string datatype. Therefore, when claiming conformance to this profile:
Organization.name
if a value is known.Organization.name
is present and containing any valid value.Complex elements are composed of primitive and/or other complex elements. Elements may have additional rules defined in the profile that also apply, e.g. terminology binding, or invariants.
If a complex element is labelled as Must Support:
For example, the AU Core MedicationRequest Profile note
element is labelled Must Support and has no Must Support sub-elements. When claiming conformance to this profile:
MedicationRequest.note
sub-element if a value is known e.g. MedicationRequest.note.text
.MedicationRequest.note
is present and containing any valid sub-elements.If a sub-element is labelled as Must Support:
For example, in the AU Core Practitioner Profile, the name
element is labelled Must Support and has Must Support sub-elements family
and given
. When claiming conformance to this profile:
Practitioner.name.family
and Practitioner.name.given
if the value for those sub-elements is known.Practitioner.name
is present and contains valid values in Practitioner.name.family
and Practitioner.name.given
sub-elements.Some elements labelled as Must Support reference multiple resource types or profiles such as Observation.performer
. In such cases:
The table below provides a list of AU Core profile elements that allow multiple referenced resource types or profiles.
AU Core Profile | Must Support Element | Reference |
---|---|---|
AU Core Diagnostic Result Observation | Observation.performer | AU Core Practitioner, AU Core PractitionerRole, AU Core Organization, AU Core Patient, AU Base RelatedPerson |
AU Core Diagnostic Result Observation | Observation.hasMember | AU Core Diagnostic Result Observation, AU Core Pathology Result Observation |
AU Core Encounter | Encounter.participant.individual | AU Core Practitioner, AU Core PractitionerRole, AU Base Related Person |
AU Core Encounter | Encounter.reasonReference | AU Core Condition, Observation, AU Core Procedure |
AU Core Pathology Result Observation | Observation.performer | AU Core Practitioner, AU Core PractitionerRole, AU Core Organization, AU Core Patient, AU Base RelatedPerson |
AU Core Procedure | Procedure.reasonReference | AU Core Condition, Observation, AU Core Procedure, DocumentReference |
AU Core MedicationRequest | MedicationRequest.requester | AU Core Practitioner, AU Core PractitionerRole, AU Core Organization, AU Core Patient, AU Base Related Person |
AU Core MedicationRequest | MedicationRequest.reasonReference | AU Core Condition, Observation |
Some elements labelled as Must Support allow different data types such as Observation.effective[x]
. In such cases:
The table below provides a list of AU Core profile elements that allow multiple data types.
AU Core Profile | Must Support Element | Data Types |
---|---|---|
AU Core AllergyIntolerance | AllergyIntolerance.onset[x] | dateTime, age, Period, Range |
AU Core Condition | Condition.onset[x] | dateTime, age, Period, Range |
AU Core Condition | Condition.abatement[x] | dateTime, age, Period, Range |
AU Core Diagnostic Result Observation | Observation.effective[x] | dateTime, Period |
AU Core Pathology Result Observation | Observation.effective[x] | dateTime, Period |
AU Core Diagnostic Result Observation | Observation.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Pathology Result Observation | Observation.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Diagnostic Result Observation | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Pathology Result Observation | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Blood Pressure | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Body Height | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Body Temperature | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Body Weight | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Heart Rate | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Respiration Rate | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Waist Circumference | Observation.component.value[x] | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period |
AU Core Immunization | Immunization.occurrence[x] | dateTime, string |
AU Core MedicationRequest | MedicationRequest.medication[x] | CodeableConcept, Reference |
AU Core Procedure | Procedure.performed[x] | dateTime, Period, string, Age, Range |
A profile may support one or more than one identifier type and will include the supported identifiers in a profile by slicing the element and placing Must Support on each identifier slice. In such cases:
The table below provides a list of AU Core profile elements that allow multiple identifier types.
AU Core Profile | Must Support Element | Supported Identifiers |
---|---|---|
AU Core Organization | Organization.identifier | HPI-O, Australian Business Number |
AU Core Patient | Patient.identifier | IHI, Medicare Card Number, DVA Number |
AU Core Practitioner | Practitioner.identifier | HPI-I |
AU Core PractitionerRole | PractitionerRole.identifier | Medicare Provider Number |
For example, the profile AU Core Patient requires support for the following choices Patient.identifier
defined in AU Base Patient to support Individual Healthcare Identifier (IHI), Medicare Card Number, Department of Veterans’ Affairs (DVA) Number. When claiming conformance to the AU Core Patient Profile:
Patient.identifier
with an IHI, or Medicare Care Number, or DVA Number, or any combination of them.Patient.identifier
is present containing any valid value. A valid value may be an IHI, Medicare Care Number, or DVA Number identifier, or may be some other allowed identifier.Systems MAY support populating and processing other identifiers, but this is not a requirement of AU Core.
A resource may support two elements that are used to indicate a reason, e.g. Encounter.reasonCode
and Encounter.reasonReference
in the profile AU Core Encounter. In such cases:
The table below lists the applicable profiles and elements in AU Core.
AU Core Profile | Must Support Choice Elements |
---|---|
AU Core Encounter | Encounter.reasonCode, Encounter.reasonReference |
AU Core Procedure | Procedure.reasonCode, Procedure.reasonReference |
AU Core MedicationRequest | MedicationRequest.reasonCode, MedicationRequest.reasonReference |
In AU Core, elements that define support for more than one value set only apply to the Coding part of the element and are not intended to prevent systems from supplying only a text value. In such cases:
The table below lists the applicable profiles and elements in AU Core that support multiple value sets.
AU Core Profile | Must Support Sub-Element | Terminology Choices |
---|---|---|
AU Core Immunization | Immunization.code.coding | Australian Medicines Terminology Vaccine, Australian Immunisation Register Vaccine |
AU Core Medication | Medication.code.coding | Australian Medication, PBS Item Codes |
AU Core MedicationRequest | MedicationRequest.code.coding | Australian Medication, PBS Item Codes |
For example, the profile AU Core Medication requires support for the following terminology choices Medication.code.coding
defined in AU Base Medication to support Australian Medication and PBS Item Codes as indicated by flagging Must Support on those two terminology slices.
When claiming conformance to the AU Core Medication profile:
Medication.code.coding
with either a code from Australian Medication or PBS Item Codes, or both, if a coded value is known.Medication.code.coding
is present and containing any valid value. A valid value may be text, or may be a code from Australian Medication or PBS Item Codes, or both, or some other code.Systems MAY populate and accept other code systems but this is not a requirement of AU Core.
There are situations when information for a particular data element is missing and the source system does not know the reason for the absence of data.
If the source system does not know the value for an optional element (minimum cardinality = 0), including elements labelled Must Support, the data element SHALL be omitted from the resource.
If the data element is a mandatory element (minimum cardinality is > 0), the element SHALL be present even if the source system does not know the value or the reason the value is absent. The core specification provides guidance for what to do in this situation, which is summarised below.
unknown
The value is expected to exist but is not knownExample: Patient resource where the patient’s birthDate is not available.
{
"resourceType" : "Patient",
...
"_birthDate" : {
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
"valueCode" : "unknown"
}
]
},
...
}
For non-coded data elements where the applicable AU Core profile mandates a sub-element, e.g. in AU Core Practitioner, the sub-element Practitioner.name.family
is mandatory, then the resource must contain the sub-element otherwise the resource will not be conformant.
AllergyIntolerance.clinicalStatus
*Condition.clinicalStatus
*Immunization.status
*The clinicalStatus element is conditionally mandatory based on resource-specific constraints.
unknown
from the DataAbsentReason Code System.Example: AllergyIntolerance resource where the manifestation is unknown.
...
"reaction" : [
{
"manifestation" : [
{
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/data-absent-reason",
"code" : "unknown",
"display" : "Unknown"
}
]
}
]
}
]
...
In some circumstances, specific pieces of data may be hidden due to security or privacy reasons.
When an element definition is optional (minimum cardinality = 0), including elements labelled Must Support:
When an element definition is mandatory (minimum cardinality > 0),
unknown
from the DataAbsentReason Code System following the section on Missing Data.masked
from the DataAbsentReason Code System following the section on Missing Data.