
Warning: FHIR is a draft specification that is still undergoing development prior to balloting as a full HL7 standard
Welcome to the FHIR Draft for comment ballot + Connectathon Source. This is the "book form" of FHIR, with all the contents in a single document with contiguous section numbers, though with only a few of the extensive examples included.
Unlike the last ballot, the book form section numbers are not used for making ballot comments. They do not align with the section numbers used on the FHIR web site (which are used for the ballot). This will be rectified in a future release.
The FHIR project team is
1: Introduction
1.1: Roadmap
1.2: Resource Definitions
1.3: Formats
1.4: Data Types
1.5: Codes & Terminologies
1.6: Extensibility
2: Implementation
2.1: REST (HTTP)
2.2: Search/Query (§2.2)
2.3: Messaging (§2.3)
2.4: Documents (§2.4)
2.5: Common Usages
2.6: Security (§2.6)
3: Resource List (§3.6)
4: Examples
4.1: Formats (§4.1.1)
4.2: Data types (§4.2.1)
4.3: Extensibility (§4.3.1)
4.4: AdverseReaction (§4.4)
4.5: Alert (§4.5)
4.6: AllergyIntolerance (§4.6)
4.7: CarePlan (§4.7)
4.8: Conformance (§4.8)
4.9: Coverage (§4.9)
4.10: Device (§4.10)
4.11: DeviceCapabilities (§4.11)
4.12: DeviceLog (§4.12)
4.13: DeviceObservation (§4.13)
4.14: DiagnosticOrder (§4.14)
4.15: DiagnosticReport (§4.15)
4.16: Document (§4.16)
4.17: DocumentReference (§4.17)
4.18: FamilyHistory (§4.18)
4.19: Group (§4.19)
4.20: ImagingStudy (§4.20)
4.21: Immunization (§4.21)
4.22: ImmunizationProfile (§4.22)
4.23: List (§4.23)
4.24: Location (§4.24)
4.25: Medication (§4.25)
4.26: MedicationAdministration (§4.26)
4.27: MedicationDispense (§4.27)
4.28: MedicationPrescription (§4.28)
4.29: MedicationStatement (§4.29)
4.30: Message (§4.30)
4.31: Observation (§4.31)
4.32: OperationOutcome (§4.32)
4.33: Order (§4.33)
4.34: OrderResponse (§4.34)
4.35: Organization (§4.35)
4.36: Patient (§4.36)
4.37: Picture (§4.37)
4.38: Practitioner (§4.38)
4.39: Problem (§4.39)
4.40: Procedure (§4.40)
4.41: Profile (§4.41)
4.42: Provenance (§4.42)
4.43: Query (§4.43)
4.44: Questionnaire (§4.44)
4.45: SecurityEvent (§4.45)
4.46: Specimen (§4.46)
4.47: Substance (§4.47)
4.48: ValueSet (§4.48)
4.49: Visit (§4.49)
5: Formal Definitions
5.1: Terminology Bindings (§5.1.1)
5.2: Terminology Code Namespaces (§5.2.1)
5.3: Formats (§5.3.1)
5.4: Data Types (§5.4.1)
5.5: Extensibility (§5.5.1)
5.6: AdverseReaction (§5.6)
5.7: Alert (§5.7)
5.8: AllergyIntolerance (§5.8)
5.9: CarePlan (§5.9)
5.10: Conformance (§5.10)
5.11: Coverage (§5.11)
5.12: Device (§5.12)
5.13: DeviceCapabilities (§5.13)
5.14: DeviceLog (§5.14)
5.15: DeviceObservation (§5.15)
5.16: DiagnosticOrder (§5.16)
5.17: DiagnosticReport (§5.17)
5.18: Document (§5.18)
5.19: DocumentReference (§5.19)
5.20: FamilyHistory (§5.20)
5.21: Group (§5.21)
5.22: ImagingStudy (§5.22)
5.23: Immunization (§5.23)
5.24: ImmunizationProfile (§5.24)
5.25: List (§5.25)
5.26: Location (§5.26)
5.27: Medication (§5.27)
5.28: MedicationAdministration (§5.28)
5.29: MedicationDispense (§5.29)
5.30: MedicationPrescription (§5.30)
5.31: MedicationStatement (§5.31)
5.32: Message (§5.32)
5.33: Observation (§5.33)
5.34: OperationOutcome (§5.34)
5.35: Order (§5.35)
5.36: OrderResponse (§5.36)
5.37: Organization (§5.37)
5.38: Patient (§5.38)
5.39: Picture (§5.39)
5.40: Practitioner (§5.40)
5.41: Problem (§5.41)
5.42: Procedure (§5.42)
5.43: Profile (§5.43)
5.44: Provenance (§5.44)
5.45: Query (§5.45)
5.46: Questionnaire (§5.46)
5.47: SecurityEvent (§5.47)
5.48: Specimen (§5.48)
5.49: Substance (§5.49)
5.50: ValueSet (§5.50)
5.51: Visit (§5.51)
On This Page:

![]() |
Fast Healthcare Interoperability Resources (FHIR™) defines a set of 'resources' to represent health and healthcare administration-related information. These resources express granular clinical and administrative concepts that can be electronically exchanged in order to quickly and effectively solve system interoperability problems in healthcare and related processes. The resources cover the basic elements of healthcare - patients, admissions, diagnostic reports, medications and problem lists - with their typical data elements and also support a range of richer and more complex clinical models. The simple direct definitions of the resources are based on thorough requirements gathering, formal analysis and extensive cross-mapping to other relevant standards. |


FHIR Resource definitions developed by HL7 are derived from the considerable collective experience of the HL7 membership and wide community feedback from the development and application of a spectrum of health care interoperability solutions. However, Resource definitions are generalized to support multiple contexts of use. It is the responsibility of the persons or organizations using these Resources to ensure their use is fit for the particular purpose in which they are used, including validation for clinical and operational use.

FHIR is being balloted as a Draft Standard for Trial Use. A complete description of the rules for DSTU can be found in HL7's Governance and Operations Manual (http://www.hl7.org/documentcenter/public/membership/HL7_Governance_and_Operations_Manual.pdf) . However, the essential points for implementers are covered below:
The purpose of this phase in the approval process is to gain real-world implementation experience based on a vetted, approved version of the specification prior to locking any particular aspect of the specification "in stone". This specification makes a number of statements about what HL7 will and will not do in future versions of this specification. These statements generally concern expectations around forward and backward compatibility and how the specification will evolve. However, these statements only hold once the specification is approved as a "normative" standard - the approval process that will occur subsequent to DSTU. Between different DSTU versions and between the DSTU and final approved normative version of the specification and its resources, these rules around compatibility and other issues will not be enforced. Elements may be renamed, moved, dropped or otherwise changed. Extensions may be promoted to core elements and core elements may be demoted to extensions. Wire syntax and invocation sequences may be changed. Other breaking changes may occur.
Major changes are not expected, however the risk does exist. If they occur, such changes will not be undertaken without good supporting rationale. However, long term implementability and usefulness of the specification will receive greater weight when evaluating change than impact on existing DSTU implementations. DSTU implementers should therefore provide flexibility in their architecture that will allow them to more easily accommodate changes to the specification. They should also consider how their implementations might peacefully coexist with implementations of future DSTU and normative versions that may not be fully compatible.

FHIR plain English license:
Note: Why not use a standard open source license? We'd like to use Creative Commons (http://creativecommons.org/) or a license listed here (http://opensource.org/licenses/alphabetical) , but none of them actually deliver on the plain English intent above in important ways. We aspire to meet these requirements from the Open Source Initiative (http://opensource.org/osr-intro) , though patents are a problem (http://xml.coverpages.org/patents.html) .
While we resolve the questions around the long term license, the following license, adapted from the OMG (http://www.omg.org) (thanks for allowing this), applies:
Subject to all of the terms and conditions below, HL7 hereby grants you a fully-paid up, non-exclusive, non-transferable, perpetual, worldwide license (without the right to sublicense) to use this specification to create and distribute software and special purpose specifications that are based upon this specification and to use, copy and distribute this specification as provided under the United States Copyright Act; provided that:
- both the copyright notice identified above and this permission notice appear on any copies of this specification;
- the use of the specifications is for informational purposes and will not be resold or transferred for commercial purposes;
- no modifications are made to this specification.
This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.
GENERAL USE RESTRICTIONS
Any unauthorized use of this specification may violate copyright laws, trademark laws, and communications regulations and statutes. This document contains information which is protected by copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems--without permission of the copyright owner.
DISCLAIMER OF WARRANTY
WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. HL7 MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL HL7 BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
The entire risk as to the quality and performance of software developed using this specification is borne by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.
CONFORMANCE
HL7 is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software or specifications to use certification marks, trademarks or other special designations to indicate compliance with FHIR. Software developed under the terms of this license may claim compliance or conformance with FHIR if and only if the software compliance is of a nature fully matching the applicable conformance points as stated in the FHIR specification. Software developed only partially matching the applicable compliance points may claim only that the software was based on FHIR, but may not claim compliance or conformance with this specification. In the event that testing suites or processes are implemented or approved by HL7, Inc., software developed using this specification may claim compliance or conformance with the FHIR specification only if the software satisfactorily completes the testing suites.

FHIR is a specification produced by the HL7 Community. Many individuals contribute to the FHIR specification. Of particular note:

These are recognized outstanding tasks that are yet to be completed. There are many tasks still to be done that are not listed here.
Additional open issues can be found throughout the text of the specification and on the FHIR active discussions (http://wiki.hl7.org/index.php?title=Category:Active_FHIR_Discussion) wiki page.

| Version | Major Changes |
|---|---|
| 0.07 (After 2nd Draft For Comment) |
|
These archives only keep the more significant past versions of FHIR, and only the book form, and are provided for purposes of supporting html diff tools. A full archive history of everything is available through the HL7 gForge archives.

Fast Healthcare Interoperability Resources (FHIR) defines a set of resources for use in exchanging information about the healthcare process. Resources are:
In addition to the basic resources, FHIR defines a lightweight implementation framework that supports the use of these resources in RESTful environments, classic message exchanges, human-centric clinical documents and enterprise SOA architectures. Each of these approaches provides its own benefits - FHIR provides the underpinning enablement that makes the choosing one of these painless and enables enterprises to choose their own paradigm without forsaking interoperability with other paradigms.
Though the resources are simple and easy to understand, they are backed by a thorough, global requirements gathering and formal modeling process that ensures that the content of the resources is stable and reliable. The resource contents are mapped to solid underlying ontologies and models using computable languages (including RDF) so that the definitions and contents of the resources can be leveraged by computational analysis and conversion processes.
FHIR also provides an underlying conformance framework and tooling that allows different implementation contexts and enterprises to describe their context and use of resources in formal computable ways and to empower computed interoperability that leverages both the conformance and definitional frameworks.
The combination of the resources and the 3 supporting layers (implementation frameworks, definitional thoroughness, and conformance tooling) frees healthcare data so that it can easily flow to where it needs to be (hospital production systems, mobile clinical systems, cloud based data stores, national health repositories, research databases, etc.) without having to pass through format and semantic inter-conversion hurdles along the way.
Compared to the all the other approaches, FHIR... [-- Obligatory: insert your FHIR FIRE related joke here --].

This specification is structured into 3 parts: the introduction, the implementation section and the resource definitions.
The introduction provides foundational material that is required to understand and use resources:
The implementation section explains how resources are used in various contexts:
The resources section enumerates the resources:
For each resource, the following pages are provided:

The FHIR community meets inside the wider HL7 community (http://hl7.org) and draws on its extensive human resources, institutional memory, previous standards and corporate support. HL7 itself owns FHIR and makes it freely available and the community relies on HL7 provided infrastructure.
The primary resources used by the FHIR community are the HL7 wiki (http://wiki.hl7.org/index.php?title=FHIR) , and the FHIR email list (http://wiki.hl7.org/index.php?title=FHIR_email_list_subscription_instructions) . In addition, the community holds regular face to face meetings as part of the HL7 Working Group meetings (http://www.hl7.org/events/workgroupmeetings.cfm?ref=nav) . The formal governance arrangements that manage FHIR development are documented (where? - todo)
Note that each page contains a direct link to its matching wiki page where input from the wider community is managed. Community input is very welcome - please consider making comments.

The HL7 EHR System Functional Model provides a reference list of functions that may be present in an Electronic Health Record System. While FHIR is an implementation focused on exchange of information in healthcare, this often happens in the context of an EHR. This table briefly describes one way that FHIR can be used to meet the requirements described in the EHR-FM and is provided to help readers of the FHIR specification understand how FHIR can be used. There are many other equally valid ways to implement the EHR-FM and to make use of FHIR.
| EHR Function | FHIR Implementation Notes | |
|---|---|---|
| IN.1 | Security | FHIR defines parts of the security infrastructure, and delegates others to standard web based security frameworks |
| IN.1.1 | Entity Authentication | FHIR assumes that the users are authenticated. OAuth is the preferred mechanism |
| IN.1.2 | Entity Authorization | FHIR doesn't currently provide any resources to describe or manage access-control permissions. By default, underlying web frameworks such as SAML would be used. See the security section (§2.6.4) for a discussion of binding between FHIR and SAML |
| IN.1.3 | Entity Access Control | See above about SAML / OAuth |
| IN.1.4 | Patient Access Management | FHIR does not - yet? - include functionality related to this requirement |
| IN.1.5 | Non-Repudiation | The provenance resource (§3.37) tracks the timestamps, actors, digital signatures associated with resources |
| IN.1.6 | Secure Data Exchange | TLS (https:) should be used for all production exchange of data. All conformant FHIR RESTful implementations must be able to use https |
| IN.1.7 | Secure Data Routing | FHIR allows for brokers and various forms of messaging that support assured destinations and delivery (also see IN.2.2 below) |
| IN.1.8 | Information Attestation | See the provenance resource (§3.37) |
| IN.1.9 | Patient Privacy and Confidentiality | FHIR does not include functionality related to this requirement, though implementations would be expected to provide this |
| IN.2 | Health Record Information and Management | This is the core focus of the FHIR specification |
| IN.2.1 | Data Retention, Availability and Destruction | A FHIR RESTful server gives precise and fine-grained control of retention, availability and destruction of resources, all clearly described by the conformance statement |
| IN.2.2 | Auditable Records | FHIR provides the SecurityEvent (§3.39) resource for auditable records. |
| IN.2.3 | Synchronization | FHIR supports synchronization using standard web publication/subscription methods via Bundles (§1.2.3) (i.e. Atom feeds). Atom-based pub/sub may be push or pull based, and can include all resources of a particular type, or selected subsets of the resources. In addition, groups of resources can be exchanged in bundles, keeping a set of related resources in synchronization |
| IN.2.4 | Extraction of Health Record Information | FHIR does not provide report formats (yet?), but does provide extensive search and retrieval functions to assist with building such reports |
| IN.2.5 | Store and Manage Health Record Information | A FHIR RESTful server can store and manage health information persistently - see below for further information. |
| IN.2.5.1/2 | Manage Structured and Unstructured Health Record Information | The dual contents of FHIR resources - structured data and XHTML narrative - provide seamless support for dealing with a mix of structured and unstructured information |
| IN.3 | Registry and Directory Services | The FHIR Administration resources provide a naturally registry based access to patients, providers, etc |
| IN.4 | Standard Terminologies and Terminology Services | FHIR encourages the use of standard terminologies whereever possible, and provides full support for their use through a variety of terminology related data types. FHIR does not define a terminology infrasturcture or service, but does define the Profile (§3.36) and ValueSet (§3.42) resources to describe how terminology is used in a FHIR context |
| IN.5 | Standards-based Interoperability | FHIR is a definition of a standard on which to base interoperability |
| IN.5.1 | Interchange Standards | This is the core focus of FHIR. See below for discussion of interaction modes |
| IN.5.2 | Interchange Standards Versioning and Maintenance | FHIR version maintenance is described here (§1.2.7) |
| IN.5.3 | Standards-based Application Integration | FHIR enables simple integration through use of an easy to understand, use and debug web based infrastructure. The same framework used within an EHR for persistence can also offer a simple way to implement exchange |
| IN.5.4 | Interchange Agreements | The FHIR Conformance Statement and Resource Profile resources provide a registry based infrastructure for individual trading partner agreements, as well as for community based ones |
| IN.6 | Business Rules Management | FHIR does not address this requirement at this time |
| IN.7 | Workflow Management | FHIR does not address this requirement at this time, though the resources and services exist to support this functionality |
The EHR functional model describes several modes for interaction between systems. Each of these can be implemented in several different ways using FHIR
| Interaction Modes | FHIR Options |
|---|---|
| Unsolicited Notifications e.g. a patient has arrived for a clinic appointment |
|
| Query/Response e.g., Is Adam Everyman known to the system? Yes, MRN is 12345678. |
|
| Service Request and Response e.g., Laboratory Order for Fasting Blood Sugar and a response containing the results of the test. | Could be supported either through Messaging or SOA solutions. Request/Response support is not yet defined |
| Information Interchange between organizations (e.g. in a RHIO, or in a National Health System) |
|
| Structured / Unstructured clinical document, e.g., dictated surgical note | See the Documents (§2.4) |
The combination of a properly secured and managed FHIR server, along with enforced use of the SecurityEvent (§3.39) and Provenance (§3.37) resources ensures that the core record management functions defined in the EHR-FM are met:
Additional functionality not defined (yet?) in FHIR is required to ensure non-repudation, access control, and consent tracking.
On This Page:

A resource is an entity that:
Resources have multiple representations. A resource is valid if it meets that above rules, and is represented in either XML or JSON according to the rules defined in this specification. Other representations are allowed, but are not described by this specification.
This specification defines a series of different resource types that can be used to exchange and/or store data in order to solve a wide range of healthcare related problems, both clinical and administrative. In addition, this specification defines several different ways of exchanging the resources.

All resources have the following aspects:
The contents of the base resource from which all other resources derive are:
<[Name] xmlns="http://hl7.org/fhir"> <extension><!-- 0..* Extension See Extensions --></extension> <language value="[code]"/><!-- 0..1 Human language of the content (BCP-47) --> <text><!-- 1..1 Narrative Text summary of resource, for human interpretation --></text> <contained><!-- 0..* Resource Contained Resources --></contained> <!-- Defined Data Elements for Resource --> </[Name]>
These elements must always appear in this order. These basic elements shared by all resources come first in order to support consistent definitions for schema and UML derived code.
The optional language element specifies the base language of the resource using the codes defined in BCP 47 (http://tools.ietf.org/html/bcp47) . Note that not all the content of the resource has to be in the language. If a language is specified, it should also be specified on the Narrative Text.
The language element is provided to support indexing and accessibility (e.g. text-to-speech use the language tag). The html language tag in the narrative applies is used when processing the narrative. The language tag on the resource is provided for use to specify the language of alternate presentations generated from the data in the resource

The metadata properties are key aspects of the resource and how it behaves. For implementation reasons, these are represented outside the resource:
| Metadata Item | Type | Usage |
|---|---|---|
| Logical Id | id | The identity of the resource. Resources always have a known identity and it is constant for the entire lifetime of the resource. Resource identification is discussed further below (§1.2.6) |
| Version Id | id | Changed each time the content of the resource changes.
Can be referenced in a resource reference (see below). Can be used to ensure that updates are based on the latest version of the resource.
The version can be globally unique, or scoped by the Logical Id. Since version ids must be unique within the scope of a single resource, they are generally either a serially incrementing id scoped by the logical id, or a uuid, though neither of these approaches is required |
| Last Modified Date | instant | Changed each time the content of the resource changes. Can be used by a system or a human to judge the currency of the resource content. |
In any environment where the resources are used, the technical details of how these metadata elements are represented will need to be resolved. For further details, see Implementation Details, which also contains a discussion of how resource identity is maintained.
Resource ids are case sensitive. Ids are always opaque, and systems need not and should not attempt to determine their internal structure. However the id is represented, it must always be represented in the same way in resource references and URLs. Ids can be up to 36 characters long, and contain any combination of ASCII letters, numerals, "-" and ".".

In addition to the basic contents of Resources, and their metadata, each resource can be labelled with one or more "Tags". These tags can be used to associate additional operational information with the Resources, including defining security labels used in access control policies, workflow management, and other uses. Tags are attached to resources, and and exchanged with the resource. Tags are never used to keep information that needs to be understood when interpreting the content of a resource; their function is limited to finding and controlling access to the resource.
Each tag has two properties:
| Uri : uri | A term that defines the meaning of the tag |
| Label : string | (Optional) A human-readable label for the tag for use when displaying in end-user applications |
The Uri may be a reference to a healthcare vocbulary, including ones defined in this specification, such as the basic security label set (§2.6.7), or vocabularies such as those defined by HL7 (v2 and v3/CDA), Loinc, or Snomed-CT. Alternatively, the URI may be one defined by the implementation in the local context. Literal references that refer directly to a description of the tag (typically just an HTML page) are preferred over symbolic references but this is not required.
If the end user application provides functionality to the user that allows the user to affix arbitrary text tags to the resource for their own purpose, the application can automatically construct a Uri by appending the mime encoding of the Label to the base URL "http://hl7.org/fhir/tags/text/". When applications processing resources see this base URL, they can automatically know that this is a pure text label with no formal meaning.

One common operation performed with resources is to gather a collection of resources into a single instance. In FHIR this is referred to as "bundling" the resources together. The resource bundle is not just a list of references to resources, but includes their whole content. These resource bundles are useful for a variety of different reasons, including:
Conceptually, a bundle has an identifier (url) and a date updated, and a list of resources. For each resource in the list, the bundle has the resource and also it's metadata as listed above. Each entry in the bundle retains it's original identifier. This means that applications reading the bundle should always look for a resource by it's identity (after converting relative URLs absolute URL) in the bundle first before trying to access it by it's URL.

The contents of the resource and the formats used to represent it must conform to the rules described in this specification. Because of it's general nature and wide applicability, the rules made in this specification are generally loose compared to the rules suitable for particular use cases. This specification provides a conformance layer that implementers and national/regional programs can use to provide a computable statement about how the resources and their exchange paradigms are used to solve particular use cases. This conformance layer is delivered through use of the Conformance (§3.5) and Profile (§3.36) resources.
The specification also provides a number of technical resources that can assist with enforcing conformance to this base specification:
Note that none of these are able to check complete conformance to this specification.
The data elements defined resources and data types have 4 properties that are directly related to conformance: Cardinality, Is-Modifier, Must-Support, and Cardinality. These interact to place conformance requirements on implementations.

The cardinality of an element is to upper and limit of the number of elements present in the actual resource. When present, elements cannot be empty - they must have either a value attribute, child elements, or extensions. This specification only defines the following cardinalities: 0..1, 0..*, 1..1, and 1..*. Profiles that describe specific use cases may use other cardinalities within the limits defined by the resources.
In this specification, very few elements have a minimum cardinality of 1. Resources are used in many contexts, often quite removed from their primary use case, where information is sometimes very incomplete. For this reason, the only elements that have a minimum cardinality of 1 are those where they are necessary to basic understanding of the element that contains them. The minimum cardinalities should not be taken as a guide to which elements are expected to be present in any particular use of the resource.

Is-Modifier is a boolean property that is assigned when an element is defined, either as part of the base resource contents in this specification, or when profiles declare extensions. An element is labelled "Is-Modifier = true" if the value it contains may change the interpretation of other elements or the resource as a whole. Typical examples of elements that are labelled "Is-Modifier" are elements such as "status", "active", or "certainty". The value of Is-Modifier cannot be changed when element usage is described in a Resource Profile (§3.36). When an element is labelled as Is-Modifier, the documentation must be clear about why it is a modifier, and/or which elements the element may modify.
Generally, elements labelled "Is-Modifier = true" also have a minimum cardinality of 1, to introduce certainty in their handling. If the value of such an element is not explicit in the instance, or known by the context, the resource cannot be safely understood. Irrespective of the minimum cardinality, implementations producing resources SHALL ensure that appropriate values for mustUnderstand elements are provided. Is-Modifier elements SHALL be represented in the narrative summary of the resource.
Implementations processing resources SHALL understand the impact of the element when they process the resource. Implementations are not required to "support" the element in any meaningful way - they amy achieve this by rejecting instances that contain values outside those they support (for instance, an application may refuse to accept observations with a reliability != "ok"). Alternatively, implementations may be able to be sure, due to their implementation environment, that such values will never occur. However applications SHOULD always check the value irrespective of this.
Servers and background processes that move resources around are not "processing the data of the resource", and these applications are not required to check for unknown extensions. Any process that copies data out of a resource for use in another context (display to a human, decision support, exchange in another format that doesn't support extensions) is processing the data.

Labelling an element Must-Support means that implementations that produce or consume resources must provide "support" for the element in some meaningful way. Exactly what this means is impossible to describe or clarify as part of the FHIR specification.
For this reason, the specification itself never labels any elements as must-support. This is done in Resource Profiles (§3.36), where the profile labels an element as mustSupport=true. When a profile does this, it must also make clear exactly what kind of "support" is required, as this can mean many things.
Note that an element that has the property IsModifier is not necessarily a "key" element (e.g. one of the important elements to make use of the resource), nor is it automatically mustSupport - however both of these things are more likely to be true for IsModifier elements than for other elements.

All elements defined in FHIR have a cardinality as part of their definition - a minimum number of required appearances, and a maximum number allowed. This number specifies the number of times the element may appear in the instance. In the specification, the minimum number is always 0 or 1, and the maximum number is always 1 or *, meaning no limit. Profiles may use any whole number for both minimum and maximum cardinality, as long as minimum <= maximum.
For elements that have cardinality > 1, the order in which they appear may have meaning. Unless the element definition (either in this specification or the extension) defines a meaning to the order explicitly, the meaning of the order is not defined, and implementations are allowed to reorder the elements. Note that you cannot define a meaning for the order of the elements in a profile. When there is not definition of the meaning of the order, implementations that need to choose a single element from a list of elements for some use must do so based on the semantics of the content of the elements that repeats. Profiles and Implementation guides may often make rules about this selection process.

The defined elements in a resource includes many references to other resources. The resources combine to build a web of information about healthcare.
References are always defined in one particular direction - from one resource (source) to another (target). The corresponding reverse relationship from the target to the source exists in a logical sense, but is not represented explicitly in the resource. Navigating these reverse relationships requires some external infrastructure to track the relationship between resources.
Because resources are processed independently, relationships are not considered to be transitive. For example, if a Problem (§3.34) resource references a particular Patient (§3.31) as it's subject, and it links to a Procedure (§3.35) resource as it's cause, there is no automatic rule or implication that the procedure has the same patient as it's subject. Instead, the subject of the procedure must be established directly in the procedure itself. Another way to state this is that the context of the subject is not "inherited" and it does not "conduct" along the relationship to procedure. The only exception to this in the case of contained resources (see below). Note that in practice, the relationships do need to describe a logical and coherent record.
In a resource, references are represented with a type, a reference, and a text description. The key property of the reference is the reference - resources are identified and address by their URL. The actual reference looks like this (see "XML Format" (§1.3.1.1) for details of the way resource contents are described):
<[name] xmlns="http://hl7.org/fhir"> <type value="[code]"/><!-- 0..1 Resource Type --> <reference value="[string]"/><!-- 0..1 Relative, internal or absolute URL reference --> <display value="[string]"/><!-- 0..1 Text alternative for the resource --> </[name]>
| Path | Definition | Reference |
|---|---|---|
| ResourceReference.type | One of the resource types defined as part of FHIR | http://hl7.org/fhir/resource-types (Known Broken Link - needs to be resolved) |
Notes:
Constraints
A relative reference to the patient (§3.31) "034AB16" in an element named "context" on a FHIR RESTful server:
<context>
<type value="Patient" />
<reference value="patient/@034AB16" />
</context>
An absolute reference to a resource profile (§3.36) in an element named "profile":
<profile>
<type value="Profile" />
<reference value="http://fhir.hl7.org/svc/profile/@c8973a22-2b5b-4e76-9c66-00639c99e61b" />
</profile>
Note that HL7 has not yet actually created a profile registry, nor decided on a URL for it.
A short display text that provides a human readable identification of the resource may be provided:
<custodian>
<type value="Organization" />
<reference value="organization/@123" />
<display value="HL7, Inc" />
</custodian>
This text can be used by a system that is unable to resolve the reference to an actual resource.

In some circumstances, the content referred to in the resource reference does not have an independent existence apart from the resource that contains it - it cannot be identified independently, and nor can it have it's own independent transaction scope. Typically, such circumstances arise where the resource is being assembled by a secondary user of the source data, such as a middleware engine. If the data available when the resource is constructed does not include record keys or absolute identification information, then a properly identified resource cannot be assembled, and even if an arbitrary identification was associated with it, the resource could never be the subject of a transaction outside the context of the resource that refers to it.
In these circumstances, the resource is placed directly in line in the reference. This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again.
An example of a contained resource:
<Document xmlns="http://hl7.org/fhir">
<extension>...</extension>
<text>...</text>
<contained>
<Organization id="org1">
<!-- whatever information is available -->
</Organization>
</contained>
<information>
<!-- other attributes -->
<custodian>
<type value="Organization" />
<reference value="#org1" />
</custodian>
<!-- other attributes -->
<information>
</Document>
The same example in JSON:
{ "Document" : {
"extension" : { ... },
"text" : { .. },
"contained: [
{"Organization" : {
"_id" : "org1",
.. whatever information is available ...
}}
]
"information: {
... other attributes ...
"custodian" : {
"type" : { "value" : "Organization" },
"url" : { "value" : "#org1" }
}
... other attributes ...
}
}}
The type and url are always required, even though somewhat redundant in this case, to ensure that a single approach to resolving resource references can be used - simply be resolving the URL, and accessing accordingly.
Some notes about use and interpretation of contained resources:

The following rules will apply once the specification becomes a full normative specification. These rules ensure that implementations may process the content of the resources safely while exchanging data between applications using different versions of FHIR. However during the period of trial use of the specification, HL7 may make changes outside the limitations described here in response to discovered issues in the specification. Applications may wish to use resource tags (§1.2.2.1) to help manage this during the period of trial use.
There is no explicit version marker in the resource content. Once normative, subsequent versions of this specification may introduce new elements and/or content at any point in the resource contents, but the path and meaning of existing data elements will not be changed. Any value set or code list may be revised to include additional cods
Each binding to a value set or code system indicates whether the value list automatically grows as new codes are defined, whether the list may be extended in future versions of the specification, or whether the list cannot be changed at all in future versions.
The conformance layer (Conformance (§3.5) and Profile (§3.36)) have mandatory properties declaring the FHIR specification version, and these may be used to determine which version of FHIR an implementation is using.
In a typical scenario, mixed versions may need to exist, so applications SHOULD ignore elements that they do not recognize unless they are extensions with a mustUnderstand element with value="true". However, in a healthcare context, many application vendors are unwilling to consider this approach because of concerns about clinical risk or technical limitations in their software (i.e. schema based processing). Applications are not required to ignore unknown elements, but must declare whether they will do so in their conformance statements using the acceptUnknown element.
Additional discussion on interversioning issues can be found here: http://wiki.hl7.org/index.php?title=FHIR_interversion_compatibility.
On This Page:

This page documents how the content of the resources are described, and how they are represented in XML and JSON.
The resources are described in two different ways: a UML diagram that summarises the content, and an pseudo-XML syntax that provides a visual sense of what the end resource instances will look like in XML. Note that although the description of the resources is based on their XML representation, other representations such as JSON are equally valid.

The XML syntax uses the following notation:
<name xmlns="http://hl7.org/fhir" (attrA="value")>
<nameA><!-- 1..1 type description of content --><nameA>
<nameB[x]><!-- 0..1 type1|type1 description --></nameB>
<nameC> <!-- 1..* -->
<nameD ><!-- 1..1 type>Relevant records --></nameD>
</nameC>
<name>
Notes:
When represented as XML, resources may be validated by schema and schemas are provided, but operational systems are not required to do so (though the XML must always be valid against this specification and the schema and Schematron). In addition to the simple XML description, W3C Schema, UML models, and other definitional models are provided that may be a useful aid for system implementation.
The UML diagrams represent the same content as a series of classes that represent XML elements. Elements are labeled with an "R" for resource, or a "D" for a data type. Classes without a label are normal classes that are just part of the content of a resource or a data type.
Where an element can have a choice of data types, these are represented in the choice using the same syntax as the xml syntax. Due to way UML works, the actual order of the elements cannot be determined from the diagram, nor is it visible whether a proprerty is an element or an attribute.
These UML diagrams are intended to communicate the contents of the resource to a human. An alternate set of diagrams that is more suited to code generation is available as part of the eCore reference platform (§2.6.8.1).

Every resource SHALL include a human readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.
The narrative for a resource is allowed to contain additional information that is not in the structured data, including human-edited content. Such additional information must be in the scope of the definition of the resource. In small, closed trading partner environments, there may be no need for a narrative text. In such cases, implementations are allowed to populate the narrative with text equivalent to "[ResourceName] - No human readable text provided for this resource" in an appropriate language. Implementers should note that small, closed trading partner environments are very likely to open up during the lifetime of the resources they define.
The narrative is an xhtml fragment that also includes images if appropriate:
<[name] xmlns="http://hl7.org/fhir"> <status value="[code]"/><!-- 1..1 generated | extensions | additional --> <div xmlns="http://www.w3.org/1999/xhtml"< <!-- Limited xhtml content< --> </div> <blob> <!-- 0..* Binary content referenced in xhtml --> <mimeType value="[code]"/><!-- 1..1 Mime type of binary attachment (http://www.rfc-editor.org/bcp/bcp13.txt.htm) --> <content value="[base64Binary]"/><!-- 1..1 base64 data for attachment --> </blob> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Narrative.status | The status of a resource narrative | http://hl7.org/fhir/narrative-status |
| Narrative.blob.mimeType | The mime type of an attachment | BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049) (http://www.rfc-editor.org/bcp/bcp13.txt) |
The contents of the div element are an XHTML fragment containing only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes. The XHTML content must not contain a head, a body element, external stylesheet references, scripts, forms, base/link/xlink, frames, iframes, and objects. The div element must have some non-whitespace content.
<narrative>
<div xmlns="http://www.w3.org/1999/xhtml">This is a simple
example with only plain text</div>
</narrative>
<narrative>
<div xmlns="http://www.w3.org/1999/xhtml">
<p>
This is an <i>example</i> with some <b>xhtml</b> formatting.
</p>
</div>
</narrative>
The inner portion of the div content is often used for the innerHTML property in a browser. In order to simplify processing, the narrative SHALL be encoded so that the character content between the first ">" and the last "<" characters is the content of the <div> element.
Note that the XHTML is contained in general XML, and so there is no support for HTML entities like or © etc. Unicode characters should be used instead. Note that   substitutes for .
The narrative content should be in the language of the resource (Known Broken Link - needs to be resolved), but there is no reason to expect that HTML type tooling would understand the resource language element. For this reason, a lang attribute on the <div> should also be used (and see the note in the HTML 5 specification about use of language (http://www.w3.org/html/wg/drafts/html/master/dom.html#the-lang-and-xml:lang-attributes) ).
The image source references may be a local reference within the resource:
<img src="#a5"/>
This is an internal reference to an id attribute on an element in the same resource, either in the binary attachments on the text element directly, or an element of type "Attachment (§1.4.3)".
<narrative>
<div xmlns="http://www.w3.org/1999/xhtml">
<p>
<img src="#a1"/>.
</p>
</div>
<blob id="a1">
<mimeType value="image/png" />
<content value="MEKH....SD/Z" />
</blob>
</narrative>
Since the presence of images that are not part of the resource is not guaranteed, images that are an essential part of the narrative should always be embedded like this.

The XHTML fragment in the narrative may be styled using CSS in the normal fashion, using a mix of classes, ids and in-line style elements. Specific CSS stylesheets will be applied to the XHTML when it is extracted from the resource to be displayed to a human to create the presentation desired in the context of use. Authors may fix the following styling aspects of the content:
These style properties are specified in-line using the style attribute. If an equivalent html element exists, such as "i", or "pre", it may be used instead, but note that some of these elements are deprecated in HTML 4 and must not be used in Narrative XHTML (including "u", and "font").
Rendering systems are required to respect any of these rendering styles when they are specified in the XHTML, though appropriate interpretation is allowed (e.g. a low-contrast display for dark room contexts or a high-contrast display for the visually impaired may adjust colors accordingly).
Authors are allowed to specify additional styles and style properties as specified in the CSS specification, but these are extensions to this specification and renderers are not required to honor them. Note, however, the additional rules around styling that apply in the context of documents (§2.4.6.1).
Note: styles in resources can make use of the styles defined in the standard FHIR stylesheet, which lives here: http://hl7.org/implement/standards/fhir/fhir.css. Since this stylesheet is not referred to directly, rendering systems may take their own copy if they wish. Authoring systems should not depend on these styles being supported in order to render clinical content correctly without trading partner agreement.

There are 4 cases where elements inside a resource reference each other:
These references are done using an id/idref based approach, where a source element indicates that it has the same content as the target element. The target element has an attribute "id" which must have a unique value within the resource with regard to any other id attributes. The "id" attribute is not in any namespace. The source element reference must refer to an attribute in the same resource (or, for a CodeableConcept, inside the same datatype).
<example>
<target id="a1">
<child>...</child>
</target>
<-- other stuff -->
<source idref="a1">
</example>
In a single resource, this works like xml:id/idref, but there is an important difference: the uniqueness and resolution scope of these id references is within the resource that contains them. If multiple resources are combined into a single piece of XML, such as an atom feed (§1.3.8.1), duplicate values may occur between resources. This must be managed by applications reading the resources.
Note that all references between the xhtml elements and the data elements must be understood to establish a "derived from" relationship, where the derived content (whether text or data) refers to the source content. Note that this means some references may be forward references (references to elements defined later in the instance).

Though the representation of FHIR resources is described in XML, FHIR also defines a JSON representation of the resources. The JSON format for the resources follows the standard XML format very closely to make interconversion easy, and so that XPath queries can easily be mapped to query the JSON structures. The formal mime type for this format is application/fhir+json.
Clients are free to choose whether to implement in XML or JSON. Servers must support XML, and can choose to support JSON. Note that systems must declare which format(s) they support. Also, the reference implementations (§2.6.8.1) include bi-direction conversion functionality between the two formats.
The JSON representation is described relative to the XML representation:
There are differences too:
These differences - particularly the repeating element one, which cannot be avoided - mean that generic XML --> JSON converters are not able to perform correctly. The reference platforms (§2.6.8.1) provide XML <--> JSON conversion functionality that accommodates these FHIR-specific characteristics.
FHIR elements with primitive values are represented as a JSON object of the same name with a the value attribute of the element in a "value" property. Except for integer and boolean, native JSON types are not used and values are rendered as strings, to guarantee equivalence of the serialized representation between XML and JSON.
<date value="1972-11-30"/> <deceased value="false" /> <count value="23" />
is represented in JSON as
"date" : { value: "1972-11-30" }
"deceased" : { value: false }
"count" : { value: 23 }
All XML elements can have an 'id' attribute, which is represented in JSON as a property of name "_id":
<dob id="314159" value="1972-11-30" />
is represented in JSON as:
"dob": {
"_id": "314159",
"value": "1972-11-30"
}
Repeating elements are rendered within a JSON array with the name of the element, so a repeating <dob> element in XML
<dob value="2011-11-30" /> <dob id="314159" value="1972-11-30" />
is represented in JSON like so:
"dob": [
{ "value": "2011-11-30" },
{ "_id": "314159", "value": "1972-11-30" }
]
Resources, elements, and datatypes (types that contain named elements of other types) are represented using a JSON object, containing a member for each element in the datatype. Composites can have id attributes, which are converted to JSON members values, in the same manner as described for primitives. It comes before all other members. For example:
<Person>
<name>
<use value="official" />
<given value="Karen" />
<family id="n1" value="Van" />
</name>
<text>
<status value="generated" />
<div xmlns="http://www.w3.org/1999/xhtml">...</div>
</text>
</Person>
is represented in JSON as:
{
"Person" : {
"name" : [{
"use" : { "value" : "official" },
"given" : [{
"value" : "Karen"
}],
"family" : [{
"_id" : "n1",
"value" : "van"
}]
}],
"text" : {
"status" : { "value" : "generated" },
"div" : "<div xmlns='http://www.w3.org/1999/xhtml'>...</div>"
}
}
Things to note here are:

A bundle is a collection of resources in a single document (§1.2.3).

In XML bundles are represented using an Atom format (http://tools.ietf.org/html/rfc4287), following this template:
<feed xmlns="http://www.w3.org/2005/Atom"> <title><!-- 1..1 string Text statement of purpose --></title> <updated><!-- 1..1 instant When the bundle was built --></updated> <id><!-- 1..1 uri Unique uri for this bundle --></id> <os:totalResults xmlns:os="http://a9.com/-/spec/opensearch/1.1/"><!-- 0..1 integer Paging: the total number of results --></os:totalResults> <link rel="self" href="[building application url (Service base on REST)]"><!-- 0..1 --> <link rel="first" href="[paging: url for first page of result]"><!-- 0..1 --> <link rel="previous" href="[paging: url for previous page of result]"><!-- 0..1 --> <link rel="next" href="[paging: url for next page of result]"><!-- 0..1 --> <link rel="last" href="[paging: url for last page of result]"><!-- 0..1 --> <author><!-- 0..1 Who created resource? --> <name><!-- 1..1 string Name of Human or Device that authored the resource --></name> <uri><!-- 0..1 uri Link to the resource for the author --></uri> </author> <entry><!-- Zero+ --> <title><!-- 1..1 string Text summary of resource --></title> <link rel="self" href="Version Specific reference to Resource"><!-- 0..1 --></link> <id><!-- 1..1 uri Logical Id (uri) for this resource --></id> <updated><!-- 1..1 instant Last Updated for resource --></updated> <published><!-- 0..1 instant Time resource copied into the feed --></published> <author><!-- 0..1 Who created resource? --> <name><!-- 1..1 string Name of Human or Device that authored the resource --></name> <uri><!-- 0..1 uri Link to the resource for the author --></uri> </author> <!-- Tags affixed to the resource (0..*): --> <category term="[Tag Uri]" label="[Tag Label]" scheme="http://hl7.org/fhir/tag"> <content type="text/xml"><!-- 1..1 --> <[ResourceName] xmlns="http://hl7.org/fhir"> <!-- Content for the resource --> </[ResourceName]> </content> <summary type="xhtml"><!-- 0..1 --> <div xmlns="http://www.w3.org/1999/xhtml"><!-- Narrative from resource --></div> </summary> </entry> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <!-- 0..1 Enveloped Digital Signature (see Atom section 5.1) --> </Signature> </feed>


When returning a set of resources or versions of a resource, an entry might indicate that the entry has been deleted. Deleted resources are represented in an atom feed as defined by rfc6721.txt (http://www.rfc-editor.org/rfc/rfc6721.txt) :
<feed xmlns="http://www.w3.org/2005/Atom"> ... feed elements and other entries ... <at:deleted-entry xmlns:at="http://purl.org/atompub/tombstones/1.0" ref="[Logical Id for deleted resource]" when="instant [when deleted]"> <link rel="self" href="[Version Specific reference to Resource]"><!-- 0..1 --></link> </at:deleted-entry> ... other entries ...
A deleted resource returns a 410 error if it is accessed through the RESTful interface.

Readers of the resources bundles should always look through the resources in the atom feed when a resource reference is encountered. The resource reference may have the resource type and a relative url, which is the id of the target, like this:
<institution>
<type value="Organization" />
<reference value="organization/@23" />
</institution>
A reader trying to find the resource this institution element identifies should always look through the entries in the atom feed prior to looking anywhere else for the institution. If the feed.id for the resource that contains the link above is http://example.org/, then the absolute URL is http://example.org/organization/@23. If that organization is in the feed, it would look like this:
.. feed ..
<entry>
..
<id>http://example.org/organization/@23<id>
..
<content type="text/xml">
<Organization xmlns="http://hl7.org/fhir">
<!-- Content for the resource -->
</Organization>
</content>
... feed ...
It would also be possible to locate the resource by an absolute url. In this case, the id element contains a direct reference to the location of the resource:
<institution>
<type value="Organization" />
<reference value="http://example.org/organization/@23" />
</institution>
If there is no resource in the atom feed with an appropriate URL, then the application may try accessing the provided URL directly or use some other implementation-specific method for resolving how to find the resource.


In JSON bundles are represented using a JSON format that is tailored to the specific needs for bundles. Each element in the Xml feed definition has a JSON corresponding JSON object member with the same name. Here is an example feed returning search results for a person query:
{
"feed" : {
"title" : "Search result",
"updated" : "2012-09-20T12:04:45.6787909+00:00",
"id" : "urn:uuid:50ea3e5e-b6a7-4f55-956c-caef491bbc08",
"link" : [{
"rel" : "self",
"href" : "http://ip-0a7a5abe:16287/fhir/person?format=json"
}],
"category" : [{
"term" : "[Tag Uri]",
"label" : "[Tag Label]",
"scheme" : "http://hl7.org/fhir/tag"
}],
"totalResults" : 12,
"entry" : [{
"title" : "Resource of type Person, with id = 1 and version = 1",
"link" : [{
"rel" : "self",
"href" : "http://fhir.furore.com/fhir/person/@1/history/@1"
}],
"id" : "http://fhir.furore.com/fhir/person/@1",
"updated" : "2012-05-29T23:45:32+00:00",
"published" : "2012-09-20T12:04:47.3012429+00:00",
"author" : [{
"name" : "Grahame Grieve / HL7 publishing committee"
}],
"category" : [{
"term" : "[Tag Uri]",
"label" : "[Tag Label]",
"scheme" : "http://hl7.org/fhir/tag"
}],
"content" : {
"Person" : { ...person content in JSON... }
},
"summary" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">(text summary)</div>",
},
... other entries ....
]
}
}
Note that property names for elements that can repeat are not pluralized for consistency of overall approach. The mime type for a json bundle is also application/fhir+json.

When returning a set of versions for a resource, a version might indicate a deletion. While the XML format follows RFC 6721 (http://www.rfc-editor.org/rfc/rfc6721.txt) , the JSON format needs to use an entry item to retain the logical order of entries:
.. feed ..
"entry" : [
... other entries ....,
{
"deleted" : "2012-05-29T23:45:32+00:00",
"id" : "http://fhir.furore.com/fhir/person/@1",
"link" : [{
"rel" : "self",
"href" : "http://fhir.furore.com/fhir/person/@1/history/@1"
}],
}, ... other entries ....
]
... feed ...
The entry is known to be deleted because a date of deletion is given. An id must be provided, and a link may be provided.

There are situations where it is useful or required to handle pure binary content as resources. Typically, this is when the binary content is referred to from other FHIR Resources. The resource can contain any content, whether text, image, pdf, zip archive, etc. These resources are served in their native form on the rest interface (§2.1.17), but can also be represented in XML or JSON, such as when including these resources in a bundle (used when it is convenient to include these in the feed directly rather than leaving them by reference).
When binary resources is represented as XML, it is represented as base64 encoded content along with a content-type, which is the mime-type as it would be specified in HTTP:
<Binary xmlns="http://hl7.org/fhir" contentType="[mime type]"> [Base64 Content] </Binary>
In JSON, the representation would look like this:
"Binary" : {
"contentType" : "[mime type]",
"content" : "[base64 of data]"
}
Binary resources can also be embedded as contained resources (§1.2.6.2). If there's a desire to capture metadata about a binary object, an appropriate resource type must be used such as DocumentReference (§3.13) or Picture (§3.32).

This specification provides schema definitions for all of the content models described here. The base schema is called "fhir-base.xsd" and defines all of the datatypes and also the base infrastructure types described on this page. In addition, there is a schema for each resource and a common schema fhir-all.xsd that includes all the resource schemas. A customized atom schema fhir-atom.xsd is provided for validating bundles (§1.3.8.1).
In addition to the w3c schema files, this specification also provides Schematron files that enforce the various constraints defined for the datatypes and resources. These are packaged as files for each resource as well as a combined fhir-atom.sch file that incorporates the rules for all resources.
XML that is exchanged must be valid against the w3c schema and Schematron, nor is being valid against the schema and Schematron sufficient to be a conformant instance. (This specification makes several rules that cannot be checked by either mechanism.) Exchanged content must not specify the schema or even the schema instance namespace in the resource itself.
The FHIR specification defines a set of types that are used for the resource elements. There are two categories of data type: simple / primitive types, imported from XML schema, and complex types, which are re-usable clusters of elements
The data types are available as a W3C Schema.

The following table summarizes the primitive types and their simple restrictions that are used in throughout this specification. These types are those defined in the W3C Schema (1.0) specification part 2 (http://www.w3.org/TR/xmlschema-2/) , with additional constraints marked in bold.
| Primitive Types | ||
| FHIR Name | Schema type | Description |
|---|---|---|
| boolean | xs:boolean | Values can be either true or false (0 and 1 are not valid values) |
| integer | xs:int | A signed 32-bit integer (for larger values, use decimal) |
| decimal | xs:decimal | A rational number. Note: for implementations, do not use a IEEE type floating point type, instead use something that works like a true decimal, with inbuilt precision (e.g. Java BigDecimal) |
| base64Binary | xs:base64Binary | A stream of bytes, base64 encoded (RFC 4648 (http://tools.ietf.org/html/rfc4648) ) |
| instant | xs:dateTime | An instant in time - known at least to the second and always includes a timezone. Note: This type is for system times, not human times (see date and dateTime below). |
| string | xs:string | A sequence of Unicode characters. Note that strings SHALL not exceed 1MB in size |
| uri | xs:anyURI | A Uniform Resource Identifier Reference. It can be absolute or relative, and may have an optional fragment identifier (RFC 3986 (http://tools.ietf.org/html/rfc3986) ) |
| date | union of xs:date, xs:gYearMonth, xs:gYear | A date, or partial date (e.g. just year or year + month) as used in human communication. There is no time zone. Dates must be valid dates. date is a union of the w3c schema types date, gYearMonth, and gYear regex: -?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))? |
| dateTime | union of xs:dateTime, xs:date, xs:gYearMonth, xs:gYear | A date, date-time or partial date (e.g. just year or year + month) as used in human communication. If hours and minutes are specified, a time zone must be populated. Seconds may be provided but may also be ignored. Dates must be valid dates. date is a union of the w3c schema types dateTime, date, gYearMonth, gYear regex:-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))? |
| Simple Restrictions | ||
| FHIR Name | Base FHIR Type | Description |
| oid | uri | An OID represented as a URI (RFC 3001 (http://www.ietf.org/rfc/rfc3001.txt) ): urn:oid:1.2.3.4.5 |
| uuid | uri | A UUID, represented as a URI (RFC 4122 (http://www.ietf.org/rfc/rfc4122.txt) ): urn:uuid:a5afddf4-e880-459b-876e-e4591b0acc11 |
| code | string | A string which has at least one character and no leading or trailing whitespace, and where there is no whitespace other than single spaces in the contents regex: [^\s]+([\s]+[^\s]+)* |
| id | string | A whole number in the range 0 to 2^64-1 (optionally represented in hex), a uuid, an oid, or any other combination of lowercase letters, numerals, "-" and ".", with a length limit of 36 characters regex: [a-z0-9\-\.]{1,36} |
These types are represented as XML Elements with the value of the type in the text of the element. The name of the element is defined where the type is used. The XML elements may have an id attribute. In JSON, the data type is represented by an object with two properties: "_id" for the id attribute, and "value" for the value of the type.
Examples
date (e.g. Date of birth):
<date value="1951-06-04" /> <date id="a1" value="1951-06-04" />
date : {
value : "1951-06-04"
}
date : {
_id : "a1",
value : "1951-06-04"
}

These types are represented as XML Elements with child elements with the name of the defined elements of the type. The name of the element is defined where the type is used. Any of the XML elements may have an id attribute. In JSON, the data type is represented by an object with properties named the same as the the XML elements. The JSON representation is almost exactly the same, so only the first example has an additional JSON representation.
Complex data types may be "profiled". A profile (§3.36) makes a set of rules about which elements must have values, and what the possible values are.

This type is for containing or referencing attachments - additional data content defined in other formats. The most common use of this type is to include images or reports in some report format such as PDF. However it can be used for any data that has a mime type.
<[name] xmlns="http://hl7.org/fhir"> <contentType value="[code]"/><!-- 1..1 Mime type of the content, with charset etc. (http://www.rfc-editor.org/bcp/bcp13.txt.htm) --> <language value="[code]"/><!-- 0..1 Human language of the content (BCP-47) (http://tools.ietf.org/html/bcp47.htm) --> <data value="[base64Binary]"/><!-- 0..1 Data inline, base64ed --> <url value="[uri]"/><!-- 0..1 Uri where the data can be found --> <size value="[integer]"/><!-- 0..1 Number of bytes of content (if url provided) --> <hash value="[base64Binary]"/><!-- 0..1 Hash of the data (sha-1, base64ed ) --> <title value="[string]"/><!-- 0..1 Label to display in place of the data --> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Attachment.contentType | The mime type of an attachment | BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049) (http://www.rfc-editor.org/bcp/bcp13.txt) |
| Attachment.language | A human language | IETF language tag (http://tools.ietf.org/html/bcp47) |
The contentType element must always be populated. It can include charset information and other mime type extensions as appropriate. If there is no character set in the contentType then the correct course of action is undefined, though some media types may define a default character set and/or the correct character set may be able to be determined by inspection of the content.
The actual content of the Attachment can be conveyed directly using the data element or a url reference can be provided. If both are provided, the reference must point to the same content as found in the data. The reference can never be reused to point to some different data (i.e. the reference is version specific). The url reference must point to a location that resolves to actual data; some uris such as cid: meet this requirement.
The hash is included so that applications can verify that the contents that a url have not changed.
In many cases where Attachment is used, the cardinality is >1;. A valid use of repeats is to convey the same content in different mime types and languages. Guidance on the meaning of repeating elements MUST be provided in the definition of the repeating resource element or extension that references this type. The language element describes the language of the attachment using the codes defined in BCP 47 (http://tools.ietf.org/html/bcp47) .
Constraints
If neither data nor a url is provided, the value should be understood as an assertion that no content for the specified mimeType and/or xml:lang is available for the reason stated.
The context of use may frequently make rules about the kind of attachment (and therefore, the kind of mime types) that can be used.
Examples
A PDF document:
<document>
<contentType value="application/pdf" />
<language value="en" />
<data value="/9j/4...KAP//Z" /> <!-- covers many lines -->
<title value="Definition of Procedure" />
</document>
document : {
contentType : { value : "application/pdf" },
languge : { value : "en" },
data : { value : "/9j/4...KAP//Z"},
title : { value : "Definition of Procedure" }
}
Since the JSON examples have the same structure as the XML, only XML is shown for the rest of the examples.
A reference to a DICOM image via WADO:
<image>
<contentType value="application/dicom" />
<reference value="http://10.1.2.3:1000/wado?requestType=WADO&wado_details..." />
<hash value="EQH/..AgME" />
</image>

A "coding" is a representation of a defined concept using a symbol from a defined "code system" - which may be an enumeration, a list of codes, a full terminology such as SNOMED-CT or LOINC or a formal ontology.
<[name] xmlns="http://hl7.org/fhir"> <system value="[uri]"/><!-- 0..1 Identity of the terminology system --> <code value="[code]"/><!-- 0..1 Symbol in syntax defined by the system --> <display value="[string]"/><!-- 0..1 Representation defined by the system --> </[name]>
The system is a URI that references the enumeration, terminology or ontology that defines the code. The URI may be an OID (urn:oid:) or a UUID (urn:uuid:), a specially defined URI from the named systems list (Known Broken Link - needs to be resolved), a url that references a definition of the system or any other URI that uniquely identifies the definitions. OIDs and UUIDs may be registered in the HL7 OID registry (http://hl7.org/oid) and should be if the content is shared or exchanged across institutional boundaries.
If present, the code must be a syntactically correct symbol as defined by the system. In some code systems such as SNOMED-CT, the code may be an expression composed of other codes. Note that codes are case sensitive unless specified otherwise by the code system. The display is a text representation of the code defined by the system and can be used to display the meaning of the code by an application that is not aware of the system.
In some cases, the system may not be known - only the code is known. In this case, no useful processing of the code may be performed unless the system can be safely inferred by the context. This practice should be avoided where possible in order to future-proof implementations, as information sharing in a wider context is very likely to arise eventually, and codes cannot be used in the absence of a known system.
If the system is present, and there is no code, then this is understood to mean that there is no suitable code in the system in which to represent the code.
If two Codings have the same the system and code then they have the same meaning. Note that if a code system redefines the meaning of codes across different releases, then the different releases must have different values for system. If either the system or the code differs, then how they are related can only be determined by consulting the definitions of the system(s) and any mappings available.
The correct value to use in the system for a given code-system can be determined by:
Constraints
The context of use (as defined in the resource or applicable profile) usually makes rules about what codes and systems are allowed or required in a particular context by binding the element to a value set.
Examples
A simple code for headache, in ICD-10:
<code>
<system value="http://hl7.org/fhir/sid/icd-10" />
<code value="G44.1" />
</code>
A SNOMED-CT expression:
<problem>
<system value="http://snomed.info" />
<code value="128045006:{363698007=56459004}" />
</problem>
A Coding is a simple direct reference to a code in a code system. In practice, such a simple reference is very difficult to use - if a system is using text when the correct codes can't be found, or if two different systems are using different terminologies or a different mix of codes and text, the Coding type doesn't provide enough information to make this work. Since such situations are quite a common case, the type CodeableConcept is defined, which allows for multiple Coding elements and/or a text representation. The CodeableConcept is used in resources in preference to the simpler Coding except for a few special cases. Coding is defined separately mainly for use in profiles, where the context of an explicit use case means that the profile can define a better structure than the general case CodeableConcept.

A CodeableConcept represents a represents a field that is usually defined by formal reference to one or more terminologies or ontologies, but may also be defined by the provision of text. This is a common pattern in healthcare data.
<[name] xmlns="http://hl7.org/fhir"> <coding><!-- 0..* Coding Code defined by a terminology system --></coding> <text value="[string]"/><!-- 0..1 Plain text representation of the concept --> <primary value="[idref]"/><!-- 0..1 Which code was chosen directly by the user --> </[name]>
Each "coding" is a representation of the concept using a symbol from a defined "code system" - which may be an enumeration, a list of codes, a full terminology such as SNOMED-CT or LOINC, or a formal ontology. The concept may be coded multiple times in different code systems (or even multiple times in the same code systems, where multiple forms are possible, such as with SNOMED-CT). The different codings may have slightly different granularity due to the differences in the definitions of the underlying codes. The ordering of Codings within a CodeableConcept is undefined.
Whether or not coding elements are present, the text representation of the concept as entered or chosen by the user which most closely represents the intended meaning of the user or concept. Very often the text is the same as a display of one of the codings. One of the codings may be flagged as the primary - the code that the user actually chose directly. If present, the value of the primary element is an xml:id (§1.3.3) that must match an id attribute on one of the codings.
Constraints
The context of use usually makes rules about what codes and systems are allowed or required in a particular context by binding the element to a value set.
Examples
A simple code for headache initially coded in SNOMED-CT and translated to ICD-10:
<concept>
<coding>
<system value="http://hl7.org/fhir/sid/icd-10" />
<code value="R51" />
</coding>
<coding id="a1">
<system value="http://snomed.info" />
<code value="25064002" />
<display value="Headache" />
</coding>
<text value="general headache" />
<primary value="a1" />
</concept>
A concept represented in an institution's local coding systems for unit for which no UCUM equivalent exists:
<unit>
<coding>
<system value="urn:oid:2.16.840.1.113883.19.5.2" />
<code value="tab" />
<display value="Tablet" />
</coding>
<coding>
<system value="http://unitsofmeasure.org" />
</coding>
</unit>
A SNOMED-CT expression:
<diagnosis>
<coding>
<system value="http://snomed.info" />
<code value="128045006:{363698007=56459004}" />
</coding>
<text value="Cellulitis of the foot" />
</diagnosis>
In this case, there is no display element, because no display is defined for Snomed-CT expressions.

A code taken from a short list of codes that are not defined in a formal code system. Choice is generally used for things like pain scales, questionnaires or formally defined assessment indexes. The possible codes may be ordered with some arbitrarily defined scale. Note: Choice is not an appropriate data type to use when the possible codes are defined as a value set from a formal code system or otherwise stored on a terminology server.
<[name] xmlns="http://hl7.org/fhir"> <code value="[code]"/><!-- 0..1 Selected code --> <option> <!-- 1..* List of possible code values --> <code value="[code]"/><!-- 1..1 Possible code --> <display value="[string]"/><!-- 0..1 Display for the code --> </option> <isOrdered value="[boolean]"/><!-- 0..1 If order of the values has meaning --> </[name]>
The code is the selected value. A list of possible options for code must be provided; at least a code must be provided for each value. The selected code must be found in the list of possible codes.
If isOrdered is true, then the values have an inherent meaningful order and the list of values must be provided in the correct orderr in the instance.
Example
The results on a urinalysis strip:
<value>
<code value="+" />
<option>
<code value="neg" />
</option>
<option>
<code value="trace" />
</option>
<option>
<code value="+" />
</option>
<option>
<code value="++" />
</option>
<option>
<code value="+++" />
</option>
<isOrdered value="true" />
</value>

A measured amount (or an amount that can potentially be measured).
<[name] xmlns="http://hl7.org/fhir"> <value value="[decimal]"/><!-- 0..1 Numerical value (with implicit precision) --> <comparator value="[code]"/><!-- 0..1 Relationship of stated value to actual value --> <units value="[string]"/><!-- 0..1 Unit representation --> <system value="[uri]"/><!-- 0..1 System that defines coded unit form --> <code value="[code]"/><!-- 0..1 Coded form of the unit --> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Quantity.comparator | how the Quantity should be understood and represented | http://hl7.org/fhir/quantity-comparator |
The value contains the numerical value of the quantity, including an implicit precision. If no comparator is specified, the value is a point value (i.e. '='). The comparator element can never be ignored.
The units element contains a displayable unit that defines what is measured. The units may additionally be coded in some formal way using the code and the system (see Coding (§1.4.4) for further information about how to use the system element).
If the units are able to be coded in UCUM and a code is provided, it SHOULD be a UCUM code. If a UCUM unit is provided in the code then a canonical value can be generated for purposes of comparison between quantities. Note that the units element will often contain text that is actually a valid UCUM unit, but it cannot be assumed that it does.
Constraints
The context of use may frequently define what kind of quantity this is and therefore what kind of units can be used. The context of use may additionally require a code from a particular system. The context of use may also restrict the values for the value or range.
These are used as types in resource content models, but they are really just a Quantity with some rules:
| Age | The unit must be an amount of time and a UCUM unit must be provided, and the value must be positive |
| Count | The value must a whole number and the UCUM unit must be "1" |
| Money | The unit must be a currency and the code must from ISO 4217 (system = "urn:std:iso:4217") |
| Distance | The unit must be an amount of length and a UCUM unit must be provided. |
| Duration | The unit must be an amount of time and a UCUM unit must be provided. |
Examples
A duration:
<time>
<value value="25" />
<units value="sec" />
<system value="http://unitsofmeasure.org" />
<code value="s" />
</time>
A concentration where the value was out of range:
<result>
<value value="40000" />
<comparator value=">" />
<units value="mcg/L" />
<system value="http://unitsofmeasure.org" />
<code value="ug" />
</result>
An amount of prescribed medication:
<dose>
<value value="3" />
<units value="capsules" />
<system value="http://snomed.info" />
<code value="385049006" />
</dose>
A price (coded using currency codes defined in ISO 4217):
<cost>
<value value="25.45" />
<units value="US$" />
<system value="urn:std:iso:4217" />
<code value="USD" />
</cost>

A set of ordered Quantity values defined by a low and high limit.
A Range specifies a set of possible values; usually, one value from the range applies (e.g. "give the patient between 2 and 4 tablets"). Ranges are typically used in instructions.
<[name] xmlns="http://hl7.org/fhir"> <low><!-- 0..1 Quantity Low limit --></low> <high><!-- 0..1 Quantity High limit --></high> </[name]>
The units and code/system elements of the low or high elements must match. If the low or high elements are missing, the meaning is that the low or high boundaries are not known and therefore neither is the range.
The range flag on the low or high elements cannot be present. Note that the Range type should not be used to represent out of range measurements: A quantity type with the comparator element should be used instead.
The low and the high values are inclusive, and are assumed to have arbitrarily high precision. E.g. the range 1.5 to 2.5 includes 1.50, and 2.50 but not 1.49 or 2.51.
Constraints
Examples
Range of Quantity (distance):
<estimate>
<low>
<value value="1.6" />
<units value="m" />
</low>
<high>
<value value="1.9" />
<units value="m" />
</high>
</estimate>

A ratio of two Quantity values - a numerator and a denominator.
<[name] xmlns="http://hl7.org/fhir"> <numerator><!-- 0..1 Quantity The numerator --></numerator> <denominator><!-- 0..1 Quantity The denominator --></denominator> </[name]>
Common factors in the numerator and denominator are not automatically cancelled out. The Ratio data type is used for titers (e.g., "1:128") and other quantities produced by laboratories that truly represent ratios. Ratios are not simply "structured numerics" - for example blood pressure measurements (e.g. "120/60") are not ratios. In addition, ratios are used where common factors in the numerator and denominator do not cancel out. The most common example of this is where the ratio represents a unit cost, and the numerator is a currency (e.g. 50/$10).
Constraints
The context of use may require particular types of Quantity for the numerator or denominator.
Examples
Titer (Ratio of integer:integer)
<result>
<numerator>
<value value="1" />
</numerator>
<denominator>
<value value="128" />
</denominator>
</result>
Unit cost (Ratio of :Quantity):
<charge>
<numerator>
<value value="103.50" />
<units value="US$" />
<code value="USD" />
<system value="urn:std:iso:4217" />
</numerator>
<denominator>
<value value="1" />
<units value="day" />
<code value="day" />
<system value="http://unitsofmeasure.org" />
</denominator>
</charge>

A time period defined by a start and end time.
A period specifies a range of times. The context of use will specify whether the entire range applies (e.g. "the patient was an inpatient of the hospital for this time range") or one value from the period applies (e.g. "give to the patient between 2 and 4 pm").
<[name] xmlns="http://hl7.org/fhir"> <start value="[dateTime]"/><!-- 0..1 The start of the period --> <end value="[dateTime]"/><!-- 0..1 The end of the period, if not ongoing --> </[name]>
If the start element is missing, the start of the period is not known. If the end element is missing, it means that the period is ongoing.
The end value includes any matching date/time. For example, the period 2011-05-23 to 2011-05-27 includes all the times of 23rd May through to the end of the 27th May.
Examples
23rd May 2011 to 27th May, including 27th May:
<coverage> <start value="2011-05-23" /> <end value="2011-05-27" /> </coverage>

A series of measurements taken by a device, with upper and lower limits. There may be more than one dimension in the data.
An Array provides a concise way to handle the data produced by devices that sample a physical particular state at a high frequency. A typical use for this is for the output of an ECG device.
<[name] xmlns="http://hl7.org/fhir"> <origin><!-- 0..1 Quantity Zero value and units --></origin> <period value="[decimal]"/><!-- 0..1 Number of milliseconds between samples --> <factor value="[decimal]"/><!-- 0..1 Multiply data by this before adding to origin --> <lowerLimit value="[decimal]"/><!-- 0..1 Lower limit of detection --> <upperLimit value="[decimal]"/><!-- 0..1 Upper limit of detection --> <dimensions value="[integer]"/><!-- 0..1 Number of sample points at each time point --> <data value="[string]"/><!-- 0..1 Decimal values with spaces, or "E" | "U" | "L" --> </[name]>
The digits are a set of decimal values separated by a single space (Unicode character u20). In addition to decimal values, the special values "E" (error), "L" (below detection limit) and "U" (above detection limit) can also be used. If there is more than one dimension, the different dimensions are interlaced - all the data points for a particular time are represented together.
None of the elements in an Array are mandatory because the Array is frequently used with devices where one usage carries just the data element, and a matching usage specifies the values of the other elements (see Device Log (§3.9) and Device Capabilities (§3.8)). At least one element must always be populated. The data is not interpretable without at least origin, period, and dimensions. When carried in an Observation (§3.26), these 3 elements and data must be populated for the Array to be properly populated. The default value for factor is 1.
Example
The output from an EKG device:
<array> <origin> <value value="0"/> <units value="μV"/> <system value="http://unitsofmeasure.org"/> <code value="uV"/> </origin> <period value="2"/> <scale value="2.5"/> <dimensions value="1"/> <data value="-4 -13 -18 -18 -18 -17 -16 -16 -16 -16 -16 -17 -18 -18 -18 ...."/> </array>

An identifier intended for use external to the FHIR protocol. As an external identifier, they may be changed or retired due to human or system process and errors.
<[name] xmlns="http://hl7.org/fhir"> <use value="[code]"/><!-- 0..1 The use of this identifier --> <label value="[string]"/><!-- 0..1 Description of identifier --> <system value="[uri]"/><!-- 0..1 The namespace for the identifier --> <key value="[string]"/><!-- 0..1 The value that is unique --> <period><!-- 0..1 Period Time period when id was valid for use --></period> <assigner><!-- 0..1 Resource(Organization) Organisation that issued id (may be just text) --></assigner> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Identifier.use | Identifies the use for this identifier, if known | http://hl7.org/fhir/identifier-use |
The system referred to by means of a URI defines how the identifier is defined (i.e. how the key value is made unique). It might be a specific application or a recognized standard/specification for a set or identifiers or a way of making identifiers unique. The key must be unique within the defined system and have a consistent meaning wherever it appears. Both system and key values are always case sensitive.
FHIR defines some useful URIs directly (Known Broken Link - needs to be resolved). OIDs (urn:oid:) and UUIDs (urn:uuid:) may be registered in the HL7 OID registry (http://hl7.org/oid) and should be if the content is shared or exchanged across institutional boundaries. If the identifier itself is naturally globally unique (i.e. an OID, a UUID, or a URI with no trailing local part), then the system must be "urn:ietf:rfc:3986", and the URI would be in the key.
In some cases, the system may not be known - only the key is known (e.g. a simple device that scans a barcode), or the system is known implicitly (simple exchange in a limited context, often driven by barcode readers). In this case, no useful matching may be performed using the key unless the system can be safely inferred by the context. This practice should be avoided where possible in order to future-proof implementations, as information sharing in a wider context is very likely to arise eventually.
The assigner is used to indicate what registry/state/facility/etc assigned the identifier.
Examples
A primary key from an application table (an OID in the space allocated by HL7 to some organisation to further sub-allocate):
<identifier>
<use value="official" />
<system value="urn:oid:2.16.840.1.113883.16.4.3.2.5" />
<key value="123" />
</identifier>
A patient identifier defined by a hospital:
<identifier>
<use value="official" />
<system value="http://www.acmehosp.com/patients" />
<key value="44552" />
<period>
<start value="2003-05-03" />
</period>
</identifier>
In this case, tThe period is used to track when the identifier was first assigned to the patient.
An identifier that refers to a patient FHIR resource on a particular system:
<identifier> <system value="urn:ietf:rfc:3986" /> <key value="http://pas-server/xxx/patient/@443556" /> </identifier>
This is not a resource reference - it's a logical reference by the patient identifier.
A UUID:
<identifier>
<use value="temp" />
<system value="urn:ietf:rfc:3986" />
<key value="urn:uuid:a76d9bbf-f293-4fb7-ad4c-2851cac77162" />
</identifier>
UUIDs are often used for temporary identifiers, though this is not necessary.
A US SSN:
<identifier>
<use value="usual" />
<label value="SSN" />
<system value="http://hl7.org/fhir/sid/us-ssn" />
<key value="000111111" />
</identifier>
Notes:
A medical record number assigned on 5-July 2009:
<identifier>
<use value="usual" />
<label value="MRN" />
<system value="urn:oid:0.1.2.3.4.5.6.7" />
<key value="2356" />
<period>
<start value="2009-07-05" />
</period>
</identifier>

A name of a human with text, parts and usage information.
Names may be changed or repudiated. People may have different names in different contexts. Names may be divided into parts of different type that have variable significance depending on context, though the division into parts does not always matter. With personal names, the different parts may or may not be imbued with some implicit meaning; various cultures associate different importance with the name parts and the degree to which systems must care about name parts around the world varies widely.
<[name] xmlns="http://hl7.org/fhir"> <use value="[code]"/><!-- 0..1 The use of this name --> <text value="[string]"/><!-- 0..1 Text representation of the full name --> <family value="[string]"/><!-- 0..* Family name (often called 'Surname') --> <given value="[string]"/><!-- 0..* Given names (not always 'first'). Includes middle names --> <prefix value="[string]"/><!-- 0..* Parts that come before the name --> <suffix value="[string]"/><!-- 0..* Parts that come after the name --> <period><!-- 0..1 Period Time period when name was/is in use --></period> </[name]>
| Path | Definition | Reference |
|---|---|---|
| HumanName.use | The use of a human name | http://hl7.org/fhir/name-use |
The text element specifies the entire name as it should be represented. This may be provided instead of or as well as specific parts. Applications updating a name must ensure either that the text and the parts are in agreement, or that only one of the two is present.
Note that the order of the parts within a given part type has significance and must be observed. The appropriate order between family name and given names depends on culture and context of use.
Example
Full name of Peter James Chalmers.
<name>
<use value="usual" />
<family value="Chalmers" />
<given value="Peter" />
<given value="James" />
</name>
vCard (http://tools.ietf.org/html/rfc6350) Mappings

A postal address. There are a variety of postal address formats defined around the world. Postal addresses are often also used to record a location that can be visited to find a patient or person.
<[name] xmlns="http://hl7.org/fhir"> <use value="[code]"/><!-- 0..1 The use of this address --> <text value="[string]"/><!-- 0..1 Text representation of the address --> <line value="[string]"/><!-- 0..* Line of an address --> <city value="[string]"/><!-- 0..1 Name of city, town etc. --> <state value="[string]"/><!-- 0..1 Sub-unit of country (abreviations ok) --> <zip value="[string]"/><!-- 0..1 Post code for area --> <country value="[string]"/><!-- 0..1 Country (can be ISO 3166 3 letter code) --> <period><!-- 0..1 Period Time period when address was/is in use --></period> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Address.use | The use of an address | http://hl7.org/fhir/address-use |
The text element specifies the entire address as it should be represented. This may be provided instead of or as well as the specific parts. Applications updating an address must ensure either that the text and the parts are in agreement, or that only one of the two is present.
Constraints
Example
HL7 office's address.
<address>
<use value="work" />
<text value="1050 W Wishard Blvd
RG
5th floor
Indianapolis, IN 46240" />
<line value="1050 W Wishard Blvd" />
<line value="RG 5th floor" />
<city value="Indianapolis" />
<state value="IN" />
<zip value="46240" />
</address>
vCard (http://tools.ietf.org/html/rfc6350) Mappings

All kinds of technology-mediated contact details for a person or organisation, including telephone, email, etc.
<[name] xmlns="http://hl7.org/fhir"> <system value="[code]"/><!-- 0..1 What kind of contact this is --> <value value="[string]"/><!-- 0..1 The actual contact details --> <use value="[code]"/><!-- 0..1 How to use this address --> <period><!-- 0..1 Period Time period when the contact was/is in use --></period> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Contact.system | What kind of contact this is | http://hl7.org/fhir/contact-system |
| Contact.use | How to use this address | http://hl7.org/fhir/contact-use |
If capturing a phone, fax or similar contact, the value should be a properly formatted telephone number according to ITU-T E.123 (http://www.itu.int/rec/T-REC-E.123-200102-I/e) . However, this is frequently not possible due to legacy data and/or recording methods.
Constraints
Example
Home phone number:
<telecom> <system value="phone" /> <value value="+15556755745" /> <use value="home" /> </telecom>

A schedule that specifies an event that may occur multiple times. Schedules are not used for recording when things did happen, but when they are expected or requested to occur. A schedule can be either a list of events - periods on which the event occurs, or a single event with repeating criteria, or just repeating criteria with no actual event.
Note: a possible enhancement to this is to have the repeat content repeat with each event. This is richer and more complex - is the added functionality useful?
<[name] xmlns="http://hl7.org/fhir"> <event><!-- 0..* Period When the event occurs --></event> <repeat> <!-- 0..1 Only if there is none or one event --> <frequency value="[integer]"/><!-- 0..1 Event occurs frequency times per duration --> <when value="[code]"/><!-- 0..1 Event occurs duration from common life event --> <duration value="[decimal]"/><!-- 1..1 Repeating or event-related duration --> <units value="[code]"/><!-- 1..1 The units of time for the duration --> <count value="[integer]"/><!-- 0..1 Number of times to repeat --> <end value="[dateTime]"/><!-- 0..1 When to stop repeats --> </repeat> </[name]>
| Path | Definition | Reference |
|---|---|---|
| Schedule.repeat.when | A real world event that a schedule is related to | http://hl7.org/fhir/event-timing |
| Schedule.repeat.units | A unit of time (units from UCUM) | http://hl7.org/fhir/units-of-time |
If events are specified, at least a low must be specified for each event. If no high is specified, the event is assumed to last a limited but unknown time as clinically relevant.
If the schedule has repeating criteria, the repeat can occur a given number of times per the specified duration or in relation to some real world event. Also, if the event repeats, a time to end the schedule can be specified, either by specifying a count number of times it can occur or a date at which to end the schedule. If no end condition is specified, the Schedule will terminate on some criteria that are expressed elsewhere.
Constraints
Example
A series of appointments for radiotherapy:
<schedule>
<event>
<start value="2012-01-07T09:00" />
<end value="2012-01-07T13:00" />
</event>
<event>
<start value="2012-01-14T09:00" />
<end value="2012-01-14T13:00" />
</event>
<event>
<start value="2012-01-22T11:00" />
<end value="2012-01-22T15:00" />
</event>
</schedule>
BID (twice a day) (no start or end specified):
<schedule>
<repeat>
<frequency value="2" />
<duration value="1" />
<units value="d" />
</repeat>
</schedule>
1/2 an hour before breakfast for 10 days from 23-Dec 2011:
<schedule>
<event>
<start value="2011-12-23" />
</event>
<repeat>
<when value="ACM" />
<duration value="30" />
<units value="min" />
<end value="2012-01-02" />
</repeat>
</schedule>
Note that the end date is inclusive like the high date of a Period.

The following types are defined as part of the data types, but are documented elsewhere in the specification:
Many elements in the FHIR resources are assigned a type of code, Coding (§1.4.4) or CodeableConcept (§1.4.5). These elements contain codes that are associated with defined meanings defined by frameworks of varying sophistication and size. In some simple cases, the set of codes is a enumeration, a short list defined specifically for the element. In other cases, the list of codes is taken from a large and complex terminology or ontology such as SNOMED-CT or OBO.
All these elements of type code, Coding (§1.4.4) or CodeableConcept (§1.4.5) are given a "binding name" that defines the set of possible codes that can be used in the element in question.

For simple elements with type code, the element is either bound to a code list - a list of defined codes, or the binding references some external standard that defines the set of valid codes that can be used (typical examples of references are Mime Types (http://www.rfc-editor.org/bcp/bcp13.txt) , Language Codes (http://tools.ietf.org/html/bcp47) , UCUM (http://unitsofmeasure.org) , etc).
The value of a element of type code SHALL be one of the codes defined by the code list or reference.
No other codes can be used in an instance. If the binding is a code list, the list of codes may be extended in subsequent releases of the specification. Profiles may state rules on which codes may be used in particular contexts, but cannot define new or additional codes for these elements.

For elements with type CodeableConcept (§1.4.5) or Coding (§1.4.4), the binding refers to a Value Set (§3.42) that defines a list of concepts along with the code/system pairs that refer to them. The binding to the value set may be labelled as just an example.
If the binding is not an example binding, then the code/system pair in the instance SHOULD refer to one of the concepts that is a member of the value set.
Bindings to value sets provided as part of the specification are always specific to the version of the value set published with the specification. The value set may be sealed by defining a simple list of enumerated codes, or it may include codes by their properties, in which case the list of valid concepts may grow or change over time.
Profiles can redefine the binding and are able to be much more precise about exactly which codes can be used for these elements (see Binding Control (Known Broken Link - needs to be resolved) for more detail).

The following reference tables are provided to help implementers:

This exchange specification is based on generally agreed common requirements across healthcare - covering many jurisdictions, domains, and different functional approaches. As such, it is common for specific implementations to have valid requirements that will not be directly included in this specification. Incorporating all of these requirements would make this specification very cumbersome and difficult to implement. Instead, this specification expects that these additional distinct requirements will be implemented as extensions.
As such, extensibility is a fundamental part of the design of this specification. Every element in a resource may have extension child elements to represent additional information that is not part of the basic definition of the resource. Conformant applications are not allowed to reject resources because they contain extensions, though they may need to reject resources because of the specific contents of the extensions.
Note that, unlike in many other specifications, there can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core simplicity for everyone.
In order to make the use of extensions safe and manageable, there is a strict governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that must be met as part of the definition of the extension.

Every element in a resource includes an optional "extension" element that may be present any number of times in the element. The extension element appears as the first child, prior to any other defined child elements. This is the content model of the extension as it appears in each resource:
<[name] xmlns="http://hl7.org/fhir"> <url value="[uri]"/><!-- 1..1 identifies the meaning of the extension --> <isModifier value="[boolean]"/><!-- 0..1 If extension modifies other elements/extensions --> <value[x]><!-- 0..1 Value of extension --></value[x]> <extension><!-- 0..* Extension Nested values for extension --></extension> </[name]>
Notes:
The value[x] element has the [x] replaced with the name of one of the defined types, and the contents as defined for that type, or another extension. The value type may be one of the following:
Nested extensions are used where the original definition of the extension defines complex content (i.e. multiple parts of the extension, not a simple data type). If the value of the extension themselves need extending, this is in the content of the value[x] element.
Here is an example of a name with a simple extension for a tribal name:
<name>
<extension>
<url value="http://hl7.org/fhir/profile/@iso-21090#name-use" />
<valueCode value="I" />
</extension>
<text value="Chief Red Cloud"/>
</name>
The proper use of the URL value is discussed below.
Extending a patient with an opt-in status for a clinical trial, with 3 fields: status, date of recording, and person who recorded:
<Patient>
<extension>
<url value="http://acme.org/fhir/profiles/@main#trial-status" />
<extension>
<url value="http://acme.org/fhir/profiles/@main#trial-status-code" />
<valueCode value="unsure" />
</extension>
<extension>
<url value="http://acme.org/fhir/profiles/@main#trial-status-date" />
<valueDate value="2009-03-14" />
</extension>
<extension>
<url value="http://acme.org/fhir/profiles/@main#trial-status-who" />
<valueResourceReference>
<type value="Practitioner" />
<reference value="../Practitioner/@example" />
</valueResourceReference>
</extension>
</extension>
<!-- other data for patient -->
</Patient>

As well as providing additional information, extensions may be used to modify the meaning of other existing elements or even to negate their meanings. As an example, an implementation may wish to add a "certainty" extension to the AllergyIntolerance to indicate that some allergies are only suspected. If the extension had a value of "highly doubtful", then it would change the understanding of the allergy/intolerance, and implementations should not ignore this. Modifying the meaning of other elements makes these particular extensions unsafe to ignore, and so this must be explicitly labelled in the instance.
If the application processing the content of a resource does not recognize an extension that is labeled "IsModifier", and the data from element it extends is processed by the application, the application SHALL either refuse to process the data, or carry a warning concerning the data along with any action or output that results from processing the data.
Here is an Australian example where for cultural reasons, certain names that have been used previously must never be mentioned again:
<name>
<extension>
<url value="http://hl7.org/fhir/profile/@iso-21090#name-use" />
<isModifier value="true" />
<valueCode value="DN" />
</extension>
<text value="Arinyoo"/>
</name>
Because the intent of the name use code is that this name should not actually be used as if it were the patient's name, the extension is labelled "isModifier" = it is not safe to use this name unless you understand the extension.
Servers and background processes that move resources around are not "processing the data of the resource", and these applications are not required to check for unknown extensions. Any process that copies data out of a resource for use in another context (display to a human, decision support, exchange in another format that doesn't support extensions) is processing the data.
Note that it must always be safe to show the narrative to humans; any extension that is labeled as "IsModifier" must be represented in the narrative. Applications are required to ignore extensions that they do not recognize if their "isModifier" element is missing or set to false.

Extensions may be defined by any project or jurisdiction, up to and including international standards organizations such as HL7 itself, and are published as part of a Resource Profile (§3.36). Extensions are always defined against some particular context - the type of element that they may be used to extend. The following are possible contexts for an extension:
| Context type | Context format | Examples |
|---|---|---|
| A particular element (including the root) in a single resource | The element path for that element | Profile.resource.element; Person |
| A particular element (including the root) in a particular data type | The data type name for primitive types or the element path for complex data types | Address.part.value; string |
| A particular context in one of the mapped reference models | The name of the reference model followed by the mapping path | RIM: Act[moodCode="EVN"] |
| Another extension | The profile uri of the extension followed b the extension code | http://myextensions.org#someExtension |
| A set of some combination of the above | As above, separated by ';' | Address; Contact |
In addition, an extension definition might apply additional constraints with regards to particular element values of the target that make its use appropriate. Extensions SHALL only be used on a target for which they are defined.
Each extension is defined using the following fields:
| Code | Required | The name that is used as a code in a resource to identify this extension - unique in the context of the defining profile |
| Context | Required | The context of this extension. See above. The context has two parts: a type, and a path which supplies the details |
| Short Defn | Required | A brief description of the extension used in the XML descriptions when the extension is referenced in a profile |
| Definition | Required | A formal statement of the meaning of the content of the field |
| Requirements | Optional | Identifies the reason the extension is needed |
| Comments | Optional | Additional other information about the extension, including information such as use notes |
| Cardinality | Required | The cardinality of this extension. Specifying a minimum cardinality of 1 means that if the source system declares that it conforms to an extension that declares a type including this extension, this extension must be included in the resource. Cardinality can be constrained but not loosened in profiles that reference this extension |
| Type | Required | The type(s) of the extension. This must be a valid FHIR data type as described above, or "Extension: x,y,z" which indicates that the extension codes x,y, and z will be contained in the extension |
| XPaths | Optional | One or more XPath statements that must evaluate to true when the extension is used |
| Must Understand | Required | Whether the extension must be understood by any system reading the resource. There are 3 possible values: "true" - the extension must be understood, "false" - the extension does not need to be understood, and "sender" - the sender can decide whether the extension needs to be understood |
| RIM Mapping | Conditional | The formal mapping from this extension to the RIM. Required for HL7-defined extensions that apply to resources with RIM mappings, but may be optional in other contexts |
| v2 Mapping | Optional | Mapping to a v2 segment/field/etc, if desired and appropriate. |
| Binding | Conditional | For the types CodeableConcept and Coding. See Terminologies |
Notes:
Whenever resources containing extensions are exchanged, the definitions of the extensions must be available to all the parties that share the resources. Each extension contains a URI that references the source of the definitions as a Resource Profile. The source SHOULD be a literal reference, such as an http: url that refers to an end-point that responds with the contents of the definitions - preferably a FHIR RESTful server supporting the Resources Profile, or a logical reference (e.g. using a urn:) - for instance, to a national published standard.

As well as defining the base element structure for resources, HL7 also publishes extensions. HL7 publishes data definitions as extensions rather than as part of the base resource structure in order to keep the base resource structure simple and concise, and to allow implementers not to engage with an entire world's worth of functionality up front. Note that HL7 extensions are never flagged as must-understand - if HL7 publishes resource content that must be understood, it will be part of the resource content itself, since everyone has to understand the extension anyway.
Before extensions can be used in instances, they must be published. HL7 maintains two extension registries, and users are encouraged to register their extensions there. But this is not required; all that is required is that the extension is published in a context that is available for users of the extension. So, for example, if a particular extension is used exchanged within a single institution, the definition of the extension can be placed on the institution's intranet. However since, by their nature, resources tend to travel well, it's always better to use the HL7 extension registries.
HL7 provides two extension registries. The first is for HL7 approved extensions. These have been approved by an appropriate part of the HL7 community following a review process, and have formal standing. The other registry is provided as a service to the community, and anyone can register an extension on it.
| Registry | Search | Submit |
|---|---|---|
| HL7 Approved | [TBD] | [TBD] |
| Community | [TBD] | [TBD] |
| Interim | http://hl7connect.healthintersections.com.au/svc/fhir/profile/search | http://hl7connect.healthintersections.com.au/svc/fhir/profile/upload |
HL7 profiles defining extensions may be balloted alongside resource content as part of the FHIR specification or may be published as part of separate specifications. When HL7 publishes extensions as part of the FHIR specification, these extensions SHALL be used for this data whenever the data is represented in instances. Applications SHOULD use other HL7-defined extensions published to represent equivalent data in the interest of maximum interoperability. If referencing a profile that defines extensions, implementations declaring conformance with the profile SHALL use the profile-defined and imported extensions when conveying equivalent data elements.
To minimize complexity for implementers, HL7 will not elevate content defined in an HL7-approved extension to be content defined in a core resource in future versions of the resource.
In some cases, an HL7 work group or other body may publish a profile whose sole purpose is to define extensions expected to be needed by implementers in a particular context. E.g. extensions needed to map a particular set of v2 segments or a v3 model.
Implementations are encouraged to share their extensions with HL7 and register them with the HL7 extension registry. The domain committees will work to elevate the extensions into HL7 published extensions or, if adopted by a broad enough portion of the implementer community, the into the base resource structure itself.
To avoid interoperability issues, extensions SHALL NOT change their definition once published. (Small clarifications to descriptions that do not affect interoperability are permitted.) Rather than modifying an existing extension, a new extension should be introduced. Revisions to an extension may extend the set of contexts in which the extension apply but may not remove or constrain any context previously listed
While the FHIR Resources are designed with a simple RESTful HTTP-based implementation in mind, it is not necessary to use this implementation framework. This specification also defines a straight messaging based implementation framework (§2.3) for FHIR resources and a document-based framework (§2.4).

Alternatively, it is not necessary to use any of these approaches. Resources can be exchanged or persisted using any technical means that is appropriate to the context at hand. A common use of FHIR resources or bundles (§1.2.3) is as parameters of service interfaces. FHIR itself does not define any particular service interface. Instead, other standards and implementations define their own service interfaces and architecture that use FHIR resources and optionally build extra features on top of the base repository-mediated exchange that the FHIR RESTful specification provides. As long as the resources that are used are conformant with this specification and the rules for authoring and reading applications are followed, then the implementation can claim conformance to "FHIR Resources". Such implementations will need to resolve several issues:
The resolution to these issues should be documented and published with the service specification.

Each resource has a known identity. The identity is not stored inside the resource, but must be tracked by systems handling resources. For RESTful systems, the resource identity is the same as the URL by which it is found. When a resource is packaged in a bundle (§1.2.3), the id is included along with the resource. Real-world use of FHIR resources creates the need to manage resource identification.
Resources are used in a variety of circumstances. Generally, these can be categorized into 3 different scenarios:
These combinations are why either relative (logical) or absolute references are allowed, and why a logical id is always required, in order to enable seamless exchange amongst partially closed trading systems.
When resources are exchanged between systems, they may need to be re-identified (i.e. assigned a new resource). When a resource is re-identified, nothing in the resource changes, but any references that point to the resource need to be updated. Whether re-identification is required or not depends on the context, as does how resource references are updated.
The normal case is that a client/receiving system accepts the server/sender's identification of a resource at face value, whether it is a relative or absolute reference. When the client/receiver wants to follow resource references, they are done using the server id (typically either by http calls or locating them in a bundle (§1.2.3)). In such cases, there is no need for re-identification.
Another scenario is for a client to retrieve a resource from a server, and make its own local persistent copy. If the local resource has a life-cycle of its own (i.e. is it not just a cached resource), then it needs to have its own identity; i.e. the resource must be re-identified. The simplest case is that the client only is keeping local copies of resources from a single server. In these cases, the client can simply replace the root URL and keep the logical id of the resource the same. In fact, if the server is using relative references, then this change doesn't involve any actual changes to the resources, only a re-interpretation of the references.
In some cases, however, the client may deal with multiple servers. In this case, the logical id of the resource is not guaranteed to be unique (unless all resources have a UUID for the logical id, which is allowed but not required). When the client cannot be sure that the resource identities are unique, it will have to re-identify the resources. In practice this means that the client needs to keep an identity translation table, and update references to the resources it has copied locally when other resources are received.
The case of a gateway system that migrates resources from one eco-system to another is very similar. In some limited cases, it can leave the logical id of the resources unchanged as resources are copied from one closed system to another. However in more complicated cases, it will have to modify the resource references as resources pass across the gateway.
There are many ways to implement any particular workflow and there are many ways to use resources to build working systems:

This section contains links to content that assist implementers make FHIR work in production:
TODO: add RDF & OWL renditions, eCore definitions, ADL versions, anything anyone else asks for

These reference implementations are provided for implementer interest and assistance. They may be used in production instances, though HL7 and its contributors accept no liability for this use. All these implementations are provided under a standard OSI approved BSD license (BSD-3-Clause).
These reference implementations are limited to code for representing the resource contents in their native form and parsing & serializing them as XML and JSON. In addition, some of the implementations provide support for building, using and reasoning with resource definitions. Full blown open source implementations for FHIR, some of which use these reference implementations, are listed on the HL7 wiki (http://wiki.hl7.org/index.php?title=Open_Source_FHIR_implementations) .
It is not necessary to use these particular implementations in order to be conformant. Any other approach may be used, including code generated from the schemas.
Icons
Any (conformant?) FHIR Implementation is allowed to use the FHIR icon in association with the FHIR implementation.
The FHIR icon is available in various sizes:
On This Page:
In addition to the set of base resources, FHIR also provides a simple RESTful implementation using HTTP (http://www.w3.org/Protocols/rfc2616/rfc2616.html) . Each resource type has the same set of interactions defined that can be used to manage the resources in a highly granular fashion. Applications claiming conformance to this framework claim to be conformant to "RESTful FHIR".
Note that in this RESTful framework, transactions are performed directly on the server resource using an HTTP request/response. The API does not directly address authentication, authorization, and audit collection - for further information, see the Security Page (§2.6).
The API describes the FHIR resources as a set of operations on resources where individual resource instances are managed in collections by their type. Servers can choose which of these operations are made available and which resource types they support. Servers SHALL provide a conformance statement (§3.5) that specifies what interactions and resources are supported.
The following logical interactions are defined:
| Instance Level Operations | |
| read (§2.1.6) | Read the current state of the resource |
| vread (§2.1.7) | Read the state of a specific version of the resource |
| update (§2.1.8) | Update an existing resource by its id (or create it if it is new) |
| delete (§2.1.9) | Delete a resource |
| history (§2.1.15) | Retrieve the update history for a particular resource |
| Type Level Operations | |
| create (§2.1.10) | Create a new resource with a server assigned id |
| search (§2.1.11) | Search the resource type based on some filter criteria |
| history (§2.1.15) | Retrieve the update history for a particular resource type |
| validate (§2.1.12) | Check that the content would be acceptable as an update |
| Whole System Operations | |
| conformance (§2.1.13) | Get a conformance statement for the system |
| transaction (§2.1.14) | Update, create or delete a set of resources as a single transaction |
| history (§2.1.15) | Retrieve the update history for all resources |

The Service Root URL is the address where all of the resources defined by this interface are found. The Service Root URL takes the form of
http(s)://server[/path]
The optional path may end with a trailing slash or not. Each resource type defined in this specification has a manager (or "entity set") that lives at the address "/[name]" where the name is the name of the resource type in lower case. For instance, the resource manager for the type "Patient" will live at:
http://server/path/patient
All the logical operations are defined relative to this service root URL. Note that this means that given the address of any one FHIR resource on a system, the correct address for all the other resources may be determined. However since application URLs may change and because in some uses of FHIR within internal eco-systems, local configuration may dictate that the provider of a resource is different to that claimed by any particular provider or consumer, applications may need to replace Service Root URLs.
Note: All URLs (and ids that form part of the URL) defined by this specification are case sensitive.
Note that a server may use a path of the form http://server/...[id]... where the id is some variable portion that identifies a particular instantiation of the FHIR API. Typically, the variable id identifies a patient, and the underlying information is completely compartmented by the patient id. In this case, the FHIR API presents a patient centric view of the record, where authentication/authorization is explicitly granted to the id contained in the URL.
Each resource has an associated set of resource metadata elements (§1.2.2). These map to the http request and response using the following fields:
| Metadata Item | HTTP Response Header |
|---|---|
| Id | The Id is represented explicitly in the URL |
| Version Id | The Version Id is represented by the full canonical URL in the content-location header (see vread (§2.1.7) below). The Version Id may also be represented in the http ETag, but the use of ETag is not needed by this specification |
| Last Modified Date | HTTP Last-Modified header |
This specification makes rules about the use of specific HTTP status codes in particular circumstances where the status codes must map to particular states correctly, and only where the correct status code is not obvious. Other HTTP status codes may be used for other states as appropriate, and this particularly includes various authentication related status codes and redirects. Authentication redirects should not be interpreted to change the location of the resource itself (a common web programming error).
FHIR defines an Issue Report resource (§3.27) that can be used to convey specific detailed processible error information. For a few combinations of operations and specific return codes, an Issue Report is required to be returned as the content of the response. The Issue Report may be returned with any HTTP 4xx or 5xx response, but is not required - many of these errors may be generated by generic server frameworks underlying a FHIR server.
The formal MIME-type for FHIR resources is application/fhir+xml (still to be registered) and SHOULD be use by clients and servers. Servers must support server-driven content negotiation as described in section 12 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html#sec12) of the HTTP specification, but in order to support various implementation limitations, may choose to support the (?_format=) parameter to specify alternative response formats by their MIME-types. For the _format parameter, the values "xml", "text/xml" and "application/fhir+xml" must be interpreted to mean the normative XML format defined by FHIR and "json", "application/json" and "application/fhir+json" must be interpreted to mean the informative JSON format.
FHIR uses UTF-8 for all request and response bodies. Since the HTTP specification (section 3.7.1) defines a default character encoding of ISO-8859-1, requests and responses MUST explicitly set the character encoding to UTF-8 using the 'charset' parameter of the MIME-type in the Content-Type header. Requests MAY also specify this charset parameter in the Accept header and/or use the Accept-Charset header.

The read interaction accesses the current contents of a resource. The interaction is performed by an HTTP GET operation as shown:
GET [service-url]/[resourcetype]/{@id} (?_format=mimeType)
This returns a single instance with the content specified for the resource type. This url may be accessed by a browser. The logical id is preceded by a "@" to make parsing the url easier. The possible values for the id itself are described in the id type. Servers are required to return a content-location header with the response which is the full version specific url (see vread below) and a Last-Modified header.
Note: Unknown resources and deleted resources are treated differently on a read: A GET for a deleted resource returns a 410 status code, whereas a GET for an unknown resource returns 404. Systems that do not track deleted records will treat deleted records as an unknown resource.

The vread interaction preforms a version specific read of the resource. The interaction is performed by an HTTP GET operation as shown:
GET [service-url]/[resourcetype]/{@id}/history/{@vid} (?_format=mimeType)
This returns a single instance with the content specified for the resource type for that version of the resource.
The version id is an opaque identifier that conforms to the same format requirements as a resource id. The id may have been found by performing a history operation (see below), by recording the version id from a content location returned from a read or from a version specific reference in a content model. If the version referred to is actually one where the resource was deleted, the server should return a 410 status code.
Servers are encouraged to support a version specific retrieval of the current version of the resource even if they are do not provide access to previous versions. If a request is made for a previous version of a resource, and the server does not support accessing previous versions, it should return a 405 Method Not Allowed error.

The update interaction creates a new current version for an existing resource or creates a new resource if no resource already exists for the given id. The update interaction is performed by an HTTP PUT operation as shown:
PUT [service-url]/[resourcetype]/{@id} (?_format=mimeType)
If the operation is successful, the server must return either a 200 OK if the resource was updated, or a 201 Created if the resource was created, along with a copy of the newly updated resource (which might not be the same as that submitted) with the response, along with a Last-Modified header, and a Location and Content-Location header that refers to the specific version created by the updated operation.
Servers are permitted to reject update operations because of integrity concerns or business rules implemented on the server, and return HTTP status codes accordingly (usually 422).
In particular, servers may choose to implement version-aware updates, where the only updates that are accepted quote the current version of the resource. In this case, the client must submit the currently correct version specific URL in the Content-Location in the PUT request. If the value is missing, the server SHALL return a 412 Preconditions failed response. Clients SHOULD submit a proper Content-Location header and SHALL correctly understand a 409 response as an update conflict.
Common HTTP Status codes returned on FHIR-related errors (in addition to normal HTTP errors related to security, header and content type negotiation issues):

The delete interaction removes an existing resource. The interaction is performed by an HTTP DELETE operation as shown:
DELETE [service-url]/[resourcetype]/{@id}
A delete operation means that non-version specific reads (§2.1.6) of a resource return a 410 error and that the resource is no longer found through search operations. Upon successful deletion the server should return 204 (No Content). If the server refuses to delete resources of that type on principle, then it should return the status code 405 method not allowed. If the server refuses to delete a resource because of reasons specific to that resource, such as referential integrity, it should return the status code 409 Conflict. If the resource cannot be deleted because it does not exist on the server, the server must return 404 (Not found). Performing this operation on a resource that is already deleted has no effect, and should return 204. Resources may be undeleted by PUTting an update to them subsequent to the deletion.
Many resources have a status element that overlaps with the idea of deletion. Each resource type defines what the semantics of the deletion operations are. If no documentation is provided, the deletion operation should be understood as deleting the record of the resource, with nothing about the state of the real-world corresponding resource implied.

The create interaction creates a new resource in a server assigned location. If the client wishes to have control over the id of a newly submitted resource, it should use the update operation instead. The create interaction is performed by an HTTP POST operation as shown:
POST [service-url]/[resourcetype] (?_format=mimeType)
The server returns a 201 Created, along with a copy of the newly created resource (which might not be the same as that submitted) with the acknowledgement, along with a version-aware Location header which contains the new location and id of the created resource:
Location: [service-url]/[resourcetype]/{@new-id}/history/{@new-vid}
When the payload data is incorrect and cannot be used to create a new resource, the server returns a 400 Bad Request.
Common HTTP Status codes returned on FHIR-related errors (in addition to normal HTTP errors related to security, header and content type negotiation issues):

This interaction searches a resource type based on some filter criteria. The interaction is performed by two different HTTP Get operation as shown:
GET [service-url]/[resourcetype]/search(?parameters) (&_format=mimeType) GET [service-url]/[resourcetype]/(?parameters) (&_format=mimeType)
Because of the way that some user agents treat POST requests, POST submissions are also allowed with exactly the same semantics as a GET operation. Search operations take a series of parameters that are a series of name'='value pairs encoded in the URL (or as an x-multi-part-form submission for a POST). (See W3C HTML forms (http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type) ). The search is processed as specified for the Query handling mechanism (§2.2).
The return content is an Bundle (§1.2.3) containing the results of the search as a list of resources in a defined order. Searches SHOULD use paging as described below (§2.1.18).

The validate interaction checks whether the attached content would be acceptable as an update to an existing resource. The validation operation may be the first part of a light two- phase commit process. The interaction is performed by an HTTP POST operation as shown:
POST [service-url]/[resourcetype]/validate/{@id}
The content is first checked against the general specification and against the conformance profile that applies to the application. How much additional checking over the normal create and update operations is performed is at the discretion of the server. Then the resource is considered as a proposed update and additional instance specific rules such as referential integrity and update logic (including version control) are applied as well. The return content has one of the following values:
Unless the result is 200 OK, the response must include an Issue Report (§3.27) that lists the issues found on validation.
The validation operation has complex semantics and rules; see the full discussion of the operation in the OMG hData REST specification (§2.1.20) for further details.

The conformance interaction retrieves the application's conformance statement that defines how it supports resources. The interaction is performed by an HTTP OPTIONS or a GET operation as shown:
GET [service-url]/metadata (?_format=mimeType) OPTIONS [service-url] (?_format=mimeType)
Applications SHALL return a Conformance Resource (§3.5) that specifies which resource types and operations are supported for the GET operation, and SHOULD do so for the OPTIONS oporation. If a 404 Unknown is returned from the GET, FHIR is not supported on the nominated service url. The GET operation is defined because not all client libraries are able to perform an OPTIONS operation. Additional parameters that are required to be returned with the OPTIONS command are defined in the OMG hData RESTful Transport (§2.1.20) specification.
Note that Servers may choose what content to return when they receive a GET operation on the Service Root URL. Generally some page that guides human manual interaction with the server would be appropriate.
A server may also choose to provide the standard set of operations on the Conformance Resource (§3.5), which means that it stores and manages a set of conformance statements. These managed conformance statements should not be confused with the server's own conformance statement, which is what is returned from these methods.

The transaction interaction submits a set of resources to be updated, created or deleted on the server. This interaction allows multiple resources to be updated/created in a single transaction. Multiple different types of resources may be submitted, including a mix of new and existing resources. The interaction is performed by an HTTP POST operation as shown:
POST [service-url] (?_format=mimeType)
The content of the post submission is a resource bundle. The resources in the bundle are each processed separately as if they were an individual create (§2.1.10), update (§2.1.8) or delete (§2.1.9) as described below, along with the normal processing for each (such as tracking tags, verification and version aware updates). Servers SHALL either accept all resources and return a 200 OK, along with a response bundle, or reject all resources and return an HTTP 400 or 500 type response. It is not an error if the submitted bundle has no resources in it. The outcome of the processing the transaction SHALL not depend on the order of the resources in the transaction. Note that this means that a resource can only appear in a transaction once, and since bundles may have the same resource more than once or other order dependencies (e.g. update lists), some kinds of bundles may not be able to be used in a transaction.
When a bundle is submitted in a transaction operation, all the resources have an identity specified in the bundle. If the identity of the resource matches an existing or possible resource location on the server, the server should treat this entry as an update operation (§2.1.8) (i.e. PUT to the given resource). If the identity is not one that the server recognises as a resource location it can use, the server should treat the operation as a create operation (§2.1.10) (i.e. POST to the given resource type URL), and create a new identity for the submitted resource. For clarity, when the client intends a resource to have a transient identity that the server must replace, it should use a cid: url on the resource. Note that the client must provide an identity in the bundle entry.id, but may also provide a version specific identity the atom "self" link, and may refer to this for version specific references. Deleted resources are those marked clearly using the method described for XML or JSON.
A transaction may include references from one resource to another in the bundle, which may include circular references where resources refer to each other. If the server assigns a new identity to any resource in the bundle, it SHALL also update any references to that resource in the same bundle as they are processed. References to resources that are not part of the bundle are left untouched. If a resource in the bundle carries a version-specific id (using its self-link), any version-specific references to it must also be updated. Servers SHALL be replace all matching links in the bundle, whether they are found in the resource ids, resource references, url elements, or <a href="" & <img src="" in the narrative.
Note that this allows clients to assign temporary (version-specific) ids to new resources and refer to them from within the bundle while the server will update these temporary ids after their creation. This is especially useful in RESTful scenario's where one would otherwise need multiple operations, possibly leading to loss of referential integrity (e.g. when storing a Provenance resource and its corresponding target resource), or, on document repositories, a document index entry and it's accompanying document.
In order to allow the client to know how newly created resources are now identified for future reference, the server must return a bundle containing the results of processing the resources in the same order that they were submitted.
The application constructing a bundle may not be sure whether a particular resource will already exist at the time that the transaction is executed; this is typically the case with reference resources such as patient and provider. In this case, the bundle should contain a candidate resource with a cid: identifier, and an additional search specifier using an Atom link:
<link href="http://localhost/patient/search?[parameters]" rel="search"/>
A search link with a root of http://localhost means to search the local resource store for a match as specified in the parameters (which must conform to the servers capability for searching as specified in it's conformance statement). If the search returns no matches, the server process the resource normally. If the search returns one match, the server uses this matching resource instead, and ignores the submitted resource. If more than one resource is found, the transaction must be rejected.
If the server that is processing the transaction requires version aware updates, the client may need to reference what is the server's current version of the resource, which is now the client's previous version:
<link href="[url]/patient/@34/history/@31" rel="predecessor-version"/>
The predecessor-version is treated as if it were the content-location header on an update operation.

The history interaction retrieves the history of either a particular resource, all resources of a given type, or all resources supported by the system. These three variations of the history operation are performed by HTTP Get operation as shown:
GET [service-url]/[resourcetype]/{@id}/history (?_format=mimeType)
GET [service-url]/[resourcetype]/history (?_format=mimeType)
GET [service-url]/history (?_format=mimeType)
The return content is a Bundle (§1.2.3) containing the specified version history, sorted with oldest versions last, and including deleted resources.
| _count : integer | single | Number of return records requested. The server is not bound to return the number requested, but cannot return more |
| _since : instant | single | Only include resource versions that were created at or after the given instant in time |
The history list can be restricted to a limited period by specifying a _since parameter which contains a full date time with timezone. Servers must ensure that if a client uses the feed.updated date from the last response they received as the value of the _since parameter, no versions will be missed. Clients should be aware that due to timing imprecision, they may receive notifications of a resource update on the boundary instant more than once. Servers are not required to support a precision finer than by second.
The updates list can be long, so servers SHALL use the method described in RFC 5005 (Feed Paging and Archiving) (https://tools.ietf.org/html/rfc5005) (also see above (§2.1.18)) for breaking the updates list into pages if appropriate.
The history operation is suitable for use with internet pub/sub systems based on rss/atom, including services such as Google Reader, allowing humans to easily subscribe to notifications of updates to a resource (this is usually appropriate for low volume high knowledge resources like profiles). In addition, the history operation can be used to set up a subscription from one system to another, so that resources are sychronised between them. Systems receiving such feeds and planning on enforcing resource integrity should note that transaction (§2.1.14) boundaries are not reflected in the history list.
Searches SHOULD use paging as described below (§2.1.18)

Tags (§1.2.2.1) are attached to resources to define operational behaviour. When resources are exchanged directly use HTTP on the read, vread, create and update operations, the http header "Category" is used, following the method described for Web Categories (http://tools.ietf.org/html/draft-johnston-http-category-header-02) .
Category: [Tag URI]; scheme="http://hl7.org/fhir/tag"; label="[Tag Uri]"
The label portion is optional. Note that label may come before scheme.
| read/vread | The server returns all tags associated with the resource in the headers |
| create | The server stores all the tags provided in the headers |
| update | The server store sall the tags provided in the headers, and keeps any tags already associated with the resource |
In the other operations, the resources are wrapped in bundles, where tags are represented in the entry.category element and servers populate these completely or process these as part of a transaction submission.
The following operations provide specific support for Tags:
GET [service-url]/tags | get a list of all tags |
GET [service-url]/[type]/tags | get a list of all tags used for the nominated resource type |
GET [service-url]/[type]/@[id]/tags | get a list of all tags affixed to the nominated resource type. This duplicates the HTTP header entries |
POST service-url]/[type]/@[id]/tags | Affix tags in the list to the nominated resource |
POST service-url]/[type]/@[id]/history/@[vid]/tags | Affix tags in the list to the nominated version of the resource |
DELETE service-url]/[type]/@[id]/tags | Remove tags in the list to the nominated resource |
DELETE service-url]/[type]/@[id]/history/@[vid]/tags | Remove tags in the list to the nominated version of the resource |
The tags of an old version can still be changed. Note that changing the tags on a resource does not create a new version of the resource. A tag list is represented like this in XML and JSON:
<taglist xmlns="http://hl7.org/fhir">
<!-- Tags in the list (0..*): -->
<category term="[Tag Uri]" label="[Tag Label]" scheme="http://hl7.org/fhir/tag">
</taglist>
{
"taglist" : {
"category" : [{
"term" : "[Tag Uri]",
"label" : "[Tag Label]",
"scheme" : "http://hl7.org/fhir/tag"
}]
}
}

FHIR servers can choose to offer support for purely binary resources at the end point [service-url]/binary. The binary end-point accepts any kind of content, such as images and other media, documents (CDA, PDF, Word etc), plain text, XML or anything else, and stores the content as is, along with the content type provided by the HTTP headers.
Binary resources function with the same operations as described above, except that there is no support for the search operation. The _format parameter has no meaning when used with binary resources: they are always represented using their original content type.

Servers SHOULD conform to the method described in RFC 5005 (Feed Paging and Archiving) (https://tools.ietf.org/html/rfc5005) for sending continuation links to the client when returning a bundle (e.g. with with history and search). If the server does not do this, there is no way to continue paging.
This example shows the third page of a search result:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Search Page 3</title>
<!-- This Search. url starts with base search, and adds the effective
parameters, and additional parameters for search state. All searches SHALL return this value.
In this case, the search continuation method is that the server maintains a state, with page
refernces into the stateful list.
-->
<link rel="self" href="http://example.org/patient/search?name=peter&stateid=23423443&page=3"/>
<!-- 4 links for navigation in the search. All of these are optional, but recommended -->
<link rel="first" href="http://example.org/patient/search?name=peter&stateid=23423443&page=1"/>
<link rel="previous" href="http://example.org/patient/search?name=peter&stateid=23423443&page=2"/>
<link rel="next" href="http://example.org/patient/search?name=peter&stateid=23423443&page=4"/>
<link rel="last" href="http://example.org/patient/search?name=peter&stateid=23423443&page=26"/>
<updated>2003-12-13T18:30:02Z</updated>
<!-- the rest of the search results... -->
</feed>
The server need not use a stateful paging method as shown in this example - it is at the discretion of the server how to best ensure that the continuation retains integrity in the context of ongoing changes to the resources. An alternative approach is to use version specific references to the records on the boundaries, but this is subject to continuity failures when records are updated.
A server MAY inform the client of the total number of resources returned by the operation using the totalResults element from the OpenSearch specification (http://www.opensearch.org/Specifications/OpenSearch/1.1) :
<feed xmlns="http://www.w3.org/2005/Atom"> <title>Search Page 3</title> <os:totalResults xmlns:os="http://a9.com/-/spec/opensearch/1.1/">1432</os:totalResults> <!-- the rest of the search results... --> </feed>
Note that for search, where _include can be used to return additional related resources, the total number of resources in the feed may exceed the number indicated in totalResults.
The HTTP protocol may be routed through an HTTP proxy such as squid. Such proxies are transparent to the applications, though implementers should be alert to the effects of caching, particularly including the risk of receiving stale content. See the HTTP specification (http://tools.ietf.org/html/rfc2616#page-74) for further detail
Interface engines may also be placed between the consumer and the provider. These differ from proxies because they actively alter the content and/or destination of the HTTP exchange and are not bound the rules that apply to HTTP proxies. Such agents are allowed, but must mark the http header to assist with troubleshooting.
Any agent that modifies an HTTP request or Response content other than under the rules for HTTP proxies must add a stamp to the HTTP headers like this:
request-modified-[identity]: [purpose] response-modified-[identity]: [purpose]
The identity must be a single token defined by the administrator of the agent that will sufficiently identify the agent in the context of use. The header must specify the agent's purpose in modifying the content. End point systems must not use this header for any purpose. Its aim is to assist with system troubleshooting.

This RESTful specification described here is based on the OMG Health RESTful specification (http://www.omg.org) (specific reference to be provided when this is published). In this regard, FHIR functions as a Record Format Profile as described in that specification. Note the following significant factors to be aware of:

These tables present a summary of the operations described here.
| Operation | Path | Request | ||||
|---|---|---|---|---|---|---|
| Verb | Content-Type | Body | Accept | Content-Location | ||
| read | /[type]/@[id] | GET | N/A | N/A | O | N/A |
| vread | /[type]/@[id]/history/@[vid] | GET | N/A | N/A | O | N/A |
| conformance | / or /metadata | OPTIONS / GET | N/A | N/A | O | N/A |
| update | /[type]/@[id] | PUT | R | Resource | O | O or R |
| create | /[type] | POST | R | Resource | O | N/A |
| transaction | / | POST | R | Bundle | O | N/A |
| delete | /[type]/@[id] | DELETE | N/A | N/A | N/A | N/A |
| search | /[type]/search | GET | N/A | N/A | O | N/A |
| search-all | /[type] | GET | N/A | N/A | O | N/A |
| validate | /[type]/validate/@[id] | POST | R | Resource | O | N/A |
| history | /[type]/@[id]/history | GET | N/A | N/A | O | N/A |
| history-type | /[type]/history | GET | N/A | N/A | O | N/A |
| history-all | /history | GET | N/A | N/A | O | N/A |
Note: N/A = not present, R = Required, O = optional.
| Operation | Response | ||||
|---|---|---|---|---|---|
| Content-Type | Body | Location | Content-Location | Status Codes | |
| read | R | Resource | N/A | R | 200, 404, 410 |
| vread | R | Resource | N/A | O | 200, 404, 405, 410 |
| conformance | R | Conformance | N/A | O | 200, 404 |
| update | R | Resource | N/A | R | 201, 400, 404, 405, 409, 412, 422 |
| create | R | Resource | R | O | 200, 201, 400, 404, 405, 422 |
| transaction | R | Bundle | N/A | N/A | 200, 400, 404, 405, 409, 412, 422 |
| delete | N/A | N/A | N/A | N/A | 204, 405, 404 |
| search | R | Bundle | N/A | N/A | 200 |
| search-all | R | Bundle | N/A | N/A | 200 |
| validate | N/A or R | N/A or OperationOutcome | N/A | N/A | 400 |
| history | R | Bundle | N/A | N/A | 200 |
| history-type | R | Bundle | N/A | N/A | 200 |
| history-all | R | Bundle | N/A | N/A | 200 |
Note: this table lists the status codes described here, but other status codes are possible as described by the HTTP specification. Additional codes that are likely a server errors and various codes associated with authentication protocols.
Status: A proposed resource
A description of a query with a set of parameters.
The resource name as it appears in a RESTful URL is /query/
On This Page:
Managing Returned Resources (§2.2.3)
Managing Search Results (Known Broken Link - needs to be resolved)

One operation that is fundamental to the way FHIR works is to search (find existing resources by filter criteria) or query (more detailed questions based on existing data). Search/query operations can span complexity from a simple search based on indexed criteria, through to complex decision support based requests, and also direct queries that need to be handled by humans. This page documents the FHIR search framework, starting with the simple cases, and working into the increased complexity. Implementations need only implement the amount of complexity that they require.
In the simplest case, a search is executed by performing a GET operation in the RESTful framework:
GET .../[resourcetype]/(?parameters)
Search/Query operations can also be initiated by other more complex and flexible methods described below.
In the RESTful search, the client requests that a search be performed using an HTTP call, and the parameters are a series of name=value pairs encoded in the URL or as an x-multi-part-form submission for a POST.
The server returns the results in the HTTP response. A HTTP status code of 403 signifies that the server refused to perform the query, while some other 4xx or 5xx code signifies an error.

The search parameter _id which refers to the logical id of the resource.
GET .../patient?_id=23
This search finds the resource with the given id (there can only be one resource for a given id)
In addition to this resource, each FHIR resource type defines a set of applicable search parameters with their names, types, and meanings. Mostly, the defined search parameters correspond to a single element in the resource, but this is not required, and some search parameters refer to the same type of element in multiple places, or refer to derived values.
Servers are not required to implement any of these search parameters (except for the _id parameter described above), and may define their own additional parameters if they wish.

Each search parameter is defined a type that defines how the search parameter behaves. These are the defined parameter types:
| integer | Search parameter must be a simple whole number |
| string | Search parameter is a simple string, like a name part. Search is case-insensitive and accent-insensitive. May match just the start of a string. String parameters may contain spaces and are delineated by double quotes, e.g. "van Zanten". |
| text | Search parameter is on a long string. Used for text filter type search: it functions on searches within a body of text and may contain spaces to separate words. May match even if the separate words are found out of order. Text parameters are delineated by double quotes. |
| date | Search parameter is on a date (and should support -before and -after variants). The date format is the standard XML format, though other formats may be supported |
| token | Search parameter on a coded element or identifier. May be used to search through the text, displayname, code and code/codesystem (for codes) and label, system and key (for identifier). It's value is either a string or a pair of namespace and value, separated by a "!". |
| reference | A pair of resource type and resource id, separated by "/". Matches when the resource reference resolves to a resource of the given type and id. |
| composite | A composite search parameter that combines other search parameters together |
The search parameters can also have "modifiers" appended to them that control their behaviour. The kind of modifiers that can be used depend on the type of parameter.

Parameters are defined per resource, and their names may additionally specify a modifier as a suffix, separated from the parameter name by a dot. Modifiers are:
The prefixes >, >=, =<, and < may be used on the parameter value, and has the usual meaning. Note that '=" must be escaped in the value in a URL.
A token type is a parameter that searches on a code or identifier value where the value may have a URI that scopes it's meaning (from a Coding (§1.4.4) or an Identifier (§1.4.12) type, and also from a code where the URI is implicit).
If the parameter has no modifier, or the modifier 'text', the search parameter is a string, if the modifier is ‘code’ the parameter is a pair of fixed value strings, namespace and value, separated by a "!". Without modifier, the search will use the textual parameter to do a partial match on code, text or display. With modifier ‘text’ the search will do a partial match on text or display. With the ‘code’ modifier, the search will work as follows:
For token, you need (at least) to escape the ":" and possibly “#” (the fragment identifier) in the url of the code system.
A date parameter searches on a date/time or period. As is usual, while the concept is straight-forward, there are a number of subtleties involved in ensuring consistent behavior.

A reference parameter refers to references between resources, e.g. find all problems where the subject reference is a particular patient by the patient id.
The interpretation of a reference parameter is either:
In order to save a client from doing a series of search operations, reference parameters may be "chained" by appending them with modifiers which are search parameters defined for the target resource. This can be done recursively, following a logical path through a graph of related resources. For instance, given that the resource DiagnosticReport (§3.12) has a search parameter named subject, which is usually a reference to a Patient (§3.31) resource, and the Patient resource includes a parameter name which searches on patient name, then the search
diagnosticreport/search?subject.name=peter
is a request to return all the lab reports that have a subject whose name includes "peter".
Advanced Search Note: Where a chained parameter searches a resource reference that may have more than one different type of resource as it's target, the parameter chain may end up referring to search parameters with the same name on more than one kind of resource at once. The parameter names defined in FHIR have consistent types wherever they are used. Implementers defining their own names need to be sure that they do not create unprocessible combinations.
The result of the search operation is the intersection of the resources that match the criteria specified by each individual search parameter. If a parameter repeats, such as /patient?language=FR&language=NL, then this matches a patient who speaks both languages. If, instead, the search is to find patients that speak either language, then this is a single parameter with multiple values, separated by a ',': /patient?language=FR,NL.
This allows for simple combinations of and/or values, but doesn't allow a search based on a pair of values, such as all observations with a sodium value >150 mmol/L (particularly as the end criteria of a chained search), or searching on Group.characteristic: you need find a combination of key/value, not an intersection of separate matches on key and value. Another example is spatial coordinates when doing geographical searches.
To allow these searches, a resource may also specify searches that take sequences of single values as an argument. The meaning of each component in such a sequence is documented in the definition of the parameter. These sequences are formed by joining the single values with a "$". Note that this sequence is a single value and itself can be composed into a set of values, so that, for example, multiple matching state-on-date parameters can be specified as state-on-date=new$2013-05-04,active$2013-05-05.
Resources may have tags affixed to them. the _tag resource searches for a resource by URI. For example:
problem/search?_tag=http://acme.org/fhir/tags/needs-review
This searches for all problem resources with the tag "http://acme.org/fhir/tags/needs-review". The _tag search parameter may have the modifiers .partial and .text, which mean to only match on the left side of the target tags, or to search the label part of the tag respectively.


The client can indicate which order to return the results in using the parameter "_sort". This can be set to one of the search parameters. Where the search parameter returns multiple values, the lowest value will be used when ordering the returned records. Note that the actual sort value used is not returned explicitly by the server.
In order to keep the load on clients, servers and the network minimized, the server may choose to return the results in a series of pages. The search result set contains the URLs that the client uses to request additional pages from the search set. For a simple RESTful search, the page links are contained in the returned bundle as links (§2.1.18).
Typically a server will it's own parameters to the links that it uses to manage the state of the query as pages are retrieved. These parameters do not need to be understood or processed by the client.
The parameter _count is defined as a hint to the server regarding how many resources should be returned in a single page. Servers SHALL not return more resources than requested (even if they don't support paging) but are allowed to return less than the client asked for. Note that it is at the discretion of the search engine how to handle ongoing updates to the resources while the search is proceeding.

Clients may request that the engine return additional resources related to the search results, in order to reduce the overall network query time. A typical case where this is useful is where the client is querying on some type of clinical resource, but for every such resource returned, the client will also need the subject (patient) resource that the clinical resource refers to. The client requests that the subject resources be included in the results set by providing one or more _include parameters.
Each _include parameter specifies a path to a url (usually a resource reference):
GET .../medicationprescription/search?_include=MedicationDispense.prescription
&_include=MedicationPrescription.prescriber&criteria...
For each returned resource, the server collects the elements described by the path, and any resources they point to that the server also holds are added to the results. This search returns all the Medication Prescription (§3.24) resources and their prescribing Practitioner (§3.33) Resources for the matching Medication Dispense (§3.23) resources.
Include paths are processed only in the context of a single resource - they can not include paths such as Resource.name1.name2 where name2 is a name in a resource pointed to by name1. Include paths may include wild cards, such as MedicationDispense.results.*, or even _include=*, though both servers and clients need to take care not to request or return too many resources when doing this.
For servers, recursive and wildcard _includes are demanding and may slow the search response time significantly. Servers are not obliged to honor requests to include additional resources in the search results.
If the _include path matches an url that points to a resource that the server itself does not hold itself, the server may still elect to include the target of the uri reference in the returned results as a Binary resource. For example, the include path may point to an attachment which is by reference, like this:
<content> <contentType>image/jpeg</contentType> <url>http://example.org/images/2343434/234234.jpg</url> </content>
The server can retrieve the target of this reference on behalf of the client, and add this to the results for the convenience of the client.

In order to allow the client to be confident about what search parameters were used as a criteria by the server, the server SHALL return the parameters that were actually used to process the search. Applications processing search results SHALL check these returned values where necessary. For example, if the server did not support some of the filters specified in the search, a client might manually apply those filters to the retrieved result set, display a warning message to the user or take some other action.
In the case of a RESTful search, these parameters are encoded in the self link in the atom feed that is returned:
<link rel="self" href="http://example.org/patient/search?name=peter"/>
In other respects, servers have considerable discretion with regards to supporting search:

The search framework described above is a useful framework for providing a simple search based on indexed criteria, but more sophistication is needed to handle precise queries, complex decision support based requests, and direct queries that have human resolution.
More advanced search/query operations are specified by the _query parameter:
GET .../patient?_query=name¶meters...
The _query parameter names a custom search profile that describes a specific search/query operation. The named query may define additional parameters that are used with that particular named query, and will define their type and behavior on repetition and omission.
FHIR defines some named queries:
In addition, servers can define their own additional named queries to meet their own uses.
There can only ever be one _query parameter in a set of search parameters. Servers processing search requests must refuse to process a search request if they do not recognise the _query parameter value.
Some named queries may have side effects such as creating new clinical resources that may be persistent or transitory. The general search defined above always searches existing resources, and the only new resources that may be created are Security Event (§3.39) resources auditing the search.
FHIR defines 3 different ways in which a search through a repository of resources can be initiated:
In all 3 cases, the basic operation is simple: given a set of parameters which are name/value pairs, perform a query against a repository of resources, and return the set of matching resources, possibly with some additional related resources. The second two search methods are implemented using the Query Resource.

The resource is used to perform queries using messaging-based exchanges, and to perform asynchronous searches using the RESTful interface.

See also the Examples (§4.43) and the Definitions (§5.45).
<Query xmlns="http://hl7.org/fhir"> <id value="[uri]"/><!-- 1..1 Links query and it's response(s) --> <parameter> <!-- 1..* Set of query parameters --> <name value="[string]"/><!-- 1..1 Name of parameter --> <value value="[string]"/><!-- 0..1 Value of parameter --> </parameter> <response> <!-- 0..1 If this is a response to a query --> <id value="[uri]"/><!-- 1..1 Links response to source query --> <outcome value="[code]"/><!-- 1..1 Outcome of processing the query --> <total value="[integer]"/><!-- 0..1 Total number of matching records --> <parameter><!-- 1..* Content as for Query.parameter Parameters server used --></parameter> <first> <!-- 0..1 To get first page --> <parameter><!-- 1..* Content as for Query.parameter Parameter list --></parameter> </first> <previous> <!-- 0..1 To get previous page --> <parameter><!-- 1..* Content as for Query.parameter Parameter list --></parameter> </previous> <next> <!-- 0..1 To get next page --> <parameter><!-- 1..* Content as for Query.parameter Parameter list --></parameter> </next> <last> <!-- 0..1 To get last page --> <parameter><!-- 1..* Content as for Query.parameter Parameter list --></parameter> </last> <reference><!-- 0..* Resource(Any) Resources that are the results of the search --></reference> </response> </Query>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Query.response.outcome | The outcome of processing a query request | http://hl7.org/fhir/query-outcome |
Notes about the Query resource:

In order to initiate a message-based query, a sender sends a message consisting of a Message (§2.3) resource, and a Query resource. The message resource routes the messasge to the correct destination, and the query contains the parameters of the search that is requested. See the examples (Known Broken Link - needs to be resolved) for an example query request message.
The receiver processes the message, and then returns a message with a message header, a query with a response details, and a set of resources that meet the query criteria. See the examples (Known Broken Link - needs to be resolved) for an example query response message.
If the sender wishes to retrieve additional pages from the original search, the sender constructs a new query with the parameters specified by the search processing system, and the cycle starts again.
The RESTful framework provides a simple convenient synchronous search based on request/response as described above. This works well as long it doesn't take very long to process a query. As the query processing time gets longer, the synchronous search starts to take too long to manage in this kind of framework. In particular, some queries may require human intervention to process correctly, or may even by direct humna-human queries. For these, some asynchronous approach is required. The messaging solution discussed above can be used asynchronously, but it's also possible to implement asynchronous queries in a RESTful environment. Here's how this would work:
This pattern is more complex than the other uses, so will be used less. There are several variations on this theme. For instance, the requester may choose to perform the first two operations as a transaction (§2.1.14), or the responder may choose to inform the requester that processing as commenced with an order response code of "accepted".
Note that it's also possible to expose service end points in a SOA fashion that use the query resource and/or definitions in other ways, though such usages are not described in FHIR.

The results of a search/query operation are only guaranteed to be current at the moment the operation is executed. After the operation is executed, ongoing actions performed on the resources against which the query was executed will render the results increasingly stale. The significance of this depends on the nature of the search, and the kind of use that is being made of the results.
This is particularly relevant when the server is returning the results in a series of pages. It is at the discretion of the search engine how to handle ongoing updates to the resources while the search is proceeding.
Query result sets may include resources created by the processing of the search. Typically, these are the results of queries for decision support, value set expansion, etc, and represent the outcome of processing the query. In order to be usable in the scenarios above, these resources have a defined structure and have the same metadata as any other resource, including a known identity, but they have the same currency issues as the results from a query.
Applications handling the results of an operation that creates resources should use these resources with careful consideration of their currency. Though the resources may be retained for audit purposes, implementers must be careful not to reuse these as if they are current.
note: known issues relating to this page:
As a consequence of the general framework, it is possible to search on a set of stored queries, though there is no known particular use case for doing so.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| id : token | Links query and it's response(s) |
| response : token | Links response to source query |
(See Searching (§2.1.11)).
Status: Approved infrastructure resource. Draft for comment
A transmission requesting action on a bundle of one or more resources or a response to such a request.
This page describes how FHIR Resources can be used in a traditional messaging context, much like HL7 v2. Applications claiming conformance to this framework claim to be conformant to "FHIR messaging".
In FHIR messaging, a "request message" is sent from a source application to a destination application when an event happens. Events mostly correspond to things that happen in the real world. The request message consists of a bundle (§1.2.3) of resources, with the first resource in the bundle being this Message resource. The Message resource has a code - the message event - that identifies the nature of the request message and carries additional request metadata. The other resources in the bundle depend on the type of the request.
The events supported in FHIR, along with the resources that are included in them, are defined below.
The destination application processes the request and returns one or more response messages which are also a bundle (§1.2.3) of resources, with the first resource in the bundle being a Message (§2.3.4) resource with a response section that reports the outcome of processing the message and any additional response resources required.
This specification assumes that content will be delivered from one application to another by some delivery mechanism, and then a response will be returned to the source application. The exact mechanism of transfer is irrelevant to this specification, but may include file transfer, http based transfer, MLLP (HL7 minimal lower layer protocol), MQ series messaging or anything else. The only requirement for the transfer layer is that requests are sent to a known location and responses are returned to the source of the request. This specification considers the source and destination applications as logical entities, and the mapping from logical source and destination to implementation specific addresses is outside the scope of this specification.
In principle, source applications are not required to wait for a response to a transaction before issuing a new transaction. However in many cases, the messages in a given stream are dependent on each other, and must be sent and processed in order. In addition, some transfer methods may require sequential delivery of messages.
This specification ignores the existence of interface engines and message transfer agents that exist between the source and destination. Either they are transparent to the message/transaction content and irrelevant to this specification, or they are actively involved in manipulating the message content. If these middleware agents are modifying the message content, then they become responsible for honoring the contract that applies (including applicable profiles) in both directions.
An incoming message contains two identifiers: the envelope id (feed (§1.3.8.1).id) and the message (§2.3).id. Each time a new message is created, it must be assigned an identifier that is unique within that message stream. Note that since message streams are often merged with other streams, it is recommended that the id should be globally unique. This can be achieved by using a UUID or an OID or appropriately chosen URI with a serially incrementing number. Each time a message is sent, the bundle identifier should be changed to a new identifier.
When a receiver receives and processes the message, it responds with a new message with a new id, wrapped in a bundle which also has a new id. The response message also quotes the request message id so that the source system can relate the response to it's request.

Some of the message delivery mechanisms mentioned above are reliable delivery systems - the message is always delivered, or an appropriate error is returned to the source. However most implementations use methods which do not provide reliable messaging, and either the request or the response can get lost in transit. FHIR messaging describes a simple approach to handle this that receivers should conform to in order to maintain predictable functionality even when messaging is not reliable.
When considering the issue of reliable messaging, the source application should consider whether the message is a message of consequence, or a message of currency. A message of consequence is one where the message requests a change that should not be processed more than once, and where the sender needs the response that results from processing the message. A message of currency is where the correct response is the very latest information available. Typically, this is status information. Some messages fit into neither category - the response does not particularly matter. Usually these are notification messages.
In order to enable these processing rules, and to benefit from them, the original sender of the message SHALL do the following when it receives no response to a message within a configured timeout period:
| Consequence | Resend the same message (including with the same id) with the same envelope id |
| Currency | Resend the same message (including with the same id) with a different envelope id |
| Neither | Resend the same message (including with the same id) with a different envelope id |
When a receiver declares that it implements reliable answers, it SHALL check the incoming envelope and message ids against a cache of previously received messages. The correct action to take depends on what is received:
| Both the envelope and message id have not been received | This is the normal case, and the message should be processed |
| Both envelope & message already received | The original response has been lost (failed to return to the request issuer), and the original response must be resent |
| The message id has already been received, but the envelope id is new | A previously seen message has been resubmitted for processing again. The server may either reprocess the message, or reject the message |
| The envelope id has already been received, but the message id is new | This is an error - envelope ids should never be reused |
The duration period for caching does generally not need to very long. At a minimum, it could be 1 minute longer than the timeout of the sending system, though it may need to be longer depending on the re-sending policies of the sending system.
TODO: describe some use cases
Applications may only claim to be conformant to "FHIR messaging" if they publish a conformance statement so the claim may be verified. A conformance statement lists all the message events they support (either as sender or receiver) and for each event, a profile that states which resources are bundled (sender), or are required to be bundled (receiver), and any rules about the information content of the individual resources. The conformance statement is a resource with the name "Conformance" (§3.5).

There are two end-points defined for a RESTful server that supports Messages:
The first end-point is used for working within the message contents, for instance, for building messages piecemeal or for auditing received messages. Creating or updating Message resources to this end point does not represent the actual occurrence of any event, nor can it trigger any logic associated with the actual event. It is just for managing message resources.
The second end-point is used for actually sending messages as bundles (§1.2.3), to indicate that the event identified by the code has occurred. The end-point responds with a message response as defined for the particular event, or an error indicating that the attempt to process the message was unsuccessful. The functionality of this end-point is described below (§2.3.7).
Note: While the end-points above are defined for use with message resources and for delivering messages to a RESTful server, it is not necessary to use them; messages may be transported between systems using any method desired.


See also the Examples (§4.30) and the Definitions (§5.32).
<Message xmlns="http://hl7.org/fhir"> <identifier value="[id]"/><!-- 1..1 Id of this message --> <timestamp value="[instant]"/><!-- 1..1 Time that the message was sent --> <event value="[code]"/><!-- 1..1 Code for the event his message represents --> <response> <!-- 0..1 If this is a reply to prior message --> <identifier value="[id]"/><!-- 1..1 Id of original message --> <code value="[code]"/><!-- 1..1 Type of response to the message --> <details><!-- 0..1 Resource(OperationOutcome) Specific list of hints/warnings/errors --></details> </response> <source> <!-- 1..1 Message Source Application --> <name value="[string]"/><!-- 0..1 Name of system --> <software value="[string]"/><!-- 1..1 Name of software running the system --> <version value="[string]"/><!-- 0..1 Version of software running --> <contact><!-- 0..1 Contact Human contact for problems --></contact> <endpoint value="[uri]"/><!-- 1..1 Actual message source address or id --> </source> <destination> <!-- 1..1 Message Destination Application --> <name value="[string]"/><!-- 0..1 Name of system --> <target><!-- 0..1 Resource(Device) Particular delivery destination within the destination --></target> <endpoint value="[uri]"/><!-- 1..1 Actual destination address or id --> </destination> <enterer><!-- 0..1 Resource(Practitioner) The source of the data entry --></enterer> <author><!-- 0..1 Resource(Practitioner) The source of the decision --></author> <receiver><!-- 0..1 Resource(Practitioner|Organization) Intended "real-world" recipient for the data --></receiver> <responsible><!-- 0..1 Resource(Practitioner|Organization) Final responsibility for event --></responsible> <effective><!-- 0..1 Period Time of effect --></effective> <reason><!-- 0..1 CodeableConcept Cause of event --></reason> <data><!-- 0..* Resource(Any) The actual content of the message --></data> </Message>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Message.event | One of the message events defined as part of FHIR | http://hl7.org/fhir/message-events (Known Broken Link - needs to be resolved) |
| Message.response.code | The kind of response to a message | http://hl7.org/fhir/response-code |
| Message.reason | The reason for an event occurring | No details provided yet |

| Code | Description | Request | Response | Notes |
|---|---|---|---|---|
| MedicationAdministration-Complete | Change the status of a Medication Administration to show that it is complete. | MedicationAdministration | MedicationAdministration | |
| MedicationAdministration-Nullification | Someone wishes to record that the record of administration of a medication is in error and should be ignored. | MedicationAdministration | MedicationAdministration | |
| MedicationAdministration-Recording | Indicates that a medication has been recorded against the patient's record | MedicationAdministration | MedicationAdministration | |
| MedicationAdministration-Update | Update a Medication Administration record. | MedicationAdministration | MedicationAdministration | |
| admin-notify | Notification of a change to an administrative resource (either create or update). Note that there is no delete, though some administrative resources have status or period elements for this use | Device | -- | |
| Group | -- | |||
| Patient | -- | Patient Links cannot be updated using admin-notify. The links element must be empty | ||
| Device | -- | |||
| diagnosticreport-provide | Provide a diagnostic report, or update a previously provided diagnostic report | DiagnosticReport DiagnosticReport.patient DiagnosticReport.perfomer DiagnosticReport.results.specimen DiagnosticReport.results.result DiagnosticReport.image | -- | |
| observation-provide | Provide a simple observation or update a previously provided simple observation | Observation Observation.subjectPatient Observation.subjectPatient.person Observation.subjectGroup Observation.subjectDevice Observation.subjectAnimal Observation.performerAgent Observation.performerAgent.person Observation.performerPatient Observation.performerPerson | -- | |
| patient-link | Notification that two patient records actually identify the same patient | Patient,Patient | -- | Follow ups: patient-unlink? |
| patient-unlink | Notification that previous advice that two patient records concern the same patient is now considered incorrect | Patient,Patient | -- | |
| query | Request to perform a query according to the attached query resource | query | query | |
| query-response | Response with the result of processing the query | query | -- | Used when queries are performed asynchronously |

The mailbox is the standard name for a service hosted on a RESTful server that accepts messages and processes them as transactions and returns a message response appropriate for the message received. The server is under no obligation to do anything particular with the resources except as required by the semantics of the event code in the message resource. A server may choose to retain the resources and make them available on a RESTful interface, but is not required to do so. If the server returns 200 Ok, it must return a valid message that indicates what the outcome of the event processing is. An HTTP error indicates that the message was not processed successfully and that it should be resubmitted (and doing so should not result in a duplicate message response). Repeated failures indicate either a fatal problem with the message or a problem with the receiving application.
The mailbox can also be used to accept documents. In this case, the document is "accepted" (the server takes responsibility for custody of the received document) and an HTTP status of 204 No Content is returned, or an HTTP error is returned. The server is under no obligation to do anything with the document except as specific trading partner agreements dictate.
The following rules apply to the mailbox:
This simple mailbox profile can be used by any HTTP end point that accepts FHIR messages or documents, not just FHIR RESTful servers.
In order to ensure consistency of processing, the logical rules regarding processing of envelope id and message id described above (§2.3.1.2) SHALL be followed when messages are processed using the MailBox. No such rules apply regarding documents - if the client receives no response, it should continue to submit the document until it does. Servers SHALL accept multiple document submissions and process them correctly.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
(See Searching (§2.1.11)).
Status: Approved infrastructure resource. Draft for comment
A documentation of healthcare-related information that is assembled together into a single statement of meaning that establishes its own context. A document is composed of a set of resources that include both human and computer readable portions. A human may attest to the accuracy of the human readable portion and may authenticate and/or sign the entire whole. A document may be kept as a set of logically linked resources, or they may be bundled together in an atom feed.
FHIR resources can be used to build clinical documents that capture information about clinical observations and services. A clinical document is a bundle (§1.2.3) (a list of resources in an atom feed (§1.3.8.1)) that is fixed in scope, frozen in time and authored and/or attested as a set of logically contained resources by humans, organisations and devices. Documents built in this fashion may be exchanged between systems and also persisted in document storage and management systems, including systems such as IHE XDS. Applications claiming conformance to this framework claim to be conformant to "FHIR documents".
Note that FHIR defines both this document format and also a document reference resource (§3.13). FHIR documents are for documents that are authored and assembled in FHIR, while the document reference resource is for general references to other documents.
All documents have the same structure: a bundle (§1.2.3) that has a Document resource (see below) first, followed by a series of other resources referenced from the Document header that provides guidance on how they fit together. The bundle gathers all the content of the document into a single XML document which may be signed and managed as required. The resources include both human and computer readable portions.
The document resource identifies the document and its purpose, sets the context of the document and carries key information such as the subject and author. It also divides the document up into a series of sections that contain other resources identified in this specification that carry the content. Any resource referenced directly in the Document resource must be included in the bundle when the document is assembled. Other resources that these referenced resources refer to may also be included in the bundle if the document originator chooses to.
Document profiles (§3.36) can make additional rules about which resources must be included in the bundle along with the resources that are directly referenced in the Document resource. In addition, Document Profiles can specify what sections a document contains and what the constraints on those contents are. Applications should consider publishing conformance statements (§3.5) that identify particular documents they support.

There are two RESTful end-points used for Documents:
Note: While these end-points are defined for use with document resources and document bundles, it is not necessary to use them. Documents may be transferred between systems by using the MailBox (§2.3.7) target, or by using any other method desired.

See also the Examples (§4.16) and the Definitions (§5.18).
<Document xmlns="http://hl7.org/fhir"> <identifier><!-- 0..1 Identifier Logical identifier for document (version-independent) --></identifier> <versionIdentifier><!-- 0..1 Identifier Version-specific identifier for document --></versionIdentifier> <created value="[instant]"/><!-- 1..1 Document creation time --> <class><!-- 0..1 Coding Particular kind of document --></class> <type><!-- 1..1 CodeableConcept Kind of document (LOINC if possible) --></type> <title value="[string]"/><!-- 0..1 Document title --> <confidentiality><!-- 1..1 Coding As defined by affinity domain --></confidentiality> <subject><!-- 1..1 Resource(Patient|Group|Device) Who/what the document is about --></subject> <author><!-- 1..* Resource(Practitioner|Device) Who/what authored the final document --></author> <attester> <!-- 0..* Attests to accuracy of document --> <mode value="[code]"/><!-- 1..1 personal | professional | legal | official --> <time value="[dateTime]"/><!-- 0..1 When document attested --> <party><!-- 0..1 Resource(Patient|Practitioner|Organization) Who attested the document --></party> </attester> <custodian><!-- 0..1 Resource(Organization) Org which maintains the document --></custodian> <event> <!-- 0..1 The clinical event/act/item being documented --> <code><!-- 0..* CodeableConcept Code(s) that apply to the event being documented --></code> <period><!-- 0..1 Period The period covered by the document --></period> <detail><!-- 0..* Resource(Any) Full details for the event(s) the document concents --></detail> </event> <visit><!-- 0..1 Resource(Visit|InterestOfCare) Context of the document --></visit> <replaces value="[id]"/><!-- 0..1 If this document replaces another --> <provenance><!-- 0..* Resource(Provenance) Additional provenance about the document and it's parts --></provenance> <stylesheet><!-- 0..1 Attachment Stylesheet to use when rendering the document --></stylesheet> <representation><!-- 0..1 Attachment Alternative representation of the document --></representation> <section> <!-- 0..* Document is broken into sections --> <code><!-- 0..1 CodeableConcept Classification of section (recommended) --></code> <subject><!-- 0..1 Resource(Patient|Group|Device) If section different to document --></subject> <content><!-- 0..1 Resource(Any) The actual data for the section --></content> <section><!-- 0..* Content as for Document.section Nested Section --></section> </section> </Document>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Document.type | Type of a clinical document | ?? |
| Document.confidentiality | Codes specifying the level of confidentiality of the XDS Document | No details provided yet |
| Document.attester.mode | The way in which a person authenticated a document | http://hl7.org/fhir/document-attestation-mode |
| Document.section.code | Classification of a clinical document section | ?? |
There are two identifiers on the document information: id and versionId. These allow either a logical document id or a version specific id to be provided, or both. This supports multiple different identification strategies. The following combinations are allowed:
Any other combinations do not globally uniquely identity a document and are therefore not allowed.
Note that there is an additional identifier - the bundle identifier itself (atom (§1.3.8.1) feed.id). This must be an absolute URI - in effect globally unique - but has no other particular meaning anywhere else in the specification. For a document, it can be populated with some URI that is extracted from the versionId or id above, or it can be a new UUID that has no other associated use. Implementers should not rely on its value matching one of the formal document identification elements.
The human display of the Document is the collated narrative portions of following resources (in order):
The document narrative should summarize the important parts of the document header that are required to establish clinical context for the document (other than the subject, which is displayed in its own right). To actually build the combined narrative, simply append all the narrative <div> fragments.

In addition to the basic style rules (§1.3.2.2), which must be followed, a document can contain a style sheet that contains additional styles that apply to the collated narrative. Unless otherwise agreed in local trading partner agreements, applications displaying the collated narrative should use the style sheet provided in the document. Parties entering into such a trading agreement should consider the implications it will have on their long term scope for document exchange very carefully. If the parties agree on a stylesheet that is not contained in the document, then it is likely that they will never be able to share their documents in a more general context, such as a regional or national EHR, or a global personal health record.
The authors and users of Clinical Documents, whether human or software, have obligations that they must satisfy.
A document author is an application that creates a document resource. The author may create new content resources and/or assemble already existing content resources while doing so. A document author has the following responsibilities:
A document user is an application that receives or presents documents, or extracts data from them, or makes decisions because of them. The documents may be received directly from a document author, accessed via a document management system or forward by a third party. The document user is responsible for ensuring that received documents are processed and/or rendered in accordance to this specification. A document recipient has the following obligations:

Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| attester : reference | attester of the document |
| author : reference | author of the document |
| context : token | context of the document |
| date : date | date equal to the document creation time |
| date-before : date | date before or equal to the document creation time |
| date-after : date | date after or equal to the document creation time |
| identifier : token | Logical identifier for document (version-independent) |
| section-content : reference | content resource of the section |
| section-type : token | code of the document |
| subject : reference | subject of the document |
| type : token | the type of the document |
| version : token | Version-specific identifier for document |
(See Searching (§2.1.11)).

FHIR is a framework standard that defines a common way to solve healthcare problems, and provides a set of resources that can be used in many different ways. This page describes how certain common usage scenarios are implemented using the capabilities that FHIR defines.

In the PHR scenario, an Electronic Medical Record system (EMR, though many other names and acronyms are also used) provides a RESTful API that allows patients to access their own medical record using a common web portal or mobile application. In this scenario, the PHR provider:
The EMR exposes a FHIR server that supports the search and read operations on the following resources:
Here is the conformance Profile for this scenario:
The EMR may also choose to provide additional functionality, such as shared access to patient records by relatives/carers, to allow the patient to upload their own documents, medication statements, observations (e.g. from patient monitoring devices) and/or to allow the patient to make appointments. This additional functionaly will involve additional API capabilities to be implemented and exposed. The EMR server may also choose to expose the read, search and updates operation on the Security Event resource for the patient-specific records to allow patient review of record access.


Fast Healthcare Interoperability Resources (FHIR) is not a security protocol, nor does it define any security related functionality. However FHIR does define exchange protocols and content models that need to be used with various security protocols defined elsewhere. This section gathers all information about security in one section. A summary:
Time critical concerns regarding security flaws in the FHIR specification should be addressed to the FHIR email list (http://wiki.hl7.org/index.php?title=FHIR_email_list_subscription_instructions) for prompt consideration. Alternatively, issues can be raised through the community input (http://wiki.hl7.org/index.php?title=FHIR_Security_Page) mechanism.
Implementers should track developing IHE IUA Profile for additional security considerations.
A production FHIR system will need some kind of security sub-system that administers users, user authentication and user-authorization. Where this sub-system fits into the deployment architecture is a matter for system design:
|
|
In this diagram, the red lines represent FHIR interfaces. From the perspective of the FHIR API, the client (consumer of FHIR services) may either interact with a security system that manifests as a FHIR server, and which depends on a subsequent FHIR interface to provide the actual storage, or either the client or server interacts with the security system independently. In each of these 3 scenarios, the different components may be assembled into applications or networks components differently, but the same logical layout applies.
The FHIR specification assumes that a security system exists, and that it may be deployed in front or behind the FHIR API. Because there are a plethora of standards relating to the administration and functionality of the security system, FHIR does not provide user, profile, or other such administration resources. Instead, the FHIR resources are the targets of the policies expressed in these other approaches. What FHIR does specify is a way to apply security labels to resources so that a security system may use these (along with the contents of the resources if appropriate) to determine whether a user is authorised to perform a particular FHIR operation or not.

For the RESTful API, normal HTTP security rules apply. The Service Root URL will specify whether SSL is required. Client authentication may be required by the server, possibly including the requirement for client certificates.
Other than testing systems, FHIR servers should authenticate the clients. The server may choose to authenticate the client system and trust it, or to authenticate the individual user by a vareity of techniques. For web-centric use, OAuth (http://oauth.net/) may be used to authenticate and/or authorise the users.
todo

Correctly identifying people, devices, locations and organisations is one of the foundations that any security system is built on. Most uses of security protocols, whether authentication, access control, digital signatures etc rely on the correct mapping between the relevant resources and the underlying systems. Note that this isn't necessary: there is nothing in FHIR that requires or relies on any security being in place, or any particular implementation. But real world usage will generally require this.
Todo.. outline general considerations
to do
Several FHIR resources include attachments. Attachments can either be references to content found elsewhere, or included inline encoded in base64. Attachments represent security risks in a way that FHIR resources do not, since some attachments contain executable code. Implementers should always use caution when handling resources.

The FHIR specification presently defines the following resources:
The list of resources is growing as FHIR is developed. Over the coming months, the number of resources and the number of those that have been vetted by HL7 committees will grow. A list of hypothesized list of resources can be found on the HL7 wiki (http://wiki.hl7.org/index.php?title=FHIR_Resource_Types) . Feel free to add any you feel are missing or engage with one of the HL7 Work Groups (http://www.hl7.org/Special/committees/index.cfm) to submit a proposal (http://wiki.hl7.org/index.php?title=Category:FHIR_Resource_Proposal) to define a resource of particular interest.
| Administrative | |
|---|---|
| Administrative resources tie clinical processes to the administrative process that support them - patient and provider management. These resources are also known as the attribution layer | |
| Patient (§3.31) | Demographics and other administrative information about a person or animal receiving care or other health-related services |
| Practitioner (§3.33) | Demographics and qualification information for an individual who is directly or indirectly involved in the provisioning of healthcare |
| Organization (§3.30) | A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, etc |
| Device (§3.7) | This resource identifies an instance of a manufactured thing that is used in the provision of healthcare without being substantially changed through that activity. The device may be a machine, an insert, a computer, an application, etc. This includes durable (reusable) medical equipment as well as disposable equipment used for diagnostic, treatment, and research for healthcare and public health. |
| Group (§3.15) | Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively and are not formally or legally recognized. I.e. A collection of entities that isn't an Organization |
| Visit (§3.43) | An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient. |
| Location (§3.20) | Contact details and position information for a physical place that may be visited and where healthcare resources and participants may be found or contained, accomodated, or stored |
| Foundation | |
| Resources that create infrastructure intended for wider reuse | |
| List (§3.19) | A set of information summarized from a list of other resources |
| Category | (Not defined yet) |
| Observation (§3.26) | Simple assertions and measurements made about a patient, device or other subject |
| Supply | (Not defined yet) |
| Substance (§3.41) | Substance |
| Picture (§3.32) | An Image used in healthcare. The actual pixels maybe inline or provided by direct reference |
| Provenance (§3.37) | Provenance information associated with another resource that can be used to help determine its reliability or trace where the information in it came from. The focus of the provenance resource is record keeping, audit and traceability, not clinical meaning |
| Questionnaire (§3.38) | A set of answers to predefined lists of questions. The answers may be grouped into coherent subsets, corresponding to the structure of the grouping of the underlying questions. |
| Clinical | |
| Focused on the content of the provider/patient encounter | |
| AdverseReaction (§3.1) | AdverseReaction |
| AllergyIntolerance (§3.3) | Allergy/Intolerance |
| CarePlan (§3.4) | Describes the intention of how one or more practitioners intend to deliver care for a particular patient for a period of time, possibly limited to care for a specific condition or set of conditions. |
| FamilyHistory (§3.14) | Significant health events and conditions for people related to the subject relevant in the context of care for the subject |
| Immunization (§3.17) | An administered immunization |
| ImmunizationProfile (§3.18) | An immunization profile |
| Problem (§3.34) | Use to record detailed information about problems or diagnoses recognised by a clinician. There are many uses including: recording a Diagnosis during an Visit; populating a Problem List or a Summary Statement, such as a Discharge Summary |
| Procedure (§3.35) | An action that is performed on a patient. This can be a physical 'thing' like an operation, or less invasive like counselling or hypnotherapy |
| Medications | |
| Pharmacy related medications | |
| Medication (§3.21) | This is primarily for identification and definition of Medication, but also covers ingredients and packaging |
| MedicationPrescription (§3.24) | An order for both supply of the medication and the instructions for administration of the medicine to a patient. |
| MedicationAdministration (§3.22) | Describes the event of a patient being given a dose of a medication. This may be as simple as swallowing a tablet or it may be a long running infusion. Related resources tie this event to the authorizing prescription, and the specific visit between patient and health care practitioner |
| MedicationDispense (§3.23) | Dispensing a medication to a named patient. This includes a description of the supply provided and the instructions for administering the medication. |
| MedicationStatement (§3.25) | A record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician |
| Diagnostics | |
| Resources used in diagnostic service provision | |
| DiagnosticReport (§3.12) | The findings and interpretation of diagnostic tests performed on patients and/or specimens. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretation, and formatted representation of diagnostic reports |
| Specimen (§3.40) | Sample for analysis |
| DiagnosticOrder (§3.11) | A request for a diagnostic investigation service to be performed |
| ImagingStudy (§3.16) | Manifest of a set of images produced in study. The set of images may include every image in the study, or it may be an incomplete sample, such as a list of key images |
| Financial | |
| Resources concerned with payments etc | |
| Coverage (§3.6) | Financial instrument by which payment information for health care |
| Device Communications | |
| Resources concerned with the process of communications between devices and clinical sytsems | |
| DeviceObservation (§3.10) | A set of observations produced by a device |
| DeviceCapabilities (§3.8) | Describes the set of data produced by a device |
| DeviceLog (§3.9) | A set of raw data produced by a device |
| Technical | |
| Resources used to support exchange of other resources | |
| Order (§3.28) | A request to perform an action |
| OrderResponse (§3.29) | A Response to an order |
| SecurityEvent (§3.39) | A record of an event |
| Document (§2.4) | A documentation of healthcare-related information that is assembled together into a single statement of meaning that establishes its own context. A document is composed of a set of resources that include both human and computer readable portions. A human may attest to the accuracy of the human readable portion and may authenticate and/or sign the entire whole. A document may be kept as a set of logically linked resources, or they may be bundled together in an atom feed |
| OperationOutcome (§3.27) | A collection of Error, warning or information messages that result from a system action |
| Message (§2.3) | A transmission requesting action on a bundle of one or more resources or a response to such a request |
| DocumentReference (§3.13) | A reference to a document |
| Binary | Pure Binary Content (Special) |
| Conformance | |
| Related to the process of specifying application behaviour and resource usage | |
| Conformance (§3.5) | A conformance statement about how an application or implementation supports FHIR or the set of requirements for a desired implementation |
| ValueSet (§3.42) | A value set specifies a set of codes drawn from one or more code systems |
| Profile (§3.36) | A Resource Profile - a statement of use of one or more FHIR Resources. It may include constraints on Resources and Data Types, Terminology Binding Statements and Extension Definitions |
Status: Not an approved resource: Draft. Under consideration by the Patient Care work group
AdverseReaction.
The resource name as it appears in a RESTful URL is /adversereaction/
Adverse Reaction resources are used to provide information about specific reactions to a substance. These are normally associated with an AllergyIntolerance (§3.3) resource, but can be reported on their own when no assumption of further reactions is being made, or when specific events are being described.
An Adverse Reaction normally has a set of sign or symptoms that are reported in the Symptom class. However, it is possible to convey that an adverse reaction occurred without knowing the specific signs or symptoms that occured, eg. Some unknown reaction occurred. Similarly, it is possible to convey that an adverse reaction with a set of symptoms occurred but not indicate the substance if it is not known. eg. A rash occurred for some unknown reason.
The Exposure class is used to indicate a set of exposures that preceded the reaction. There is no assertion of causality, purely a statement of timing. Each exposure can indicate a substance that might be different from the reaction if needed.

See also the Examples (§4.4) and the Definitions (§5.6).
<AdverseReaction xmlns="http://hl7.org/fhir"> <reactionDate value="[dateTime]"/><!-- 0..1 When the reaction occurred --> <subject><!-- 1..1 Resource(Patient) The subject of the adverse reaction --></subject> <didNotOccurFlag value="[boolean]"/><!-- 1..1 To say that a reaction to substance did not occur --> <recorder><!-- 0..1 Resource(Practitioner|Patient) Who recorded the reaction --></recorder> <symptom> <!-- 0..* The signs and symptoms that were observed as part of the reaction --> <code><!-- 1..1 CodeableConcept Indicates the specific sign or symptom that was observed (http://apps.who.int/classifications/icd10/browse/2010/en.htm) --></code> <severity value="[code]"/><!-- 0..1 The severity of the sign or symptom --> </symptom> <exposure> <!-- 0..* An exposure to a substance that preceded a reaction occurrence --> <exposureDate value="[dateTime]"/><!-- 0..1 When the exposure occurred --> <exposureType value="[code]"/><!-- 0..1 The type of exposure --> <causalityExpectation value="[code]"/><!-- 0..1 A statement of how confident that the recorder was that this exposure caused the reaction --> <substance><!-- 0..1 Resource(Substance) Substance(s) that is presumed to have caused the adverse reaction --></substance> </exposure> </AdverseReaction>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| AdverseReaction.symptom.code | The type of symptom. | ICD-10 Reaction codes (http://apps.who.int/classifications/icd10/browse/2010/en) |
| AdverseReaction.symptom.severity | The severity of an adverse reaction. | http://hl7.org/fhir/reactionSeverity |
| AdverseReaction.exposure.exposureType | The type of exposure that resulted in an adverse reaction | http://hl7.org/fhir/exposureType |
| AdverseReaction.exposure.causalityExpectation | How likely is it that the given exposure caused a reaction | http://hl7.org/fhir/causalityExpectation |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to the date of the reaction |
| date-before : date | date before or equal to the date of the reaction |
| date-after : date | date after or equal to the date of the reaction |
| subject : reference | The subject that the sensitivity is about |
| substance : reference | The name or code of the substance that produces the sensitivity |
| symptom : token | One of the symptoms of the reaction. |
(See Searching (§2.1.11)).
Status: prospective warnings of things that should be taken notice of when providing care to the patient
Prospective warnings of things that should be taken notice of when providing care to the patient.
The resource name as it appears in a RESTful URL is /alert/

See also the Examples (§4.5) and the Definitions (§5.7).
<Alert xmlns="http://hl7.org/fhir"> <category><!-- 0..1 CodeableConcept The category of this alert --></category> <status value="[code]"/><!-- 1..1 active | inactive | incorrect --> <subject><!-- 1..1 Resource(Patient) Subject of this alert --></subject> <author><!-- 0..1 Resource(Practitioner|Patient|Device) Alert creator --></author> <note value="[string]"/><!-- 1..1 Text of alert --> </Alert>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Alert.status | Indicates whether this alert is active and needs to be displayed to a user, or whether it is no longer needed or entered in error | http://hl7.org/fhir/alert-status |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| subject : reference | The identity of a subject to list alerts for |
(See Searching (§2.1.11)).
Status: Not an approved resource: Draft. Under consideration by the Patient Care work group
Allergy/Intolerance.
The resource name as it appears in a RESTful URL is /allergyintolerance/
Allergy/Intolerance resources are used to provide information about adverse sensitivities to substances that lead to physiologic changes that are clinically observable. An adverse sensitivity is defined as:
A condition expected to result in undesirable physiologic reaction to an amount of a substance that would not produce a reaction in most individuals. The substance is the trigger of an immunologic response that produces the observed physiologic changes, or in some instances nonimmunologic mechanisms that produce clinically identical physiologic changes. The immunologic response might be considered the actual cause of the reaction, but it is exposure to the trigger substance that is clinically observable.
This definition excludes clinically identical episodes that may be caused by physical agents, such as heat, cold, sunlight, or vibration, by exercise activity, or by infectious agents. Those conditions caused by physical agents or infectious would be captured on the problem list. The allergy/intolerance list is a list of conditions that represent a propensity unique to this individual for a reaction upon future exposure to a specified substance.
Note that this specification draws a distinction between the patients problem/condition list and an allergy/intolerance list, even though allergies and intolerances are also conditions. This is because it is a long established clinical workflow, even to patients. Asking an individual "if they have any problems" is not going to invoke an account of their past reactions to medications or foods. Instead, they are asked if they "have any allergies". An allergy/intolerance is also different in that a potential harm from exposure to an external substance that may be ordered by a provider in the course of their care but is not inherent to exposure to that substance for the general population.
Most of the details of the sensitivity can be found in the set of reactions (§3.1) that are associated with the resource, though these may not be present when the patient has not provided enough information. Adverse Reactions (§3.1) do not have to be always associated with an AllergyIntolerance which may appropriate when an single reaction has not provided enough evidence for a meaningful Allergy/Intolerance, or in specific views of events rather than in a general clinical record.

See also the Examples (§4.6) and the Definitions (§5.8).
<AllergyIntolerance xmlns="http://hl7.org/fhir"> <identifier><!-- 0..1 Identifier An external identifier for the sensitivity --></identifier> <criticality value="[code]"/><!-- 0..1 Criticality of the sensitivity --> <sensitivityType value="[code]"/><!-- 1..1 Type of the sensitivity --> <recordedDate value="[dateTime]"/><!-- 0..1 Date when the sensitivity was recorded --> <status value="[code]"/><!-- 1..1 Status of the sensitivity --> <subject><!-- 1..1 Resource(Patient) Who the sensitivity is for --></subject> <recorder><!-- 0..1 Resource(Practitioner|Patient) Who recorded the sensitivity --></recorder> <substance><!-- 1..1 Resource(Substance) The substance that causes the sensitivity --></substance> <reactions><!-- 0..* Resource(AdverseReaction) Reactions associated with the sensitivity --></reactions> <sensitivityTest><!-- 0..* Resource(Observation) Observations that confirm or refute the sensitivity --></sensitivityTest> </AllergyIntolerance>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| AllergyIntolerance.criticality | The criticality of an adverse sensitivity | http://hl7.org/fhir/criticality |
| AllergyIntolerance.sensitivityType | The type of an adverse sensitivity | http://hl7.org/fhir/sensitivitytype |
| AllergyIntolerance.status | The status of the adverse sensitivity | http://hl7.org/fhir/sensitivitystatus |
Criticality is defined as "The potential seriousness of a future reaction." This represents a clinical judgment about the worst case scenario for a future reaction. It would be based on the severity of past reactions, the dose and route of exposure that produced past reactions, and the life-threatening or organ system threatening potential of the reaction type. Criticality is an attribute of the allergic condition, not the reaction(s).
High criticality does not equate to a future severe reaction, but rather the potential for a severe and life-threatening reaction. Most reaction types are dose dependent, including anaphylaxis. Therefore, although they have a sensitivity of high criticality, exposure to a small dose of the substance to which they are sensitive might result in only a mild reaction. Severity of the reaction is also dependent on the route of exposure, but criticality since it applies to the condition, is not.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to recorded date/time. |
| date-before : date | date before or equal to recorded date/time. |
| date-after : date | date after or equal to recorded date/time. |
| recorder : reference | who recorded the sensitivity |
| status : token | The status of the sensitivity |
| subject : reference | The subject that the sensitivity is about |
| substance : reference | The name or code of the substance that produces the sensitivity |
| type : token | The type of sensitivity |
(See Searching (§2.1.11)).
Status: Not an approved resource: Draft. Under consideration by the Patient Care work group
Describes the intention of how one or more practitioners intend to deliver care for a particular patient for a period of time, possibly limited to care for a specific condition or set of conditions..
The resource name as it appears in a RESTful URL is /careplan/
Care Plans are used in many of areas of healthcare with a variety of scopes. They can be as simple as a general practitioner keeping track of when their patient is next due for a tetanus immunization through to a detailed plan for an oncology patient covering diet, chemotherapy, radiation, lab work and counselling with detailed timing relationships, pre-conditions and goals.
This resource takes an intermediate approach. It captures basic details about who is involved and what actions are intended without dealing in discrete data about dependencies and timing relationships. These can be supported where necessary using the extension mechanisms.
Comments are welcome about the appropriateness of the proposed level of granularity, whether it's too much detail for what most systems need, or not sufficient for common essential use cases.

See also the Examples (§4.7) and the Definitions (§5.9).
<CarePlan xmlns="http://hl7.org/fhir"> <identifier><!-- 0..1 Identifier ID for plan --></identifier> <patient><!-- 1..1 Resource(Patient) Who care plan is for --></patient> <status value="[code]"/><!-- 1..1 planned | active | ended --> <period><!-- 0..1 Period Time period plan covers --></period> <modified value="[dateTime]"/><!-- 0..1 When last updated --> <concern><!-- 0..* Resource(Problem) Health issues plan addresses --></concern> <participant> <!-- 0..* Who's involved in plan? --> <role><!-- 0..1 CodeableConcept Type of involvement --></role> <member><!-- 1..1 Resource(Practitioner|RelatedPerson|Patient|Organization) Who is involved --></member> </participant> <goal> <!-- 0..* Desired outcome of plan --> <description value="[string]"/><!-- 1..1 What's the desired outcome? --> <status value="[code]"/><!-- 0..1 in progress|achieved|sustaining | abandoned --> <notes value="[string]"/><!-- 0..1 Comments about the goal --> </goal> <activity> <!-- 0..* Action to occur as part of plan --> <category value="[code]"/><!-- 1..1 visit | procedure | observation | + --> <code><!-- 0..1 CodeableConcept Detail type of activity --></code> <status value="[code]"/><!-- 0..1 not started | ongoing | suspended | completed | abandoned --> <prohibited value="[boolean]"/><!-- 1..1 Do NOT do --> <timing[x]><!-- 0..1 Schedule|Period|string When activity is to occur --></timing[x]> <location><!-- 0..1 Resource(Location) Where it should happen --></location> <performer><!-- 0..* Resource(Practitioner|Organization|RelatedPerson|Patient) Who's responsible? --></performer> <product><!-- 0..1 Resource(Medication|Substance) What's administered/supplied --></product> <dailyAmount><!-- 0..1 Quantity How much consumed/day? --></dailyAmount> <quantity><!-- 0..1 Quantity How much is administered/supplied/consumed --></quantity> <details value="[string]"/><!-- 0..1 Extra info on activity occurrence --> <actionTaken><!-- 0..* Resource(Any) Appointments, orders, etc. --></actionTaken> <notes value="[string]"/><!-- 0..1 Comments about the activity --> </activity> <notes value="[string]"/><!-- 0..1 Comments about the plan --> </CarePlan>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| CarePlan.status | Indicates whether the plan is currently being acted upon, represents future intentions or is now just historical record. | http://hl7.org/fhir/care-plan-status |
| CarePlan.participant.role | Indicates specific responsibility of an individual within the care plan. E.g. "Primary physician", "Team coordinator", "Caregiver", etc. | No details provided yet |
| CarePlan.goal.status | Indicates whether the goal has been met and is still being targeted | http://hl7.org/fhir/care-plan-goal-status |
| CarePlan.activity.category | High-level categorization of the type of activity in a care plan. | http://hl7.org/fhir/care-plan-activity-category |
| CarePlan.activity.code | Detailed description of the type of activity. E.g. What lab test, what procedure, what kind of visit. | No details provided yet |
| CarePlan.activity.status | Indicates where the activity is at in its overall life cycle | http://hl7.org/fhir/care-plan-activity-status |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| activity : token | [CarePlan.activity.code] |
| activitydate : date | date equal to Specified date occurs within period specified by CarePlan.activity.timingSchedule |
| activitydate-before : date | date before or equal to Specified date occurs within period specified by CarePlan.activity.timingSchedule |
| activitydate-after : date | date after or equal to Specified date occurs within period specified by CarePlan.activity.timingSchedule |
| condition : reference | [CarePlan.concern] |
| date : date | date equal to [CarePlan.period] contains date |
| date-before : date | date before or equal to [CarePlan.period] contains date |
| date-after : date | date after or equal to [CarePlan.period] contains date |
| participant : reference | [CarePlan.participant.member] |
| patient : reference | [CarePlan.patient] |
(See Searching (§2.1.11)).
Status: Approved infrastructure resource. Draft for comment
A conformance statement about how an application or implementation supports FHIR or the set of requirements for a desired implementation.
The resource name as it appears in a RESTful URL is /conformance/
Conformance Statements provide for a degree of automatic configuration and adaptation. However, capturing absolutely every variation that could impact the interoperability of two systems, let alone keeping that detailed information up-to-date as systems evolve through maintenance and upgrades is rarely practical. Therefore, conformance statements should be seen as an interim step. They provide a degree of automation. However, they also provide a great deal of human-readable content that can minimize the need for direct communication between the operators of the systems being configured to interoperate.
Conformance statements are used in one of three ways:
In this scenario, the conformance statement describes the capabilities of a deployed and configured solution available at a particular access point or set of access points. The statement describes exactly how to interface with that deployed solution and thus provides for a degree of self-configuration of software solutions.
This is the type of profile that FHIR restful solutions are expected to make available on invocation of the conformance operation. It is also the type of statement that forms a basis for the testing, certification or commissioning of specific software installations.
A conformance statement is identified as being an implementation statement through the presence of the implementation element.
In this scenario, the conformance statement describes the generic capabilities of a software application or component solution. The solution might be available for purchase or other acquisition and might be deployed and configured at any number of independent sites. Because it is not dependent on any particular implementation, the profile cannot provide specific details such as endpoint addresses. It may also need to document various configurations in which the application can be set up or describe the degree of customizability associated with the solution.
This type of statement may be used as a marketing tool by software and system developers to formally describe their capabilities. It can also be used as the basis for conformance testing of software solutions independent of a particular installation.
A conformance statement is identified as being a software solution statement through the presence of the software element.
In this scenario, the conformance statement describes the capabilities of a desired system. It might be used as part of an architectural design process to document needed system capabilities, or might be used as part of an RFP process to formally document the requirements of a requested solution and to document the criteria by which proposals will be evaluated.
A conformance statement is identified as being a requirements statement through the presence of the proposal element.
These three types of profiles can be used together. A requirements statement can be compared against the solution statements proffered by respondents to an RFP. A solution statement for a software package forms the starting point for the implementation statement associated with a particular installation of that software package.

See also the Examples (§4.8) and the Definitions (§5.10).
<Conformance xmlns="http://hl7.org/fhir"> <identifier value="[string]"/><!-- 0..1 Logical id to reference this statement --> <version value="[string]"/><!-- 0..1 Logical id for this version of the statement --> <date value="[dateTime]"/><!-- 1..1 Publication Date --> <publisher value="[string]"/><!-- 1..1 Publishing Organization --> <telecom><!-- 0..* Contact Contacts for Organization --></telecom> <software> <!-- 0..1 Software that is covered by this conformance statement --> <name value="[string]"/><!-- 1..1 Name software is known by --> <version value="[string]"/><!-- 0..1 Version covered by this statement --> <releaseDate value="[dateTime]"/><!-- 0..1 Date this version released --> </software> <implementation> <!-- 0..1 If this describes a specific instance --> <description value="[string]"/><!-- 1..1 Describes this specific instance --> <url value="[uri]"/><!-- 0..1 Base URL for the installation --> <software><!-- 0..1 Content as for Conformance.software The software running this instance --></software> </implementation> <proposal> <!-- 0..1 If profile is for proposal --> <description value="[string]"/><!-- 1..1 Details of proposal or requirements document --> </proposal> <fhirVersion value="[id]"/><!-- 1..1 FHIR Version --> <acceptUnknown value="[boolean]"/><!-- 1..1 True if application accepts unknown elements --> <format value="[code]"/><!-- 1..* formats supported (xml | json | mime type) (http://www.rfc-editor.org/bcp/bcp13.txt.htm) --> <rest> <!-- 0..* If the endpoint is a RESTful one --> <mode value="[code]"/><!-- 1..1 client | server --> <documentation value="[string]"/><!-- 0..1 General description of implementation --> <security> <!-- 0..1 Information about security of implementation --> <service><!-- 0..* CodeableConcept What type of security services are supported/required --></service> <description value="[string]"/><!-- 0..1 General description of how security works --> <certificate> <!-- 0..* Certificates associated with security profiles --> <type value="[code]"/><!-- 0..1 Mime type for certificate (http://www.rfc-editor.org/bcp/bcp13.txt.htm) --> <blob value="[base64Binary]"/><!-- 0..1 Actual certificate --> </certificate> </security> <resource> <!-- 1..* Resource served on the REST interface --> <type value="[code]"/><!-- 1..1 Resource type --> <profile><!-- 0..1 Resource(Profile) Resource Profiles supported --></profile> <operation> <!-- 1..* What operations are supported? --> <code value="[code]"/><!-- 1..1 read | vread | update | etc. --> <documentation value="[string]"/><!-- 0..1 Anything special about operation behavior --> </operation> <readHistory value="[boolean]"/><!-- 0..1 Whether vRead can return past versions --> <searchInclude value="[string]"/><!-- 0..* _include values supported by the server --> <searchParam> <!-- 0..* Additional search params defined --> <name value="[string]"/><!-- 1..1 Name of search parameter --> <source value="[uri]"/><!-- 0..1 Source of definition --> <type value="[code]"/><!-- 1..1 Type of search parameter --> <documentation value="[string]"/><!-- 1..1 Contents and meaning of search parameter --> <target value="[code]"/><!-- 0..* Types of resource (if a resource reference) --> <chain value="[string]"/><!-- 0..* Chained names supported --> </searchParam> </resource> <batch value="[boolean]"/><!-- 0..1 If batches are supported --> <history value="[boolean]"/><!-- 0..1 If a system wide history list is supported --> </rest> <messaging> <!-- 0..* If messaging is supported --> <endpoint value="[uri]"/><!-- 0..1 Actual endpoint being described --> <reliableCache value="[integer]"/><!-- 0..1 Reliable Message Cache Length --> <documentation value="[string]"/><!-- 0..1 Messaging interface behavior details --> <event> <!-- 1..* Declare support for this event --> <code value="[code]"/><!-- 1..1 Event type --> <mode value="[code]"/><!-- 1..1 sender | receiver --> <protocol><!-- 0..* Coding http | ftp |MLLP | etc. --></protocol> <focus value="[code]"/><!-- 1..1 Resource that's focus of message --> <request value="[uri]"/><!-- 1..1 Profile that describes the request --> <response value="[uri]"/><!-- 1..1 Profile that describes the response --> <documentation value="[string]"/><!-- 0..1 Endpoint-specific event documentation --> </event> </messaging> <document> <!-- 0..* Document definition --> <mode value="[code]"/><!-- 1..1 producer | consumer --> <documentation value="[string]"/><!-- 0..1 Description of document support --> <profile value="[uri]"/><!-- 1..1 Constraint on a resource used in the document --> </document> </Conformance>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Conformance.format Conformance.rest.security.certificate.type | The mime type of an attachment | BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049) (http://www.rfc-editor.org/bcp/bcp13.txt) |
| Conformance.rest.mode | The mode of a restful conformance statement | http://hl7.org/fhir/restful-conformance-mode |
| Conformance.rest.security.service | Types of security services used with FHIR | http://hl7.org/fhir/restful-security-service |
| Conformance.rest.resource.type Conformance.rest.resource.searchParam.target Conformance.messaging.event.focus | One of the resource types defined as part of FHIR | http://hl7.org/fhir/resource-types (Known Broken Link - needs to be resolved) |
| Conformance.rest.resource.operation.code | Operations supported by REST | http://hl7.org/fhir/restful-operation |
| Conformance.rest.resource.searchParam.type | Data types allowed to be used for search parameters | http://hl7.org/fhir/search-param-type |
| Conformance.messaging.event.code | One of the message events defined as part of FHIR | http://hl7.org/fhir/message-events (Known Broken Link - needs to be resolved) |
| Conformance.messaging.event.mode | The mode of a message conformance statement | http://hl7.org/fhir/message-conformance-event-mode |
| Conformance.messaging.event.protocol | How messages are delivered | http://hl7.org/fhir/message-transport |
| Conformance.document.mode | Whether the application produces or consumes documents | http://hl7.org/fhir/document-mode |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to the conformance statement publication date |
| date-before : date | date before or equal to the conformance statement publication date |
| date-after : date | date after or equal to the conformance statement publication date |
| event : token | event code in a conformance statement |
| format : token | formats supported (xml | json | mime type) |
| mode : token | mode - restful (server/client) or messaging (sender/receiver) |
| profile : reference | a profile id invoked in a conformance statement |
| publisher : string | part of a publisher name |
| resource : token | name of a resource mentioned in a conformance profile |
| security : token | Information about security of implementation |
| software : string | part of a the name of a software application |
| version : token | the version of FHIR |
(See Searching (§2.1.11)).
Status: Not an approved resource: Draft. Under consideration by the Financial Management work group
Financial instrument by which payment information for health care.
The resource name as it appears in a RESTful URL is /coverage/

See also the Examples (§4.9) and the Definitions (§5.11).
<Coverage xmlns="http://hl7.org/fhir"> <issuer><!-- 0..1 Resource(Organization) An identifier for the plan issuer --></issuer> <period><!-- 0..1 Period Coverage start and end dates --></period> <type><!-- 1..1 Coding Type of coverage --></type> <identifier><!-- 0..1 Identifier The primary coverage ID --></identifier> <group><!-- 0..1 Identifier An identifier for the group --></group> <plan><!-- 0..1 Identifier An identifier for the plan --></plan> <subplan><!-- 0..1 Identifier An identifier for the subsection of the plan --></subplan> <dependent value="[integer]"/><!-- 0..1 The dependent number --> <sequence value="[integer]"/><!-- 0..1 The plan instance or sequence counter --> <subscriber> <!-- 0..1 Planholder information --> <name><!-- 0..1 HumanName PolicyHolder name --></name> <address><!-- 0..1 Address PolicyHolder address --></address> <birthdate value="[date]"/><!-- 0..1 PolicyHolder date of birth --> </subscriber> </Coverage>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Coverage.type | The type of insurance: public health, worker compensation; private accident, auto, private health, etc.) | ?? |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| dependent : token | Dependent number |
| group : token | Group identifier |
| identifier : token | The primary identifier of the insured |
| issuer : reference | The identity of the insurer |
| name : token | The name of the subscriber |
| plan : token | A plan or policy identifier |
| sequence : token | Sequence number |
| subplan : token | Sub-plan identifier |
| type : token | The kind of coverage |
(See Searching (§2.1.11)).
Status: Not an approved resource: examplar. Possible owners: Devices and Patient Administration Working Group
This resource identifies an instance of a manufactured thing that is used in the provision of healthcare without being substantially changed through that activity. The device may be a machine, an insert, a computer, an application, etc. This includes durable (reusable) medical equipment as well as disposable equipment used for diagnostic, treatment, and research for healthcare and public health..
The resource name as it appears in a RESTful URL is /device/
Primarily used for recording which device performed an action and can also be used to track device location
There are 4 device related resources
The device capabilities and log resources are used when communicating with a device, either directly or indirectly. When a channel is opened with the device, or it's proxy, it first sends the Capabilities resource, and then a series of log resources. The FHIR JSON format is used in this case.
The application that receives the log resources may choose to merge the log with the capabilities statement to create a device observation, which is suitable for wider use within a EHR/Clinical record context.

See also the Examples (§4.10) and the Definitions (§5.12).
<Device xmlns="http://hl7.org/fhir"> <type><!-- 1..1 CodeableConcept What kind of device this is --></type> <manufacturer value="[string]"/><!-- 0..1 Name of device manufacturer --> <model value="[string]"/><!-- 0..1 Model id assigned by the manufacturer --> <version value="[string]"/><!-- 0..1 Version number (i.e. software) --> <identity> <!-- 0..1 Universal Device Id fields --> <gtin value="[string]"/><!-- 0..1 GTIN assigned to this device --> <lot value="[string]"/><!-- 0..1 Lot number of manufacture --> <serialNumber value="[string]"/><!-- 1..1 Serial number assigned by the manufacturer --> <expiry value="[date]"/><!-- 0..1 Date of expiry of this device (if applicable) --> </identity> <owner><!-- 0..1 Resource(Organization) Organization responsible for device --></owner> <assignedId><!-- 0..* Identifier Identifier assigned by various organizations --></assignedId> <location><!-- 0..1 Resource(Location) Where the resource is found --></location> <patient><!-- 0..1 Resource(Patient) If the resource is affixed to a person --></patient> <contact><!-- 0..* Contact Details for human/organization for support --></contact> <url value="[uri]"/><!-- 0..1 Network address to contact device --> </Device>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Device.type | Defines the nature of the device and the kind of functionality/services/behavior that may be expected from it | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| assignedId : token | identifier assigned by the organisation |
| location : reference | Where the resource is found |
| manufacturer : string | the manufacturer of the device |
| model : string | the model of the device |
| organization : reference | the organization responsible for the device |
| patient : reference | If the resource is affixed to a person |
| serial : string | the serial number of the device |
| type : token | the type of the device |
(See Searching (§2.1.11)).
Status: Under Development with the Devices Work Group
Describes the set of data produced by a device.
The resource name as it appears in a RESTful URL is /devicecapabilities/
There are 4 device related resources
The device capabilities and log resources are used when communicating with a device, either directly or indirectly. When a channel is opened with the device, or it's proxy, it first sends the Capabilities resource, and then a series of log resources. The FHIR JSON format is used in this case. (TODO: What's the communication protocol?) The application that receives the log resources may choose to merge the log with the capabilities statement to create a device observation, which is suitable for wider use within a EHR/Clinical record context. The Device Capabilites and Device Log resources may be used in a RESTful context, but in many contexts this will not be very useful - the data should be converted to a device observation for normal RESTful use in a patient care context.
Note that this resource is entirely concerned with devices that report data; interacting with and controlling devices such as infusion pumps etc is not in scope for this resource (no solution for this yet). This resource is based on ISO 11073.
A medical device is conceived of as a measuring device that is capable of reporting a series of groups of measurements on a regular basis. The device capabilities resource describes the kind of data that a medical device reports. Devices are conceptualised using the following main structure:
Very simple devices may have only a single compartment with a single channel and one metric, while complex devices may have multiple items at every level.
When the data emitted by the device (§3.9) is converted to a Device Observation (§3.10) based on the information in the capabilities, and known local context, the Metrics level usually corresponds to a single Observation (§3.26), but this is not appropriate in all cases.

See also the Examples (§4.11) and the Definitions (§5.13).
<DeviceCapabilities xmlns="http://hl7.org/fhir"> <name value="[string]"/><!-- 0..1 The name of this device --> <type><!-- 0..1 CodeableConcept The type of device --></type> <manufacturer value="[string]"/><!-- 0..1 Company that built the device --> <identity><!-- 0..1 Resource(Device) Identifies this particular device uniquely --></identity> <virtualDevice> <!-- 0..* A medical-related subsystem of a medical device --> <code><!-- 0..1 CodeableConcept Describes the compartment --></code> <channel> <!-- 0..* Groups related data items --> <code><!-- 0..1 CodeableConcept Describes the channel --></code> <metric> <!-- 0..* Piece of data reported by device --> <code><!-- 1..1 CodeableConcept Describes the metrics --></code> <key value="[string]"/><!-- 1..1 Used to link to data in device log --> <info> <!-- 1..1 How to interpret this metric value --> <type value="[code]"/><!-- 1..1 Quantity | Coding | Array | string --> <units value="[string]"/><!-- 0..1 Human Readable units of data value --> <ucum value="[code]"/><!-- 0..1 UCUM units for data value (http://unitsofmeasure.org.htm) --> <array><!-- 0..1 Array Array template (fixed values) --></array> <system value="[uri]"/><!-- 0..1 System for coding --> </info> <facet> <!-- 0..* Additional clarifying or qualifiying data --> <code><!-- 1..1 CodeableConcept Describes the facet (http://loinc.org.htm) --></code> <scale value="[decimal]"/><!-- 0..1 Factor to apply to raw values (default = 1) --> <key value="[string]"/><!-- 1..1 Used to link to data in device log --> <info><!-- 1..1 Content as for DeviceCapabilities.virtualDevice.channel.metric.info How to interpret this facet value --></info> </facet> </metric> </channel> </virtualDevice> </DeviceCapabilities>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| DeviceCapabilities.type | Defines the nature of the device and the kind of functionality/services/behavior that may be expected from it | No details provided yet |
| DeviceCapabilities.virtualDevice.code | Describes the compartment | No details provided yet |
| DeviceCapabilities.virtualDevice.channel.code | Describes the channel | No details provided yet |
| DeviceCapabilities.virtualDevice.channel.metric.code | Describes the metrics | No details provided yet |
| DeviceCapabilities.virtualDevice.channel.metric.info.type | The type of data produced by a device | http://hl7.org/fhir/device-data-type |
| DeviceCapabilities.virtualDevice.channel.metric.info.ucum | UCUM Codes | http://unitsofmeasure.org |
| DeviceCapabilities.virtualDevice.channel.metric.facet.code | Describes the facet | http://loinc.org |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| channel : token | The channel code |
| code : token | The compatment code |
| datatype : token | Quantity | Coding | Array | string |
| facet : token | The facet code |
| identity : reference | Identifies this particular device uniquely |
| manufacturer : token | Company that built the device |
| metric : token | The metric code |
| name : string | The name of this device |
| type : token | The type of device |
(See Searching (§2.1.11)).
Status: Under Development with the Devices Work Group
A set of raw data produced by a device.
The resource name as it appears in a RESTful URL is /devicelog/
There are 4 device related resources
The device capabilities and log resources are used when communicating with a device, either directly or indirectly. When a channel is opened with the device, or it's proxy, it first sends the Capabilities resource, and then a series of log resources. The FHIR JSON format is used in this case. (TODO: What's the communication protocol?) The application that receives the log resources may choose to merge the log with the capabilities statement to create a device observation, which is suitable for wider use within a EHR/Clinical record context. The application that receives the log resources may choose to merge the log with the capabilities statement to create a device observation, which is suitable for wider use within a EHR/Clinical record context. The Device Capabilites and Device Log resources may be used in a RESTful context, but in many contexts this will not be very useful - the data should be converted to a Device Observation for normal RESTful use in a patient care context.
A medical device emits a series of these device log resources on a regular basis. A device log is simply a list of items with a key, a value, and a set of flags. The only way to understand the contents of the resource is to match the device log to the device capabilities that provides the context for interpreting the data in the device log. The device log can identify the appropriate Device Capabilities (§3.8) resource explicitly, but generally this is omitted, and the applicable resource is the one that is sent prior to any device log resources being sent. The system receiving the data must keep track of the appropriate Device Capabilities (§3.8) resource.
Some devices may be configured to know the identity of the subject of the observations, so the device log also includes the subject. However many simple devices do not know the identity of the subject well, or even at all, and the subject information must be provided or completed by the recipient of the device logs based on local context.
The device log is a low level resource suitable for direct communication with devices. The data from the device is usually converted to a Device Observation (§3.10) for general use in a patient care context. This process is described further below.

See also the Examples (§4.12) and the Definitions (§5.14).
<DeviceLog xmlns="http://hl7.org/fhir"> <instant value="[instant]"/><!-- 0..1 When the data values are reported --> <capabilities><!-- 0..1 Resource(DeviceCapabilities) Explicit reference to the capabilities --></capabilities> <subject><!-- 0..1 Resource(Patient|Group|Device) Subject of the measurement --></subject> <item> <!-- 0..* An item of data --> <key value="[string]"/><!-- 1..1 Reference to device capabilities declaration --> <value value="[string]"/><!-- 0..1 The value of the data item, if available --> <flag value="[code]"/><!-- 0..* Information about the quality of the data etc --> </item> </DeviceLog>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| DeviceLog.item.flag | Flags that supply information about the status of a device reading | http://hl7.org/fhir/device-value-flag |
A device log has little context, and does not have the full context to support integrating the data into the patient record. The usual process for feeding the data from the device log resource into the patient record is to convert it to a Device Observation (§3.10).
To convert the data from a Device Log to a Device Observation:
Converting a Data Item to an Observation
Between the Device Item and the matching Device Capabilities information, the following information is provided:
The following table describes how to convert from value to the correct data type:
| Data Type | Description | Template |
|---|---|---|
| Quantity (§1.4.7) | The common case. The device capabilities provides a units, and optionally a UCUM code |
<valueQuantity>
<value value="[data item value]" />
[ (if appropriate from flags) <comparator value="??" /> ]
<units value="[units]" />
[ (if UCUM code provided)
<system value="http://unitsofmeasure.org" />
<code value="[UCUM]" />
]
</valueQuantity>
|
| Coding (§1.4.4) | When the output is a choice of one of a set of discrete values. The system should be a reference to some locatable definition of the values so that display names can be resolved |
<valueCoding>
<system value="[system]" />
<code value="[data item value]" />
</valueCoding>
|
| string | The output should be treated as a simple string |
<valueString value="[data item value]"/>
|
The following table summarizes the interpretation of the possible flags
| Flag | Interpretation |
|---|---|
| ok, ongoing, early, questionable, calibrating, error, unknown | The flags have the same meaning on the observation.reliability element |
| test, demo, alarm, alarm-off | These flags have no representation in the observation resource |
| under, over | These flags map to the Quantity.comparator element |
Generally, as a rule of thumb, metrics and facets are components of the observation.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| capabilities : reference | Explicit reference to the capabilities |
| flag : token | Information about the quality of the data etc |
| instant : date | date equal to When the data values are reported |
| instant-before : date | date before or equal to When the data values are reported |
| instant-after : date | date after or equal to When the data values are reported |
| key : token | Reference to device capabilities declaration |
| subject : reference | Subject of the measurement |
| value : token | The value of the data item, if available |
(See Searching (§2.1.11)).
Status: Under Development with the Devices Work Group
A set of observations produced by a device.
The resource name as it appears in a RESTful URL is /deviceobservation/
There are 4 device related resources
The device capabilities and log resources are used when communicating with a device, either directly or indirectly. When a channel is opened with the device, or it's proxy, it first sends the Capabilities resource, and then a series of log resources. The FHIR JSON format is used in this case. The application that receives the log resources may choose to merge the log with the capabilities statement to create a device observation, which is suitable for wider use within a EHR/Clinical record context.
The Device Observation is a simple wrapper that groups a set of actual observations together and extracts the common elements that are the same for all of them. In addition, the DeviceObservation resource has some additional attribution and context information.

See also the Examples (§4.13) and the Definitions (§5.15).
<DeviceObservation xmlns="http://hl7.org/fhir"> <code><!-- 1..1 CodeableConcept Type of device observation --></code> <identifier><!-- 0..* Identifier Identifiers assigned to this observation --></identifier> <issued value="[instant]"/><!-- 1..1 Date the measurements were made --> <subject><!-- 1..1 Resource(Patient|Group|Device) The subject of the measurements --></subject> <device><!-- 1..1 Resource(Device) Device that produced the results --></device> <measurement><!-- 0..* Resource(Observation) Actual measurements --></measurement> </DeviceObservation>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| code : token | Type of device observation |
| device : reference | Device that produced the results |
| identifier : token | Identifiers assigned to this observation |
| issued : date | date equal to Date the measurements were made |
| issued-before : date | date before or equal to Date the measurements were made |
| issued-after : date | date after or equal to Date the measurements were made |
| measurement : reference | Actual measurements |
| subject : reference | The subject of the measurements |
(See Searching (§2.1.11)).
Status: Not an approved resource - under consideration by the OO work group
A request for a diagnostic investigation service to be performed.
The resource name as it appears in a RESTful URL is /diagnosticorder/
A Diagnostic Order is a record of a request for a set of diagnostic investigations to be performed. The investigation will lead to a Diagnostic Report (§3.12) that summarizes the outcome of the investigation, and includes any useful data and/or images that are relevant to the treatment/management of the subject.
The principal intention of the Diagnostic Order is to support ordering diagnosic investigations on patients (which includes non-human patients in veterinary medicine. However in many contexts, healthcare related processes include performing diagnostic investigations on groups of subjects, devices involved in the provision of healthcare, and even environmental locations such as ducts, bodies of water, etc. The Diagnostic Order supports all these usages.
The general work flow that this resource facilitates is that a clinical system creates a diagnostic order. The diagnostic order is then exchanged, perhaps via intermediaries, with a system that represents a diagnostic service that can perform the investigation as a request to do so. The diagnostic service will update the request as the work is performed, and then finally issue a report that references the requests that it fulfills.
Note that the Diagnostic Order itself is not a request to perform the investigation - it is just a record of the fact that a request was made. The Diagnostic Request must be paired with an Order (§3.28) resource to convey the actual instruction, or part of an explicit messaging or service workflow that carries the instruction.

See also the Examples (§4.14) and the Definitions (§5.16).
<DiagnosticOrder xmlns="http://hl7.org/fhir"> <subject><!-- 1..1 Resource(Patient|Group|Location|Device) Who/what test is about --></subject> <orderer><!-- 0..1 Resource(Practitioner) Who ordered the test --></orderer> <identifier><!-- 0..* Identifier Identifiers assigned to this order --></identifier> <visit><!-- 0..1 Resource(Visit) The visit that this diagnostic order is associated with --></visit> <clinicalNotes value="[string]"/><!-- 0..1 Explanation/Justification for test --> <specimen><!-- 0..* Resource(Specimen) If the whole order relates to specific specimens --></specimen> <status value="[code]"/><!-- 0..1 requested | received | accepted | inprogress | review | complete | suspended | rejected | failed --> <event> <!-- 1..* A list of events of interest in the lifecycle --> <status value="[code]"/><!-- 1..1 requested | received | accepted | inprogress | review | complete | suspended | rejected | failed --> <date value="[dateTime]"/><!-- 1..1 The date at which the event happened --> <actor><!-- 0..1 Resource(Practitioner|Device) Who recorded or did this --></actor> </event> <item> <!-- 0..* The items the orderer requested --> <code><!-- 1..1 CodeableConcept Code for this item --></code> <specimen><!-- 0..* Resource(Specimen) If this item relates to specific specimens --></specimen> <bodySite><!-- 0..1 CodeableConcept Location of requested test (if applicable) --></bodySite> <status value="[code]"/><!-- 0..1 requested | received | accepted | inprogress | review | complete | suspended | rejected | failed --> <event><!-- 0..* Content as for DiagnosticOrder.event Events specific to this item --></event> </item> </DiagnosticOrder>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| DiagnosticOrder.status DiagnosticOrder.event.status DiagnosticOrder.item.status | The status of a diagnostic order | http://hl7.org/fhir/diagnostic-order-status |
| DiagnosticOrder.item.code | codes for tests/services that can be performed by diagnostic services | http://hl7.org/fhir/valueset-diagnostic-requests (Known Broken Link - needs to be resolved) |
| DiagnosticOrder.item.bodySite | Codes describing anatomical locations. May include laterality | http://hl7.org/fhir/valueset-body-site (Known Broken Link - needs to be resolved) |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| actor : reference | Who recorded or did this |
| bodysite : token | Location of requested test (if applicable) |
| code : token | Code for this item |
| date : date | date equal to The date at which the event happened |
| date-before : date | date before or equal to The date at which the event happened |
| date-after : date | date after or equal to The date at which the event happened |
| identifier : token | Identifiers assigned to this order |
| item-date : date | date equal to The date at which the event happened |
| item-date-before : date | date before or equal to The date at which the event happened |
| item-date-after : date | date after or equal to The date at which the event happened |
| item-past-status : token | requested | received | accepted | inprogress | review | complete | suspended | rejected | failed |
| item-status : token | requested | received | accepted | inprogress | review | complete | suspended | rejected | failed |
| item-status-date : composite | A combination of item-past-status and item-date |
| orderer : reference | Who ordered the test |
| past-status : token | requested | received | accepted | inprogress | review | complete | suspended | rejected | failed |
| specimen : reference | If the whole order relates to specific specimens |
| status : token | requested | received | accepted | inprogress | review | complete | suspended | rejected | failed |
| status-date : composite | A combination of past-status and date |
| subject : reference | Who/what test is about |
| visit : reference | The visit that this diagnostic order is associated with |
(See Searching (§2.1.11)).
Status: Not an approved resource: Exemplar - based on the Australian peEHR model. Comments will be welcomeed by O & O workgroup
The findings and interpretation of diagnostic tests performed on patients and/or specimens. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretation, and formatted representation of diagnostic reports.
The resource name as it appears in a RESTful URL is /diagnosticreport/
A diganostic report is used for the set of information that is typically provided by a diagnostic service when investigations are complete. The information includes a mix of atomic results, text reports, images, and codes. The mix varies depending on the nature of the diagnostic procedure, and sometimes on the nature of the outcomes for a particular investigation.
The Diagnostic Report Resource is suitable for the following kinds of Diagnostic Reports:
The Diagnostic Report is not intended to support:
Comments on the suitability of this resource and/or requirements analysis for that would be welcome through the community input above.
The actual atomic result data are delegated to the common Observation Resource (§3.26) to make it easier to reuse them in a wider context.
There is a wide variety of names associated with the various parts of a diagnostic report. Doctors request for "tests" or "results" to be done. What the diagnostic service returns is variously called the "tests" or "results" or the "report". The individual data items are called "results" or "tests" both collectively and individually. Collections of individual data items are sometimes called "batteries" or "panels", which have various implications in different contexts. The naming confusion is worsened because of the wide variety of forms that the result of a diagnostic investigation can take, as described above. Languages other than English have their own variations on this theme.
This resource uses one particular set of terms. A practitioner "requests" a set of "tests". The diagnostic service returns a "report" which contains a "narrative" - a written summary of the outcomes, and "results" - the individual pieces of atomic data. The results are assembled in a "group" which is a nested structure that can be used to define relationships between the individual data items.

See also the Examples (§4.15) and the Definitions (§5.17).
<DiagnosticReport xmlns="http://hl7.org/fhir"> <status value="[code]"/><!-- 1..1 registered|interim|final|amended|cancelled|withdrawn --> <issued value="[instant]"/><!-- 1..1 Date this version was released --> <subject><!-- 1..1 Resource(Patient|Group|Device) The subject of the report --></subject> <performer><!-- 1..1 Resource(Organization) Responsible Diagnostic Service --></performer> <reportId><!-- 0..1 Identifier Id for external references to this report --></reportId> <requestDetail> <!-- 0..* What was requested --> <visit><!-- 0..1 Resource(Visit) Context where request was made --></visit> <requestOrderId><!-- 0..1 Identifier Id assigned by requester --></requestOrderId> <receiverOrderId><!-- 0..1 Identifier Receiver's Id for the request --></receiverOrderId> <requestTest><!-- 0..* CodeableConcept Test Requested --></requestTest> <bodySite><!-- 0..1 CodeableConcept Location of requested test (if applicable) --></bodySite> <requester><!-- 0..1 Resource(Organization|Practitioner) Responsible for request --></requester> <clinicalInfo value="[string]"/><!-- 0..1 Clinical information provided --> </requestDetail> <serviceCategory><!-- 0..1 CodeableConcept Biochemistry, Haematology etc. --></serviceCategory> <diagnosticTime value="[dateTime]"/><!-- 1..1 Effective time of diagnostic report --> <results> <!-- 1..1 Results grouped by specimen/kind/category --> <name><!-- 1..1 CodeableConcept Name/Code for this group of results --></name> <specimen><!-- 0..1 Resource(Specimen) Specimen details for this group --></specimen> <group><!-- 0..* Content as for DiagnosticReport.results Nested Report Group --></group> <result><!-- 0..* Resource(Observation) An atomic data result --></result> </results> <image><!-- 0..* Resource(Picture|ImagingStudy) Key images associated with this report --></image> <conclusion value="[string]"/><!-- 0..1 Clinical Interpretation of test results --> <codedDiagnosis><!-- 0..* CodeableConcept Codes for the conclusion --></codedDiagnosis> <representation><!-- 0..* Attachment Entire Report as issued --></representation> </DiagnosticReport>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| DiagnosticReport.status | Codes providing the status of an observation | http://hl7.org/fhir/observation-status |
| DiagnosticReport.requestDetail.requestTest | codes for tests/services that can be performed by diagnostic services | http://hl7.org/fhir/valueset-diagnostic-requests (Known Broken Link - needs to be resolved) |
| DiagnosticReport.requestDetail.bodySite | Codes describing anatomical locations. May include laterality | http://hl7.org/fhir/valueset-body-site (Known Broken Link - needs to be resolved) |
| DiagnosticReport.serviceCategory | codes for diagnostic service sections | http://hl7.org/fhir/valueset-diagnostic-service-sections (Known Broken Link - needs to be resolved) |
| DiagnosticReport.results.name | DiagnosticResultGroupNames | http://hl7.org/fhir/valueset-report-names (Known Broken Link - needs to be resolved) |
| DiagnosticReport.codedDiagnosis | Diagnoses codes provided as adjuncts to the report | http://hl7.org/fhir/valueset-clinical-findings (Known Broken Link - needs to be resolved) |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| code : token | a coded diagnosis on the report |
| date : date | date equal to the clinically relevant time of the report |
| date-before : date | date before or equal to the clinically relevant time of the report |
| date-after : date | date after or equal to the clinically relevant time of the report |
| group : token | name /code of a group in the report |
| identifier : token | an identifier for the report |
| issued : date | date equal to when the report was issued |
| issued-before : date | date before or equal to when the report was issued |
| issued-after : date | date after or equal to when the report was issued |
| name : token | the name/code of the report |
| performer : reference | who was the source of the report (organization) |
| requester : reference | who made a request that lead to the report |
| result : reference | link to an atomic result |
| service : token | which diagnostic discipline/department created the report |
| specimen : reference | the specimen details |
| status : token | The status of the report |
| subject : reference | the subject of the report |
| test : token | a test requested that the report is in response to |
(See Searching (§2.1.11)).
Status: XDS related resource under consideration by IHE and the FHIR project team. Draft for Comment
A reference to a document.
The resource name as it appears in a RESTful URL is /documentreference/
A document reference is a reference to a document defined in some other format, or stored in some other system. Typically, Document Reference Resources are used in document indexing systems, such as IHE XDS (see the XDS specific profile (Known Broken Link - needs to be resolved)), and also to refer to:
FHIR defines both a document format (§2.4) and this document reference. FHIR documents are for documents that are authored and assembled in FHIR. This resource is for general references to other documents.
Note that there is no formal or limited definition of what a document is.
The document that is a target of the reference can be a reference to a FHIR document served by another server, or the target can be stored in the special FHIR Binary Resource (§2.1.17), or the target can be stored on some other server system. The document reference is also able to address documents that are retrieved by a service call such as an XDS.b RetrieveDocumentSet, or a DICOM exchange, or a v2 message query, though the way each of these works must be specified in an implementation guide.


See also the Examples (§4.17) and the Definitions (§5.19).
<DocumentReference xmlns="http://hl7.org/fhir"> <masterIdentifier><!-- 1..1 Identifier Master Version Specific Identifier --></masterIdentifier> <identifier><!-- 0..* Identifier Other identifiers for the document --></identifier> <subject><!-- 1..1 Resource(Patient|Practitioner|Group) The subject of the document --></subject> <type><!-- 1..1 CodeableConcept What kind of document this is --></type> <author><!-- 1..* Resource(Practitioner|Device) Who/what authored the document --></author> <custodian><!-- 0..1 Resource(Organization) Org which maintains the document --></custodian> <authenticator><!-- 0..1 Resource(Practitioner|Organization) Who authenticated the document --></authenticator> <created value="[dateTime]"/><!-- 0..1 Document creation time --> <indexed value="[instant]"/><!-- 1..1 When this document reference created --> <status value="[code]"/><!-- 1..1 The status of this document reference --> <docStatus><!-- 0..1 CodeableConcept Status of the underlying document --></docStatus> <supercedes><!-- 0..1 Resource(DocumentReference) If this document replaces another --></supercedes> <description value="[string]"/><!-- 0..1 Human Readable description --> <confidentiality><!-- 0..1 CodeableConcept Sensitivity of source document --></confidentiality> <primaryLanguage value="[code]"/><!-- 0..1 Primary language of the document (http://tools.ietf.org/html/bcp47.htm) --> <mimeType value="[code]"/><!-- 1..1 Mime type of the document (http://www.rfc-editor.org/bcp/bcp13.txt.htm) --> <format><!-- 0..1 CodeableConcept Format of the document --></format> <size value="[integer]"/><!-- 0..1 Size of the document in bytes --> <hash value="[string]"/><!-- 0..1 HexBinary representation of SHA1 --> <location value="[uri]"/><!-- 0..1 Where to access the document --> <service> <!-- 0..1 If access is not fully described by location --> <type><!-- 1..1 CodeableConcept Type of service (i.e XDS.b) --></type> <parameter> <!-- 0..* Service call parameters --> <name value="[string]"/><!-- 1..1 Name of parameter --> <value value="[string]"/><!-- 0..1 Parameter value --> </parameter> </service> <context> <!-- 0..1 Clinical context of document --> <code><!-- 0..* CodeableConcept Type of context (i.e. type of event) --></code> <period><!-- 0..1 Period Time described by the document --></period> <facilityType><!-- 0..1 CodeableConcept Kind of facility where patient was seen --></facilityType> </context> </DocumentReference>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| DocumentReference.type | Type of a clinical document | ?? |
| DocumentReference.status | The status of the document reference | http://hl7.org/fhir/document-reference-status |
| DocumentReference.confidentiality | Codes specifying the level of confidentiality of the XDS Document | No details provided yet |
| DocumentReference.primaryLanguage | A human language | IETF language tag (http://tools.ietf.org/html/bcp47) |
| DocumentReference.mimeType | The mime type of an attachment | BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049) (http://www.rfc-editor.org/bcp/bcp13.txt) |
| DocumentReference.format | The format that the source document has | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| authenticator : reference | Who authenticated the document |
| author : reference | Who/what authored the document |
| confidentiality : token | Sensitivity of source document |
| created : date | date equal to Document creation time |
| created-before : date | date before or equal to Document creation time |
| created-after : date | date after or equal to Document creation time |
| custodian : reference | Org which maintains the document |
| description : text | Human Readable description |
| event : token | Type of context (i.e. type of event) |
| facility : token | Kind of facility where patient was seen |
| format : token | Format of the document |
| identifier : token | Other identifiers for the document |
| indexed : date | date equal to When this document reference created |
| indexed-before : date | date before or equal to When this document reference created |
| indexed-after : date | date after or equal to When this document reference created |
| language : token | Primary language of the document |
| location : string | Where to access the document |
| period : date | date equal to Time described by the document |
| period-before : date | date before or equal to Time described by the document |
| period-after : date | date after or equal to Time described by the document |
| size : integer | Size of the document in bytes |
| status : token | The status of this document reference |
| subject : reference | The subject of the document |
| supercedes : reference | If this document replaces another |
| type : token | What kind of document this is |
(See Searching (§2.1.11)).
Status: Not an approved resource. Likely owner is Patient care
Significant health events and conditions for people related to the subject relevant in the context of care for the subject.
The resource name as it appears in a RESTful URL is /familyhistory/
This resource records significant health events and conditions for people related to the subject. This information can be known to different levels of accuracy. Sometimes the exact condition ('asthma') is known, and sometimes it is less precise ('some sort of cancer'). Equally, sometimes the person can be identified ('my aunt agatha') and sometimes all that is known is that the person was an uncle.
The entire family history for an individual is stored in a single resource.

See also the Examples (§4.18) and the Definitions (§5.20).
<FamilyHistory xmlns="http://hl7.org/fhir"> <subject><!-- 1..1 Resource(Patient) Subject of this history --></subject> <relation> <!-- 0..* The relation --> <name value="[string]"/><!-- 0..1 The family member who had the condition --> <relationship><!-- 1..1 CodeableConcept Relationship to the subject --></relationship> <deceased[x]><!-- 0..1 boolean|Age|Range|string Is the person deceased --></deceased[x]> <note value="[string]"/><!-- 0..1 General note about the related person --> <condition> <!-- 0..* The Condition that the related person had --> <type><!-- 1..1 CodeableConcept The condition --></type> <outcome><!-- 0..1 CodeableConcept deceased | permanent disability | etc. --></outcome> <onset[x]><!-- 0..1 Age|Range|string How old the person was when the condition manifested --></onset[x]> <note value="[string]"/><!-- 0..1 General notes --> </condition> </relation> <note value="[string]"/><!-- 0..1 Additional details --> </FamilyHistory>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| FamilyHistory.relation.relationship | The nature of the relationship between the patient and the person with the condition. Based on the HL7v3 RoleCode: OID: 2.16.840.1.113883.5.111 with some inappropriate items removed | http://hl7.org/fhir/familial-relationship |
| FamilyHistory.relation.condition.outcome | The result of the condition for the patient. E.g. death, permanent disability, temporary disability, etc. | No details provided yet |
This resource represents a "bare bones" Family History as typically supported simple clinical systems. A more elaborate version incorporating more detailed information as appropriate for genetic councilling will be developed as a profile on this resource.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| subject : reference | The identity of a subject to list family history items for |
(See Searching (§2.1.11)).
Status: Not an approved resource: examplar. Possible owners: Public Health & Emergency Response and Patient Administration Working Group
Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively and are not formally or legally recognized. I.e. A collection of entities that isn't an Organization.
The resource name as it appears in a RESTful URL is /group/
There are 2 resources that provide for constructing collections of other resources:
The group resource is used in one of two ways:
Examples of the former could include group therapy or treatment sessions, exposed entities tracked as part of public health, etc. The latter might be used to define expected subjects for a clinical study.
Both use cases are handled by a single resource because the data elements captured tend to be similar.

See also the Examples (§4.19) and the Definitions (§5.21).
<Group xmlns="http://hl7.org/fhir"> <identifier><!-- 0..1 Identifier Unique id --></identifier> <type value="[code]"/><!-- 1..1 Group Classification --> <actual value="[boolean]"/><!-- 1..1 Descriptive or actual --> <code><!-- 0..1 CodeableConcept Kind of Group members --></code> <name value="[string]"/><!-- 0..1 Label for Group --> <quantity value="[integer]"/><!-- 0..1 Number of members --> <characteristic> <!-- 0..* Trait of group members --> <type><!-- 1..1 CodeableConcept Kind of characteristic --></type> <value[x]><!-- 1..1 CodeableConcept|string|boolean|Quantity|Range Value held by characteristic --></value[x]> <exclude value="[boolean]"/><!-- 1..1 Group includes or excludes --> </characteristic> <member><!-- 0..* Resource(Patient|Practitioner|Device|Medication) Who is in group --></member> </Group>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Group.type | Types of resources that are part of group | http://hl7.org/fhir/group-type |
| Group.code | Kind of particular resource | No details provided yet |
| Group.characteristic.type | List of characteristics used to describe group members. E.g. gender, age, owner, location, etc. | No details provided yet |
| Group.characteristic.value[x] | Value of descriptive member characteristic | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| actual : token | Descriptive or actual |
| code : token | The kind of resources contained |
| exclude : token | Group includes or excludes |
| identifier : token | Unique id |
| member : reference | Who is in group |
| type : token | Kind of characteristic |
| type-value : composite | A composite of both type and value |
| value : token | Value held by characteristic |
(See Searching (§2.1.11)).
Status: A candidate resource being jointly developed by HL7 and DICOM for use with mobile access to XDS-I repositories
Manifest of a set of images produced in study. The set of images may include every image in the study, or it may be an incomplete sample, such as a list of key images.
The resource name as it appears in a RESTful URL is /imagingstudy/
This resource summarises a series of images generated as part of an imaging study, and provides references to where the images are available using WADO-RS (todo: reference). This resource is used to record that images are available in other clinical contexts such as diagnostic reports (§3.12), Care Plans (§3.4), etc. Also, see the use case description below.

See also the Examples (§4.20) and the Definitions (§5.22).
<ImagingStudy xmlns="http://hl7.org/fhir"> <dateTime value="[dateTime]"/><!-- 0..1 Shortname --> <subject><!-- 1..1 Resource(Patient) Who the images are of --></subject> <uid value="[oid]"/><!-- 1..1 Formal identifier for the study (0020,000D) --> <accessionNo><!-- 0..1 Identifier Accession Number (0008,0050) --></accessionNo> <identifier><!-- 0..* Identifier Other identifiers for the study (0020,0010) --></identifier> <referrer><!-- 0..1 Resource(Practitioner) Referring physician (0008,0090) --></referrer> <availability value="[code]"/><!-- 0..1 Instance Availability (0008,0056) --> <url value="[uri]"/><!-- 0..1 Retrieve URI (0040,E010) --> <numberOfSeries value="[integer]"/><!-- 1..1 Number of Study Related Series (0020,1206) --> <numberOfInstances value="[integer]"/><!-- 1..1 Number of Study Related Instances (0020,1208) --> <clinicalInformation value="[string]"/><!-- 0..1 Diagnoses etc with request (0008,1080) --> <procedure><!-- 0..* Coding Type of procedure performed (0008,1032) --></procedure> <interpreter><!-- 0..1 Resource(Practitioner) Who interpreted images (0008,1060) --></interpreter> <description value="[string]"/><!-- 0..1 Institution-generated description (0008,1030) --> <series> <!-- 0..* Each study has one or more series of image instances --> <number value="[integer]"/><!-- 0..1 Number of this series in overall sequence (0020,0011) --> <modality value="[code]"/><!-- 1..1 The modality of this sequence (0008,0060) --> <uid value="[oid]"/><!-- 1..1 Formal identifier for this series (0020,000E) --> <description value="[string]"/><!-- 0..1 A description of the series (0008,103E) --> <numberOfInstances value="[integer]"/><!-- 1..1 Number of Series Related Instances (0020,1209) --> <availability value="[code]"/><!-- 0..1 Instance Availability (0008,0056) --> <url value="[uri]"/><!-- 0..1 Retrieve URI (0040,E010) --> <locationUID value="[oid]"/><!-- 0..1 Retrieve Location UID (0040,E011) --> <bodySite><!-- 0..1 Coding Body part examined (0018,0015) --></bodySite> <dateTime value="[dateTime]"/><!-- 0..1 When the series started --> <instance> <!-- 1..* A single image taken from a patient --> <number value="[integer]"/><!-- 0..1 The number of this image in the series (0020,0013) --> <uid value="[oid]"/><!-- 1..1 Formal identifier for this image (0008,0018) --> <sopclass value="[oid]"/><!-- 1..1 DICOM Image type (0008,0016) --> <title value="[string]"/><!-- 0..1 Description to be provided --> <rows value="[integer]"/><!-- 0..1 Rows (0028,0010) --> <columns value="[integer]"/><!-- 0..1 Columns (0028,0011) --> <bitsAllocated value="[integer]"/><!-- 0..1 Bits Allocated (0028,0100) --> <numberOfFrames value="[integer]"/><!-- 0..1 Number of Frames (0028,0008) --> <availability value="[code]"/><!-- 0..1 Instance Availability (0008,0056) --> <url value="[uri]"/><!-- 0..1 WADO / WADO-RS service where instance is available --> <dateTime value="[dateTime]"/><!-- 0..1 When this image was taken --> </instance> </series> </ImagingStudy>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| ImagingStudy.availability ImagingStudy.series.availability ImagingStudy.series.instance.availability | Availability of the resource | http://hl7.org/fhir/instance-availability |
| ImagingStudy.series.modality | Type of the image capturing machinery | http://hl7.org/fhir/image-modality |
| ImagingStudy.series.bodySite | Codes for human and animal body sites | ?? |
Note that this resource uses OIDs rather than codes in order to follow DICOM practice.
The following storyboard illustrates the primary use case for this resource:
An oncologist, Karen, is seeing patients in her clinic, and would like background on the patients she is seeing today. Her first patient of the day, Alex. has arrived. She launches her Electronic Medical Record (EMR) software, and makes a Patient query on Alex using his last name. The EMR software makes a FHIR query on the Patient resource, to provide background demographic information for cover page rendering. The EMR software makes a subsequent FHIR query on the Problem resource, and reports that Alex is suspected to have prostate cancer. With this information, Karen decides to check for two further tests - the results of a Prostate-Specific Antigen (PSA) laboratory test, and of a CT exam performed at the local diagnostic facility. First, a FHIR query is made against the Observation resource to query for the most recent value of PSA (the EMR also queries previous values of PSA for trending). For the CT exam, the EMR software queries on the ImagingStudy resource to retrieve a list of available images with other relevant constraints (such as modality, body region etc). This returns back the studies available, with relevant meta-data about each study, it's series and images. This information will help Karen to select which study would like to review. Using the WADO-RS references provided, the artifacts Karen would like to review can be downloaded and viewed using capable DICOM viewing software.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| accession : token | the accession id for the image |
| bodysite : token | Body part examined (0018,0015) |
| date : date | date equal to the date the study was done was taken |
| date-before : date | date before or equal to the date the study was done was taken |
| date-after : date | date after or equal to the date the study was done was taken |
| dicomClass : token | DICOM Image type (0008,0016) |
| modality : token | the modality of the image |
| series : token | the series id for the image |
| size : integer | the size of the image in MB - may include > or < in the value |
| study : token | the study id for the image |
| subject : reference | Who the study is about |
| uid : token | Formal identifier for this image (0008,0018) |
(See Searching (§2.1.11)).
Status: A candidate resource to foster discussion
An administered immunization.
The resource name as it appears in a RESTful URL is /immunization/

See also the Examples (§4.21) and the Definitions (§5.23).
<Immunization xmlns="http://hl7.org/fhir"> <subject><!-- 0..1 Resource(Patient) Who this immunization was adminstered to --></subject> <requester><!-- 0..1 Resource(Practitioner) Vaccine Ordering Provider Name --></requester> <performer><!-- 0..1 Resource(Practitioner) Vaccine Administering Provider Name --></performer> <manufacturer><!-- 0..1 Resource(Organization) Vaccine Manufacturer --></manufacturer> <location><!-- 0..1 Resource(Location) Vaccine Administration Facility --></location> <date value="[dateTime]"/><!-- 0..1 Vaccination Administration Date --> <reported value="[boolean]"/><!-- 1..1 If self-reported --> <vaccineType><!-- 0..1 CodeableConcept Vaccine Product Administered --></vaccineType> <lotNumber value="[string]"/><!-- 0..1 Vaccine Lot Number --> <expirationDate value="[date]"/><!-- 0..1 Vaccine Expiration Date --> <site><!-- 0..1 CodeableConcept Vaccine Site of Administration --></site> <route><!-- 0..1 CodeableConcept Vaccine Route of Administration --></route> <doseQuantity><!-- 0..1 Quantity Vaccine dosage --></doseQuantity> <refusal> <!-- 0..1 Exemption(s)/ Parent Refusal(s) of Vaccine Product Type Administered --> <reason><!-- 1..1 CodeableConcept Explanation of refusal / exemption --></reason> </refusal> <reaction> <!-- 0..* Details of a reaction that follows immunization --> <date value="[dateTime]"/><!-- 0..1 Date of reaction to the immunization --> <detail><!-- 0..1 Resource(AdverseReaction|Observation) Details of the reaction --></detail> <reported value="[boolean]"/><!-- 0..1 Self-reported indicator --> </reaction> <vaccinationProtocol> <!-- 0..1 Vaccine Administration Protocol --> <doseSequence value="[integer]"/><!-- 1..1 Dose Number --> <description value="[string]"/><!-- 0..1 Vaccine Administration Protocol Description --> <authority><!-- 0..1 Resource(Organization) Vaccine Administration Protocol Authority --></authority> <series value="[string]"/><!-- 0..1 Vaccine Series --> <seriesDoses value="[integer]"/><!-- 0..1 Dose Number Recommendation --> <doseTarget><!-- 0..1 CodeableConcept Targeted Disease --></doseTarget> <doseStatus><!-- 1..1 CodeableConcept Dose Status --></doseStatus> <doseStatusReason><!-- 0..1 CodeableConcept Dose Status Reason --></doseStatusReason> </vaccinationProtocol> </Immunization>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Immunization.vaccineType | The type of vaccine administered | No details provided yet |
| Immunization.site | The site at which the vaccine was administered | No details provided yet |
| Immunization.route | The route by which the vaccine was administered | No details provided yet |
| Immunization.refusal.reason | The reason why a vaccine administration was refused | No details provided yet |
| Immunization.vaccinationProtocol.doseTarget | The disease target of the vaccination protocol | No details provided yet |
| Immunization.vaccinationProtocol.doseStatus | The status of the vaccination protocol (i.e. should this count) | No details provided yet |
| Immunization.vaccinationProtocol.doseStatusReason | The reason for the determining if a vaccination should count or why vaccination should not count. | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to Vaccination Administration Date |
| date-before : date | date before or equal to Vaccination Administration Date |
| date-after : date | date after or equal to Vaccination Administration Date |
| location : reference | Vaccine Administration Facility |
| lot : string | Vaccine Lot Number |
| manufacturer : token | Vaccine Manufacturer |
| performer : reference | Vaccine Administering Provider Name |
| refusal : string | Explanation of refusal / exemption |
| refusal-date : date | date equal to Date of Exemption/Refusal of Vaccine Product Type Administered |
| refusal-date-before : date | date before or equal to Date of Exemption/Refusal of Vaccine Product Type Administered |
| refusal-date-after : date | date after or equal to Date of Exemption/Refusal of Vaccine Product Type Administered |
| requester : reference | Vaccine Ordering Provider Name |
| subject : reference | Who this immunization was adminstered to |
| type : token | Vaccine Product Type Administered |
(See Searching (§2.1.11)).
Status: null
An immunization profile.
The resource name as it appears in a RESTful URL is /immunizationprofile/

See also the Examples (§4.22) and the Definitions (§5.24).
<ImmunizationProfile xmlns="http://hl7.org/fhir"> <subject><!-- 1..1 Resource(Patient) Who this profile is for --></subject> <recommendation> <!-- 1..* Vaccine administration recommendations --> <recommendationDate value="[dateTime]"/><!-- 0..1 Recommendation date --> <vaccineType><!-- 1..1 CodeableConcept Antigen to be administered --></vaccineType> <doseNumber value="[integer]"/><!-- 0..1 Recommended dose number --> <forecastStatus value="[code]"/><!-- 1..1 Vaccine administration status --> <dateCriterion> <!-- 0..* Pertinent dates --> <code><!-- 1..1 CodeableConcept Date classification of recommendation --></code> <value value="[dateTime]"/><!-- 1..1 Date recommendation --> </dateCriterion> <protocol> <!-- 0..1 Vaccine Administration Protocol --> <doseSequence value="[integer]"/><!-- 0..1 Dose Number --> <description value="[string]"/><!-- 0..1 Vaccine Administration Protocol Description --> <authority><!-- 0..1 Resource(Organization) Vaccine Administration Protocol Authority --></authority> <series value="[string]"/><!-- 0..1 Vaccine Series --> </protocol> <supportingImmunization><!-- 0..* Resource(Immunization) Supporting Immunization --></supportingImmunization> <supportingAdverseEventReport> <!-- 0..* Supporting adverse event report --> <identifier value="[id]"/><!-- 1..* Adverse event report identifier --> <reportType><!-- 0..1 CodeableConcept Adverse event report classification --></reportType> <reportDate value="[dateTime]"/><!-- 0..1 Adverse event report date --> <text value="[string]"/><!-- 0..1 Adverse event report text --> <reaction><!-- 0..* Resource(AdverseReaction) Documented reaction --></reaction> </supportingAdverseEventReport> <supportingPatientObservation><!-- 0..* Resource(Observation) Supporting Patient Observation --></supportingPatientObservation> </recommendation> </ImmunizationProfile>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| ImmunizationProfile.recommendation.vaccineType | The type of vaccine administered | No details provided yet |
| ImmunizationProfile.recommendation.forecastStatus | The patient's status with respect to a vaccintion protocol | http://hl7.org/fhir/immunization-forecast-status |
| ImmunizationProfile.recommendation.dateCriterion.code | Classifies date criterion with respect to conveying information about a patient's vaccination status (e.g. due date, latest to give date, etc.) | No details provided yet |
| ImmunizationProfile.recommendation.supportingAdverseEventReport.reportType | Classifies an adverse event report | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| subject : reference | Who this profile is for |
(See Searching (§2.1.11)).
Status: Draft Infrastructure resource under consideration by the FHIR project team
A set of information summarized from a list of other resources.
The resource name as it appears in a RESTful URL is /list/
There are 2 resources that provide for constructing collections of other resources:
List resources are used in many places, including for allergies, medications, alerts, medical history, etc.

See also the Examples (§4.23) and the Definitions (§5.25).
<List xmlns="http://hl7.org/fhir"> <code><!-- 0..1 CodeableConcept What the purpose of this list is --></code> <source><!-- 0..1 Resource(Practitioner|Patient|Device) Source of the list --></source> <date value="[dateTime]"/><!-- 0..1 When the list was prepared --> <ordered value="[boolean]"/><!-- 0..1 Whether items in the list have a meaningful order --> <mode value="[code]"/><!-- 1..1 working | snapshot | changes --> <entry> <!-- 0..* Entries in the list --> <flag><!-- 0..* CodeableConcept Workflow information about this item --></flag> <deleted value="[boolean]"/><!-- 0..1 If this item is actually marked as deleted --> <item><!-- 1..1 Resource(Any) Actual entry --></item> </entry> <emptyReason><!-- 0..1 CodeableConcept Why list is empty --></emptyReason> </List>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| List.code | What the purpose of a list is | No details provided yet |
| List.mode | The processing mode that applies to this list | http://hl7.org/fhir/list-mode |
| List.entry.flag | Codes that provide further information about the reason and meaning of the item in the list | No details provided yet |
| List.emptyReason | If a list is empty, why it is empty | No details provided yet |

There are several different kinds of use for a List resource:
| working | This list is the master list, maintained in an ongoing fashion with regular updates as the real world list it is tracking changes |
| snapshot | This list was prepared as a snapshot. It should not be assumed to be current |
| changes | The list is prepared as a statement of changes that have been made or recommended |
The final mode - a change list, may include deleted items. A typical case is a medication list in a discharge summary, where the list includes items that have been both added and deleted. In order to ensure that the list is safe to process, any item where the flag implies that the item has actually been deleted must have the deleted element set to true.
Note that there is no implication about the status of a resource that has been deleted. The only statement that is made is that the resource has been dropped from the list. However applications should ensure that the implication of adding or deleting items from the list is consistent with the logical status of the resource and it's contents.
A proper use of List.mode = "changes" with a deleted resource is in a medications list for a discharge summary. See Example "med-list". An improper use would be if the list was a working list of patient medications in a clinical tracking system, and list item flags were used to implement version tracking history within the resource.

The narrative portion of the List resource should contain a summary of key properties of the items in the list, along with a human readable summary of their flags (if present).
An HTML table is the recommended approach, though this is not required. There should be a representation in the narrative for each item in the list, and vice versa, along with clear use of visual hints (borders, lines, bullet marks, etc.) to ensure that human readers do not get confused about which flags belongs with which item on space-poor displays.
This means that the narrative content of the list will be limited to the version of the contained resources at the time the list was last updated. (It may be even earlier if the narrative isn't updated to reflect the most recent version of all referenced resources at each update. Best practice for 'working' lists is to update the narrative to reflect the most recent content of all list elements each time the list is revised). Lists should therefore not be relied on as a real-time view of the referenced content. There are a few possible approaches to work around this issue:

If the list is empty, there could be several different reasons why this is so. For example:
Given these possibilities, and the common and significant first case, source systems SHOULD provide an empty reason if the list is empty. Because of the importance of this case, the special value "nil known" should be used when there are no (significant) entries in this context of care. Note that this concept is sometimes described differently, such as "patient denies taking medications", or "patient was unable to identify any relevant medical history".
When receiving a list, systems should not assume that the list is complete (some entries may have been withheld for a variety of reasons), unless there are specific trading partner arrangements in place or, if the list is empty, that there are actually nil known, unless the "nil known" code is present.
If the list is empty, the narrative should contain text equivalent to the empty reason.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| code : token | What the purpose of this list is |
| date : date | date equal to When the list was prepared |
| date-before : date | date before or equal to When the list was prepared |
| date-after : date | date after or equal to When the list was prepared |
| emptyReason : token | Why list is empty |
| item : reference | Actual entry |
| source : reference | Source of the list |
(See Searching (§2.1.11)).
Status: Not an approved resource: Draft. Under consideration by the Patient Administration work group
Contact details and position information for a physical place that may be visited and where healthcare resources and participants may be found or contained, accomodated, or stored.
The resource name as it appears in a RESTful URL is /location/
A Location includes both incidental locations (a place at which is used without prior designation or authorization) and dedicated, formally appointed locations. Examples of use for Location are:
Non-examples are:

See also the Examples (§4.24) and the Definitions (§5.26).
<Location xmlns="http://hl7.org/fhir"> <name value="[string]"/><!-- 1..1 Name of the location --> <description value="[string]"/><!-- 0..1 Description of the Location --> <type><!-- 0..* CodeableConcept Classification of the location --></type> <telecom><!-- 0..1 Contact Contact details of the location --></telecom> <address><!-- 0..1 Address Physical location --></address> <position> <!-- 0..1 The absolute geographic location (from KML) --> <longitude value="[decimal]"/><!-- 1..1 Longitude (from KML) --> <latitude value="[decimal]"/><!-- 1..1 Lattitude (from KML) --> <altitude value="[decimal]"/><!-- 0..1 Altitude (from KML) --> </position> <provider><!-- 0..1 Resource(Organization) The organization that provides services at the location --></provider> <active value="[boolean]"/><!-- 0..1 Whether the location is still used to provide services --> <partOf><!-- 0..1 Resource(Location) Another Location which this Location is physically inside of --></partOf> </Location>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Location.type | Indicates what kind of location this is, e.g. "Hospital", "Emergency room", "Ambulance" | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| active : token | Whether to search for active or inactive locations |
| address : string | A (part of the) address of the location |
| name : string | A (portion of the) name of the location |
| near : token | The coordinates expressed as [lat],[long] (refer KML) to find locations near to (servers may search using a square rather than a circle for efficiency) |
| near-distance : token | A distance quantity to limit the near search to locations within a specific distance |
| partof : token | The location of which this location is a part |
| type : token | A code for the type of location |
(See Searching (§2.1.11)).
Status: Not an approved resource: draft for comment developed by Pharmacy WG.
This is primarily for identification and definition of Medication, but also covers ingredients and packaging.
The resource name as it appears in a RESTful URL is /medication/
Representing Medication in the majority of healthcare settings is a matter of identifying an item from a list and then conveying a reference for the item selected either into a patient related resource or to other applications. Additional information about the medication is frequently provided for human verification but a full representation of the details of composition and efficacy of the medicine is conveyed by referring to drug dictionaries by means of the codes they define. There are some occasions where it is necessary to identify slightly more detail, such as when dispensing a package containing a particular medicine requires identification both of the medicine and the package at once. There are also some occasions (e.g. custom formulations) where the composition of a medicine must be represented. In these cases the ingredients of the medicine have to be specified together with the amount contained, though the medication resource does not provide full details.
The medication resource allows for medications to be characterised as either a product or a package; this classification is important because it affects the interpretation of a prescribed amount. For instance, is the prescribed amount 20 tablets, or 20 packages of 50 tablets each? However the kind element is not required because not all contexts of use are involved with prescription (medication statements, for instance). Typically, however, profiles describing the use of the medication resource in a prescribing environment will make the kind element required.
Depending on whether the medication is a product or a package, further details about the composition can be provided. A product has a form (tablet, suspension, etc) and a list of ingredients with quantities. The ingredients may be other medications or substances. A package has a container (vacuum packed box, jar, etc) and a list of the products or other packages that are in the package.
todo: Is it necessary to assign an identifying code to a medication record so that a system's list of medication resources can also be used as a coding system?

See also the Examples (§4.25) and the Definitions (§5.27).
<Medication xmlns="http://hl7.org/fhir"> <name value="[string]"/><!-- 0..1 Common / Commercial name --> <code><!-- 0..1 CodeableConcept References to std. medication terminologies --></code> <isBrand value="[boolean]"/><!-- 0..1 True if a brand --> <manufacturer><!-- 0..1 Resource(Organization) Manufacturer of the item --></manufacturer> <kind value="[code]"/><!-- 0..1 product | package --> <product> <!-- 0..1 If is a product --> <form><!-- 0..1 CodeableConcept Powder | tablets | carton etc --></form> <ingredient> <!-- 0..* Ingredients, if specified --> <item><!-- 1..1 Resource(Substance|Medication) Ingredient --></item> <amount><!-- 0..1 Ratio Amount of ingredient --></amount> </ingredient> </product> <package> <!-- 0..1 If is a package --> <container><!-- 0..1 CodeableConcept Kind of container --></container> <content> <!-- 0..* What is in the package --> <item><!-- 1..1 Resource(Medication) A product in the package --></item> <amount><!-- 0..1 Quantity Amount in the package --></amount> </content> </package> </Medication>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Medication.code | A code that defines the type of a medication | No details provided yet |
| Medication.kind | Whether the medication is a product or a package | http://hl7.org/fhir/medication-kind |
| Medication.product.form | The form of a medication | No details provided yet |
| Medication.package.container | Kind of container a medication package is packaged in | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| code : token | References to std. medication terminologies |
| container : token | Kind of container |
| content : reference | A product in the package |
| form : token | Powder | tablets | carton etc |
| ingredient : reference | Ingredient |
| manufacturer : reference | Manufacturer of the item |
| name : string | Common / Commercial name |
(See Searching (§2.1.11)).
Status: Not an approved resource: draft for comment developed by Pharmacy WG. Under consideration by the Patient Care work group
Describes the event of a patient being given a dose of a medication. This may be as simple as swallowing a tablet or it may be a long running infusion. Related resources tie this event to the authorizing prescription, and the specific visit between patient and health care practitioner.
The resource name as it appears in a RESTful URL is /medicationadministration/
| MedicationPrescription (§3.24) | An order for both supply of the medication and the instructions for administration of the medicine to a patient. |
| MedicationDispense (§3.23) | Provision of a supply of a medication with the intention that it is subsequently consumed by a patient (usually in response to a prescription). |
| MedicationAdministration | When a patient actually consumes a medicine, or it is otherwised administered to them |
| MedicationStatement (§3.25) | This is a record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician. A medication statement is not a part of the prescribe->dispense->administer sequence but is a report that such a sequence (or at least a part of it) did take place resulting in a belief that the patient has received a particular medication. |
For further background information, see the V3 Pharmacy Domain model PORX_ST040110UV.

See also the Examples (§4.26) and the Definitions (§5.28).
<MedicationAdministration xmlns="http://hl7.org/fhir"> <externalID><!-- 0..* Identifier External Identifier --></externalID> <status value="[code]"/><!-- 1..1 Administration event status --> <patient><!-- 1..1 Resource(Patient) Patient --></patient> <practitioner><!-- 1..1 Resource(Practitioner) Practitioner (responsible Health Care professional) --></practitioner> <visit><!-- 0..1 Resource(Visit) Current Encounter / Admission --></visit> <prescription><!-- 1..1 Resource(MedicationPrescription) Prescription --></prescription> <wasNotGiven value="[boolean]"/><!-- 0..1 Is event negated --> <reasonNotGiven><!-- 0..* CodeableConcept Reason event is negated --></reasonNotGiven> <whenGiven><!-- 1..1 Period Effective time --></whenGiven> <medication><!-- 0..1 Resource(Medication) Medication --></medication> <administrationDevice><!-- 0..* Resource(Device) Administration device --></administrationDevice> <dosage> <!-- 0..* Medicine administration instructions to the patient/carer --> <timing><!-- 0..1 Schedule Medication timing --></timing> <site><!-- 0..1 CodeableConcept Entry site --></site> <route><!-- 0..1 CodeableConcept Rout of administration --></route> <method><!-- 0..1 CodeableConcept Administration method --></method> <quantity><!-- 0..1 Quantity Dose quantity per dose --></quantity> <rate><!-- 0..1 Ratio Dose quantity per unit of time --></rate> <maxDosePerPeriod><!-- 0..1 Ratio Total dose that should be consumed per unit of time --></maxDosePerPeriod> </dosage> </MedicationAdministration>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| MedicationAdministration.status | A set of codes indicating the current status of a MedicationAdministration | http://hl7.org/fhir/medication-admin-status |
| MedicationAdministration.reasonNotGiven | A set of codes indicating the reason why the MedicationAdministration is negated. | ?? |
| MedicationAdministration.dosage.site | Identifies the site where the medicine enters the body | ?? |
| MedicationAdministration.dosage.route | A set of codes indicating the path in or on the body by which the medication is introduced into or onto the body. | ?? |
| MedicationAdministration.dosage.method | A set of codes indicating the method by which the medication is introduced into or onto the body. | ?? |
| Issue | Comments |
|---|---|
| Medication Resource | A medication will typically be referred to by means of a code drawn from a suitable Medicines Terminology. However on occasion a product will be required for which the "recipe" must be specified. This implies a requirement to deal with a choice of either a code or a much more complete resource. Currently that resource has not been created. |
| Visit | Administration records are usually tied to some wider grouping of care records. Visit or Episode of Care is a common name for this. The present MedicationAdministration resource (and the other three yet to be built) link to an Visit as an identifier, but it may be more appropriate for it to be a full resource. |
| Contrast Media | Is this resource adequate for administering contrast media to a patient? |
| Author (accountability) | Authorship (and any other accountability) is assumed to be dealt with by the standard FHIR methods. |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| administrationDevice : reference | Return administrations with this administration device identity |
| external-id : token | Return administrations with this external identity |
| medicine : reference | Medication |
| notGiven : token | Administrations that were not made |
| patient : reference | The identity of a patient to list administrations for |
| prescription : reference | The identity of a prescription to list administrations from |
| status : token | MedicationAdministration event status (for example one of active/paused/completed/nullified) |
| visit : reference | Return administrations that share this visit |
| whenGiven : date | date equal to Date of administration |
| whenGiven-before : date | date before or equal to Date of administration |
| whenGiven-after : date | date after or equal to Date of administration |
(See Searching (§2.1.11)).
Status: Not an approved resource: draft for comment developed by Pharmacy WG.
Dispensing a medication to a named patient. This includes a description of the supply provided and the instructions for administering the medication..
The resource name as it appears in a RESTful URL is /medicationdispense/
| MedicationPrescription (§3.24) | An order for both supply of the medication and the instructions for administration of the medicine to a patient. |
| MedicationDispense | Provision of a supply of a medication with the intention that it is subsequently consumed by a patient (usually in response to a prescription). |
| MedicationAdministration (§3.22) | When a patient actually consumes a medicine, or it is otherwised administered to them |
| MedicationStatement (§3.25) | This is a record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician. A medication statement is not a part of the prescribe->dispense->administer sequence but is a report that such a sequence (or at least a part of it) did take place resulting in a belief that the patient has received a particular medication. |
The supply and the associated administration instructions may not exactly follow the original order (prescription) either because some details were left for completion at this point in the process, or because the dispenser exercised their clinical judgment to make some appropriate modification.

See also the Examples (§4.27) and the Definitions (§5.29).
<MedicationDispense xmlns="http://hl7.org/fhir"> <externalID><!-- 0..1 Identifier External identifier --></externalID> <status><!-- 0..1 CodeableConcept Active/Completed/Aborted --></status> <patient><!-- 1..1 Resource(Patient) Patient --></patient> <dispenser><!-- 1..1 Resource(Practitioner) Dispenser --></dispenser> <visit><!-- 0..1 Resource(Visit) Encounter / Admission --></visit> <authorizingPrescription><!-- 0..* Resource(MedicationPrescription) Medication order that authorises the dispense --></authorizingPrescription> <dispense> <!-- 0..* Medicine supply details --> <externalID><!-- 0..1 Identifier External identifier --></externalID> <status><!-- 0..1 CodeableConcept Active/Completed/Aborted --></status> <type><!-- 0..1 CodeableConcept Type of dispense --></type> <quantity><!-- 1..1 Quantity Amount dispensed --></quantity> <medication><!-- 0..1 Resource(Medication) Medication --></medication> <whenPrepared><!-- 0..1 Period Dispensing time --></whenPrepared> <whenHandedOver><!-- 0..1 Period Handover time --></whenHandedOver> <destination><!-- 0..1 Resource(Location) Where the medication was sent --></destination> <receiver><!-- 0..* Resource(Practitioner) Who collected the medication --></receiver> <dosage> <!-- 0..* Medicine administration instructions to the patient/carer --> <timing><!-- 0..1 Schedule Medication timing --></timing> <site><!-- 0..1 CodeableConcept Entry site --></site> <route><!-- 0..1 CodeableConcept Rout of administration --></route> <method><!-- 0..1 CodeableConcept Administration method --></method> <quantity><!-- 0..1 Quantity Dose quantity per dose --></quantity> <rate><!-- 0..1 Ratio Dose quantity per unit of time --></rate> <maxDosePerPeriod><!-- 0..1 Ratio Total dose that should be consumed per unit of time --></maxDosePerPeriod> </dosage> </dispense> <substitution> <!-- 0..1 Deals with substitution of one medicine for another --> <type><!-- 1..1 CodeableConcept Type of substitiution --></type> <reason><!-- 0..* CodeableConcept Why was substitution made --></reason> <responsibleParty><!-- 0..* Resource(Practitioner) Who is responsible for the substitution --></responsibleParty> </substitution> </MedicationDispense>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| MedicationDispense.status MedicationDispense.dispense.status | A code specifying the state of the dispense event. | http://hl7.org/fhir/medication-dispense-status |
| MedicationDispense.dispense.type | Indicates the type of dispensing event that is performed. Examples include: Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc. | ?? |
| MedicationDispense.dispense.dosage.site | Identifies the site where the medicine enters the body | ?? |
| MedicationDispense.dispense.dosage.route | A set of codes indicating the path in or on the body by which the medication is introduced into or onto the body. | ?? |
| MedicationDispense.dispense.dosage.method | A set of codes indicating the method by which the medication is introduced into or onto the body. | ?? |
| MedicationDispense.substitution.type | A code signifying whether a different drug was dispensed from what was prescribed. | http://hl7.org/fhir/medication-dispense-subtype |
| MedicationDispense.substitution.reason | Indicates the reason for the substitution of (or lack of substitution) from what was prescribed. | ?? |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| destination : reference | Where the medication was sent |
| dispenser : reference | Dispenser |
| encounter : reference | Encounter / Admission |
| identity : token | Return dispenses with this external identity |
| medicine : reference | Medication |
| patient : reference | The identity of a patient to list dispenses for |
| prescription : reference | The identity of a prescription to list dispenses from |
| responsibleParty : reference | Who is responsible for the substitution |
| status : token | Status of the dispense |
| type : token | Type of dispense |
| whenHandedOver : date | date equal to Date when medication handed over to patient (outpatient setting), or supplied to ward or clinic (inpatient setting) |
| whenHandedOver-before : date | date before or equal to Date when medication handed over to patient (outpatient setting), or supplied to ward or clinic (inpatient setting) |
| whenHandedOver-after : date | date after or equal to Date when medication handed over to patient (outpatient setting), or supplied to ward or clinic (inpatient setting) |
| whenPrepared : date | date equal to Date when medication prepared |
| whenPrepared-before : date | date before or equal to Date when medication prepared |
| whenPrepared-after : date | date after or equal to Date when medication prepared |
(See Searching (§2.1.11)).
Status: Not an approved resource: draft for comment developed by Pharmacy WG.
An order for both supply of the medication and the instructions for administration of the medicine to a patient..
The resource name as it appears in a RESTful URL is /medicationprescription/
| MedicationPrescription | An order for both supply of the medication and the instructions for administration of the medicine to a patient. |
| MedicationDispense (§3.23) | Provision of a supply of a medication with the intention that it is subsequently consumed by a patient (usually in response to a prescription). |
| MedicationAdministration (§3.22) | When a patient actually consumes a medicine, or it is otherwised administered to them |
| MedicationStatement (§3.25) | This is a record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician. A medication statement is not a part of the prescribe->dispense->administer sequence but is a report that such a sequence (or at least a part of it) did take place resulting in a belief that the patient has received a particular medication. |

See also the Examples (§4.28) and the Definitions (§5.30).
<MedicationPrescription xmlns="http://hl7.org/fhir"> <externalID><!-- 0..* Identifier External identifier --></externalID> <dateWritten value="[dateTime]"/><!-- 0..1 Prescription date --> <status><!-- 0..1 CodeableConcept active | paused | completed | nullified --></status> <patient><!-- 1..1 Resource(Patient) Patient --></patient> <prescriber><!-- 0..1 Resource(Practitioner) Prescriber --></prescriber> <encounter><!-- 0..1 Resource(Visit) Encounter / Admission / Stay --></encounter> <reasonForPrescribing[x]><!-- 0..1 string|CodeableConcept Reason or indication for writing the prescription --></reasonForPrescribing[x]> <medication><!-- 0..1 Resource(Medication) Medication to be taken --></medication> <dosageInstructions> <!-- 0..* Dosage instructions --> <dosageInstructionsText value="[string]"/><!-- 0..1 Dosage text --> <additionalInstructions[x]><!-- 0..1 string|CodeableConcept Additional dosage instructions --></additionalInstructions[x]> <timing><!-- 0..1 Schedule Medication timing --></timing> <site><!-- 0..1 CodeableConcept Entry site --></site> <route><!-- 0..1 CodeableConcept Rout of administration --></route> <method><!-- 0..1 CodeableConcept Administration method --></method> <doseQuantity><!-- 0..1 Quantity Dose quantity per dose --></doseQuantity> <rate><!-- 0..1 Ratio Dose quantity per unit of time --></rate> <maxDosePerPeriod><!-- 0..1 Ratio Total dose that should be consumed per unit of time --></maxDosePerPeriod> </dosageInstructions> <dispense> <!-- 0..1 Dispense request --> <validityPeriod><!-- 0..1 Period Validity period --></validityPeriod> <numberOfRepeatsAllowed value="[integer]"/><!-- 0..1 Number of repeats allowed --> <quantity><!-- 0..1 Quantity Quanity --></quantity> <expectedSupplyDuration><!-- 0..1 Duration Expected supply duration --></expectedSupplyDuration> </dispense> <substitution> <!-- 0..1 Deals with substitution of one medicine for another --> <type><!-- 1..1 CodeableConcept Type of substitiution --></type> <reason><!-- 0..1 CodeableConcept Why should substitution (not) be made --></reason> </substitution> </MedicationPrescription>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| MedicationPrescription.status | A code specifying the state of the prescribing event. | http://hl7.org/fhir/medication-prescription-status |
| MedicationPrescription.dosageInstructions.site | Identifies the site where the medicine enters the body | ?? |
| MedicationPrescription.dosageInstructions.route | A set of codes indicating the path in or on the body by which the medication is introduced into or onto the body. | ?? |
| MedicationPrescription.dosageInstructions.method | A set of codes indicating the method by which the medication is introduced into or onto the body. | ?? |
| MedicationPrescription.substitution.type | A code signifying whether a different drug should be dispensed from what was prescribed. | ?? |
| MedicationPrescription.substitution.reason | Indicates the reason that a different medication should (or should not) be substituted from what was prescribed. | ?? |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| dateWritten : date | date equal to Prescription date |
| dateWritten-before : date | date before or equal to Prescription date |
| dateWritten-after : date | date after or equal to Prescription date |
| encounter : reference | Return dispenses with this encounter identity |
| identity : token | Return dispenses with this external identity |
| medicine : reference | Code for medicine or text in medicine name |
| patient : reference | The identity of a patient to list dispenses for |
| status : token | Status of the prescription |
(See Searching (§2.1.11)).
Status: Not an approved resource: draft for comment developed by Pharmacy WG.
A record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician.
The resource name as it appears in a RESTful URL is /medicationstatement/
| MedicationPrescription (§3.24) | An order for both supply of the medication and the instructions for administration of the medicine to a patient. |
| MedicationDispense (§3.23) | Provision of a supply of a medication with the intention that it is subsequently consumed by a patient (usually in response to a prescription). |
| MedicationAdministration (§3.22) | When a patient actually consumes a medicine, or it is otherwised administered to them |
| MedicationStatement | This is a record of medication being taken by a patient, or that the medication has been given to a patient where the record is the result of a report from the patient, or another clinician. A medication statement is not a part of the prescribe->dispense->administer sequence but is a report that such a sequence (or at least a part of it) did take place resulting in a belief that the patient has received a particular medication. |
This resource is distinct from MedicationPrescription (§3.24), MedicationDispense (§3.23) and MedicationAdministration (§3.22). Each of those resources refer to specific events - an individual order, an individual provisioning of medication or an individual dosing. MedicationStatement is a broader assertion covering a wider timespan and independent of specific events. The existence of resource instances of any of the preceding three types may be used to infer a Medication statement. However, medication statements can also be captured on the basis of other information including an assertion by the patient or a care-giver, the results of a lab test, etc.
Common usage includes

See also the Examples (§4.29) and the Definitions (§5.31).
<MedicationStatement xmlns="http://hl7.org/fhir"> <identifier><!-- 0..* Identifier External Identifier --></identifier> <patient><!-- 1..1 Resource(Patient) Patient --></patient> <wasNotGiven value="[boolean]"/><!-- 0..1 Is event negated --> <reasonNotGiven><!-- 0..* CodeableConcept Reason event is negated --></reasonNotGiven> <whenGiven><!-- 1..1 Period Effective time --></whenGiven> <medication><!-- 0..1 Resource(Medication) Medication --></medication> <administrationDevice><!-- 0..* Resource(Device) Administration device --></administrationDevice> <dosage> <!-- 0..* Medicine administration instructions to the patient/carer --> <timing><!-- 0..1 Schedule Medication timing --></timing> <site><!-- 0..1 CodeableConcept Entry site --></site> <route><!-- 0..1 CodeableConcept Rout of administration --></route> <method><!-- 0..1 CodeableConcept Administration method --></method> <quantity><!-- 0..1 Quantity Dose quantity per dose --></quantity> <rate><!-- 0..1 Ratio Dose quantity per unit of time --></rate> <maxDosePerPeriod><!-- 0..1 Ratio Total dose that should be consumed per unit of time --></maxDosePerPeriod> </dosage> </MedicationStatement>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| MedicationStatement.reasonNotGiven | A set of codes indicating the reason why the MedicationAdministration is negated. | ?? |
| MedicationStatement.dosage.site | Identifies the site where the medicine enters the body | ?? |
| MedicationStatement.dosage.route | A set of codes indicating the path in or on the body by which the medication is introduced into or onto the body. | ?? |
| MedicationStatement.dosage.method | A set of codes indicating the method by which the medication is introduced into or onto the body. | ?? |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| administrationDevice : reference | Return administrations with this administration device identity |
| identity : token | Return administrations with this external identity |
| medicine : reference | Code for medicine or text in medicine name |
| patient : reference | The identity of a patient to list administrations for |
| whenGiven : date | date equal to Date of administration |
| whenGiven-before : date | date before or equal to Date of administration |
| whenGiven-after : date | date after or equal to Date of administration |
(See Searching (§2.1.11)).
Status: Not an approved resource: Exemplar - based on common patterns found in Consolidated CDA. Comments will be welcomeed by O & O workgroup
Simple assertions and measurements made about a patient, device or other subject.
The resource name as it appears in a RESTful URL is /observation/
Observations are a central element in healthcare, used to support diagnosis, monitor progress, determine baselines and patterns and even capture demographic characteristics. Fundamentally, observations are simple name/value pair assertions with little structure, though there are several resources such as DiagnosticReport (§3.12) to manage and represent rich aggregation patterns for observations. Expected uses for this resource include:

See also the Examples (§4.31) and the Definitions (§5.33).
<Observation xmlns="http://hl7.org/fhir"> <name><!-- 1..1 CodeableConcept Kind of observation --></name> <value[x]><!-- 0..1 Quantity|CodeableConcept|Attachment|Ratio| Choice|Period|Array|string Actual result --></value[x]> <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation> <comments value="[string]"/><!-- 0..1 Comments about result --> <applies[x]><!-- 0..1 Period|dateTime Relevant time/time-period --></applies[x]> <issued value="[instant]"/><!-- 0..1 Date/Time this was made available --> <status value="[code]"/><!-- 1..1 Registered|Interim|Final|Amended|Cancelled|Withdrawn --> <reliability value="[code]"/><!-- 1..1 If quality issues exist (mostly devices) --> <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite> <method><!-- 0..1 CodeableConcept How it was done --></method> <identifier><!-- 0..1 Identifier Observation id --></identifier> <subject><!-- 0..1 Resource(Patient|Group|Device) Who/what this is about --></subject> <performer><!-- 0..1 Resource(Practitioner|Device|Organization) Who did the observation --></performer> <referenceRange> <!-- 0..* Provides guide for interpretation --> <meaning><!-- 0..1 CodeableConcept The meaning of this range --></meaning> <range[x]><!-- 1..1 Quantity|Range|string Reference --></range[x]> </referenceRange> <component> <!-- 0..* Component observation --> <name><!-- 1..1 CodeableConcept Kind of component observation --></name> <value[x]><!-- 1..1 Quantity|CodeableConcept|Attachment|Ratio| Choice|Period|Array|string Actual component result --></value[x]> </component> </Observation>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Observation.name Observation.component.name | Codes identifying types of simple observations | http://hl7.org/fhir/valueset-observation-codes (Known Broken Link - needs to be resolved) |
| Observation.value[x] Observation.component.value[x] | Codes providing results of simple observations | http://hl7.org/fhir/valueset-observation-values (Known Broken Link - needs to be resolved) |
| Observation.interpretation | Codes identifying interpretations of observations | http://hl7.org/fhir/observation-interpretation |
| Observation.status | Codes providing the status of an observation | http://hl7.org/fhir/observation-status |
| Observation.reliability | Codes that provide reliability information about an observation | http://hl7.org/fhir/observation-reliability |
| Observation.bodySite | Codes describing anatomical locations. May include laterality | http://hl7.org/fhir/valueset-body-site (Known Broken Link - needs to be resolved) |
| Observation.method | Methods for simple observations | http://hl7.org/fhir/valueset-observation-methods (Known Broken Link - needs to be resolved) |
| Observation.referenceRange.meaning | Code for the meaning of a reference range | http://hl7.org/fhir/valueset-referencerange-meaning (Known Broken Link - needs to be resolved) |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to obtained date/time. If obtained is a period, a date that falls in the period |
| date-before : date | date before or equal to obtained date/time. If obtained is a period, a date that falls in the period |
| date-after : date | date after or equal to obtained date/time. If obtained is a period, a date that falls in the period |
| name : token | The name of the observation type or component type |
| name-value : composite | Both name and value |
| performer : reference | who/what performed the observation |
| reliability : token | The reliability of the observation |
| status : token | The status of the observation |
| subject : reference | The subject that the observation is about |
| value : token | The code or value of a result |
(See Searching (§2.1.11)).
Status: Approved infrastructure resource. Draft for comment
A collection of Error, warning or information messages that result from a system action.
Operation Outcomes are sets of error, warning and information messages that provide detailed information about the outcome of some attempted system operation. They are provided as a direct system response, or component of one, where they provide information about the outcome of the operation.
Specifically, OperationOutcomes are used in the following circumstances:

See also the Examples (§4.32) and the Definitions (§5.34).
<OperationOutcome xmlns="http://hl7.org/fhir"> <issue> <!-- 1..* A single issue associated with the action --> <severity value="[code]"/><!-- 1..1 error | warning | information --> <type><!-- 0..1 Coding Error or warning code --></type> <details value="[string]"/><!-- 0..1 Additional description of the issue --> <location value="[string]"/><!-- 0..* XPath of element(s) related to issue --> </issue> </OperationOutcome>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| OperationOutcome.issue.severity | How the issue affects the success of the action | http://hl7.org/fhir/issue-severity |
| OperationOutcome.issue.type | A coded expression of the type of issue | http://hl7.org/fhir/issue-type |
On the RESTful interface, operation outcome resources are only relevant when a level of computable detail is required that is more granular than that provided by the HTTP response codes. This granularity could include:
Operation outcomes returned SHOULD be in alignment with the HTTP response code. For example, if the HTTP code indicates a failure (300+), at least one of the issues should have a severity of "error", indicating the reason for the failure.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
(See Searching (§2.1.11)).
Status: A draft resource for discussion
A request to perform an action.
The resource name as it appears in a RESTful URL is /order/
An order resource describes an order that an action be performed. An order is expected to lead to one or more responses (§3.29) that describe the outcome of processing/handling the order. The order resource is focused on the process of actually requesting an action be performed; the actual action to be perfomed is detailed in a separate resource that contains the details. Note that orders are often called "requests", but this name is not used here since the word "request" is used differently elsewhere in this specification.
Note that there is a variety of proceses associated with making and processing orders. Some orders may be handled immediately by automated systems but most require real world actions by one or more humnas. Some orders can only be processed when other real world actions happen, such as a patient actually presenting themselves so that the action to be performed. Often these real world dependencies are only implicit in the order details.
In healthcare, information that a particular action has been requested is often widely disseminated thoughout the context of a patient's healthcare. For example, the patients healthcare record will often include a list of prescriptions that have been made for the patient. For this reason, the presence of a prescription record itself is not enough to create an obligation for a dispense to occur. Most other things that can be ordered follow this same pattern.
For this reason, the information about what is requested is separated from the actual request for an action to be taken. The various workflows around the actual order/fulfillment process are associated with this resource and the order response (§3.29) resource, while the details of what is actually ordered are delegated to other resources.
In a RESTful context, a server functions as a repository of requests. When the server accepts the order, it has only stored the order; there is no direct response to the order. Some other process detects the existence of the order, processes it, and creates one or more responses as the order is processed. Usually, these responses are made available on the same server as the order, so that the client can monitor the result of the original order.
A client can determine that an order has not been performed by searching for order resources with no matching responses (see below)
Two message types are defined for sending orders: synchronous and asynchronous.
In a synchronous message, an order message (i.e. a bundle (§1.2.3) with a message (§2.3) resource, an order resource and a details resource) is sent to a system, and it responds with a message that includes the response (§3.29) (a message resource, and order response resource, along with additional details as appropriate). This synchronous message exchange is simple, but only useful where there only needs to be one response, and where the response can be made in a timely fashion.
For more general use, an asynchronous message type is also defined. With this type, the requesting system sends the order message, and receives a simple acknowledgement message (only a message resource) that acknowledges that the order was received. Then the receiving system sends one or more response messages as the order is processed. Each of these response messages is sent back to the originating system, which also acknowledges receipt of these messages with an acknowledgement message.

See also the Examples (§4.33) and the Definitions (§5.35).
<Order xmlns="http://hl7.org/fhir"> <date value="[dateTime]"/><!-- 0..1 When the order was made --> <subject><!-- 0..1 Resource(Patient) Patient this order is about --></subject> <source><!-- 0..1 Resource(Practitioner) Who initiated the order --></source> <target><!-- 0..1 Resource(Organization|Device) Who is intended to fulfill the order --></target> <reason value="[string]"/><!-- 0..1 Text - why the order was made --> <authority><!-- 0..1 Resource(Any) If required by policy --></authority> <payment><!-- 0..1 Resource(Any) How action is financed (if required) --></payment> <when> <!-- 0..1 When order should be filfulled --> <code><!-- 0..1 CodeableConcept Code specifies when request should be done. The code may simply be a priority code --></code> <schedule><!-- 0..1 Schedule A formal schedule --></schedule> </when> <detail><!-- 1..* Resource(Any) What action is being ordered --></detail> </Order>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Order.when.code | When a requested action should be performed | No details provided yet |
Each request includes one or more detail elements that specify what is being ordered. The following kind of orders can be made:
| Description | Order Resource | Response Resources | Notes |
|---|---|---|---|
| Request for Diagnostic Investigation | DiagnosticRequest (Resource not yet developed) | 0..* DiagnosticReport | Local work flow arrangements will determine whether the laboratory handles a request by waiting for a specimen, or for the patient, or by visting the patient directly to obtain the specimen (i.e. phlebotomy ward round) |
| Order to supply a prescription | Prescription | 0..* MedicationDispense (Resource not yet developed) | Local work flow arrangements will determine whether the laboratory handles a request by waiting for a specimen, or for the patient, or by visting the patient directly to obtain the specimen (i.e. phlebotomy ward round) |
| Transfer of care from one practitioner to another | Referral (Resource not yet developed) | n/a |
Note: this list presents examples of the kinds of orders/requests that are anticipated. None of these are properly defined yet.
Note that a resource may only be used for the order details if the resource type explicitly defines how it is known to be something requested, as opposed to (for instance) something that has happened. For some resources, such as a prescription, this is defined to be always true, while other resources may have some kind of status element for this purpose. If the resource type does not explicitly define this, then it cannot be the target of an order.
The order and response resources can be used in an auction context, where the order will actually be offered to multiple service providers and then fulfilled by a single provider based on some criteria determined from their responses. The auction protocol may be implemented explicitly by the end user and provider of the order/response, or, in some cases, it may be implemented (partially) transparently by a broker system that sits between them.
In the auction protocol, the order is created without a specified target provider that is intended to fulfill the order. This order is passed to multiple target systems that provide a response based on the service and cost they are prepared to provide. The source or broker selects a preferred provider based on the information provided, updates the target provider on the order and then updates the order in the repositoriry or resends it to the original target systems, which know whether or not they are the winner of the auction by the target system value.
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| authority : reference | If required by policy |
| date : date | date equal to When the order was made |
| date-before : date | date before or equal to When the order was made |
| date-after : date | date after or equal to When the order was made |
| detail : reference | What action is being ordered |
| source : reference | Who initiated the order |
| subject : reference | Patient this order is about |
| target : reference | Who is intended to fulfill the order |
| when : date | date equal to A formal schedule |
| when-before : date | date before or equal to A formal schedule |
| when-after : date | date after or equal to A formal schedule |
| when_code : token | Code specifies when request should be done. The code may simply be a priority code |
(See Searching (§2.1.11)).
Status: A draft resource for discussion
A Response to an order.
The resource name as it appears in a RESTful URL is /orderresponse/
The response to an order indicates the outcome of processing the order itself - whether it was accepted or rejected, or is still in process. The order response resource does not itself convey or represent information that arises as a result of performing the actual order, but it may have references to other resources that do have this information, in order to link between the original order and it's outcome.
There may be multiple responses for a given order. For some requests, a responding system may issue a sequence of responses, where each response replaces previous responses as the original order is processed/performed. In these cases, each response should have the same logical identity, and the multiple responses are different versions of the same overall response.
If there are multiple systems responding to the request, or if there request may have multiple different responses, then the different logical responses should have different logical ids.

See also the Examples (§4.34) and the Definitions (§5.36).
<OrderResponse xmlns="http://hl7.org/fhir"> <request><!-- 1..1 Resource(Order) The order this is a response to --></request> <date value="[dateTime]"/><!-- 0..1 When the response was made --> <who><!-- 0..1 Resource(Practitioner|Organization) Who made the rResponse --></who> <authority><!-- 0..1 Resource(Any) If required by policy --></authority> <cost><!-- 0..1 Money How much the request will/did cost --></cost> <code value="[code]"/><!-- 1..1 The status of the response --> <description value="[string]"/><!-- 0..1 Additional description of the response --> <fulfillment><!-- 0..* Resource(Any) Details of the outcome of performing the order --></fulfillment> </OrderResponse>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| OrderResponse.code | The status of the response to an order | http://hl7.org/fhir/order-outcome-code |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| authority : reference | If required by policy |
| code : token | The status of the response |
| cost : integer | How much the request will/did cost |
| date : date | date equal to When the response was made |
| date-before : date | date before or equal to When the response was made |
| date-after : date | date after or equal to When the response was made |
| fulfillment : reference | Details of the outcome of performing the order |
| request : reference | The order this is a response to |
| who : reference | Who made the rResponse |
(See Searching (§2.1.11)).
Status: Approved resource. Draft for comment by Patient Administration Working Group
A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, etc.
The resource name as it appears in a RESTful URL is /organization/

See also the Examples (§4.35) and the Definitions (§5.37).
<Organization xmlns="http://hl7.org/fhir"> <identifier><!-- 0..* Identifier Identifier for this organization --></identifier> <name value="[string]"/><!-- 0..* Name used for the organization --> <type><!-- 0..1 CodeableConcept Kind of organization --></type> <address><!-- 0..* Address An address for the organization --></address> <telecom><!-- 0..* Contact A contact detail for the organization --></telecom> <active value="[boolean]"/><!-- 0..1 Whether the organization's record is still in active use --> <accreditation> <!-- 0..* Formal certifications that convey authority --> <identifier><!-- 0..1 Identifier Identifier for the accreditation --></identifier> <code><!-- 0..1 CodeableConcept What kind of accreditation --></code> <issuer><!-- 0..1 Resource(Organization) Who conferred accreditation --></issuer> <period><!-- 0..1 Period When the accreditation is valid (date only) --></period> </accreditation> <partOf><!-- 0..1 Resource(Organization) The organization of which this organization forms a part --></partOf> <contactEntity> <!-- 0..* Contact for the organization --> <type><!-- 0..1 CodeableConcept The type of contact --></type> <name><!-- 0..1 HumanName A name associated with the contact --></name> <telecom><!-- 0..* Contact Contact details (telephone, email, etc) for a contact --></telecom> <address><!-- 0..1 Address Visiting or postal addresses for the contact --></address> </contactEntity> </Organization>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Organization.type | The type of an organization | ?? |
| Organization.accreditation.code | Types of accreditations an organization may be granted | No details provided yet |
| Organization.contactEntity.type | The purpose for which you would contact a contact party | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| active : token | Whether the organization's record is active |
| address : string | An address in any kind of address/part for the organization |
| caddress : string | An address in any kind of address/part for any contact person of the organization |
| cname : string | A portion of the name of any contact person |
| ctelecom : string | The value in any kind of telecom information for any contact person of the organization |
| identifier : token | Any identifier for the organization |
| name : string | A portion of the Organization's name |
| partOf : reference | Search all organizations that are part of the given organization |
| phonetic : string | A portion of the Organization's name using some kind of phonetic matching algorithm |
| telecom : string | The value in any kind of telecom information for the organization |
| type : token | A code for the type of organization |
(See Searching (§2.1.11)).
Status: Approved Patient Administration resource. Draft for comment.
Demographics and other administrative information about a person or animal receiving care or other health-related services.
The resource name as it appears in a RESTful URL is /patient/
This Resource covers data about persons and animals involved in a wide range of health-related activities, including:
The data in a Patient Resource is generally kept in the interest of an organization, which also assigns a patient number and is responsible for the upkeep of the patient's record. A person or animal receiving care at multiple organisations will therefore have its information present in multiple Patient Resources. The data in the Resource covers the "who" information about the patient: Its attributes are focused on the demographic information necessary to support the administrative, financial and logistic procedures and does not contain medical or care-related information.

See also the Examples (§4.36) and the Definitions (§5.38).
<Patient xmlns="http://hl7.org/fhir"> <link><!-- 0..* Resource(Patient) Other patients linked to this resource --></link> <active value="[boolean]"/><!-- 0..1 Whether this patient record is in active use --> <identifier><!-- 0..* Identifier An identifier for the person as this patient --></identifier> <details> <!-- 0..1 Patient demographics --> <identifier><!-- 0..* Identifier An identifier for this individual --></identifier> <name><!-- 0..* HumanName A name associated with the individual --></name> <telecom><!-- 0..* Contact A contact detail for the individual --></telecom> <gender><!-- 0..1 Coding Gender for administrative purposes --></gender> <birthDate value="[dateTime]"/><!-- 0..1 The date and time of birth for the individual --> <deceased value="[boolean]"/><!-- 0..1 Indicates if the individual is deceased or not --> <address><!-- 0..* Address Addresses for the individual --></address> <photo><!-- 0..* Resource(Picture) Image of the person --></photo> <maritalStatus><!-- 0..1 CodeableConcept Marital (civil) status of a person --></maritalStatus> <language> <!-- 0..* The person's proficiency level of a language --> <language><!-- 1..1 CodeableConcept Language with optional region (http://tools.ietf.org/html/bcp47.htm) --></language> <mode><!-- 0..1 CodeableConcept Language method of expression --></mode> <proficiencyLevel><!-- 0..1 CodeableConcept Proficiency level of the language --></proficiencyLevel> <preference value="[boolean]"/><!-- 0..1 Language preference indicator --> </language> </details> <contact> <!-- 0..* A contact party (e.g. guardian, partner, friend) for the patient --> <relationship><!-- 0..* CodeableConcept The kind of relationship --></relationship> <details> <!-- 0..1 Details about the contact person --> <identifier><!-- 0..* Identifier An identifier for this individual --></identifier> <name><!-- 0..* HumanName A name associated with the individual --></name> <telecom><!-- 0..* Contact A contact detail for the individual --></telecom> <gender><!-- 0..1 Coding Gender for administrative purposes --></gender> <birthDate value="[dateTime]"/><!-- 0..1 The date and time of birth for the individual --> <deceased value="[boolean]"/><!-- 0..1 Indicates if the individual is deceased or not --> <address><!-- 0..* Address Addresses for the individual --></address> <photo><!-- 0..* Resource(Picture) Image of the person --></photo> <maritalStatus><!-- 0..1 CodeableConcept Marital (civil) status of a person --></maritalStatus> <language> <!-- 0..* The person's proficiency level of a language --> <language><!-- 1..1 CodeableConcept Language with optional region (http://tools.ietf.org/html/bcp47.htm) --></language> <mode><!-- 0..1 CodeableConcept Language method of expression --></mode> <proficiencyLevel><!-- 0..1 CodeableConcept Proficiency level of the language --></proficiencyLevel> <preference value="[boolean]"/><!-- 0..1 Language preference indicator --> </language> </details> <organization><!-- 0..1 Resource(Organization) Organization that is associated with the contact --></organization> </contact> <animal> <!-- 0..1 If this patient is an animal (non-human) --> <species><!-- 1..1 CodeableConcept E.g. Dog, Cow --></species> <breed><!-- 0..1 CodeableConcept E.g. Poodle, Angus --></breed> <genderStatus><!-- 0..1 CodeableConcept E.g. Neutered, Intact --></genderStatus> </animal> <provider><!-- 0..1 Resource(Organization) Organization managing the patient --></provider> <multipleBirth[x]><!-- 0..1 boolean|integer Indicates whether patient is part of a multiple birth --></multipleBirth[x]> <deceasedDate value="[dateTime]"/><!-- 0..1 Date of death of patient --> </Patient>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Patient.details.gender Patient.contact.details.gender | The gender of a person used for administrative purposes | http://hl7.org/fhir/administrative-gender |
| Patient.details.maritalStatus Patient.contact.details.maritalStatus | The domestic partnership status of a person | http://hl7.org/fhir/marital-status |
| Patient.details.language.language Patient.contact.details.language.language | A human language | IETF language tag (http://tools.ietf.org/html/bcp47) |
| Patient.details.language.mode Patient.contact.details.language.mode | A value representing the person's method of expression of this language | http://hl7.org/fhir/language-ability-mode |
| Patient.details.language.proficiencyLevel Patient.contact.details.language.proficiencyLevel | A code that describes how well the language is spoken | http://hl7.org/fhir/language-ability-proficiency |
| Patient.contact.relationship | The nature of the relationship between a patient and a contactperson for that patient | http://hl7.org/fhir/contact-relationship |
| Patient.animal.species | The species of an animal | No details provided yet |
| Patient.animal.breed | The breed of an animal | No details provided yet |
| Patient.animal.genderStatus | The state of the animal's reproductive organs | No details provided yet |
Notes:

Managing Patient registration is a well known difficult problem. Around 2% of registrations are in error, mostly duplicate records. Sometimes the duplicate record is caught fairly quickly and retired before much data is accumulated. In other cases, substantial amounts of data may accumulate. For these and other reasons, the identifiers associated with a patient may change over time.
A Patient record's Resoure Id can never change. For this reason the identifiers with which humans are concerned (often called MRN - Medical Record Number, or UR - Unit Record) should not be used for the resource' id. Instead they should be represented in the Patient.identifier list where they can be managed. This is also useful for the case of institutions that have acquired multiple numbers because of mergers of patient record systems over time.
This specification does not specify merge functionality: if multiple patient records are found to be duplicates, they can be linked together - an assertion that two (or more) Patient resources are both about the same actual person. When patient resources are linked, one may be chosen as the "master" - the correct record. In this case, the active status of all the other resources is set to false, and all the content is moved to the active record by updating it directly.
The link element is used to assert that patient resources refer to the same person. If any patient resources is linked to another, then that other resource must also link back to the source resource in order to maintain record consistency. Systems should not update patient links across two or more patient resources using separate transactions (i.e. update operations), where later operations may fail and leave the patient resources in disagreement with each other. Instead, systems should either:
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| active : token | Whether the patient record is active |
| address : string | an address in any kind of address/part of the patient |
| animal-breed : token | the breed for animal patients |
| animal-species : token | the species for animal patients |
| birthdate : date | date equal to the patient's date of birth |
| birthdate-before : date | date before or equal to the patient's date of birth |
| birthdate-after : date | date after or equal to the patient's date of birth |
| family : string | a portion of the family name of the patient |
| gender : token | gender of the patient |
| given : string | a portion of the given name of the patient |
| identifier : token | A patient identifier |
| language : token | language code (irrespective of use value) |
| name : string | a portion of either family or given name of the patient |
| phonetic : string | a portion of either family or given name using some kind of phonetic matching algorithm |
| provider : reference | The identity of the organization at which this person is a patient |
| telecom : string | the value in any kind of telecom details of the patient |
(See Searching (§2.1.11)).
Status: A candidate resource under consideration
An Image used in healthcare. The actual pixels maybe inline or provided by direct reference.
The resource name as it appears in a RESTful URL is /picture/
The Picture resource is suitable for stills or moving pictures (video).
While it is clear that there needs to be a resource that handles the exchange in pictures, it's not clear whether a resource should be created specifically for this task. In practice, the Picture resource here is a lot like a profile on an Observation (§3.26) using an attachment as a value. In fact, such a profile is defined (Known Broken Link - needs to be resolved) for comparison purposes. The FHIR project team is seeking comments on which makes for easier implementation: a resource, or a profile on the observation resource (use community input above).
Alternative question: should this be renamed Media, and include sound recordings? (note what impact this should have on the properties when making comments on this)

See also the Examples (§4.37) and the Definitions (§5.39).
<Picture xmlns="http://hl7.org/fhir"> <subject><!-- 0..1 Resource(Patient|Group|Device) Who/What this image is taken of --></subject> <dateTime value="[dateTime]"/><!-- 0..1 When the image was taken --> <operator><!-- 0..1 Resource(Practitioner) The person who generated the image --></operator> <identifier><!-- 0..1 Identifier Identifier for the image --></identifier> <accessionNo><!-- 0..1 Identifier Used by the requester to link back to the original context --></accessionNo> <studyId><!-- 0..1 Identifier The session in which the picture was taken --></studyId> <seriesId><!-- 0..1 Identifier The series of images in which this picture was taken --></seriesId> <method><!-- 0..1 CodeableConcept How the image was taken --></method> <requester><!-- 0..1 Resource(Practitioner) Who asked that this image be collected --></requester> <modality value="[code]"/><!-- 1..1 Type of the image capturing machinery --> <deviceName value="[string]"/><!-- 0..1 Name of the manufacturer --> <height value="[integer]"/><!-- 0..1 Height of the image --> <width value="[integer]"/><!-- 0..1 Width of the image --> <bits value="[integer]"/><!-- 0..1 Number of bits of colour (2..32) --> <frames value="[integer]"/><!-- 0..1 Number of frames --> <frameDelay><!-- 0..1 Duration Length of time between frames --></frameDelay> <view><!-- 0..1 CodeableConcept Imaging view e.g Lateral or Antero-posterior (AP) --></view> <content><!-- 1..1 Attachment Actual picture - reference or data --></content> </Picture>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Picture.modality | Type of the image capturing machinery | http://hl7.org/fhir/image-modality |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| accession : token | Used by the requester to link back to the original context |
| date : date | date equal to the date the image was taken |
| date-before : date | date before or equal to the date the image was taken |
| date-after : date | date after or equal to the date the image was taken |
| identifier : token | the request id for the image |
| modality : token | the modality of the image |
| operator : reference | person who gathered the image |
| series : token | The series of images in which this picture was taken |
| size : integer | the size of the image in MB - may include > or < in the value |
| study : token | The session in which the picture was taken |
| subject : reference | Who the image is about |
| view : token | Imaging view e.g Lateral or Antero-posterior (AP) |
(See Searching (§2.1.11)).
Status: Not an approved resource: Draft. Under Consideration by Patient Administration Working Group
Demographics and qualification information for an individual who is directly or indirectly involved in the provisioning of healthcare.
The resource name as it appears in a RESTful URL is /practitioner/
Pracitioner covers all individuals who are professionally engaged in the healthcare process, commonly (but not necessarily) on behalf of an organization. Their activity is part of a formal responsibility for a (part of) the healthcare process and this Resource is used for attribution of activities and responsibilities to these individuals. Pactitioners include:
The Resources must not be used for persons involved for non-professional reasons like individuals taking care for friends, relatives or neighbours.
Although a Practitioner Resource represents individuals, they may practice their profession on behalf on an organization. Commonly, a Practitioner performs different roles within the same or even different organizations. Depending on jurisdiction and custom, it may be necessary to maintain a specific Practitioner Resource for each such role, possibily with different relevant qualifications. The role is also often limited to a specific period, after which authorization for this role ends. Note that the represented organization need not necessarily be the (direct) employer of a Practitioner.

See also the Examples (§4.38) and the Definitions (§5.40).
<Practitioner xmlns="http://hl7.org/fhir"> <identifier><!-- 0..* Identifier A identifier for the person as this agent --></identifier> <details> <!-- 0..1 Practitioner's personal demographics --> <identifier><!-- 0..* Identifier An identifier for this individual --></identifier> <name><!-- 0..* HumanName A name associated with the individual --></name> <telecom><!-- 0..* Contact A contact detail for the individual --></telecom> <gender><!-- 0..1 Coding Gender for administrative purposes --></gender> <birthDate value="[dateTime]"/><!-- 0..1 The date and time of birth for the individual --> <deceased value="[boolean]"/><!-- 0..1 Indicates if the individual is deceased or not --> <address><!-- 0..* Address Addresses for the individual --></address> <photo><!-- 0..* Resource(Picture) Image of the person --></photo> <maritalStatus><!-- 0..1 CodeableConcept Marital (civil) status of a person --></maritalStatus> <language> <!-- 0..* The person's proficiency level of a language --> <language><!-- 1..1 CodeableConcept Language with optional region (http://tools.ietf.org/html/bcp47.htm) --></language> <mode><!-- 0..1 CodeableConcept Language method of expression --></mode> <proficiencyLevel><!-- 0..1 CodeableConcept Proficiency level of the language --></proficiencyLevel> <preference value="[boolean]"/><!-- 0..1 Language preference indicator --> </language> </details> <organization><!-- 0..1 Resource(Organization) The represented organization --></organization> <role><!-- 0..* CodeableConcept A role the practitioner has --></role> <specialty><!-- 0..* CodeableConcept Specific specialty of the practitioner --></specialty> <period><!-- 0..1 Period The period during which the person is authorized to perform the service --></period> <qualification> <!-- 0..* Qualifications relevant to the provided service --> <code><!-- 0..1 CodeableConcept Qualification --></code> <period><!-- 0..1 Period Period during which the qualification is valid --></period> <issuer><!-- 0..1 Resource(Organization) Organization that regulates and issues the qualification --></issuer> </qualification> </Practitioner>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Practitioner.details.gender | The gender of a person used for administrative purposes | http://hl7.org/fhir/administrative-gender |
| Practitioner.details.maritalStatus | The domestic partnership status of a person | http://hl7.org/fhir/marital-status |
| Practitioner.details.language.language | A human language | IETF language tag (http://tools.ietf.org/html/bcp47) |
| Practitioner.details.language.mode | A value representing the person's method of expression of this language | http://hl7.org/fhir/language-ability-mode |
| Practitioner.details.language.proficiencyLevel | A code that describes how well the language is spoken | http://hl7.org/fhir/language-ability-proficiency |
| Practitioner.role | The role a person plays representing an organization, e.g. doctor, nurse, pharmacist | No details provided yet |
| Practitioner.specialty | Specific specialty associated with the agency, e.g. cardiologist, dietary consultant, midwife | No details provided yet |
| Practitioner.qualification.code | Specific qualification the practitioner has to provide a service | No details provided yet |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| address : string | an address in any kind of address/part |
| family : string | a portion of the family name |
| gender : token | gender of the person |
| given : string | a portion of the given name |
| identifier : token | A patient Identifier |
| language : token | language code (irrespective of use value) |
| name : string | a portion of either family or given name |
| organization : reference | The identity of the organization the practitioner represents / acts on behalf of |
| phonetic : string | a portion of either family or given name using some kind of phonetic matching algorithm |
| telecom : string | the value in any kind of contact |
(See Searching (§2.1.11)).
Status: Not an approved resource: exemplar developed by Patient Care WG. Under consideration by the Patient Care work group
Use to record detailed information about problems or diagnoses recognised by a clinician. There are many uses including: recording a Diagnosis during an Visit; populating a Problem List or a Summary Statement, such as a Discharge Summary.
The resource name as it appears in a RESTful URL is /problem/


See also the Examples (§4.39) and the Definitions (§5.41).
<Problem xmlns="http://hl7.org/fhir"> <subject><!-- 1..1 Resource(Patient) Subject of this problem --></subject> <visit><!-- 0..1 Resource(Visit) Visit during which the problem was first asserted --></visit> <asserter><!-- 0..1 Resource(Practitioner|Patient) Person who asserts this problem --></asserter> <dateAsserted value="[date]"/><!-- 0..1 When the first detected/suspected/entered --> <code><!-- 1..1 CodeableConcept Identification of the problem or diagnosis --></code> <category><!-- 0..1 CodeableConcept E.g. finding | problem | diagnosis | concern --></category> <status value="[code]"/><!-- 0..1 provisional | working | confirmed | refuted --> <certainty><!-- 0..1 CodeableConcept Degree of confidence --></certainty> <severity><!-- 0..1 CodeableConcept Subjective severity of problem/diagnosis --></severity> <onset[x]><!-- 0..1 date|Age Estimated or actual date, or age --></onset[x]> <abatement[x]><!-- 0..1 date|Age|boolean If/when in resolution/remission --></abatement[x]> <stage> <!-- 0..1 Stage/grade, usually assessed formally --> <summary><!-- 0..1 CodeableConcept Simple summary (disease specific) --></summary> <assessment><!-- 0..* Resource(Any) Formal record of assessment --></assessment> </stage> <evidence> <!-- 0..* Supporting evidence --> <code><!-- 0..1 CodeableConcept Manifestation/symptom --></code> <details><!-- 0..* Resource(Any) Supporting information found elsewhere --></details> </evidence> <location> <!-- 0..* Snatomical location, if relevant --> <code><!-- 0..1 CodeableConcept Location - may include laterality --></code> <details value="[string]"/><!-- 0..1 Precise location details --> </location> <relatedItem> <!-- 0..* Causes or precedents for this problem --> <type value="[code]"/><!-- 1..1 due-to | follows --> <target><!-- 1..1 Resource(Problem|Procedure|Substance) Relationship target --></target> </relatedItem> </Problem>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Problem.code | Identification of the problem or diagnosis. | No details provided yet |
| Problem.category | A category assigned to the problem/diagnosis. E.g. finding | problem | diagnosis | concern | condition | No details provided yet |
| Problem.status | The clinical status of the problem or diagnosis | http://hl7.org/fhir/problem-status |
| Problem.certainty | The degree of confidence that this problem/diagnosis is correct | No details provided yet |
| Problem.severity | A subjective assessment of the severity of the Problem/Diagnosis as evaluated by the clinician. | No details provided yet |
| Problem.relatedItem.type | The type of relationship between a problem/diagnosis and it's related item | http://hl7.org/fhir/problem-relationship-type |
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| asserter : reference | Person who asserts this problem |
| category : token | the category of the problem |
| code : token | code for the problem/diagnosis |
| dateAsserted : date | date equal to When the first detected/suspected/entered |
| dateAsserted-before : date | date before or equal to When the first detected/suspected/entered |
| dateAsserted-after : date | date after or equal to When the first detected/suspected/entered |
| evidence : token | Manifestation/symptom |
| location : token | Location - may include laterality |
| onset : date | date equal to when the problem started (if started on a date) |
| onset-before : date | date before or equal to when the problem started (if started on a date) |
| onset-after : date | date after or equal to when the problem started (if started on a date) |
| severity : token | the severity of the problem |
| stage : token | Simple summary (disease specific) |
| status : token | the status of the problem/diagnosis |
| subject : reference | Subject of this problem |
| target : reference | Relationship target |
| visit : reference | Visit during which the problem was first asserted |
(See Searching (§2.1.11)).
Status: Not an approved resource. Under consideration by Patient Care
An action that is performed on a patient. This can be a physical 'thing' like an operation, or less invasive like counselling or hypnotherapy.
The resource name as it appears in a RESTful URL is /procedure/
An Act whose immediate and primary outcome (post-condition) is the alteration of the physical condition of the subject. Used to record the details of procedures performed on a patient. This includes surgical procedures, diagnostic procedures, endoscopic precedures, biopsies. It excludes things for which there are specific resources, such as immunizations, drug administrations
See also the Examples (§4.40) and the Definitions (§5.42).
<Procedure xmlns="http://hl7.org/fhir"> <subject><!-- 1..1 Resource(Patient) Subject of this procedure --></subject> <description> <!-- 1..1 Description of the procedure --> <type><!-- 0..1 CodeableConcept Identification of the procedure --></type> <notes value="[string]"/><!-- 0..1 Procedure notes --> <bodySite><!-- 0..* CodeableConcept Precise location details --></bodySite> </description> <indication value="[string]"/><!-- 0..1 Indications for the procedure --> <performer> <!-- 0..* The people who performed the procedure --> <person><!-- 0..1 Resource(Practitioner) The reference to the practitioner --></person> <role><!-- 0..1 CodeableConcept The role the person was in --></role> </performer> <date><!-- 0..1 Period The date the procedure was perfomed --></date> <visit><!-- 0..1 Resource(Visit) The visit during which the procedure was performed --></visit> <outcome value="[string]"/><!-- 0..1 Outcome of the procuedure --> <report><!-- 0..* Resource(DiagnosticReport) Any report that results from the procedure --></report> <complication value="[string]"/><!-- 0..1 Complications --> <followUp value="[string]"/><!-- 0..1 Instructions for follow up --> <relatedItem> <!-- 0..* A procedure that is related to this one --> <type value="[code]"/><!-- 0..1 caused-by | caused --> <target><!-- 0..1 Resource(Procedure|MedicationPrescription) The related item - eg a procedure --></target> </relatedItem> </Procedure>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Procedure.relatedItem.type | the nature of the relationship | http://hl7.org/fhir/procedure-relationship-type |
Questions
Search Parameters for RESTful searches. The standard parameters also apply. See Searching (§2.1.11) for more information.
| _id : token | The logical resource id associated with the resource (must be supported by all servers) |
| date : date | date equal to the date the procedure was perfromed on |
| date-before : date | date before or equal to the date the procedure was perfromed on |
| date-after : date | date after or equal to the date the procedure was perfromed on |
| subject : reference | The identity of a patient to list procedures for |
| type : token | type of procedure |
(See Searching (§2.1.11)).
Status: Approved infrastructure resource. Draft for comment
A Resource Profile - a statement of use of one or more FHIR Resources. It may include constraints on Resources and Data Types, Terminology Binding Statements and Extension Definitions.
The resource name as it appears in a RESTful URL is /profile/
This specification describes a set of base resources that are used in many different contexts in healthcare. In order to make this manageable, applications and specifications need to be able to:
All these things are done using a Resource Profile, which itself is a resource that describes how other resources are used in a particular context. Profiles have a metadata section that describes who published the profile, and why, as well as optional lists of resources constraints, extension definitions, and vocabulary bindings.

See also the Examples (§4.41) and the Definitions (§5.43).
<Profile xmlns="http://hl7.org/fhir"> <identifier value="[string]"/><!-- 0..1 Logical id to reference this profile --> <version value="[string]"/><!-- 0..1 Logical id for this version of the profile --> <name value="[string]"/><!-- 1..1 Informal name for this profile --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) --> <telecom><!-- 0..* Contact Contact information of the publisher --></telecom> <description value="[string]"/><!-- 0..1 Natural language description of the profile --> <code><!-- 0..* Coding Assist with indexing and finding --></code> <status> <!-- 1..1 Current status --> <code value="[code]"/><!-- 1..1 draft | testing | review | production | withdrawn | superseded --> <date value="[dateTime]"/><!-- 0..1 Date for given status --> <comment value="[string]"/><!-- 0..1 Supplemental status info --> </status> <import> <!-- 0..* External source of extensions and bindings --> <uri value="[uri]"/><!-- 1..1 Profile location --> <prefix value="[string]"/><!-- 0..1 Short form for referencing --> </import> <bundle value="[code]"/><!-- 0..1 If this describes a bundle, the first resource in the bundle --> <structure> <!-- 0..* A constraint on a resource or a data type --> <type value="[code]"/><!-- 1..1 The Resource or Data Type being described --> <name value="[string]"/><!-- 0..1 Name for this particular resource profile (internal usage) --> <purpose value="[string]"/><!-- 0..1 Human summary: why describe this resource? --> <profile value="[uri]"/><!-- 0..1 Resource Profile reference (supplies the constraints) --> <element> <!-- 0..* Definition of elements in the resource (if no profile) --> <path value="[string]"/><!-- 1..1 The path of the element (see the formal definitions) --> <name value="[string]"/><!-- 0..1 Name of constraint for slicing - see above --> <definition> <!-- 1..1 More specific definition of the element --> <short value="[string]"/><!-- 1..1 Concise definition for xml presentation --> <formal value="[string]"/><!-- 1..1 Formal definition --> <comments value="[string]"/><!-- 0..1 Comments about the use of this element --> <requirements value="[string]"/><!-- 0..1 Why is this needed? --> <synonym value="[string]"/><!-- 0..* Other names --> <min value="[integer]"/><!-- 1..1 Minimum Cardinality --> <max value="[string]"/><!-- 1..1 Maximum Cardinality (a number or *) --> <type> <!-- 0..* Type of the element --> <code value="[code]"/><!-- 1..1 Data type or Resource --> <profile value="[uri]"/><!-- 0..1 Profile to apply --> </type> <nameReference value="[string]"/><!-- 0..1 To another element constraint (by element.name) --> <value[x]><!-- 0..1 Fixed value: [as defined for type] --></value[x]> <maxLength value="[integer]"/><!-- 0..1 Length for strings --> <condition value="[id]"/><!-- 0..* Reference to invariant about presence --> <constraint> <!-- 0..* Condition that must evaluate to true --> <key value="[id]"/><!-- 1..1 Target of 'condition' reference above --> <name value="[string]"/><!-- 0..1 Short human label --> <severity value="[code]"/><!-- 1..1 error | warning --> <human value="[string]"/><!-- 1..1 Human description of constraint --> <xpath value="[string]"/><!-- 1..1 XPath expression of constraint --> <ocl value="[string]"/><!-- 0..1 OCL expression of constraint --> </constraint> <mustSupport value="[boolean]"/><!-- 0..1 If the element must be usable --> <mustUnderstand value="[boolean]"/><!-- 0..1 If the element must be understood --> <binding value="[string]"/><!-- 0..1 Binding - see bindings below (only if coded) --> <mapping> <!-- 0..* Map element to another set of definitions --> <target value="[string]"/><!-- 1..1 Which mapping this is (v2, CDA, openEHR, etc.) --> <map value="[string]"/><!-- 0..1 Details of the mapping --> </mapping> </definition> <bundled value="[boolean]"/><!-- 0..1 If type is Resource, is it in the bundle? --> </element> <searchParam> <!-- 0..* Additional search params defined --> <name value="[string]"/><!-- 1..1 Name of search parameter --> <type value="[code]"/><!-- 1..1 Type of search parameter --> <documentation value="[string]"/><!-- 1..1 Contents and meaning of search parameter --> </searchParam> </structure> <extensionDefn> <!-- 0..* Definition of an extension --> <code value="[id]"/><!-- 1..1 Identifies the extension in this profile --> <contextType value="[code]"/><!-- 1..1 resource | datatype | mapping | extension --> <context value="[string]"/><!-- 1..* Where the extension can be used in instances --> <definition><!-- 1..1 Content as for Profile.structure.element.definition Definition of the extension and its content --></definition> </extensionDefn> <binding> <!-- 0..* Define code sets for coded elements --> <name value="[string]"/><!-- 1..1 Binding name --> <definition value="[string]"/><!-- 0..1 Human explanation of the binding --> <type value="[code]"/><!-- 1..1 valueset | codelist | reference | special --> <isExtensible value="[boolean]"/><!-- 0..1 Can additional codes be used? --> <conformance value="[code]"/><!-- 0..1 required | preferred | example --> <reference[x]><!-- 0..1 uri|Resource(ValueSet) Source of binding content --></reference[x]> </binding> </Profile>
Alternate definitions: Schema, RDF (to do), XMI (to do), Resource Profile
| Path | Definition | Reference |
|---|---|---|
| Profile.status.code | The lifecycle status of a Resource Profile | http://hl7.org/fhir/resource-profile-status |
| Profile.bundle | One of the resource types defined as part of FHIR | http://hl7.org/fhir/resource-types (Known Broken Link - needs to be resolved) |
| Profile.structure.type | Either a resource or a data type | http://hl7.org/fhir/defined-types (Known Broken Link - needs to be resolved) |
| Profile.structure.element.definition.type.code | The type of an element - one of the FHIR data types | http://hl7.org/fhir/data-types (Known Broken Link - needs to be resolved) |
| Profile.structure.element.definition.constraint.severity | Must applications comply with this constraint? | http://hl7.org/fhir/constraint-severity |
| Profile.structure.searchParam.type | Data types allowed to be used for search parameters | http://hl7.org/fhir/search-param-type |
| Profile.extensionDefn.contextType | How an extension context is interpreted | http://hl7.org/fhir/extension-context |
| Profile.binding.type | How this binding is mapped to a set of codes | http://hl7.org/fhir/binding-type |
| Profile.binding.conformance | Must applications comply with this binding? | http://hl7.org/fhir/binding-conformance |