AU Core Implementation Guide
2.0.1-ci-build - CI Build AU

AU Core Implementation Guide, published by HL7 Australia. This guide is not an authorized publication; it is the continuous build for version 2.0.1-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

## Resource Profile: AU Core Procedure

Official URL: http://hl7.org.au/fhir/core/StructureDefinition/au-core-procedure | Version: 2.0.1-ci-build
Standards status: Trial-use | Maturity Level: 2 | Computable Name: AUCoreProcedure
Copyright/Legal: Used by permission of HL7 International, all rights reserved Creative Commons License. HL7 Australia© 2022+; Licensed Under Creative Commons No Rights Reserved.

This profile sets minimum expectations for a Procedure resource to record, search, and fetch procedures associated with a patient. It is based on the AU Base Procedure profile and identifies the additional mandatory core elements, extensions, vocabularies and value sets that SHALL be present in the Procedure resource when conforming to this profile. It provides the floor for standards development for specific uses cases in an Australian context.

See Comparison with other national and international IGs for a comparison between AU Core profiles and profiles in other implementation guides.

### Usage Scenarios

The following are supported usage scenarios for this profile:

- Query for procedures performed on a patient
- Record or update a record of a procedure performed on a patient

### Profile Specific Implementation Guidance

- `Procedure.category` provides an efficient way of supporting system interactions, e.g. restricting searches. Implementers need to understand that data categorisation is somewhat subjective. The categorisation applied by the source may not align with a receiver’s expectations.
- The use of coding can vary significantly across systems, requesters need to understand that they may encounter codes they do not recognise and be prepared to handle those resources appropriately. Responders SHOULD populate `Procedure.code.text` and/or `Procedure.code.coding.display` so that requesters can at least display the procedure even if the requester does not recognise the code supplied.
- `Procedure.code` contains the identification of the procedure which may include body site information. Where a system has information not supported by the coding in `Procedure.code.coding` (e.g. body site, laterality and other qualification of procedure coding terms) that information SHOULD be supplied in `Procedure.code.text`
- See the Representing Body Site, Which May Include Laterality section for guidance on representing a relevant body site and associated laterality.
- The Procedure resource can represent a clinical indication with `Procedure.reasonCode`, or a reference with `Procedure.reasonReference` to a Condition or other resource.
  - Although both are marked as Must Support, responders are not required to support both a code and a reference, but they SHALL support at least one of these elements
  - A requester SHALL support both elements
- A procedure including an implantable device is recommended to use `Procedure.focalDevice` with a reference to a Device resource

The additional obligation for `Procedure.performedDateTime` for AU Core Responder is SHOULD:populate. There is no additional obligation for AU Core Requester, the obligation of SHALL:no-error applies.

This obligation is present in the underlying structure but due to a tooling limitation is not currently rendered in the Formal Views of Profile Content. See Zulip discussion for more information.

Usages:

- Refer to this Profile: AU Core Encounter and AU Core Procedure
- Examples for this Profile: Procedure/dialysis and Procedure/stentinsertion
- CapabilityStatements using this Profile: AU Core Requester CapabilityStatement and AU Core Responder CapabilityStatement

You can also check for usages in the FHIR IG Statistics

Changes since version 1.0.0:

- The resource metadata has changed (description)
- The data elements list has changed

### Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

- Key Elements Table
- Differential Table
- Snapshot Table
- Statistics/References
- All

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
Slices for extension |  |  |  | Content/Rules for all slices
extension:sexParameterForClinicalUse |  | 0..* | (Complex) | A context-specific sex parameter for clinical use URL: http://hl7.org/fhir/StructureDefinition/patient-sexParameterForClinicalUse
extension:targetBodyStructure |  | 0..* | Reference(BodyStructure) | The target point for this procedure URL: http://hl7.org/fhir/StructureDefinition/procedure-targetBodyStructure
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
status | ?!SO Σ | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown Binding: EventStatus (required): A code specifying the state of the procedure.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
code | SO Σ | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO Σ | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO Σ | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO Σ | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
reasonCode | SO Σ | 0..* | CodeableConcept | Coded reason procedure performed Binding: ProcedureReasonCodes (example): A code that identifies the reason a procedure is required.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO Σ | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | Σ C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Procedure.status | Base | required | EventStatus | 📍4.0.1 | FHIR Std.
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.reasonCode | Base | example | Procedure Reason Codes | 📍4.0.1 | FHIR Std.
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`
dom-2 | error | Procedure | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Procedure | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Procedure | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

This structure is derived from AUBaseProcedure

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
status | SO | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
code | SO | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
reasonCode | SO | 0..* | CodeableConcept | Coded reason procedure performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements
contained |  | 0..* | Resource | Contained, inline Resources
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:sexParameterForClinicalUse |  | 0..* | (Complex) | A context-specific sex parameter for clinical use URL: http://hl7.org/fhir/StructureDefinition/patient-sexParameterForClinicalUse
extension:targetBodyStructure |  | 0..* | Reference(BodyStructure) | The target point for this procedure URL: http://hl7.org/fhir/StructureDefinition/procedure-targetBodyStructure
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
identifier | Σ | 0..* | Identifier | External Identifiers for this procedure
instantiatesCanonical | Σ | 0..* | canonical(PlanDefinition | ActivityDefinition | Measure | OperationDefinition | Questionnaire) | Instantiates FHIR protocol or definition
instantiatesUri | Σ | 0..* | uri | Instantiates external protocol or definition
basedOn | Σ | 0..* | Reference(CarePlan | ServiceRequest) | A request for this procedure
partOf | Σ | 0..* | Reference(Procedure | Observation | MedicationAdministration) | Part of referenced event
status | ?!SO Σ | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown Binding: EventStatus (required): A code specifying the state of the procedure.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
statusReason | Σ | 0..1 | CodeableConcept | Reason for current status Binding: ProcedureNotPerformedReason(SNOMED-CT) (example): A code that identifies the reason a procedure was not performed.
category | Σ | 0..1 | CodeableConcept | Classification of the procedure Binding: ProcedureCategoryCodes(SNOMEDCT) (example): A code that classifies a procedure for searching, sorting and display purposes.
code | SO Σ | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO Σ | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO Σ | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO Σ | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
recorder | Σ | 0..1 | Reference(Patient | RelatedPerson | Practitioner | PractitionerRole) | Who recorded the procedure
asserter | Σ | 0..1 | Reference(Patient | RelatedPerson | Practitioner | PractitionerRole) | Person who asserts this procedure
performer | Σ | 0..* | BackboneElement | The people who performed the procedure
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
function | Σ | 0..1 | CodeableConcept | Type of performance Binding: ProcedurePerformerRoleCodes (example): A code that identifies the role of a performer of the procedure.
actor | Σ | 1..1 | Reference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device) | The reference to the practitioner
onBehalfOf |  | 0..1 | Reference(Organization) | Organization the device or practitioner was acting for
location | Σ | 0..1 | Reference(Location) | Where the procedure happened
reasonCode | SO Σ | 0..* | CodeableConcept | Coded reason procedure performed Binding: ProcedureReasonCodes (example): A code that identifies the reason a procedure is required.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO Σ | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | Σ C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
outcome | Σ | 0..1 | CodeableConcept | The result of procedure Binding: ProcedureOutcomeCodes(SNOMEDCT) (example): An outcome of a procedure - whether it was resolved or otherwise.
report |  | 0..* | Reference(DiagnosticReport | DocumentReference | Composition) | Any report resulting from the procedure
complication |  | 0..* | CodeableConcept | Complication following the procedure Binding: Condition/Problem/DiagnosisCodes (example): Codes describing complications that resulted from a procedure.
complicationDetail |  | 0..* | Reference(Condition) | A condition that is a result of the procedure
followUp |  | 0..* | CodeableConcept | Instructions for follow up Binding: ProcedureFollowUpCodes(SNOMEDCT) (example): Specific follow up required for a procedure e.g. removal of sutures.
note |  | 0..* | Annotation | Additional information about the procedure
focalDevice |  | 0..* | BackboneElement | Manipulated, implanted, or removed device
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
action |  | 0..1 | CodeableConcept | Kind of change to device Binding: ProcedureDeviceActionCodes (preferred): A kind of change that happened to the device during the procedure.
manipulated |  | 1..1 | Reference(Device) | Device that was changed
usedReference |  | 0..* | Reference(Device | Medication | Substance) | Items used during procedure
usedCode |  | 0..* | CodeableConcept | Coded items used during the procedure Binding: FHIRDeviceTypes (example): Codes describing items used during a procedure.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Procedure.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Procedure.status | Base | required | EventStatus | 📍4.0.1 | FHIR Std.
Procedure.statusReason | Base | example | Procedure Not Performed Reason (SNOMED-CT) | 📍4.0.1 | FHIR Std.
Procedure.category | Base | example | Procedure Category Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.performer.​function | Base | example | Procedure Performer Role Codes | 📍4.0.1 | FHIR Std.
Procedure.reasonCode | Base | example | Procedure Reason Codes | 📍4.0.1 | FHIR Std.
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au
Procedure.outcome | Base | example | Procedure Outcome Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.complication | Base | example | Condition/Problem/Diagnosis Codes | 📍4.0.1 | FHIR Std.
Procedure.followUp | Base | example | Procedure Follow up Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.focalDevice.​action | Base | preferred | Procedure Device Action Codes | 📍4.0.1 | FHIR Std.
Procedure.usedCode | Base | example | FHIR Device Types | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`
dom-2 | error | Procedure | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Procedure | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Procedure | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

This structure is derived from AUBaseProcedure

Summary

Mandatory: 1 element
Must-Support: 7 elements

Structures

This structure refers to these other structures:

- AU Core Patient (http://hl7.org.au/fhir/core/StructureDefinition/au-core-patient)
- AU Core Encounter (http://hl7.org.au/fhir/core/StructureDefinition/au-core-encounter)
- AU Core Condition (http://hl7.org.au/fhir/core/StructureDefinition/au-core-condition)
- AU Core Procedure (http://hl7.org.au/fhir/core/StructureDefinition/au-core-procedure)

Maturity: 2

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
Slices for extension |  |  |  | Content/Rules for all slices
extension:sexParameterForClinicalUse |  | 0..* | (Complex) | A context-specific sex parameter for clinical use URL: http://hl7.org/fhir/StructureDefinition/patient-sexParameterForClinicalUse
extension:targetBodyStructure |  | 0..* | Reference(BodyStructure) | The target point for this procedure URL: http://hl7.org/fhir/StructureDefinition/procedure-targetBodyStructure
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
status | ?!SO Σ | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown Binding: EventStatus (required): A code specifying the state of the procedure.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
code | SO Σ | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO Σ | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO Σ | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO Σ | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
reasonCode | SO Σ | 0..* | CodeableConcept | Coded reason procedure performed Binding: ProcedureReasonCodes (example): A code that identifies the reason a procedure is required.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO Σ | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | Σ C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Procedure.status | Base | required | EventStatus | 📍4.0.1 | FHIR Std.
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.reasonCode | Base | example | Procedure Reason Codes | 📍4.0.1 | FHIR Std.
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`
dom-2 | error | Procedure | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Procedure | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Procedure | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

Differential View

This structure is derived from AUBaseProcedure

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
status | SO | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
code | SO | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
reasonCode | SO | 0..* | CodeableConcept | Coded reason procedure performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`

Snapshot View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Procedure |  | 0..* | AUBaseProcedure | A procedure in an Australian healthcare context
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements
contained |  | 0..* | Resource | Contained, inline Resources
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:sexParameterForClinicalUse |  | 0..* | (Complex) | A context-specific sex parameter for clinical use URL: http://hl7.org/fhir/StructureDefinition/patient-sexParameterForClinicalUse
extension:targetBodyStructure |  | 0..* | Reference(BodyStructure) | The target point for this procedure URL: http://hl7.org/fhir/StructureDefinition/procedure-targetBodyStructure
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
identifier | Σ | 0..* | Identifier | External Identifiers for this procedure
instantiatesCanonical | Σ | 0..* | canonical(PlanDefinition | ActivityDefinition | Measure | OperationDefinition | Questionnaire) | Instantiates FHIR protocol or definition
instantiatesUri | Σ | 0..* | uri | Instantiates external protocol or definition
basedOn | Σ | 0..* | Reference(CarePlan | ServiceRequest) | A request for this procedure
partOf | Σ | 0..* | Reference(Procedure | Observation | MedicationAdministration) | Part of referenced event
status | ?!SO Σ | 1..1 | code | preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown Binding: EventStatus (required): A code specifying the state of the procedure.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
statusReason | Σ | 0..1 | CodeableConcept | Reason for current status Binding: ProcedureNotPerformedReason(SNOMED-CT) (example): A code that identifies the reason a procedure was not performed.
category | Σ | 0..1 | CodeableConcept | Classification of the procedure Binding: ProcedureCategoryCodes(SNOMEDCT) (example): A code that classifies a procedure for searching, sorting and display purposes.
code | SO Σ | 1..1 | CodeableConcept | Identification of the procedure Binding: Procedure (extensible)
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
subject | SO Σ | 1..1 | Reference(AU Core Patient) | Who the procedure was performed on
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
encounter | SO Σ | 0..1 | Reference(AU Core Encounter) | Encounter created as part of
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performed[x] | SO Σ | 0..1 |  | When the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
performedDateTime |  |  | dateTime S |
performedPeriod |  |  | Period |
performedString |  |  | string |
performedAge |  |  | Age |
performedRange |  |  | Range |
recorder | Σ | 0..1 | Reference(Patient | RelatedPerson | Practitioner | PractitionerRole) | Who recorded the procedure
asserter | Σ | 0..1 | Reference(Patient | RelatedPerson | Practitioner | PractitionerRole) | Person who asserts this procedure
performer | Σ | 0..* | BackboneElement | The people who performed the procedure
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
function | Σ | 0..1 | CodeableConcept | Type of performance Binding: ProcedurePerformerRoleCodes (example): A code that identifies the role of a performer of the procedure.
actor | Σ | 1..1 | Reference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device) | The reference to the practitioner
onBehalfOf |  | 0..1 | Reference(Organization) | Organization the device or practitioner was acting for
location | Σ | 0..1 | Reference(Location) | Where the procedure happened
reasonCode | SO Σ | 0..* | CodeableConcept | Coded reason procedure performed Binding: ProcedureReasonCodes (example): A code that identifies the reason a procedure is required.
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
reasonReference | SO Σ | 0..* | Reference(AU Core Condition | Observation | AU Core Procedure | DocumentReference) | The justification that the procedure was performed
Obligations | Actor
SHALL:populate-if-known | AU Core Responder
SHALL:no-error | AU Core Requester
bodySite | Σ C | 0..* | CodeableConcept | Target body sites Binding: Body Site (extensible) Constraints: au-core-pro-01
outcome | Σ | 0..1 | CodeableConcept | The result of procedure Binding: ProcedureOutcomeCodes(SNOMEDCT) (example): An outcome of a procedure - whether it was resolved or otherwise.
report |  | 0..* | Reference(DiagnosticReport | DocumentReference | Composition) | Any report resulting from the procedure
complication |  | 0..* | CodeableConcept | Complication following the procedure Binding: Condition/Problem/DiagnosisCodes (example): Codes describing complications that resulted from a procedure.
complicationDetail |  | 0..* | Reference(Condition) | A condition that is a result of the procedure
followUp |  | 0..* | CodeableConcept | Instructions for follow up Binding: ProcedureFollowUpCodes(SNOMEDCT) (example): Specific follow up required for a procedure e.g. removal of sutures.
note |  | 0..* | Annotation | Additional information about the procedure
focalDevice |  | 0..* | BackboneElement | Manipulated, implanted, or removed device
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
action |  | 0..1 | CodeableConcept | Kind of change to device Binding: ProcedureDeviceActionCodes (preferred): A kind of change that happened to the device during the procedure.
manipulated |  | 1..1 | Reference(Device) | Device that was changed
usedReference |  | 0..* | Reference(Device | Medication | Substance) | Items used during procedure
usedCode |  | 0..* | CodeableConcept | Coded items used during the procedure Binding: FHIRDeviceTypes (example): Codes describing items used during a procedure.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Procedure.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Procedure.status | Base | required | EventStatus | 📍4.0.1 | FHIR Std.
Procedure.statusReason | Base | example | Procedure Not Performed Reason (SNOMED-CT) | 📍4.0.1 | FHIR Std.
Procedure.category | Base | example | Procedure Category Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.code | Base | extensible | Procedure | ⏿1.0.2 | tx.hl7.org.au
Procedure.performer.​function | Base | example | Procedure Performer Role Codes | 📍4.0.1 | FHIR Std.
Procedure.reasonCode | Base | example | Procedure Reason Codes | 📍4.0.1 | FHIR Std.
Procedure.bodySite | Base | extensible | Body Site | ⏿1.0.2 | tx.hl7.org.au
Procedure.outcome | Base | example | Procedure Outcome Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.complication | Base | example | Condition/Problem/Diagnosis Codes | 📍4.0.1 | FHIR Std.
Procedure.followUp | Base | example | Procedure Follow up Codes (SNOMED CT) | 📍4.0.1 | FHIR Std.
Procedure.focalDevice.​action | Base | preferred | Procedure Device Action Codes | 📍4.0.1 | FHIR Std.
Procedure.usedCode | Base | example | FHIR Device Types | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
au-core-pro-01 | error | Procedure.bodySite | If a coded body site is provided, at least one coding shall be from SNOMED CT | `coding.exists() implies coding.where(system='http://snomed.info/sct').exists()`
dom-2 | error | Procedure | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Procedure | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Procedure | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Procedure | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

This structure is derived from AUBaseProcedure

Summary

Mandatory: 1 element
Must-Support: 7 elements

Structures

This structure refers to these other structures:

- AU Core Patient (http://hl7.org.au/fhir/core/StructureDefinition/au-core-patient)
- AU Core Encounter (http://hl7.org.au/fhir/core/StructureDefinition/au-core-encounter)
- AU Core Condition (http://hl7.org.au/fhir/core/StructureDefinition/au-core-condition)
- AU Core Procedure (http://hl7.org.au/fhir/core/StructureDefinition/au-core-procedure)

Maturity: 2

Other representations of profile: CSV, Excel, Schematron

### Notes:

Below is an overview of the mandatory and optional search parameters and combined search parameters. See the AU Core CapabilityStatements for a complete list of supported RESTful interactions for this IG.

FHIR search operations are described here and the syntax used to describe AU Core interactions is defined here.

Any search parameter defined in FHIR may be 'allowed' by the system unless explicitly marked as "SHALL NOT". A few items are marked as MAY in this implementation guide to highlight their potential relevance.

Parameter(s) | Conformance | Type(s) | Requirements (when used alone or in combination)
--- | --- | --- | ---
patient | SHALL | `reference` | The requester SHALL provide at least an id value and MAY provide both the Type and id values. The responder SHALL support both. The requester SHOULD support chained search patient.identifier using IHI, Medicare Number, and DVA Number identifiers as defined in the AU Core Patient profile. The responder SHOULD support chained search patient.identifier using IHI, Medicare Number, and DVA Number identifiers as defined in the AU Core Patient profile.
patient+date | SHALL | `reference`+`date` |
patient+code+date | SHOULD | `reference`+`token`+`date` |
patient+status | SHOULD | `reference`+`token` |
code | MAY | `token` | The requester SHALL provide at least a code value and MAY provide both the system and code values. The responder SHALL support both. The requester SHOULD support `multipleOr`. The responder SHOULD support `multipleOr`.
date | MAY | `date` | A requester SHALL provide a value precise to the second + time offset. A responder SHALL support a value precise to the second + time offset. The requester SHALL support these search comparators `gt`, `lt`, `ge`, `le`. The responder SHALL support these search comparators `gt`, `lt`, `ge`, `le`. The requester SHOULD support `multipleAnd`, and if `multipleAnd` is supported, SHALL support the search comparators `gt`, `lt`, `ge`, `le`. The responder SHOULD support `multipleAnd`, and if `multipleAnd` is supported, SHALL support the search comparators `gt`, `lt`, `ge`, `le`.
status | MAY | `token` | The requester SHALL provide at least a code value and MAY provide both the system and code values. The responder SHALL support both. The requester SHALL support `multipleOr`. The responder SHALL support `multipleOr`.

#### Mandatory Search Parameters

The following search parameters and search parameter combinations SHALL be supported:

1. SHALL support searching using the `patient` search parameter:
   - SHOULD support chained searching of patient canonical identifier `patient.identifier` (e.g. `patient.identifier=[system|][code]`)

   `GET [base]/Procedure?patient={Type/}[id]` or optionally`GET [base]/Procedure?patient.identifier=[system|][code]`

   Example:

   1. GET [base]/Procedure?patient=5678
   2. GET [base]/Procedure?patient.identifier=http://ns.electronichealth.net.au/id/medicare-number|32788511952
   3. GET [base]/Procedure?patient.identifier=http://ns.electronichealth.net.au/id/hi/ihi/1.0|8003608833357361

   Implementation Notes: Fetches a bundle of all Procedure resources for the specified patient (how to search by reference and how to search by token)

2. SHALL support searching using the combination of the `patient` and `date` search parameters:
   - SHOULD support chained searching of patient canonical identifier `patient.identifier` (e.g. `patient.identifier=[system|][code]`)
   - SHALL support these `date` comparators: `gt,lt,ge,le`
   - SHOULD support multipleAnd search on `date` (e.g. `date=[date]&date=[date]]&...`), and if multipleAnd is supported, SHALL support the search comparators `gt,lt,ge,le` `GET [base]/Procedure?patient={Type/}[id]&date={gt|lt|ge|le}[date]{&date={gt|lt|ge|le}[date]&...}`

   Example:

   1. GET [base]/Procedure?patient=5678&date=ge2020-01-01T00:00:00Z
   2. GET [base]/Procedure?patient.identifier=http://example.org/fhir/mrn|12345&date=ge2020-01-01T00:00:00Z

   Implementation Notes: Fetches a bundle of all Procedure resources for the specified patient and date (how to search by reference and how to search by date)

#### Optional Search Parameters

The following search parameters and search parameter combinations SHOULD be supported:

1. SHOULD support searching using the combination of the `patient` and `code` and `date` search parameters:
   - SHOULD support chained searching of patient canonical identifier `patient.identifier` (e.g. `patient.identifier=[system|][code]`)
   - SHOULD support multipleOr search on `code` (e.g. `code={system|}[code],{system|}[code],...`)
   - SHALL support these `date` comparators: `gt,lt,ge,le`
   - SHOULD support multipleAnd search on `date` (e.g. `date=[date]&date=[date]]&...`), and if multipleAnd is supported, SHALL support the search comparators `gt,lt,ge,le`

   `GET [base]/Procedure?patient={Type/}[id]&code={system|}[code]{,{system|}[code],...}&date={gt|lt|ge|le}[date]{&date={gt|lt|ge|le}[date]&...}`

   Example:

   1. GET [base]/Procedure?patient=5678&code=http://snomed.info/sct|26782000,http://snomed.info/sct|36969009&date=ge2020-01-01T00:00:00Z
   2. GET [base]/Procedure?patient.identifier=http://example.org/fhir/mrn|12345&code=http://snomed.info/sct|26782000,http://snomed.info/sct|36969009&date=ge2020-01-01T00:00:00Z

   Implementation Notes: Fetches a bundle of all Procedure resources for the specified patient and date and procedure code(s). SHOULD support search by multiple codes. (how to search by reference and how to search by token and how to search by date)

2. SHOULD support searching using the combination of the `patient` and `status` search parameters:
   - SHOULD support chained searching of patient canonical identifier `patient.identifier` (e.g. `patient.identifier=[system|][code]`)
   - SHALL support multipleOr search on `status` (e.g. `status={system|}[code],{system|}[code],...`)

   `GET [base]/Procedure?patient={Type/}[id]&status={system|}[code]{,{system|}[code],...}`

   Example:

   1. GET [base]/Procedure?patient=5678&status=completed

   Implementation Notes: Fetches a bundle of all Procedure resources for the specified patient and status (how to search by reference and how to search by token)