Current Build

2.26.0 Data Types

FHIR Infrastructure Work GroupMaturity Level: 4Ballot Status: Normative

Normative Candidate Note: This page is candidate normative content for R4 in the Infrastructure Package. Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.

The FHIR specification defines a set of data types that are used for the resource elements. There are four categories of data types:

  1. Simple / primitive types, which are single elements with a primitive value (below)
  2. General purpose complex types, which are re-usable clusters of elements (below)
  3. Complex data types for metadata
  4. Special purpose data types: Reference, Narrative, Extension, Meta, and Dosage

This page describes the general purpose data types.

Table of Contents

Legend: White = abstract type. Light blue = concrete types. Light Pink = Profile on Type.

ElementExtensions - as described for all elements: additional information that is not part of the basic definition of the resource / typeextension : Extension 0..*decimalActual value attribute of the data typevalue : xs:decimal 0..1integerActual value attribute of the data typevalue : xs:int 0..1booleanActual value attribute of the data typevalue : xs:boolean 0..1instantActual value attribute of the data typevalue : xs:dateTime 0..1dateActual value attribute of the data typevalue : xs:gYear|xs:gYearMonth|xs:date 0..1base64BinaryActual value attribute of the data typevalue : xs:base64Binary 0..1stringActual value attribute of the data typevalue : xs:string 0..1codedateTimeActual value attribute of the data typevalue : xs:gYear|xs:gYearMonth|xs:date|xs:dateTime 0..1iduriActual value attribute of the data typevalue : xs:anyURI 0..1oidtimeActual value attribute of the data typevalue : xs:time 0..1unsignedIntpositiveIntmarkdown

The following table describes the primitive types that are used in this specification. Primitive types are those with only a value, and no additional elements as children (though, like all types, they have extensions). See also the Examples.

Primitive Types
FHIR Name Value Domain XML Representation JSON representation
boolean true | false xs:boolean, except that 0 and 1 are not valid values JSON boolean (true or false)
Regex: true|false
integer A signed 32-bit integer (for larger values, use decimal) xs:int, except that leading 0 digits are not allowed JSON number (with no decimal point)
Regex: [0]|[-+]?[1-9][0-9]*
string A sequence of Unicode characters xs:string JSON String
Note that strings SHALL NOT exceed 1MB in size. String should not contain Unicode character points below 32, except for u0009 (horizontal tab), u0010 (carriage return) and u0013 (line feed)
This data type can be bound to a value set
Regex: \s*(\S|\s)* (can't put size limit in the regex - too large)
decimal Rational numbers that have a decimal representation. See below about the precision of the number xs:decimal, except that decimals may not use exponents, and leading 0 digits are not allowed A JSON number, except that exponents are not allowed
Regex: -?([0]|([1-9][0-9]*))(\.[0-9]+)?
uri A Uniform Resource Identifier Reference (RFC 3986 ). Note: URIs are case sensitive. For UUID (urn:uuid:53fefa32-fcbb-4ff8-8a92-55ee120877b7) use all lowercase xs:anyURI A JSON string - a URI
Regex: \S*
URIs can be absolute or relative, and may have an optional fragment identifier
This data type can be bound to a value set
base64Binary A stream of bytes, base64 encoded (RFC 4648 ) xs:base64Binary A JSON string - base64 content
Regex: (\s*([0-9a-zA-Z\+\=]){4}\s*)+
Todo: is it possible to impose an upper absolute limit on a base64Binary (for denial of service reasons, like on string)?
instant An instant in time - known at least to the second and always includes a time zone. Note: This is intended for precisely observed times (typically system logs etc.), and not human-reported times - for them, use date and dateTime. instant is a more constrained dateTime xs:dateTime A JSON string - an xs:dateTime
Note: This type is for system times, not human times (see date and dateTime below).
Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))
date A date, or partial date (e.g. just year or year + month) as used in human communication. There is no time zone. Dates SHALL be valid dates union of xs:date, xs:gYearMonth, xs:gYear A JSON string - a union of xs:date, xs:gYearMonth, xs:gYear
Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?
dateTime 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 SHALL be populated. Seconds must be provided due to schema type constraints but may be zero-filled and may be ignored. Dates SHALL be valid dates. The time "24:00" is not allowed. Leap Seconds are allowed - see below union of xs:dateTime, xs:date, xs:gYearMonth, xs:gYear A JSON string - a union of xs:dateTime, xs:date, xs:gYearMonth, xs:gYear
Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?
time A time during the day, with no date specified (can be converted to a Duration since midnight). Seconds must be provided due to schema type constraints but may be zero-filled and may be ignored. The time "24:00" is not allowed, and neither is a time zone xs:time A JSON string - an xs:time
Regex: ([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?
code Indicates that the value is taken from a set of controlled strings defined elsewhere (see Using codes for further discussion). Technically, a code is restricted to 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 xs:token JSON string
Regex: [^\s]+(\s[^\s]+)*
This data type can be bound to a value set.
oid An OID represented as a URI (RFC 3001 ); e.g. urn:oid:1.2.3.4.5 xs:anyURI JSON string - uri
Regex: urn:oid:[0-2](\.[1-9]\d*)+
id Any combination of upper or lower case ASCII letters ('A'..'Z', and 'a'..'z', numerals ('0'..'9'), '-' and '.', with a length limit of 64 characters. (This might be an integer, an un-prefixed OID, UUID or any other identifier pattern that meets these constraints.) xs:string JSON string
Regex: [A-Za-z0-9\-\.]{1,64}
markdown A string that may contain markdown syntax for optional processing by a markdown presentation engine xs:string JSON string
Regex: \s*(\S|\s)* (can't put size limit in the regex - too large)
unsignedInt Any non-negative integer (e.g. >= 0) xs:nonNegativeInteger JSON number
Regex: [0]|([1-9][0-9]*)
positiveInt Any positive integer (e.g. >= 1) xs:positiveInteger JSON number
Regex: +?[1-9][0-9]*

Notes:

  • For all the types, the XML, JSON and Turtle representations of the primitive values are the same except for different escaping in XML and JSON
  • Boolean values can also be represented using coded values (such as HL7 v2 Table 0136). See Observation for one such use
  • The regexes may allow a broader set of values than are actually valid (e.g. leap years) so additional validation is needed
  • Leap second are allowed in the datetime, instant and time types. Note, though, that many system and libraries do not support leap seconds. Applications reading times SHOULD accept and handle leap seconds gracefully, and applications producing them MAY choose to avoid encoding leap seconds
  • The regexes should be qualified with start of string and end of string anchors based on the regex implementation used (e.g. caret '^' and dollar-sign '$' for JavaScript, POSIX, XML and XPath; '\A' and '\Z' for .NET, Java, Python and others; please verify these definitions with the regex implementation used).
  • The precision of the decimal value has significance:
    • e.g. 0.010 is regarded as different to 0.01, and the original precision should be preserved
    • Implementations SHALL handle decimal values in ways that preserve and respect the precision of the value as represented for presentation purposes
    • Implementations are not required to perform calculations with these numbers differently, though they may choose to do so (i.e. preserve significance)
    • See implementation comments for XML, JSON and RDF
    • In object code, implementations that might meet this constraint are GMP implementations or equivalents to Java BigDecimal that implement arbitrary precision, or a combination of a (64 bit) floating point value with a precision field
    • Note that there is no absolute limit to the magnitude of the value, though large and/or highly precise values are extremely rare in medicine. One element where highly precise decimals may be encountered is the Location coordinates
  • About the id datatype:
    • Ids are case sensitive. UUIDs SHALL be sent using lowercase letters
    • The ID type includes identifiers consistent with ISO 18232 , but also includes other identifier formats as well, and is not case insensitive like ISO 18232.
    • In a typical FHIR URL, like http://example.com/fhir/Patient/1234, the last part "1234" (highlighted in red) is the part that is an id datatype
    • A full UUID is a uri, not an id. UUIDs in URIs SHALL also be represented in lowercase (urn:uuid:59bf0ef4-e89c-4628-9b51-12ae3fdbe22b)
  • About the markdown datatype:
    • Systems are not required to have markdown support, and there is considerable variation in markdown syntax, so the content of a string should be readable without markdown processing, per markdown philosophy
    • The preferred markdown syntax is described at http://daringfireball.net/projects/markdown/syntax (see tests here: http://daringfireball.net/projects/downloads/MarkdownTest_1.0.zip )
    • Markdown content should not contain Unicode character points below 32, except for u0009 (horizontal tab), u0010 (carriage return) and u0013 (line feed). Todo: is there any reason not to make this a SHALL?

STU Note: It is likely that FHIR will change to require/recommend CommonMark in Release 4.

Feedback is welcome here .

All elements using these primitive types may have one or more of a value as described above, an internal identity (e.g. xml:id), and extensions. For an example, take an element of name "count" and type "integer".

XML

The value is represented in XML as an attribute named "value":

  <count value="2"/>

The full representation, with id, extensions and value:

  <count id="a1" value="2">
    <extension url="...">
      <valueXX.../>
    </extension>
  </count>

JSON

In JSON, for convenience, the value is represented as the property itself:

  "count" : 2

The full representation, with id, extensions and value, showing the id and extensions in the sibling property:

  "count" : 2
  "count_" : {
    "id" : "a1",
    "extension" : [{
      "url" : "...",
      "valueXXX" : "...."
    }]
  }

RDF

The value is represented in RDF as an relationship with the URI "http://h;7.org/fhir/value". Using the normal prefix, this becomes:

  fhir:Type.count [ fhir:value "2"^^xsd:integer ]

For the types date and DateTime, the type must be specified explicitly. For all other types, it is optional. The full representation, with id, extensions and value:

  fhir:Type.count [
    Element.id "a1";
    fhir:value "2"^^xsd:integer;
    Element.extension [
      fhir:Extension.url "..";
      fhir:Extension.valueXX...
    ]
  ]

For additional details, see the XML, JSON and Turtle format definitions. When the value is missing, and there are no extensions, the element is not represented at all. This means that in xml, attributes are never present with a length of 0 (value=""), and properties are never a 0 length string or null in JSON ("name" : "" is not valid). (note: there is one specific use of the null in the JSON representation).

According to XML schema, leading and trailing whitespace in the value attribute is ignored for the types boolean, integer, decimal, base64Binary, instant, uri, date, dateTime, oid, and uri. Note that this means that the schema aware XML libraries give different attribute values to non-schema aware libraries when reading the XML instances. For this reason, the value attribute for these types SHOULD not have leading and trailing spaces. String values should only have leading and trailing spaces if they are part of the content of the value. In JSON and Turtle whitespace in string values is always significant. Primitive types other than string SHALL NOT have leading or trailing whitespace.


In XML, 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. In JSON, the data type is represented by an object with properties named the same as the XML elements. Since the JSON representation is almost exactly the same, only the first example has an additional explicit JSON representation.

Complex data types may be "profiled". A Structure Definition or type "constraint" makes a set of rules about which elements SHALL have values and what the possible values are.

UML Diagrams of the Data types

ElementExtensions - as described for all elements: additional information that is not part of the basic definition of the resource / typeextension : Extension 0..*QuantityThe value of the measured amount. The value includes an implicit precision in the presentation of the valuevalue : decimal [0..1]How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value (this element modifies the meaning of other elements)comparator : code [0..1] « How the Quantity should be understood and represented. (Strength=Required)QuantityComparator! »A human-readable form of the unitunit : string [0..1]The identification of the system that provides the coded form of the unitsystem : uri [0..1]A computer processable form of the unit in some unit representation systemcode : code [0..1]AttachmentIdentifies the type of the data in the attachment and allows a method to be chosen to interpret or render the data. Includes mime type parameters such as charset where appropriatecontentType : code [0..1] « The mime type of an attachment. Any valid mime type is allowed. (Strength=Required)MimeType! »The human language of the content. The value can be any valid value according to BCP 47language : code [0..1] « A human language. (Strength=Extensible)Common Languages+ »The actual data of the attachment - a sequence of bytes. In XML, represented using base64data : base64Binary [0..1]An alternative location where the data can be accessedurl : uri [0..1]The number of bytes of data that make up this attachment (before base64 encoding, if that is done)size : unsignedInt [0..1]The calculated hash of the data using SHA-1. Represented using base64hash : base64Binary [0..1]A label or set of text to display in place of the datatitle : string [0..1]The date that the attachment was first createdcreation : dateTime [0..1]RangeThe low limit. The boundary is inclusivelow : Quantity(SimpleQuantity) [0..1]The high limit. The boundary is inclusivehigh : Quantity(SimpleQuantity) [0..1]PeriodThe start of the period. The boundary is inclusivestart : dateTime [0..1]The end of the period. If the end of the period is missing, it means that the period is ongoing. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that timeend : dateTime [0..1]RatioThe value of the numeratornumerator : Quantity [0..1]The value of the denominatordenominator : Quantity [0..1]CodeableConceptA reference to a code defined by a terminology systemcoding : Coding [0..*]A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the usertext : string [0..1]CodingThe identification of the code system that defines the meaning of the symbol in the codesystem : uri [0..1]The version of the code system which was used when choosing this code. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchangedversion : string [0..1]A symbol in syntax defined by the system. The symbol may be a predefined code or an expression in a syntax defined by the coding system (e.g. post-coordination)code : code [0..1]A representation of the meaning of the code in the system, following the rules of the systemdisplay : string [0..1]Indicates that this coding was chosen by a user directly - i.e. off a pick list of available items (codes or displays)userSelected : boolean [0..1]SampledDataThe base quantity that a measured value of zero represents. In addition, this provides the units of the entire measurement seriesorigin : Quantity(SimpleQuantity) [1..1]The length of time between sampling times, measured in millisecondsperiod : decimal [1..1]A correction factor that is applied to the sampled data points before they are added to the originfactor : decimal [0..1]The lower limit of detection of the measured points. This is needed if any of the data points have the value "L" (lower than detection limit)lowerLimit : decimal [0..1]The upper limit of detection of the measured points. This is needed if any of the data points have the value "U" (higher than detection limit)upperLimit : decimal [0..1]The number of sample points at each time point. If this value is greater than one, then the dimensions will be interlaced - all the sample points for a point in time will be recorded at oncedimensions : positiveInt [1..1]A series of data points which are decimal values separated by a single space (character u20). The special values "E" (error), "L" (below detection limit) and "U" (above detection limit) can also be used in place of a decimal valuedata : string [0..1] ElementExtensions - as described for all elements: additional information that is not part of the basic definition of the resource / typeextension : Extension 0..*IdentifierThe purpose of this identifier (this element modifies the meaning of other elements)use : code [0..1] « Identifies the purpose for this identifier, if known . (Strength=Required)IdentifierUse! »A coded type for the identifier that can be used to determine which identifier to use for a specific purposetype : CodeableConcept [0..1] « A coded type for an identifier that can be used to determine which identifier to use for a specific purpose. (Strength=Extensible)Identifier Type + »Establishes the namespace for the value - that is, a URL that describes a set values that are uniquesystem : uri [0..1]The portion of the identifier typically relevant to the user and which is unique within the context of the systemvalue : string [0..1]Time period during which identifier is/was valid for useperiod : Period [0..1]Organization that issued/manages the identifierassigner : Reference [0..1] « Organization »HumanNameIdentifies the purpose for this name (this element modifies the meaning of other elements)use : code [0..1] « The use of a human name (Strength=Required)NameUse! »A full text representation of the nametext : string [0..1]The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his fatherfamily : string [0..1]Given namegiven : string [0..*]Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the nameprefix : string [0..*]Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the namesuffix : string [0..*]Indicates the period of time when this name was valid for the named personperiod : Period [0..1]AddressThe purpose of this address (this element modifies the meaning of other elements)use : code [0..1] « The use of an address (Strength=Required)AddressUse! »Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are bothtype : code [0..1] « The type of an address (physical / postal) (Strength=Required)AddressType! »A full text representation of the addresstext : string [0..1]This component contains the house number, apartment number, street name, street direction, P.O. Box number, delivery hints, and similar address informationline : string [0..*]The name of the city, town, village or other community or delivery centercity : string [0..1]The name of the administrative area (county)district : string [0..1]Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (i.e. US 2 letter state codes)state : string [0..1]A postal code designating a region defined by the postal servicepostalCode : string [0..1]Country - a nation as commonly understood or generally acceptedcountry : string [0..1]Time period when address was/is in useperiod : Period [0..1]ContactPointTelecommunications form for contact point - what communications system is required to make use of the contactsystem : code [0..1] « Telecommunications form for contact point (Strength=Required)ContactPointSystem! »The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address)value : string [0..1]Identifies the purpose for the contact point (this element modifies the meaning of other elements)use : code [0..1] « Use of contact point (Strength=Required)ContactPointUse! »Specifies a preferred order in which to use a set of contacts. Contacts are ranked with lower values coming before higher valuesrank : positiveInt [0..1]Time period when the contact point was/is in useperiod : Period [0..1]TimingIdentifies specific times when the event occursevent : dateTime [0..*]A code for the timing schedule (or just text in code.text). Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code)code : CodeableConcept [0..1] « Code for a known / defined timing pattern. (Strength=Preferred)TimingAbbreviation? »RepeatEither a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedulebounds[x] : Type [0..1] « Duration|Range|Period »A total count of the desired number of repetitions across the duration of the entire timing specificationcount : integer [0..1]A maximum value for the count of the desired repetitions (e.g. do something 6-8 times)countMax : integer [0..1]How long this thing happens for when it happensduration : decimal [0..1]The upper limit of how long this thing happens for when it happensdurationMax : decimal [0..1]The units of time for the duration, in UCUM unitsdurationUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »The number of times to repeat the action within the specified period / period range (i.e. both period and periodMax provided)frequency : integer [0..1]If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period rangefrequencyMax : integer [0..1]Indicates the duration of time over which repetitions are to occur; e.g. to express "3 times per day", 3 would be the frequency and "1 day" would be the periodperiod : decimal [0..1]If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as "do this once every 3-5 daysperiodMax : decimal [0..1]The units of time for the period in UCUM unitsperiodUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »If one or more days of week is provided, then the action happens only on the specified day(s)dayOfWeek : code [0..*] « (Strength=Required)DaysOfWeek! »Specified time of day for action to take placetimeOfDay : time [0..*]Real world events that the occurrence of the event should be tied towhen : code [0..*] « Real world event relating to the schedule. (Strength=Required)EventTiming! »The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the eventoffset : unsignedInt [0..1]SignatureAn indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the documenttype : Coding [1..*] « An indication of the reason that an entity signed the object (Strength=Preferred)Signature Type ? »When the digital signature was signedwhen : instant [1..1]A reference to an application-usable description of the identity that signed (e.g. the signature used their private key)who[x] : Type [1..1] « uri|Reference(Practitioner|RelatedPerson| Patient|Device|Organization) »A reference to an application-usable description of the identity that is represented by the signatureonBehalfOf[x] : Type [0..1] « uri|Reference(Practitioner| RelatedPerson|Patient|Device|Organization) »A mime type that indicates the technical format of the target resources signed by the signaturetargetFormat : code [0..1] « The mime type of an attachment. Any valid mime type is allowed. (Strength=Required)MimeType! »A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jose for JWS, and image/* for a graphical image of a signature, etcsigFormat : code [0..1] « The mime type of an attachment. Any valid mime type is allowed. (Strength=Required)MimeType! »The base64 encoding of the Signature content. When signature is not recorded electronically this element would be emptyblob : base64Binary [0..1]AnnotationThe individual responsible for making the annotationauthor[x] : Type [0..1] « Reference(Practitioner|Patient| RelatedPerson)|string »Indicates when this particular annotation was madetime : dateTime [0..1]The text of the annotationtext : string [1..1]A set of rules that describe when the event is scheduledrepeat[0..1]

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

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.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Attachment IElementContent in a format defined elsewhere
+ If the Attachment has data, it SHALL have a contentType
Elements defined in Ancestors: id, extension
... contentType Σ0..1codeMime type of the content, with charset etc.
MimeType (Required)
... language Σ0..1codeHuman language of the content (BCP-47)
Common Languages (Extensible but limited to All Languages)
... data 0..1base64BinaryData inline, base64ed
... url Σ0..1uriUri where the data can be found
... size Σ0..1unsignedIntNumber of bytes of content (if url provided)
... hash Σ0..1base64BinaryHash of the data (sha-1, base64ed)
... title Σ0..1stringLabel to display in place of the data
... creation Σ0..1dateTimeDate attachment was first created

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <contentType value="[code]"/><!-- 0..1 Mime type of the content, with charset etc.  -->
 <language value="[code]"/><!-- 0..1 Human language of the content (BCP-47) -->
 <data value="[base64Binary]"/><!-- 0..1 Data inline, base64ed -->
 <url value="[uri]"/><!-- 0..1 Uri where the data can be found -->
 <size value="[unsignedInt]"/><!-- 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 -->
 <creation value="[dateTime]"/><!-- 0..1 Date attachment was first created -->
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Attachment.contentType [ code ]; # 0..1 Mime type of the content, with charset etc.
  fhir:Attachment.language [ code ]; # 0..1 Human language of the content (BCP-47)
  fhir:Attachment.data [ base64Binary ]; # 0..1 Data inline, base64ed
  fhir:Attachment.url [ uri ]; # 0..1 Uri where the data can be found
  fhir:Attachment.size [ unsignedInt ]; # 0..1 Number of bytes of content (if url provided)
  fhir:Attachment.hash [ base64Binary ]; # 0..1 Hash of the data (sha-1, base64ed)
  fhir:Attachment.title [ string ]; # 0..1 Label to display in place of the data
  fhir:Attachment.creation [ dateTime ]; # 0..1 Date attachment was first created
]

Changes since DSTU2


Attachment
Attachment.language
  • Change binding strength from required to extensible
  • Change value set from http://tools.ietf.org/html/bcp47 to http://hl7.org/fhir/ValueSet/languages

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Attachment IElementContent in a format defined elsewhere
+ If the Attachment has data, it SHALL have a contentType
Elements defined in Ancestors: id, extension
... contentType Σ0..1codeMime type of the content, with charset etc.
MimeType (Required)
... language Σ0..1codeHuman language of the content (BCP-47)
Common Languages (Extensible but limited to All Languages)
... data 0..1base64BinaryData inline, base64ed
... url Σ0..1uriUri where the data can be found
... size Σ0..1unsignedIntNumber of bytes of content (if url provided)
... hash Σ0..1base64BinaryHash of the data (sha-1, base64ed)
... title Σ0..1stringLabel to display in place of the data
... creation Σ0..1dateTimeDate attachment was first created

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <contentType value="[code]"/><!-- 0..1 Mime type of the content, with charset etc.  -->
 <language value="[code]"/><!-- 0..1 Human language of the content (BCP-47) -->
 <data value="[base64Binary]"/><!-- 0..1 Data inline, base64ed -->
 <url value="[uri]"/><!-- 0..1 Uri where the data can be found -->
 <size value="[unsignedInt]"/><!-- 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 -->
 <creation value="[dateTime]"/><!-- 0..1 Date attachment was first created -->
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Attachment.contentType [ code ]; # 0..1 Mime type of the content, with charset etc.
  fhir:Attachment.language [ code ]; # 0..1 Human language of the content (BCP-47)
  fhir:Attachment.data [ base64Binary ]; # 0..1 Data inline, base64ed
  fhir:Attachment.url [ uri ]; # 0..1 Uri where the data can be found
  fhir:Attachment.size [ unsignedInt ]; # 0..1 Number of bytes of content (if url provided)
  fhir:Attachment.hash [ base64Binary ]; # 0..1 Hash of the data (sha-1, base64ed)
  fhir:Attachment.title [ string ]; # 0..1 Label to display in place of the data
  fhir:Attachment.creation [ dateTime ]; # 0..1 Date attachment was first created
]

Changes since DSTU2

Attachment
Attachment.language
  • Change binding strength from required to extensible
  • Change value set from http://tools.ietf.org/html/bcp47 to http://hl7.org/fhir/ValueSet/languages

See the Full Difference for further information

The actual content of an Attachment can be conveyed directly using the data element or a URL reference can be provided. If both are provided, the reference SHALL 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 SHALL point to a location that resolves to actual data; some URIs such as cid: meet this requirement. If the URL is a relative reference, it is interpreted in the same way as a resource reference.

The contentType element SHALL always be populated when an Attachment contains data, and MAY be populated when there is a url. 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 hash is included so that applications can verify that the content returned by the URL has not changed. The hash and size relate to the data before it is represented in base64 form.

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 SHALL 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 .

Constraints

  • att-1: If the Attachment has data, it SHALL have a contentType (expression : data.empty() or contentType.exists())

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 language is available for the combination of language and contentType.

The context of use may frequently make rules about the kind of attachment (and therefore, the kind of mime types) that can be used.

Attachment is used in the following places: BodyStructure, Claim, Communication, CommunicationRequest, Consent, Contract, DiagnosticReport, DocumentReference, ExplanationOfBenefit, HealthcareService, Library, Media, Patient, Person, Practitioner, Questionnaire, QuestionnaireResponse and RelatedPerson

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

A Coding is a representation of a defined concept using a symbol from a defined "code system" - see Using Codes in resources for more details.

This data type can be bound to a value set.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Coding ΣElementA reference to a code defined by a terminology system
Elements defined in Ancestors: id, extension
... system Σ0..1uriIdentity of the terminology system
... version Σ0..1stringVersion of the system - if relevant
... code Σ0..1codeSymbol in syntax defined by the system
... display Σ0..1stringRepresentation defined by the system
... userSelected Σ0..1booleanIf this coding was chosen directly by the user

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <system value="[uri]"/><!-- 0..1 Identity of the terminology system -->
 <version value="[string]"/><!-- 0..1 Version of the system - if relevant -->
 <code value="[code]"/><!-- 0..1 Symbol in syntax defined by the system -->
 <display value="[string]"/><!-- 0..1 Representation defined by the system -->
 <userSelected value="[boolean]"/><!-- 0..1 If this coding was chosen directly by the user -->
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Coding.system [ uri ]; # 0..1 Identity of the terminology system
  fhir:Coding.version [ string ]; # 0..1 Version of the system - if relevant
  fhir:Coding.code [ code ]; # 0..1 Symbol in syntax defined by the system
  fhir:Coding.display [ string ]; # 0..1 Representation defined by the system
  fhir:Coding.userSelected [ boolean ]; # 0..1 If this coding was chosen directly by the user
]

Changes since DSTU2


Coding
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Coding ΣElementA reference to a code defined by a terminology system
Elements defined in Ancestors: id, extension
... system Σ0..1uriIdentity of the terminology system
... version Σ0..1stringVersion of the system - if relevant
... code Σ0..1codeSymbol in syntax defined by the system
... display Σ0..1stringRepresentation defined by the system
... userSelected Σ0..1booleanIf this coding was chosen directly by the user

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <system value="[uri]"/><!-- 0..1 Identity of the terminology system -->
 <version value="[string]"/><!-- 0..1 Version of the system - if relevant -->
 <code value="[code]"/><!-- 0..1 Symbol in syntax defined by the system -->
 <display value="[string]"/><!-- 0..1 Representation defined by the system -->
 <userSelected value="[boolean]"/><!-- 0..1 If this coding was chosen directly by the user -->
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Coding.system [ uri ]; # 0..1 Identity of the terminology system
  fhir:Coding.version [ string ]; # 0..1 Version of the system - if relevant
  fhir:Coding.code [ code ]; # 0..1 Symbol in syntax defined by the system
  fhir:Coding.display [ string ]; # 0..1 Representation defined by the system
  fhir:Coding.userSelected [ boolean ]; # 0..1 If this coding was chosen directly by the user
]

Changes since DSTU2

Coding
  • No Changes

See the Full Difference for further information

The meaning of the Coding is defined by the code. The system provides the source of the definition of the code, along with an optional version reference. The display is a human display for the text defined by the system - it is not intended for computation.

The system is a URI that references the code system that defines the code. Choosing the correct system is important; for more information about the code system URI, read Managing Terminology System URIs. The system URI SHALL NOT contain a reference to a value set (e.g. ValueSet.url). If the code is taken from a CodeSystem resource, CodeSystem.url is the correct value for the system uri. Resolvable URLs are generally preferred by implementers over non-resolvable URNs, particularly opaque URNs such as OIDs (urn:oid:) or UUIDs (urn:uuid:).

A code system version may also be supplied. If the meaning of codes within the code system is consistent across releases, this is not required. The version SHOULD be exchanged when the system does not maintain consistent definitions across versions. Note that the following systems SHOULD always have a version specified:

  • National releases of SNOMED CT (consistency of definitions varies amongst jurisdictions, and some jurisdictions may make their own rules on this)
  • Various versions of ICD (note: the major releases are labeled as different code systems altogether, but there is variation within versions)

More generally, any classification (e.g. a code system that includes concepts with relative definitions such as "not otherwise coded" will require a version. See the discussion of code system versions in the Code System resource for further discussion on versioning.

If present, the code SHALL be a syntactically correct symbol as defined by the system. In some code systems such as SNOMED CT, the symbol may be an expression composed of other predefined symbol (e.g. post-coordination). 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 is used to display the meaning of the code by an application that is not aware of the system.

Where the code system defines multiple possible display strings, one of these SHALL be used in display. If one is labeled as preferred, it SHOULD be used. If the code system does not define a text representation (e.g. SNOMED CT Expressions) then display cannot be populated, and the meaning of the code won't be accessible to systems that don't understand the code expression.

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, 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 system, version and code then they have the same meaning. If the version information is missing, or the system, version or the code elements differ, then how the codes are related can only be determined by consulting the definitions of the system(s) and any mappings available.

A coding may be marked as a "userSelected" if a user selected the particular coded value in a user interface (e.g. the user selects an item in a pick-list). If a user selected coding exists, it is the preferred choice for performing translations etc.

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.

Coding is used in the following places: Signature, CodeableConcept, AuditEvent, CapabilityStatement, Claim, ClaimResponse, CodeSystem, Consent, Contract, Coverage, DocumentReference, Encounter, Endpoint, ExpansionProfile, ExplanationOfBenefit, ImagingStudy, Location, MessageHeader, ObservationDefinition, PlanDefinition, ProductPlan, Questionnaire, QuestionnaireResponse, RequestGroup, StructureDefinition, Subscription, TestScript and ValueSet

Design Note: This specification defines two types for representing coded values:

  • Coding: a simple direct reference to a code defined by a code system
  • CodeableConcept: a text description and/or a list of Codings (i.e. a list of references to codes defined by code systems)

The Coding data type corresponds to the simple case of selecting a single code from a code list. However this type is rarely used in the FHIR specifications; long experience with exchanging coded values in HL7 shows that in the general case, systems need to able to exchange multiple translation codes, and/or an original text.

The Coding data type is used directly when there is certainty that the value must be selected directly from one of the available codes, and the list of possible codes is agreed to by all participants. This is not usually the case in the context of FHIR - general interoperability - so Coding is mostly used in extensions, which are usually intended to be defined for a well-controlled context of use.

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

A CodeableConcept represents a value that is usually supplied by providing a 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.

This data type can be bound to a value set.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. CodeableConcept ΣElementConcept - reference to a terminology or just text
Elements defined in Ancestors: id, extension
... coding Σ0..*CodingCode defined by a terminology system
... text Σ0..1stringPlain text representation of the concept

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <coding><!-- 0..* Coding Code defined by a terminology system --></coding>
 <text value="[string]"/><!-- 0..1 Plain text representation of the concept -->
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:CodeableConcept.coding [ Coding ], ... ; # 0..* Code defined by a terminology system
  fhir:CodeableConcept.text [ string ]; # 0..1 Plain text representation of the concept
]

Changes since DSTU2


CodeableConcept
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. CodeableConcept ΣElementConcept - reference to a terminology or just text
Elements defined in Ancestors: id, extension
... coding Σ0..*CodingCode defined by a terminology system
... text Σ0..1stringPlain text representation of the concept

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <coding><!-- 0..* Coding Code defined by a terminology system --></coding>
 <text value="[string]"/><!-- 0..1 Plain text representation of the concept -->
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:CodeableConcept.coding [ Coding ], ... ; # 0..* Code defined by a terminology system
  fhir:CodeableConcept.text [ string ]; # 0..1 Plain text representation of the concept
]

Changes since DSTU2

CodeableConcept
  • No Changes

See the Full Difference for further information

Each coding is a representation of the concept as described above. 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. There is no meaning associated with the ordering of coding within a CodeableConcept. A typical use of CodeableConcept is to send the local code that the concept was coded with, and also one or more translations to publicly defined code systems such as LOINC or SNOMED CT. Sending local codes is useful and important for the purposes of debugging and integrity auditing.

Whether or not coding elements are present, the text is the representation of the concept as entered or chosen by the user, and 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 userSelected - the code or concept that the user actually selected directly. When none of the coding elements is marked as userSelected, the text (if present) is the preferred source of meaning.

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.

CodeableConcept is used in the following places: Identifier, Account, ActivityDefinition, AdverseEvent, AllergyIntolerance, Appointment, AppointmentResponse, AuditEvent, Basic, BodyStructure, CapabilityStatement, CarePlan, CareTeam, ChargeItem, Claim, ClaimResponse, ClinicalImpression, CodeSystem, Communication, CommunicationRequest, CompartmentDefinition, Composition, ConceptMap, Condition, Consent, Contract, Coverage, DetectedIssue, Device, DeviceComponent, DeviceMetric, DeviceRequest, DeviceUseStatement, DiagnosticReport, DocumentManifest, DocumentReference, EligibilityRequest, EligibilityResponse, Encounter, Endpoint, EntryDefinition, EpisodeOfCare, EventDefinition, ExampleScenario, ExpansionProfile, ExplanationOfBenefit, FamilyMemberHistory, Flag, Goal, GraphDefinition, Group, GuidanceResponse, HealthcareService, ImagingStudy, Immunization, ImmunizationEvaluation, ImmunizationRecommendation, ImplementationGuide, ImplementationGuideInput, ImplementationGuideOutput, Invoice, Library, List, Location, Measure, MeasureReport, Media, Medication, MedicationAdministration, MedicationDispense, MedicationRequest, MedicationStatement, MessageDefinition, MessageHeader, NamingSystem, NutritionOrder, Observation, ObservationDefinition, OperationDefinition, OperationOutcome, Organization, OrganizationRole, Patient, PaymentNotice, PaymentReconciliation, PlanDefinition, Practitioner, PractitionerRole, Procedure, ProcessResponse, ProductPlan, Provenance, Questionnaire, RelatedPerson, RequestGroup, ResearchStudy, RiskAssessment, Schedule, SearchParameter, Sequence, ServiceDefinition, ServiceRequest, Slot, Specimen, SpecimenDefinition, StructureDefinition, StructureMap, Substance, SupplyDelivery, SupplyRequest, Task, TerminologyCapabilities, TestScript, UserSession, ValueSet and VisionPrescription

See also Examples, Detailed Descriptions and Mappings, Profiles & Extensions and and R2 Conversions.

A measured amount (or an amount that can potentially be measured).

This data type can be bound to a value set.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Quantity ΣIElementA measured or measurable amount
+ If a code for the unit is present, the system SHALL also be present
Elements defined in Ancestors: id, extension
... value Σ0..1decimalNumerical value (with implicit precision)
... comparator ?!Σ0..1code< | <= | >= | > - how to understand the value
QuantityComparator (Required)
... unit Σ0..1stringUnit representation
... system ΣI0..1uriSystem that defines coded unit form
... code Σ0..1codeCoded form of the unit

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <value value="[decimal]"/><!-- 0..1 Numerical value (with implicit precision) -->
 <comparator value="[code]"/><!-- 0..1 < | <= | >= | > - how to understand the value -->
 <unit 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]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Quantity.value [ decimal ]; # 0..1 Numerical value (with implicit precision)
  fhir:Quantity.comparator [ code ]; # 0..1 < | <= | >= | > - how to understand the value
  fhir:Quantity.unit [ string ]; # 0..1 Unit representation
  fhir:Quantity.system [ uri ]; # 0..1 System that defines coded unit form
  fhir:Quantity.code [ code ]; # 0..1 Coded form of the unit
]

Changes since DSTU2


Quantity
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Quantity ΣIElementA measured or measurable amount
+ If a code for the unit is present, the system SHALL also be present
Elements defined in Ancestors: id, extension
... value Σ0..1decimalNumerical value (with implicit precision)
... comparator ?!Σ0..1code< | <= | >= | > - how to understand the value
QuantityComparator (Required)
... unit Σ0..1stringUnit representation
... system ΣI0..1uriSystem that defines coded unit form
... code Σ0..1codeCoded form of the unit

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <value value="[decimal]"/><!-- 0..1 Numerical value (with implicit precision) -->
 <comparator value="[code]"/><!-- 0..1 < | <= | >= | > - how to understand the value -->
 <unit 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]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Quantity.value [ decimal ]; # 0..1 Numerical value (with implicit precision)
  fhir:Quantity.comparator [ code ]; # 0..1 < | <= | >= | > - how to understand the value
  fhir:Quantity.unit [ string ]; # 0..1 Unit representation
  fhir:Quantity.system [ uri ]; # 0..1 System that defines coded unit form
  fhir:Quantity.code [ code ]; # 0..1 Coded form of the unit
]

Changes since DSTU2

Quantity
  • No Changes

See the Full Difference for further information

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 unit element contains a displayable unit that defines what is measured. The unit may additionally be coded in some formal way using the code and the system (see Coding for further information about how to use the system element).

If the unit can 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 unit element will often contain text that is a valid UCUM unit, but it cannot be assumed that the unit actually contains a valid UCUM unit.

Constraints

  • qty-3: If a code for the unit is present, the system SHALL also be present (expression : code.empty() or system.exists())

The context of use may frequently define what kind of measured quantity this is and therefore what kind of unit 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.

Quantity is used in the following places: Duration, Count, Money, Ratio, Distance, Age, ChargeItem, Claim, Coverage, DeviceComponent, DeviceRequest, ExplanationOfBenefit, Goal, Group, MeasureReport, Observation, PlanDefinition, Questionnaire, QuestionnaireResponse, Sequence, SupplyRequest and UserSession

There are several additional data types that are specializations of Quantity that only introduce new restrictions on the existing elements defined as part of the Quantity data type:

Type Name Rules Formal Definitions
Age
  • age-1: There SHALL be a code if there is a value and it SHALL be an expression of time. If system is present, it SHALL be UCUM. If value is present, it SHALL be positive. (expression : (code or value.empty()) and (system.empty() or system = %ucum) and (value.empty() or value > 0))
XML, JSON
Usage: ActivityDefinition, AllergyIntolerance, Condition, FamilyMemberHistory, PlanDefinition, Procedure and RequestGroup
Count
  • cnt-3: There SHALL be a code with a value of "1" if there is a value and it SHALL be an expression of length. If system is present, it SHALL be UCUM. If present, the value SHALL a whole number. (expression : (code or value.empty()) and (system.empty() or system = %ucum) and (code.empty() or code = '1') and (value.empty() or value.toString().contains('.').not()))
XML, JSON
Usage: (not used as yet)
Distance
  • dis-1: There SHALL be a code if there is a value and it SHALL be an expression of length. If system is present, it SHALL be UCUM. (expression : (code or value.empty()) and (system.empty() or system = %ucum))
XML, JSON
Usage: (not used as yet)
Duration
  • drt-1: There SHALL be a code if there is a value and it SHALL be an expression of time. If system is present, it SHALL be UCUM. (expression : code.exists() implies ((system = %ucum) and value.exists()))
XML, JSON
Usage: ActivityDefinition, Encounter, Goal, MedicationRequest, PlanDefinition, RequestGroup and SpecimenDefinition
Money
  • mny-1: There SHALL be a code if there is a value and it SHALL be an expression of currency. If system is present, it SHALL be ISO 4217 (system = "urn:iso:std:iso:4217" - currency). (expression : (code or value.empty()) and (system.empty() or system = 'urn:iso:std:iso:4217'))
XML, JSON
Usage: ChargeItem, Claim, ClaimResponse, Contract, EligibilityRequest, EligibilityResponse, ExplanationOfBenefit, Invoice, PaymentReconciliation and ProductPlan

In addition to the specializations, there is one profile on Quantity used in several resources:
Profile Name Rules Formal Definitions
Simple Quantity
  • sqty-1: The comparator is not used on a SimpleQuantity (expression : comparator.empty())
XML, JSON
Usage: Range, SampledData, ActivityDefinition, CarePlan, Claim, Contract, ExplanationOfBenefit, Immunization, Medication, MedicationAdministration, MedicationDispense, MedicationRequest, NutritionOrder, Observation, Specimen, SpecimenDefinition, Substance, SupplyDelivery and VisionPrescription

Note that the profile is different from the other specializations because it is not a type, just rules applied where the Quantity type is used.

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

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.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Range ΣIElementSet of values bounded by low and high
+ If present, low SHALL have a lower value than high
Elements defined in Ancestors: id, extension
... low ΣI0..1SimpleQuantityLow limit
... high ΣI0..1SimpleQuantityHigh limit

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <low><!-- ?? 0..1 Quantity(SimpleQuantity) Low limit --></low>
 <high><!-- ?? 0..1 Quantity(SimpleQuantity) High limit --></high>
</[name]>

JSON Template


{doco
  // from Element: extension
  "low" : { Quantity(SimpleQuantity) }, // C? Low limit
  "high" : { Quantity(SimpleQuantity) } // C? High limit
}

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Range.low [ Quantity(SimpleQuantity) ]; # 0..1 Low limit
  fhir:Range.high [ Quantity(SimpleQuantity) ]; # 0..1 High limit
]

Changes since DSTU2


Range
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Range ΣIElementSet of values bounded by low and high
+ If present, low SHALL have a lower value than high
Elements defined in Ancestors: id, extension
... low ΣI0..1SimpleQuantityLow limit
... high ΣI0..1SimpleQuantityHigh limit

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <low><!-- ?? 0..1 Quantity(SimpleQuantity) Low limit --></low>
 <high><!-- ?? 0..1 Quantity(SimpleQuantity) High limit --></high>
</[name]>

JSON Template

{doco
  // from Element: extension
  "low" : { Quantity(SimpleQuantity) }, // C? Low limit
  "high" : { Quantity(SimpleQuantity) } // C? High limit
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Range.low [ Quantity(SimpleQuantity) ]; # 0..1 Low limit
  fhir:Range.high [ Quantity(SimpleQuantity) ]; # 0..1 High limit
]

Changes since DSTU2

Range
  • No Changes

See the Full Difference for further information

The unit and code/system elements of the low or high elements SHALL 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 complete range.

The comparator 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

  • rng-2: If present, low SHALL have a lower value than high (expression : low.empty() or high.empty() or (low <= high))

Range is used in the following places: ActivityDefinition, AllergyIntolerance, Condition, DeviceRequest, FamilyMemberHistory, Goal, Group, Observation, ObservationDefinition, PlanDefinition, Procedure, RequestGroup, RiskAssessment, SpecimenDefinition and SupplyRequest

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

A relationship between two Quantity values expressed as a numerator and a denominator.

The Ratio datatype should only be used to express a relationship of two numbers if the relationship cannot be suitably expressed using a Quantity and a common unit. Where the denominator value is known to be fixed to "1", Quantity should be used instead of Ratio.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Ratio ΣIElementA ratio of two Quantity values - a numerator and a denominator
+ Numerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present
Elements defined in Ancestors: id, extension
... numerator Σ0..1QuantityNumerator value
... denominator Σ0..1QuantityDenominator value

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <numerator><!-- 0..1 Quantity Numerator value --></numerator>
 <denominator><!-- 0..1 Quantity Denominator value --></denominator>
</[name]>

JSON Template


{doco
  // from Element: extension
  "numerator" : { Quantity }, // Numerator value
  "denominator" : { Quantity } // Denominator value
}

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Ratio.numerator [ Quantity ]; # 0..1 Numerator value
  fhir:Ratio.denominator [ Quantity ]; # 0..1 Denominator value
]

Changes since DSTU2


Ratio
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Ratio ΣIElementA ratio of two Quantity values - a numerator and a denominator
+ Numerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present
Elements defined in Ancestors: id, extension
... numerator Σ0..1QuantityNumerator value
... denominator Σ0..1QuantityDenominator value

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <numerator><!-- 0..1 Quantity Numerator value --></numerator>
 <denominator><!-- 0..1 Quantity Denominator value --></denominator>
</[name]>

JSON Template

{doco
  // from Element: extension
  "numerator" : { Quantity }, // Numerator value
  "denominator" : { Quantity } // Denominator value
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Ratio.numerator [ Quantity ]; # 0..1 Numerator value
  fhir:Ratio.denominator [ Quantity ]; # 0..1 Denominator value
]

Changes since DSTU2

Ratio
  • No Changes

See the Full Difference for further information

Examples where a Quantity is typically used are rates, densities, concentrations. Examples where a Ratio is used are: titres (e.g. 1:128); concentration ratios where the denominator is significant (e.g. 5mg/10mL); observed frequencies (e.g. 2 repetitions/8 hr), and where the numerator or denominator is an amount of a currency (no UCUM code for $ etc).

Common factors in the numerator and denominator are not automatically cancelled out. Ratios are not simply "structured numbers" - for example blood pressure measurements (e.g. "120/60") are not ratios.

A proper ratio has both a numerator and a denominator; however these are not mandatory in order to allow an invalid ratio with an extension with further information.

Constraints

  • rat-1: Numerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present (expression : (numerator.empty() xor denominator.exists()) and (numerator.exists() or extension.exists()))

The context of use may require particular types of Quantity for the numerator or denominator.

Ratio is used in the following places: Medication, MedicationAdministration, NutritionOrder, Observation and Substance

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

A time period defined by a start and end date/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 on 24-Jun 2013").

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Period ΣIElementTime range defined by start and end date/time
+ If present, start SHALL have a lower value than end
Elements defined in Ancestors: id, extension
... start ΣI0..1dateTimeStarting time with inclusive boundary
... end ΣI0..1dateTimeEnd time with inclusive boundary, if not ongoing

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <start value="[dateTime]"/><!-- ?? 0..1 Starting time with inclusive boundary -->
 <end value="[dateTime]"/><!-- ?? 0..1 End time with inclusive boundary, if not ongoing -->
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Period.start [ dateTime ]; # 0..1 Starting time with inclusive boundary
  fhir:Period.end [ dateTime ]; # 0..1 End time with inclusive boundary, if not ongoing
]

Changes since DSTU2


Period
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Period ΣIElementTime range defined by start and end date/time
+ If present, start SHALL have a lower value than end
Elements defined in Ancestors: id, extension
... start ΣI0..1dateTimeStarting time with inclusive boundary
... end ΣI0..1dateTimeEnd time with inclusive boundary, if not ongoing

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <start value="[dateTime]"/><!-- ?? 0..1 Starting time with inclusive boundary -->
 <end value="[dateTime]"/><!-- ?? 0..1 End time with inclusive boundary, if not ongoing -->
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Period.start [ dateTime ]; # 0..1 Starting time with inclusive boundary
  fhir:Period.end [ dateTime ]; # 0..1 End time with inclusive boundary, if not ongoing
]

Changes since DSTU2

Period
  • No Changes

See the Full Difference for further information

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, or the start may be in the past, and the end date in the future, which means that period is expected/planned to end at the specified time

The end value includes any matching date/time. For example, the period 2011-05-23 to 2011-05-27 includes all the times from the start of the 23rd May through to the end of the 27th of May.

Period is used in the following places: Identifier, Account, ActivityDefinition, AllergyIntolerance, Appointment, AuditEvent, CarePlan, CareTeam, ChargeItem, Claim, ClinicalImpression, CommunicationRequest, Composition, Condition, Consent, Contract, Coverage, DeviceRequest, DeviceUseStatement, DiagnosticReport, DocumentReference, EligibilityRequest, Encounter, Endpoint, EntryDefinition, EpisodeOfCare, EventDefinition, ExplanationOfBenefit, FamilyMemberHistory, Flag, Group, HealthcareService, Library, Measure, MeasureReport, Media, MedicationAdministration, MedicationRequest, MedicationStatement, NamingSystem, Observation, OrganizationRole, Patient, PaymentReconciliation, PlanDefinition, Practitioner, PractitionerRole, Procedure, ProcessRequest, ProductPlan, Provenance, Questionnaire, RelatedPerson, RequestGroup, ResearchStudy, ResearchSubject, RiskAssessment, Schedule, ServiceDefinition, ServiceRequest, Specimen, SupplyDelivery, SupplyRequest and Task

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

Data that comes from a series of measurements taken by a device, which may have upper and lower limits. The data type also supports more than one dimension in the data.

A SampledData provides a concise way to handle the data produced by devices that sample a particular physical state at a high frequency. A typical use for this is for the output of an ECG or EKG device. The data type includes a series of raw decimal values (which are mostly simple integers), along with adjustments for scale and factor. These are interpreted such that

original measured value[i] = SampledData.data[i] * SampledData.scaleFactor + SampledData.origin.value

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. SampledData ElementA series of measurements taken by a device
Elements defined in Ancestors: id, extension
... origin Σ1..1SimpleQuantityZero value and units
... period Σ1..1decimalNumber of milliseconds between samples
... factor Σ0..1decimalMultiply data by this before adding to origin
... lowerLimit Σ0..1decimalLower limit of detection
... upperLimit Σ0..1decimalUpper limit of detection
... dimensions Σ1..1positiveIntNumber of sample points at each time point
... data 0..1stringDecimal values with spaces, or "E" | "U" | "L"

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <origin><!-- 1..1 Quantity(SimpleQuantity) Zero value and units --></origin>
 <period value="[decimal]"/><!-- 1..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="[positiveInt]"/><!-- 1..1 Number of sample points at each time point -->
 <data value="[string]"/><!-- 0..1 Decimal values with spaces, or "E" | "U" | "L" -->
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:SampledData.origin [ Quantity(SimpleQuantity) ]; # 1..1 Zero value and units
  fhir:SampledData.period [ decimal ]; # 1..1 Number of milliseconds between samples
  fhir:SampledData.factor [ decimal ]; # 0..1 Multiply data by this before adding to origin
  fhir:SampledData.lowerLimit [ decimal ]; # 0..1 Lower limit of detection
  fhir:SampledData.upperLimit [ decimal ]; # 0..1 Upper limit of detection
  fhir:SampledData.dimensions [ positiveInt ]; # 1..1 Number of sample points at each time point
  fhir:SampledData.data [ string ]; # 0..1 Decimal values with spaces, or "E" | "U" | "L"
]

Changes since DSTU2


SampledData
SampledData.data
  • Min Cardinality changed from 1 to 0

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. SampledData ElementA series of measurements taken by a device
Elements defined in Ancestors: id, extension
... origin Σ1..1SimpleQuantityZero value and units
... period Σ1..1decimalNumber of milliseconds between samples
... factor Σ0..1decimalMultiply data by this before adding to origin
... lowerLimit Σ0..1decimalLower limit of detection
... upperLimit Σ0..1decimalUpper limit of detection
... dimensions Σ1..1positiveIntNumber of sample points at each time point
... data 0..1stringDecimal values with spaces, or "E" | "U" | "L"

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <origin><!-- 1..1 Quantity(SimpleQuantity) Zero value and units --></origin>
 <period value="[decimal]"/><!-- 1..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="[positiveInt]"/><!-- 1..1 Number of sample points at each time point -->
 <data value="[string]"/><!-- 0..1 Decimal values with spaces, or "E" | "U" | "L" -->
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:SampledData.origin [ Quantity(SimpleQuantity) ]; # 1..1 Zero value and units
  fhir:SampledData.period [ decimal ]; # 1..1 Number of milliseconds between samples
  fhir:SampledData.factor [ decimal ]; # 0..1 Multiply data by this before adding to origin
  fhir:SampledData.lowerLimit [ decimal ]; # 0..1 Lower limit of detection
  fhir:SampledData.upperLimit [ decimal ]; # 0..1 Upper limit of detection
  fhir:SampledData.dimensions [ positiveInt ]; # 1..1 Number of sample points at each time point
  fhir:SampledData.data [ string ]; # 0..1 Decimal values with spaces, or "E" | "U" | "L"
]

Changes since DSTU2

SampledData
SampledData.data
  • Min Cardinality changed from 1 to 0

See the Full Difference for further information

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. The default value for factor is 1.

SampledData is used in the following places: Observation

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

A numeric or alphanumeric string that is associated with a single object or entity within a given system. Typically, identifiers are used to connect content in resources to external content available in other frameworks or protocols. Identifiers are associated with objects, and may be changed or retired due to human or system process and errors.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Identifier ΣElementAn identifier intended for computation
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codeusual | official | temp | secondary | old (If known)
IdentifierUse (Required)
... type Σ0..1CodeableConceptDescription of identifier
Identifier Type Codes (Extensible)
... system Σ0..1uriThe namespace for the identifier value
... value Σ0..1stringThe value that is unique
... period Σ0..1PeriodTime period when id is/was valid for use
... assigner Σ0..1Reference(Organization)Organization that issued id (may be just text)

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 usual | official | temp | secondary | old (If known) -->
 <type><!-- 0..1 CodeableConcept Description of identifier --></type>
 <system value="[uri]"/><!-- 0..1 The namespace for the identifier value -->
 <value value="[string]"/><!-- 0..1 The value that is unique -->
 <period><!-- 0..1 Period Time period when id is/was valid for use --></period>
 <assigner><!-- 0..1 Reference(Organization) Organization that issued id (may be just text) --></assigner>
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Identifier.use [ code ]; # 0..1 usual | official | temp | secondary | old (If known)
  fhir:Identifier.type [ CodeableConcept ]; # 0..1 Description of identifier
  fhir:Identifier.system [ uri ]; # 0..1 The namespace for the identifier value
  fhir:Identifier.value [ string ]; # 0..1 The value that is unique
  fhir:Identifier.period [ Period ]; # 0..1 Time period when id is/was valid for use
  fhir:Identifier.assigner [ Reference(Organization) ]; # 0..1 Organization that issued id (may be just text)
]

Changes since DSTU2


Identifier
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Identifier ΣElementAn identifier intended for computation
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codeusual | official | temp | secondary | old (If known)
IdentifierUse (Required)
... type Σ0..1CodeableConceptDescription of identifier
Identifier Type Codes (Extensible)
... system Σ0..1uriThe namespace for the identifier value
... value Σ0..1stringThe value that is unique
... period Σ0..1PeriodTime period when id is/was valid for use
... assigner Σ0..1Reference(Organization)Organization that issued id (may be just text)

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 usual | official | temp | secondary | old (If known) -->
 <type><!-- 0..1 CodeableConcept Description of identifier --></type>
 <system value="[uri]"/><!-- 0..1 The namespace for the identifier value -->
 <value value="[string]"/><!-- 0..1 The value that is unique -->
 <period><!-- 0..1 Period Time period when id is/was valid for use --></period>
 <assigner><!-- 0..1 Reference(Organization) Organization that issued id (may be just text) --></assigner>
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Identifier.use [ code ]; # 0..1 usual | official | temp | secondary | old (If known)
  fhir:Identifier.type [ CodeableConcept ]; # 0..1 Description of identifier
  fhir:Identifier.system [ uri ]; # 0..1 The namespace for the identifier value
  fhir:Identifier.value [ string ]; # 0..1 The value that is unique
  fhir:Identifier.period [ Period ]; # 0..1 Time period when id is/was valid for use
  fhir:Identifier.assigner [ Reference(Organization) ]; # 0..1 Organization that issued id (may be just text)
]

Changes since DSTU2

Identifier
  • No Changes

See the Full Difference for further information

The value SHALL be unique within the defined system and have a consistent meaning wherever it appears. Both system and value are always case sensitive.

The system is a URI that defines a set of identifiers (i.e. how the value is made unique). It might be a specific application or a recognized standard/specification for a set of identifiers or a way of making identifiers unique. FHIR defines some useful or important system URIs directly. Here are some example identifier namespaces:

  • http://hl7.org/fhir/sid/us-ssn for United States Social Security Number (SSN) values
  • http://ns.electronichealth.net.au/id/hi/ihi/1.0 for Australian Individual Healthcare Identifier (IHI) numbers
  • urn:ietf:rfc:3986 for when the value of the identifier is itself a globally unique URI

If the system is a URL, it SHOULD resolve. Resolution might be to a web page that describes the identifier system and/or supports look-up of identifiers. Alternatively, it could be to a NamingSystem resource instance. Resolvable URLs are generally preferred by implementers over non-resolvable URNs, particularly opaque URNs such as OIDs (urn:oid:) or UUIDs (urn:uuid:). If used, OIDs and UUIDs may be registered in the HL7 OID registry and SHOULD be registered if the content is shared or exchanged across institutional boundaries.

It is up to the implementer organization to determine an appropriate URL or URN structure that will avoid collisions and to manage that space (and the resolvability of URLs) over time.

Note that the scope of a given identifier system may extend beyond identifiers that might be captured by a single resource. For example, some systems might draw all "order" identifiers from a single namespace, though some might be used on MedicationRequest while others would appear on ServiceRequest.

If the identifier value itself is naturally a globally unique URI (e.g. an OID, a UUID, or a URI with no trailing local part), then the system SHALL be "urn:ietf:rfc:3986", and the URI is in the value (OIDs and UUIDs using urn:oid: and urn:uuid: - see note on the V3 mapping and the examples).

In some cases, the system may not be known - only the value 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 value unless the system can be safely inferred by the context. Applications should provide a system wherever possible, as information sharing in a wider context is very likely to arise eventually, and values without a system are inherently limited in use.

In addition to the system (which provides a uniqueness scope) and the value, identifiers may also have a type, which may be useful when a system encounters identifiers with unknown system values. Note, however, that the type of an identifier is not a well-controlled vocabulary with wide variations in practice. The type deals only with general categories of identifiers and SHOULD not be used for codes that correspond 1..1 with the Identifier.system. Some identifiers may fall into multiple categories due to variations in common usage.

The assigner is used to indicate what registry/state/facility/etc. assigned the identifier. As a Reference, the assigner can include just a text description in the display.

Identifier is used in the following places: Reference, Account, ActivityDefinition, AdverseEvent, AllergyIntolerance, Appointment, AppointmentResponse, AuditEvent, Basic, BodyStructure, Bundle, CarePlan, CareTeam, ChargeItem, Claim, ClaimResponse, ClinicalImpression, CodeSystem, Communication, CommunicationRequest, Composition, ConceptMap, Condition, Consent, Contract, Coverage, DetectedIssue, Device, DeviceComponent, DeviceMetric, DeviceRequest, DeviceUseStatement, DiagnosticReport, DocumentManifest, DocumentReference, EligibilityRequest, EligibilityResponse, Encounter, Endpoint, EnrollmentRequest, EnrollmentResponse, EntryDefinition, EpisodeOfCare, EventDefinition, ExampleScenario, ExpansionProfile, ExplanationOfBenefit, FamilyMemberHistory, Flag, Goal, Group, GuidanceResponse, HealthcareService, ImagingStudy, Immunization, ImmunizationEvaluation, ImmunizationRecommendation, Invoice, Library, List, Location, Measure, MeasureReport, Media, MedicationAdministration, MedicationDispense, MedicationRequest, MedicationStatement, MessageDefinition, NutritionOrder, Observation, Organization, OrganizationRole, Patient, PaymentNotice, PaymentReconciliation, Person, PlanDefinition, Practitioner, PractitionerRole, Procedure, ProcessRequest, ProcessResponse, ProductPlan, Provenance, Questionnaire, QuestionnaireResponse, RelatedPerson, RequestGroup, ResearchStudy, ResearchSubject, RiskAssessment, Schedule, Sequence, ServiceDefinition, ServiceRequest, Slot, Specimen, SpecimenDefinition, StructureDefinition, StructureMap, Substance, SupplyDelivery, SupplyRequest, Task, TestReport, TestScript, UserSession, ValueSet and VisionPrescription

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

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 is not always significant. 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 SHALL care about name parts around the world varies widely.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. HumanName ΣElementName of a human - parts and usage
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codeusual | official | temp | nickname | anonymous | old | maiden
NameUse (Required)
... text Σ0..1stringText representation of the full name
... family Σ0..1stringFamily name (often called 'Surname')
... given Σ0..*stringGiven names (not always 'first'). Includes middle names
This repeating element order: Given Names appear in the correct order for presenting the name
... prefix Σ0..*stringParts that come before the name
This repeating element order: Prefixes appear in the correct order for presenting the name
... suffix Σ0..*stringParts that come after the name
This repeating element order: Suffixes appear in the correct order for presenting the name
... period Σ0..1PeriodTime period when name was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 usual | official | temp | nickname | anonymous | old | maiden -->
 <text value="[string]"/><!-- 0..1 Text representation of the full name -->
 <family value="[string]"/><!-- 0..1 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]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:HumanName.use [ code ]; # 0..1 usual | official | temp | nickname | anonymous | old | maiden
  fhir:HumanName.text [ string ]; # 0..1 Text representation of the full name
  fhir:HumanName.family [ string ]; # 0..1 Family name (often called 'Surname')
  fhir:HumanName.given [ string ], ... ; # 0..* Given names (not always 'first'). Includes middle names
  fhir:HumanName.prefix [ string ], ... ; # 0..* Parts that come before the name
  fhir:HumanName.suffix [ string ], ... ; # 0..* Parts that come after the name
  fhir:HumanName.period [ Period ]; # 0..1 Time period when name was/is in use
]

Changes since DSTU2


HumanName
HumanName.family
  • Max Cardinality changed from * to 1

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. HumanName ΣElementName of a human - parts and usage
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codeusual | official | temp | nickname | anonymous | old | maiden
NameUse (Required)
... text Σ0..1stringText representation of the full name
... family Σ0..1stringFamily name (often called 'Surname')
... given Σ0..*stringGiven names (not always 'first'). Includes middle names
This repeating element order: Given Names appear in the correct order for presenting the name
... prefix Σ0..*stringParts that come before the name
This repeating element order: Prefixes appear in the correct order for presenting the name
... suffix Σ0..*stringParts that come after the name
This repeating element order: Suffixes appear in the correct order for presenting the name
... period Σ0..1PeriodTime period when name was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 usual | official | temp | nickname | anonymous | old | maiden -->
 <text value="[string]"/><!-- 0..1 Text representation of the full name -->
 <family value="[string]"/><!-- 0..1 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]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:HumanName.use [ code ]; # 0..1 usual | official | temp | nickname | anonymous | old | maiden
  fhir:HumanName.text [ string ]; # 0..1 Text representation of the full name
  fhir:HumanName.family [ string ]; # 0..1 Family name (often called 'Surname')
  fhir:HumanName.given [ string ], ... ; # 0..* Given names (not always 'first'). Includes middle names
  fhir:HumanName.prefix [ string ], ... ; # 0..* Parts that come before the name
  fhir:HumanName.suffix [ string ], ... ; # 0..* Parts that come after the name
  fhir:HumanName.period [ Period ]; # 0..1 Time period when name was/is in use
]

Changes since DSTU2

HumanName
HumanName.family
  • Max Cardinality changed from * to 1

See the Full Difference for further information

This table summarizes where common parts of a person's name are found.

NameExampleDestination / Comments
SurnameSmithFamily Name
First nameJohnGiven Name
TitleMrPrefix
Middle NameSamuelSubsequent Given Names
Patronymicbin OsmanFamily Name
Multiple family namesCarreño QuiñonesFamily Name. See note below about decomposition of family name
InitialsQ.Given Name as initial ("." recommended)
Nick NameJockGiven name, with Use = common
QualificationsPhDSuffix
HonorificsSeniorSuffix
Voorvoegsel / Nobilityvan BeethovenFamily Name. See note below about decomposition of family name

For further information, including all W3C International Examples , consult the examples. Note: Implementers should read the name examples for a full understanding of how name works.

The multiple given parts and family name combine to form a single name. Where a person has alternate names that may be used in place of each other (e.g. Nicknames, Aliases), these are different instances of HumanName.

The text element specifies the entire name as it should be represented. This may be provided instead of or as well as specific parts, and can be built from the parts, though the correct order of assembly of the parts is culture dependent: the order of the parts within a given part type has significance and SHALL be observed. The appropriate order between family name and given names depends on culture and context of use. Note that there is an extension for the few times name assembly order is not fixed by the culture.

The given name parts may contain whitespace, though generally they don't. Initials may be used in place of the full name if that is all that is recorded. Systems that operate across cultures should generally rely on the text form for presentation, and use the parts for index/search functionality. For this reasons, applications SHOULD populate the text element for future robustness.

In some cultures (e.g. German, Dutch, Spanish, Portuguese), family names are complex and composed of various parts that may need to be managed separately, e.g. they have differing significance for searching. In these cases, the full family name is populated in family, and a decomposition of the name can be provided using the family extensions own-name, own-prefix, partner-name, partner-prefix, fathers-family and mothers-family.

For robust search, servers should search the parts of a family name independently. E.g. Searching either Carreno or Quinones should match a family name of "Carreno Quinones". HL7 affiliates may make more specific recommendations about how search should work in their specific culture.

HumanName is used in the following places: Organization, Patient, Person, Practitioner, ProductPlan and RelatedPerson

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

An address expressed using postal conventions (as opposed to GPS or other location definition formats). This data type may be used to convey addresses for use in delivering mail as well as for visiting locations which might not be valid for mail delivery. There are a variety of postal address formats defined around the world.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Address ΣElementAn address expressed using postal conventions (as opposed to GPS or other location definition formats)
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codehome | work | temp | old - purpose of this address
AddressUse (Required)
... type Σ0..1codepostal | physical | both
AddressType (Required)
... text Σ0..1stringText representation of the address
... line Σ0..*stringStreet name, number, direction & P.O. Box etc.
This repeating element order: The order in which lines should appear in an address label
... city Σ0..1stringName of city, town etc.
... district Σ0..1stringDistrict name (aka county)
... state Σ0..1stringSub-unit of country (abbreviations ok)
... postalCode Σ0..1stringPostal code for area
... country Σ0..1stringCountry (e.g. can be ISO 3166 2 or 3 letter code)
... period Σ0..1PeriodTime period when address was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 home | work | temp | old - purpose of this address -->
 <type value="[code]"/><!-- 0..1 postal | physical | both -->
 <text value="[string]"/><!-- 0..1 Text representation of the address -->
 <line value="[string]"/><!-- 0..* Street name, number, direction & P.O. Box etc. -->
 <city value="[string]"/><!-- 0..1 Name of city, town etc. -->
 <district value="[string]"/><!-- 0..1 District name (aka county) -->
 <state value="[string]"/><!-- 0..1 Sub-unit of country (abbreviations ok) -->
 <postalCode value="[string]"/><!-- 0..1 Postal code for area -->
 <country value="[string]"/><!-- 0..1 Country (e.g. can be ISO 3166 2 or 3 letter code) -->
 <period><!-- 0..1 Period Time period when address was/is in use --></period>
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Address.use [ code ]; # 0..1 home | work | temp | old - purpose of this address
  fhir:Address.type [ code ]; # 0..1 postal | physical | both
  fhir:Address.text [ string ]; # 0..1 Text representation of the address
  fhir:Address.line [ string ], ... ; # 0..* Street name, number, direction & P.O. Box etc.
  fhir:Address.city [ string ]; # 0..1 Name of city, town etc.
  fhir:Address.district [ string ]; # 0..1 District name (aka county)
  fhir:Address.state [ string ]; # 0..1 Sub-unit of country (abbreviations ok)
  fhir:Address.postalCode [ string ]; # 0..1 Postal code for area
  fhir:Address.country [ string ]; # 0..1 Country (e.g. can be ISO 3166 2 or 3 letter code)
  fhir:Address.period [ Period ]; # 0..1 Time period when address was/is in use
]

Changes since DSTU2


Address
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Address ΣElementAn address expressed using postal conventions (as opposed to GPS or other location definition formats)
Elements defined in Ancestors: id, extension
... use ?!Σ0..1codehome | work | temp | old - purpose of this address
AddressUse (Required)
... type Σ0..1codepostal | physical | both
AddressType (Required)
... text Σ0..1stringText representation of the address
... line Σ0..*stringStreet name, number, direction & P.O. Box etc.
This repeating element order: The order in which lines should appear in an address label
... city Σ0..1stringName of city, town etc.
... district Σ0..1stringDistrict name (aka county)
... state Σ0..1stringSub-unit of country (abbreviations ok)
... postalCode Σ0..1stringPostal code for area
... country Σ0..1stringCountry (e.g. can be ISO 3166 2 or 3 letter code)
... period Σ0..1PeriodTime period when address was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <use value="[code]"/><!-- 0..1 home | work | temp | old - purpose of this address -->
 <type value="[code]"/><!-- 0..1 postal | physical | both -->
 <text value="[string]"/><!-- 0..1 Text representation of the address -->
 <line value="[string]"/><!-- 0..* Street name, number, direction & P.O. Box etc. -->
 <city value="[string]"/><!-- 0..1 Name of city, town etc. -->
 <district value="[string]"/><!-- 0..1 District name (aka county) -->
 <state value="[string]"/><!-- 0..1 Sub-unit of country (abbreviations ok) -->
 <postalCode value="[string]"/><!-- 0..1 Postal code for area -->
 <country value="[string]"/><!-- 0..1 Country (e.g. can be ISO 3166 2 or 3 letter code) -->
 <period><!-- 0..1 Period Time period when address was/is in use --></period>
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Address.use [ code ]; # 0..1 home | work | temp | old - purpose of this address
  fhir:Address.type [ code ]; # 0..1 postal | physical | both
  fhir:Address.text [ string ]; # 0..1 Text representation of the address
  fhir:Address.line [ string ], ... ; # 0..* Street name, number, direction & P.O. Box etc.
  fhir:Address.city [ string ]; # 0..1 Name of city, town etc.
  fhir:Address.district [ string ]; # 0..1 District name (aka county)
  fhir:Address.state [ string ]; # 0..1 Sub-unit of country (abbreviations ok)
  fhir:Address.postalCode [ string ]; # 0..1 Postal code for area
  fhir:Address.country [ string ]; # 0..1 Country (e.g. can be ISO 3166 2 or 3 letter code)
  fhir:Address.period [ Period ]; # 0..1 Time period when address was/is in use
]

Changes since DSTU2

Address
  • No Changes

See the Full Difference for further information

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 SHALL ensure either that the text and the parts are in agreement, or that only one of the two is present.

Constraints

Address is used in the following places: Claim, ExplanationOfBenefit, Location, Organization, Patient, Person, Practitioner, ProductPlan and RelatedPerson

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

Details for all kinds of technology-mediated contact points for a person or organization, including telephone, email, etc.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. ContactPoint ΣIElementDetails of a Technology mediated contact point (phone, fax, email, etc.)
+ A system is required if a value is provided.
Elements defined in Ancestors: id, extension
... system ΣI0..1codephone | fax | email | pager | url | sms | other
ContactPointSystem (Required)
... value Σ0..1stringThe actual contact point details
... use ?!Σ0..1codehome | work | temp | old | mobile - purpose of this contact point
ContactPointUse (Required)
... rank Σ0..1positiveIntSpecify preferred order of use (1 = highest)
... period Σ0..1PeriodTime period when the contact point was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <system value="[code]"/><!-- ?? 0..1 phone | fax | email | pager | url | sms | other -->
 <value value="[string]"/><!-- 0..1 The actual contact point details -->
 <use value="[code]"/><!-- 0..1 home | work | temp | old | mobile - purpose of this contact point -->
 <rank value="[positiveInt]"/><!-- 0..1 Specify preferred order of use (1 = highest) -->
 <period><!-- 0..1 Period Time period when the contact point was/is in use --></period>
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:ContactPoint.system [ code ]; # 0..1 phone | fax | email | pager | url | sms | other
  fhir:ContactPoint.value [ string ]; # 0..1 The actual contact point details
  fhir:ContactPoint.use [ code ]; # 0..1 home | work | temp | old | mobile - purpose of this contact point
  fhir:ContactPoint.rank [ positiveInt ]; # 0..1 Specify preferred order of use (1 = highest)
  fhir:ContactPoint.period [ Period ]; # 0..1 Time period when the contact point was/is in use
]

Changes since DSTU2


ContactPoint
  • No Changes

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. ContactPoint ΣIElementDetails of a Technology mediated contact point (phone, fax, email, etc.)
+ A system is required if a value is provided.
Elements defined in Ancestors: id, extension
... system ΣI0..1codephone | fax | email | pager | url | sms | other
ContactPointSystem (Required)
... value Σ0..1stringThe actual contact point details
... use ?!Σ0..1codehome | work | temp | old | mobile - purpose of this contact point
ContactPointUse (Required)
... rank Σ0..1positiveIntSpecify preferred order of use (1 = highest)
... period Σ0..1PeriodTime period when the contact point was/is in use

doco Documentation for this format

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <system value="[code]"/><!-- ?? 0..1 phone | fax | email | pager | url | sms | other -->
 <value value="[string]"/><!-- 0..1 The actual contact point details -->
 <use value="[code]"/><!-- 0..1 home | work | temp | old | mobile - purpose of this contact point -->
 <rank value="[positiveInt]"/><!-- 0..1 Specify preferred order of use (1 = highest) -->
 <period><!-- 0..1 Period Time period when the contact point was/is in use --></period>
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:ContactPoint.system [ code ]; # 0..1 phone | fax | email | pager | url | sms | other
  fhir:ContactPoint.value [ string ]; # 0..1 The actual contact point details
  fhir:ContactPoint.use [ code ]; # 0..1 home | work | temp | old | mobile - purpose of this contact point
  fhir:ContactPoint.rank [ positiveInt ]; # 0..1 Specify preferred order of use (1 = highest)
  fhir:ContactPoint.period [ Period ]; # 0..1 Time period when the contact point was/is in use
]

Changes since DSTU2

ContactPoint
  • No Changes

See the Full Difference for further information

If capturing a phone, fax or similar contact point, the value should be a properly formatted telephone number according to ITU-T E.123 . However, this is frequently not possible due to legacy data and/or clerical practices when recording contact details. For this reason, phone, fax, pager, and email addresses are not handled as formal URLs. For other kinds of contact points, the system is "other" and the value SHOULD be a URL so that its use can be determined automatically. Typical URL schemes used in the value are http(s): for web addresses, and URL schemes for various kinds of messaging systems. If the value is not a URL, then human interpretation will be required.

The rank element can be used to specify a preference for the order in which a set of contacts is used. Contacts are ranked with lower values coming before higher values. Note that rank does not necessarily follow the order in which the contacts are represented in the instance.

Constraints

  • cpt-2: A system is required if a value is provided. (expression : value.empty() or system.exists())

ContactPoint is used in the following places: CareTeam, Device, Endpoint, HealthcareService, Location, MessageHeader, Organization, OrganizationRole, Patient, Person, Practitioner, PractitionerRole, ProductPlan, RelatedPerson and Subscription

See also Examples, Detailed Descriptions, Mappings, Profiles & Extensions and R2 Conversions.

Describes the occurrence of an event that may occur multiple times. Timing schedules are used for specifying when events are expected or requested to occur, and may also be used to represent the summary of a past or ongoing event. For simplicity, the definitions of Timing components are expressed as 'future' events, but such components can also be used to describe historic or ongoing events.

A Timing schedule can be a list of events and/or criteria for when the event happens, which can be expressed in a structured form and/or as a code. When both event and a repeating specification are provided, the list of events should be understood as an interpretation of the information in the repeat structure.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Timing ΣElementA timing schedule that specifies an event that may occur multiple times
Elements defined in Ancestors: id, extension
... event Σ0..*dateTimeWhen the event occurs
... repeat ΣI0..1ElementWhen the event is to occur
+ If there's an offset, there must be a when (and not C, CM, CD, CV)
+ period SHALL be a non-negative value
+ If there's a periodMax, there must be a period
+ If there's a durationMax, there must be a duration
+ If there's a countMax, there must be a count
+ if there's a duration, there needs to be duration units
+ If there's a timeOfDay, there cannot be be a when, or vice versa
+ if there's a period, there needs to be period units
+ duration SHALL be a non-negative value
.... bounds[x] Σ0..1Length/Range of lengths, or (Start and/or end) limits
..... boundsDurationDuration
..... boundsRangeRange
..... boundsPeriodPeriod
.... count Σ0..1integerNumber of times to repeat
.... countMax Σ0..1integerMaximum number of times to repeat
.... duration Σ0..1decimalHow long when it happens
.... durationMax Σ0..1decimalHow long when it happens (Max)
.... durationUnit Σ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... frequency Σ0..1integerEvent occurs frequency times per period
.... frequencyMax Σ0..1integerEvent occurs up to frequencyMax times per period
.... period Σ0..1decimalEvent occurs frequency times per period
.... periodMax Σ0..1decimalUpper limit of period (3-4 hours)
.... periodUnit Σ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... dayOfWeek Σ0..*codemon | tue | wed | thu | fri | sat | sun
DaysOfWeek (Required)
.... timeOfDay Σ0..*timeTime of day for action
.... when Σ0..*codeRegular life events the event is tied to
EventTiming (Required)
.... offset Σ0..1unsignedIntMinutes from event (before or after)
... code Σ0..1CodeableConceptBID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H +
TimingAbbreviation (Preferred)

doco Documentation for this format

UML Diagram (Legend)

ElementExtensions - as described for all elements: additional information that is not part of the basic definition of the resource / typeextension : Extension 0..*TimingIdentifies specific times when the event occursevent : dateTime [0..*]A code for the timing schedule (or just text in code.text). Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code)code : CodeableConcept [0..1] « Code for a known / defined timing pattern. (Strength=Preferred)TimingAbbreviation? »RepeatEither a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedulebounds[x] : Type [0..1] « Duration|Range|Period »A total count of the desired number of repetitions across the duration of the entire timing specificationcount : integer [0..1]A maximum value for the count of the desired repetitions (e.g. do something 6-8 times)countMax : integer [0..1]How long this thing happens for when it happensduration : decimal [0..1]The upper limit of how long this thing happens for when it happensdurationMax : decimal [0..1]The units of time for the duration, in UCUM unitsdurationUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »The number of times to repeat the action within the specified period / period range (i.e. both period and periodMax provided)frequency : integer [0..1]If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period rangefrequencyMax : integer [0..1]Indicates the duration of time over which repetitions are to occur; e.g. to express "3 times per day", 3 would be the frequency and "1 day" would be the periodperiod : decimal [0..1]If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as "do this once every 3-5 daysperiodMax : decimal [0..1]The units of time for the period in UCUM unitsperiodUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »If one or more days of week is provided, then the action happens only on the specified day(s)dayOfWeek : code [0..*] « (Strength=Required)DaysOfWeek! »Specified time of day for action to take placetimeOfDay : time [0..*]Real world events that the occurrence of the event should be tied towhen : code [0..*] « Real world event relating to the schedule. (Strength=Required)EventTiming! »The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the eventoffset : unsignedInt [0..1]A set of rules that describe when the event is scheduledrepeat[0..1]

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <event value="[dateTime]"/><!-- 0..* When the event occurs -->
 <repeat>  <!-- 0..1 When the event is to occur -->
  <bounds[x]><!-- 0..1 Duration|Range|Period Length/Range of lengths, or (Start and/or end) limits --></bounds[x]>
  <count value="[integer]"/><!-- 0..1 Number of times to repeat -->
  <countMax value="[integer]"/><!-- 0..1 Maximum number of times to repeat -->
  <duration value="[decimal]"/><!-- 0..1 How long when it happens -->
  <durationMax value="[decimal]"/><!-- 0..1 How long when it happens (Max) -->
  <durationUnit value="[code]"/><!-- 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM) -->
  <frequency value="[integer]"/><!-- 0..1 Event occurs frequency times per period -->
  <frequencyMax value="[integer]"/><!-- 0..1 Event occurs up to frequencyMax times per period -->
  <period value="[decimal]"/><!-- 0..1 Event occurs frequency times per period -->
  <periodMax value="[decimal]"/><!-- 0..1 Upper limit of period (3-4 hours) -->
  <periodUnit value="[code]"/><!-- 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM) -->
  <dayOfWeek value="[code]"/><!-- 0..* mon | tue | wed | thu | fri | sat | sun -->
  <timeOfDay value="[time]"/><!-- 0..* Time of day for action -->
  <when value="[code]"/><!-- 0..* Regular life events the event is tied to -->
  <offset value="[unsignedInt]"/><!-- 0..1 Minutes from event (before or after) -->
 </repeat>
 <code><!-- 0..1 CodeableConcept BID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H + --></code>
</[name]>

Turtle Template


@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Timing.event [ dateTime ], ... ; # 0..* When the event occurs
  fhir:Timing.repeat [ # 0..1 When the event is to occur
    # Timing.repeat.bounds[x] : 0..1 Length/Range of lengths, or (Start and/or end) limits. One of these 3
      fhir:Timing.repeat.boundsDuration [ Duration ]
      fhir:Timing.repeat.boundsRange [ Range ]
      fhir:Timing.repeat.boundsPeriod [ Period ]
    fhir:Timing.repeat.count [ integer ]; # 0..1 Number of times to repeat
    fhir:Timing.repeat.countMax [ integer ]; # 0..1 Maximum number of times to repeat
    fhir:Timing.repeat.duration [ decimal ]; # 0..1 How long when it happens
    fhir:Timing.repeat.durationMax [ decimal ]; # 0..1 How long when it happens (Max)
    fhir:Timing.repeat.durationUnit [ code ]; # 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM)
    fhir:Timing.repeat.frequency [ integer ]; # 0..1 Event occurs frequency times per period
    fhir:Timing.repeat.frequencyMax [ integer ]; # 0..1 Event occurs up to frequencyMax times per period
    fhir:Timing.repeat.period [ decimal ]; # 0..1 Event occurs frequency times per period
    fhir:Timing.repeat.periodMax [ decimal ]; # 0..1 Upper limit of period (3-4 hours)
    fhir:Timing.repeat.periodUnit [ code ]; # 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM)
    fhir:Timing.repeat.dayOfWeek [ code ], ... ; # 0..* mon | tue | wed | thu | fri | sat | sun
    fhir:Timing.repeat.timeOfDay [ time ], ... ; # 0..* Time of day for action
    fhir:Timing.repeat.when [ code ], ... ; # 0..* Regular life events the event is tied to
    fhir:Timing.repeat.offset [ unsignedInt ]; # 0..1 Minutes from event (before or after)
  ];
  fhir:Timing.code [ CodeableConcept ]; # 0..1 BID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H +
]

Changes since DSTU2


Timing
Timing.repeat.bounds[x]
  • Remove Quantity{http://hl7.org/fhir/StructureDefinition/Duration}, Add Duration
Timing.repeat.countMax
  • Added Element
Timing.repeat.durationUnit
  • Renamed from durationUnits to durationUnit
Timing.repeat.periodUnit
  • Renamed from periodUnits to periodUnit
Timing.repeat.dayOfWeek
  • Added Element
Timing.repeat.timeOfDay
  • Added Element
Timing.repeat.when
  • Max Cardinality changed from 1 to *
Timing.repeat.offset
  • Added Element

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Timing ΣElementA timing schedule that specifies an event that may occur multiple times
Elements defined in Ancestors: id, extension
... event Σ0..*dateTimeWhen the event occurs
... repeat ΣI0..1ElementWhen the event is to occur
+ If there's an offset, there must be a when (and not C, CM, CD, CV)
+ period SHALL be a non-negative value
+ If there's a periodMax, there must be a period
+ If there's a durationMax, there must be a duration
+ If there's a countMax, there must be a count
+ if there's a duration, there needs to be duration units
+ If there's a timeOfDay, there cannot be be a when, or vice versa
+ if there's a period, there needs to be period units
+ duration SHALL be a non-negative value
.... bounds[x] Σ0..1Length/Range of lengths, or (Start and/or end) limits
..... boundsDurationDuration
..... boundsRangeRange
..... boundsPeriodPeriod
.... count Σ0..1integerNumber of times to repeat
.... countMax Σ0..1integerMaximum number of times to repeat
.... duration Σ0..1decimalHow long when it happens
.... durationMax Σ0..1decimalHow long when it happens (Max)
.... durationUnit Σ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... frequency Σ0..1integerEvent occurs frequency times per period
.... frequencyMax Σ0..1integerEvent occurs up to frequencyMax times per period
.... period Σ0..1decimalEvent occurs frequency times per period
.... periodMax Σ0..1decimalUpper limit of period (3-4 hours)
.... periodUnit Σ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... dayOfWeek Σ0..*codemon | tue | wed | thu | fri | sat | sun
DaysOfWeek (Required)
.... timeOfDay Σ0..*timeTime of day for action
.... when Σ0..*codeRegular life events the event is tied to
EventTiming (Required)
.... offset Σ0..1unsignedIntMinutes from event (before or after)
... code Σ0..1CodeableConceptBID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H +
TimingAbbreviation (Preferred)

doco Documentation for this format

UML Diagram (Legend)

ElementExtensions - as described for all elements: additional information that is not part of the basic definition of the resource / typeextension : Extension 0..*TimingIdentifies specific times when the event occursevent : dateTime [0..*]A code for the timing schedule (or just text in code.text). Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code)code : CodeableConcept [0..1] « Code for a known / defined timing pattern. (Strength=Preferred)TimingAbbreviation? »RepeatEither a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedulebounds[x] : Type [0..1] « Duration|Range|Period »A total count of the desired number of repetitions across the duration of the entire timing specificationcount : integer [0..1]A maximum value for the count of the desired repetitions (e.g. do something 6-8 times)countMax : integer [0..1]How long this thing happens for when it happensduration : decimal [0..1]The upper limit of how long this thing happens for when it happensdurationMax : decimal [0..1]The units of time for the duration, in UCUM unitsdurationUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »The number of times to repeat the action within the specified period / period range (i.e. both period and periodMax provided)frequency : integer [0..1]If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period rangefrequencyMax : integer [0..1]Indicates the duration of time over which repetitions are to occur; e.g. to express "3 times per day", 3 would be the frequency and "1 day" would be the periodperiod : decimal [0..1]If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as "do this once every 3-5 daysperiodMax : decimal [0..1]The units of time for the period in UCUM unitsperiodUnit : code [0..1] « A unit of time (units from UCUM). (Strength=Required)UnitsOfTime! »If one or more days of week is provided, then the action happens only on the specified day(s)dayOfWeek : code [0..*] « (Strength=Required)DaysOfWeek! »Specified time of day for action to take placetimeOfDay : time [0..*]Real world events that the occurrence of the event should be tied towhen : code [0..*] « Real world event relating to the schedule. (Strength=Required)EventTiming! »The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the eventoffset : unsignedInt [0..1]A set of rules that describe when the event is scheduledrepeat[0..1]

XML Template

<[name] xmlns="http://hl7.org/fhir"> doco
 <!-- from Element: extension -->
 <event value="[dateTime]"/><!-- 0..* When the event occurs -->
 <repeat>  <!-- 0..1 When the event is to occur -->
  <bounds[x]><!-- 0..1 Duration|Range|Period Length/Range of lengths, or (Start and/or end) limits --></bounds[x]>
  <count value="[integer]"/><!-- 0..1 Number of times to repeat -->
  <countMax value="[integer]"/><!-- 0..1 Maximum number of times to repeat -->
  <duration value="[decimal]"/><!-- 0..1 How long when it happens -->
  <durationMax value="[decimal]"/><!-- 0..1 How long when it happens (Max) -->
  <durationUnit value="[code]"/><!-- 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM) -->
  <frequency value="[integer]"/><!-- 0..1 Event occurs frequency times per period -->
  <frequencyMax value="[integer]"/><!-- 0..1 Event occurs up to frequencyMax times per period -->
  <period value="[decimal]"/><!-- 0..1 Event occurs frequency times per period -->
  <periodMax value="[decimal]"/><!-- 0..1 Upper limit of period (3-4 hours) -->
  <periodUnit value="[code]"/><!-- 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM) -->
  <dayOfWeek value="[code]"/><!-- 0..* mon | tue | wed | thu | fri | sat | sun -->
  <timeOfDay value="[time]"/><!-- 0..* Time of day for action -->
  <when value="[code]"/><!-- 0..* Regular life events the event is tied to -->
  <offset value="[unsignedInt]"/><!-- 0..1 Minutes from event (before or after) -->
 </repeat>
 <code><!-- 0..1 CodeableConcept BID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H + --></code>
</[name]>

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .

[
 # from Element: Element.extension
  fhir:Timing.event [ dateTime ], ... ; # 0..* When the event occurs
  fhir:Timing.repeat [ # 0..1 When the event is to occur
    # Timing.repeat.bounds[x] : 0..1 Length/Range of lengths, or (Start and/or end) limits. One of these 3
      fhir:Timing.repeat.boundsDuration [ Duration ]
      fhir:Timing.repeat.boundsRange [ Range ]
      fhir:Timing.repeat.boundsPeriod [ Period ]
    fhir:Timing.repeat.count [ integer ]; # 0..1 Number of times to repeat
    fhir:Timing.repeat.countMax [ integer ]; # 0..1 Maximum number of times to repeat
    fhir:Timing.repeat.duration [ decimal ]; # 0..1 How long when it happens
    fhir:Timing.repeat.durationMax [ decimal ]; # 0..1 How long when it happens (Max)
    fhir:Timing.repeat.durationUnit [ code ]; # 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM)
    fhir:Timing.repeat.frequency [ integer ]; # 0..1 Event occurs frequency times per period
    fhir:Timing.repeat.frequencyMax [ integer ]; # 0..1 Event occurs up to frequencyMax times per period
    fhir:Timing.repeat.period [ decimal ]; # 0..1 Event occurs frequency times per period
    fhir:Timing.repeat.periodMax [ decimal ]; # 0..1 Upper limit of period (3-4 hours)
    fhir:Timing.repeat.periodUnit [ code ]; # 0..1 s | min | h | d | wk | mo | a - unit of time (UCUM)
    fhir:Timing.repeat.dayOfWeek [ code ], ... ; # 0..* mon | tue | wed | thu | fri | sat | sun
    fhir:Timing.repeat.timeOfDay [ time ], ... ; # 0..* Time of day for action
    fhir:Timing.repeat.when [ code ], ... ; # 0..* Regular life events the event is tied to
    fhir:Timing.repeat.offset [ unsignedInt ]; # 0..1 Minutes from event (before or after)
  ];
  fhir:Timing.code [ CodeableConcept ]; # 0..1 BID | TID | QID | AM | PM | QD | QOD | Q4H | Q6H +
]

Changes since DSTU2

Timing
Timing.repeat.bounds[x]
  • Remove Quantity{http://hl7.org/fhir/StructureDefinition/Duration}, Add Duration
Timing.repeat.countMax
  • Added Element
Timing.repeat.durationUnit
  • Renamed from durationUnits to durationUnit
Timing.repeat.periodUnit
  • Renamed from periodUnits to periodUnit
Timing.repeat.dayOfWeek
  • Added Element
Timing.repeat.timeOfDay
  • Added Element
Timing.repeat.when
  • Max Cardinality changed from 1 to *
Timing.repeat.offset
  • Added Element

See the Full Difference for further information

If the timing schedule has repeating criteria, the repeat can occur a given number of times per the specified duration or in relation to some repeating real world event. If no end condition is specified, the schedule will terminate on some criteria that are expressed elsewhere.

This table summarizes some common uses of the Timing Data Type criteria.

description duration durationUnit frequency frequencyMax period periodUnit periodMax Day of Week Time Of Day when offset bounds[x] count
Every 8 hours 1 8 h
Every 7 days 1 7 d
3 times a day 3 1 d
3-4 times a day 3 4 1 d
Every 4-6 hours 1 4 h 6
Every 21 days for 1 hour 1 hr 1 21 d
Three times a week for ½ hour 0.5 hr 3 1 wk
With breakfast CM
For 5 minutes, 10 minutes before meals 5 min AC 10
1 tablet 3 times daily, 30 minutes before meals 3 1 d AC 30
BID, 30 mins before meal, for next 10 days 2 1 d AC 30 Duration = 10