This page is part of the FHIR Specification (v0.01: Historical Archive Draft). The current version which supercedes this version is 4.0.1. For a full list of available versions, see the Directory of published versions

# Data Types

The data types include primitive types imported from XML schema, and also additional data types that capture patterns that are ubiquitious throughout the scope of the healthcare data that will be exchanged.

The data types defined on this page on this page are categorised as either "Core Types" or "Structures". "Structures" are higher level concepts that some systems internally treat differently from the "Core Types". There is no functional difference betweent the two categories, and systems are not required to treat them any differently. This table summarises the types:

Core Types | Structures
Attachment | Identifier | Interval | HumanId | Contact
CodeableConcept | Quantity | Ratio | HumanName |
Coding | Choice |  | Address | Schedule

## Primitive Types

The following table summarises the primitive types that are used in the exchange specifications. The posssible values for these types are those specified in the W3C Schema specification part 2.

boolean | values can be true or false
integer | A whole number (32 bit number; for values larger than this, use decimal)
decimal | A rational number. Do not use a IEEE type floating point type, instead use something that works like a true decimal, with inbuilt precision (i.e. Java BigInteger)
base64Binary | A stream of bytes, base64 encoded
instant | An instant in time - known at least to the second. Note: For system times, not human times (see below). Timezone is always required
string | Unicode. Note that FHIR strings may not exceed 1MB in size
uri | Ref to W3C spec

Implementations that convert the xml described in this specification to other formats such as JSON or some object based notation will have to find equivalent types.

## String Patterns

In addition to these assumed primitive types, this specification define a few simple string patterns that are commonly used:

code | a string which has at least one character and no whitespace
oid | An ISO oid [ref ISO std]
uuid | A UUID [ref DEC std]. Sometimes called a GUID. Always represented in lowercase
sid | A system id, which is a uri taken from the list of known definition systems. sid values never contain a '#'
id | A whole number in the range 0 to 2^64-1, optionally represented in hex, a uuid, an oid, or any other combination of letters, numerals, "-" and ".", with a length limit of 36 characters
date | A date, or partial date (e.g. just year or year + month). There is no timezone. The format is a union of the schema types gYear, gYearMonth, and date.
dateTime | A date, date-time or partial date (e.g. just year or year + month). Generally, there is no timezone, though one may be populated if hours and minutes are specified. The format is a union of the schema types gYear, gYearMonth, date, and dateTime. Seconds may be provided but may also be ignored.

Examples

date (e.g. Date of birth):

      <x>1951-06-04</x>

## Types

## Attachment

This type is for referring to data content defined in other formats. The most common use of this to include images or reports in some report format such as PDF, but it can be used for any data that has a mime type.

    <x xmlns="http://www.hl7.org/fhir">
      <mimeType> mand code the mime type of the content</mimeType>
      <data> opt base64Binary data inline, base64ed</data>
      <url> opt uri uri where the data can be found</url>
      <hash> opt base64Binary sha-256 hash of the data (base64 )</hash>
      <lang> opt code ISO 639-3 language code</lang>
      <title> opt string A name to display in place of the data</title>
    </x>

Terminology Bindings

- Attachment.mimeType is bound to the concept domain MediaType: "The mime type of an attachment". The possible values are those specified in BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049)
- Attachment.lang is bound to the concept domain Language: "A human language". The possible values are those specified in ISO 639-3

The mimeType element must always be populated. The actual content of the Attachment can be conveyed directly using the data element, or a url reference can be provided. If both are provided, they must point to the same content. The reference can never be reused to point to different data (which means that the reference is version specific). The url reference must point to a location that resolves to actual data; some uri's such as cid: meet this requirement.

The hash is included so that applications can verify that the contents of a location have not changd, and also so that a signature of the xml content can implicitly sign the content of an image without having to include the data or reference the url in the signature. The lang element can help a consumer choose between multiple different Data elements.

In many cases where Attachment is used, the cardinality is >1; repeats are used to convey the same content in different mime types and languages, or to provide a thumbnail of a large image.

Use

Unless the Attachment element has a dataAbsentReason flag, it must contain a data or a url. 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 lang is available for the reason stated.

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

Examples

A PDF document:

      <x>
       <mimeType>application/pdf</mimeType>
       <data>/9j/4...KAP//Z</data> <!-- covers many lines -->
       <lang type="code">en-us</lang>
       <title type="string">Definition of Procedure</title>
      </x>

A reference to a DICOM image:

      <x>
       <mimeType>application/dicom</mimeType>
       <url>http://10.1.2.3:1000/wado?requestType=WADO&wado details...</url>
       <hash>>EQH/..AgME</hash>
      </x>

## Identifier

An identifier defined by some external system.

    <x xmlns="http://www.hl7.org/fhir">
      <system> cond uri The system that defines the id</system>
      <id> cond string the actual identifier</id>
    </x>

The system may be either a specific application, or a recognised concept for which the specific application may be implicit. The system is a URI that may be an OID (oid:) or a UUID (uuid:), a sid (a specially defined URI from the named systems list), or a URL that references a definition of the identifier. OIDs and UUIDs may be registered in the HL7 OID registry, and should be if the content is shared or exchanged across institutional boundaries.

In some cases, the system may not be known - only the id is known (i.e. a simple device that scans a barcode). In this case, no useful matching may be perfomed using the id unless the system can be safely inferred by the context.

Note that the system defines the scheme that controls uniqueness of the id. The id must be unique for within the defined system. If the id itself is actually an OID, a UUID, or a URI, then the system will be either "urn:hl7-org:sid/oid", "urn:hl7-org:sid/uuid" or "urn:hl7-org:sid/uri" respectively, and the OID, UUID would be in the id element. Ids are always case sensitive. UUIDs must be represented in lower case.

Use

Unless the Identifier element has a dataAbsentReason flag, it must contain a an id. If the Identifier element is marked as mandatory, it must contain a system.

Examples

A primary key from an application table (an OID in the space allowcated by HL7 to some organisation to further sub-allocate):

      <x>
       <system>oid:2.16.840.1.113883.16.4.3.2.5</system>
       <id>123</id>
      </x>

An identifier of a resource defined by this specification, on a particular system:

      <x>
       <system>http://pas-server/xxx/patients</system>
       <id>443556</id>
      </x>

A guid:

      <x>
       <system>urn:hl7-org:sid/uuid</system>
       <id>a76d9bbf-f293-4fb7-ad4c-2851cac77162</id>
      </x>

## CodeableConcept

A CodeableConcept represents a represents a field that is usually defined by formal reference to one or more terminologies or ontologies, but may also be defined by the provision of text.

    <x xmlns="http://www.hl7.org/fhir">
      <coding> Zero+ Coding  <!-- A reference to a code defined by a terminology system  -->
       <code> cond code Symbol in syntax defined by the system</code>
       <system> mand uri Identity of the terminology system </system>
       <display> opt string Representation defined by the system</display>
      </coding>
      <text> cond string A plain text representation of the concept</text>
      <primary> opt xml:ID Which code was chosen directly by the user</primary>
    </x>

This data type has text and/or one more "codings" that all represent a single notional concept, though the multiple codings will often have slightly different granularity due to the differences in the definitions of the underlying codes. Each "coding" is a representation of the concept using a symbol from a defined "code system", which may be an enumeration, a list of codes, a full terminology such as SNOMED-CT or LOINC, or a formal ontology. The concept may be coded multiple times in different code systems (or even multiple times in the same code systems, where multiple forms are possible, such as with SNOMED-CT). Whether or not coding elements are present, the text is 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 user or concept. Very often the text is the same as a display of one of the codings.

For each coding, there must be a system the identifies the terminology or ontology the code is defined by. The system is a URI that may be an OID (oid:) or a UUID (uuid:), a specially defined URI from the named systems list, or a url that references a definition of the system, or any other URI. OIDs and UUIDs may be registered in the HL7 OID registry, and should be if the content is shared or exchanged across institutional boundaries. The system reference is version independent; applications are never required to process the content of the system URI in order to determine whether two codes are the same. Note though, that merely because a code/system pair is different does not mean that concept is different - applications have to consult the ontologies or terminologies to make those kind of comparisons.

If present, the code must be a syntactically correct symbol as defined by the system. Note that codes are case sensitive unless specified otherwise by the code system. If no code is present, the coding means that the concept cannot be encoded in the identified system. The display is a text representation of the code that is defined by the system, which can be used to display the code by an application that is not aware of the system. One of the codings may be flagged as the primary - the code that the user actually chose directly. If present, the value of the primary element is an ID that must match an xml:id on one of the codings.

Use

Unless the CodeableConcept element has a dataAbsentReason flag, it must contain at least one coding with a code, or a text. Each coding must contain a system element, and should contain a display if it contains a code.

The context of use may frequently make rules about what codings are allowed or required.

### "Coding" Data Type

The CodeableConcept data type represents a commonly encountered pattern around the use of coding, with multiple codings and a text. In some circumstances, the resources and/or models that use these data types may be more prescriptive about the use of multiple codings, the way that the text element interacts with the codings, and/or the way that codings are derived from each other. In these circumstances, the "Coding" Data Type is used. The Coding type has the contents of the coding element as defined in the CodeableConcept data type.

Examples

A simple code for headache, in ICD-10, with the text on which the coding is based:

      <x>
        <coding>
          <code>G44.1</code>
          <system>urn:hl7-org:sid/icd-10</system>
        </coding>
        <text>general headache</text>
      </x>

A concept represented in an institutions local coding systems for which no snomed equivalent exists:

      <x>
        <coding>
          <code>burn</code>
          <system>oid:2.16.840.1.113883.19.5.2</system>
        </coding>
        <coding>
          <system>http://snomed.info</system>
        </coding>
        <text>Burnt ear with iron. Burnt other ear calling for ambulance</text>
      </x>

A Snomed-CT expression:

      <x>
        <coding>
          <code>128045006:{363698007=56459004}</code>
          <system>http://snomed.info</system>
        </coding>
        <text>Cellulitis of the foot</text>
      </x>

## Choice

A code taken from a short list of codes that are not defined in a formal code system. Choice is generally used for things like pain scales, questionnaires or formally defined assessment indexes. The possible codes may be ordered with some arbitrarily defined scale. Note: Choice is not an appropriate data type to use when the possible codes are defined in a formal code system, such as a value set, or otherwise stord on a terminology server.

    <x xmlns="http://www.hl7.org/fhir">
      <code> cond code Selected code</code>
      <value> mand  <!-- One+ A list of possible values for the code -->
       <code> mand code Possible code</code>
       <display> opt string Display for the code</display>
      </value>
      <isOrdered> opt boolean If the order of the values has meaning</isOrdered>
    </x>

The code is the selected value. A list of possible values must be provided; at least a code must be provided for each value. The selected code must be found in the list of possible codes.

If isOrdered is true, then the values have an inherent meaningful order, and the list of values must be provided in the correct order.

Use

Unless the Choice element has a dataAbsentReason flag, it must contain a code. The Choice element must always contain at least one possible value.

Example

The results on a urinalysis strip:

      <x>
        <code>+</code>
        <value>
          <code>neg</code>
        </value>
        <value>
          <code>trace</code>
        </value>
        <value>
          <code>+</code>
        </value>
        <value>
          <code>++</code>
        </value>
        <value>
          <code>+++</code>
        </value>
        <isOrdered>true</isOrdered>
      </x>

## Quantity

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

    <x xmlns="http://www.hl7.org/fhir">
      <value> cond decimal Numerical value (with implicit precision)</value>
      <status> opt code how the value should be understood and represented</status>
      <units> cond string unit representation</units>
      <code> cond code A coded form of the unit</code>
      <system> cond uri The system that defines the coded form</system>
    </x>

Terminology Bindings

- Quantity.status is bound to the concept domain QuantityStatus: "how the Quantity should be understood and represented". Possible values:

  < | The actual value is less than the given value
  <= | The actual value is less than or equal to the given value
  >= | The actual value is greater than or equal to the given value
  > | The actual value is greater than the given value

The value contains the numerical value of the quantity, including an implicit precision. The status indicates how the value should be understood and represented. If no status is specified, the value is a point value. The status element can never be ignored.

The units element must contain a displayable unit that defines what is measured. The units may additionally be coded in the code and the system, which is a URI, OID, or a SID that defines the code (see CodeableConcept for further information about system).

If the units are able to be coded in UCUM, and a code is provided, it SHOULD be a UCUM code. If a UCUM unit is provided in the code then a canonical value can be generated for purposes of comparison between quantities. Note that the units element will often contain text that is actually a valid UCUM unit, but it cannot be assumed that it does.

Use

Unless the Quantity element has a dataAbsentReason flag, it must contain at a value and a unit. If a code is present, a system is also required.

The context of use may frequently define what kind of quantity this is, and therefore what kind of units can be used. The context of use may additionally require a code from a particular system. The context of use may also restrict the values for status.

### Defined Variations on Quantity

These are used as types in resource content models, but they are really just Quantity with some rules:

Duration | The unit must be an amount of time, and a UCUM unit must be provided.
Distance | The unit must be an amount of length, and a UCUM unit must be provided.
Count | The value must a whole number, and the UCUM unit must be "1"
Money | The unit must be a currency, and the code must from ISO 4217 (system = "urn:hl7-org:sid/iso-4217")

Examples

A duration:

      <x>
        <value>25</value>
        <unit>sec</unit>
        <code>s</code>
        <system>urn:hl7-org:sid/ucum</system>
      </x>

A concentration where the value was out of range:

      <x>
        <value>40000</value>
        <status>&gt;</status>
        <unit>mcg/L</unit>
        <code>ug</code>
        <system>urn:hl7-org:sid/ucum</system>
      </x>

An amount of prescribed medication:

      <x>
        <value>3</value>
        <unit>capsules</unit>
        <code>385049006</code>
        <system>http://snomed.info</system>
      </x>

A price:

      <x>
        <value>25.45</value>
        <unit>US$</unit>
        <code>USD</code>
        <system>urn:hl7-org:sid/iso-4217</system>
      </x>

## Interval

A set of ordered values defined by a low and high limit.

An interval may be applied to Quantity, dateTime, and date. The context where the type is used must specify which of these types is used. An interval specifies a range of values; 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 range applies (e.g. "give the patient between 2 and 4 tablets").

    <Interval xmlns="http://www.hl7.org/fhir">
      <low> cond [param] Low value (Text or elements from specified type)</low>
      <high> cond [param] High value (Text or elements from specified type)</high>
    </Interval>

If the low or high elements are missing, the meaning is that the low or high boundaries are not known. A dataAbsentReason flag may be used on the low or high elements in this case. On intervals over a time period, if the high is missing, it means that the interval is current and ongoing.

If the interval applies to the Quantity type, the status flag on the quantity cannot have the values <, <=, =>, or >. Note that the Interval type should not be used to represent measurements where the status flag might be used instead.

When the interval applies to a date or dateTime, the high value includes any matching date/time. When the interval applies to the other types, the high value is assumed to have arbitrarily high precision. For example:

1.5 to 2.5 | includes 1.50, and 2.50 but not 1.49 or 2.51
2011-05-23 to 2011-05-27 | includes all the times of 23rd May through to the end of the 27th May

Use

Unless the Interval element has a dataAbsentReason flag, it must contain a low and, if it does not apply to a date or dateTime, a high.

Examples

Interval of Quantity (distance):

      <x>
       <low>
         <value>2.8</value>
         <unit>m</unit>
       </low>
       <high>
         <value>4.6</value>
         <unit>m</unit>
       </high>
      </x>

23rd May 2011 to 27th May, including 27th May:

      <x>
       <low>
         <date>2011-05-23</date>
       </low>
       <high>
         <date>2011-05-27</date>
       </high>
      </x>

## Ratio

A ratio of two Quantity values - a numerator and a denominator.

    <x xmlns="http://www.hl7.org/fhir">
      <numerator> cond Quantity The numerator</numerator>
      <denominator> cond Quantity The denominator</denominator>
    </x>

Common factors in the numerator and denominator are not automatically cancelled out. The Ratio data type is used for titers (e.g., "1:128") and other quantities produced by laboratories that truly represent ratios. Ratios are not simply "structured numerics" and blood pressure measurements (e.g. "120/60") are not ratios. In addition, ratios are used where common factors in the numerator and denominator do not cancel out. The most common example of this is where the ratio represents a unit cost, and the numerator is a currency.

Use

Unless the Ratio element has a dataAbsentReason flag, it must contain a numerator and a denominator. The context of use may require particular types of Quantity for the numerator or denominator.

Examples

Titer (Ratio of integer:integer)

      <x>
       <numerator>
         <value>1</value>
       </numerator>
       <denominator>
         <value>128</value>
       </denominator>
      </x>

Unit cost (Ratio of Money:Quantity):

      <x>
       <numerator>
         <value>103.50</value>
         <unit>US$</unit>
         <code>USD</code>
         <system>urn:hl7-org:sid/iso-4217</system>
       </numerator>
       <denominator>
         <value>128</value>
         <unit>day</unit>
         <code>day</code>
         <system>urn:hl7-org:sid/ucum</system>
       </denominator>
      </x>

## Structures

## HumanId

An identifier that humans use. This is different to a system identifier because identifiers that humans use are regularly changed or retired due to human intervention and error. Note that an human identifier may be a system identifier on some master system, but becomes a human identifier elsewhere due to how it is exchanged between humans. Driver's license nunmbers are a good example of this. Also, because human mediated identifiers are often invoked as implicit links to external business processes, such identifiers are often associated with multiple different resources. Human identifiers often have some type associated with them that is important to allow the identifier to be picked as a basis for exchange elsewhere, either in other electronic interchanges, or paper forms.

    <x xmlns="http://www.hl7.org/fhir">
      <type> opt Coding Code for identifier type</type>
      <identifier> cond Identifier Actual identifier</identifier>
      <period> opt Interval(dateTime) Time period when id was valid for use</period>
      <assigner> opt (Organization) Organisation that issued id</assigner>
    </x>

Terminology Bindings

- HumanId.type is bound to the concept domain IdentifierType: "The type of human identifier" (sid = urn:hl7-org:sid/fhir/identifier-type). Use one of these values if possible:

  account | Account number | An identifier that is unique to an account.
  credit | Credit Card Number | A credit card number (or debit card).
  microchip | Microchip Number | implanted, for animals, or a worn RFID for humans
  registry | A Registry Number |
  insurance | Insurance Scheme Member Number | Identifies the person as a member of an insurance scheme.
  national | National Healthcare Identifier | May not only be used for healthcare.
  ssn | National Social Security Number |
  state | State Healthcare Identifier | May not only be used for healthcare.
  patient | Patient identifier | Frequently called MRN (medical record number) or UR (unit record number).
  facility | Facility ID |
  provider | Provider number | a number allocated to a person as a provider of healthcare resources.

Note that in many cases, the assigner is used to indicate what registry/state/facility etc assigned the identifier. Another possible source for the type of an identifier is HL7 v2 table 0203.

The resource elements often use HumanId for an identifier that may be an external human mediated reference, or that may also come from a direct unambiguous reference to a resource, or may be from a seperate workflow, possibly human mediated. When the identifier is actually a direct resource reference, the type should be a resource type, the identifier.system should be the URL of the source system or, if a particular end point is not known, then "urn:hl7-org:sid/fhir/[X]" where "[X]" is the resource name , and the identifier.id should be the resource id.

Use

An identifier with an id element is required unless a dataAbsentReason flag is provided on the identifier element. If the HumanId is mandatory, then either an identifier.system or an type must be provided (In some cases, the type of the identifier will be known, but not the identifier.system. For instance, a driver's license number, where the state, province or country that issues the license identifier is unknown).

The assigner.id may be replaced with assigner.text when used with the dataAbsentReason "astext".

Examples

A US SSN:

      <x>
        <type>
          <code>ssn</code>
          <system>urn:hl7-org:sid/fhir/identifier-type</system>
        </type>
        <identifier>
          <system>urn:hl7-org:sid/us-ssn</system>
          <id>000111111</id>
        </identifier>
      </x>

Notes:

- US SSNs are often presented like this: 000-11-1111, the dashes are for presentation and should be removed, as specified in the definition of ssn-us
- There is apparent duplication between type and system; the type says that this is a national social security identifier from some country, while the system specifically identifies the US SSN. Not all countries will have a registered system id like USA does; it might be useful to also reference the country in the assigning authority

A medical record number assigned on 5-July 2009:

      <x>
        <type>
          <code>patient</code>
          <system>urn:hl7-org:sid/fhir/identifier-type</system>
        </type>
        <identifier>
          <system>oid:0.1.2.3.4.5.6.7</system>
          <id>2356</id>
        </identifier>
       <period>
         <low>2009-06-05</low>
       </period>
      </x>

## HumanName

A name of a human, or a name given to an animal by a human.

Names may be changed, or repudiated, or people may have different names in different contexts. Names may be divided into parts of different type that have variable significance depending on context, though the division into parts does not always matter. With personal names, the different parts may or may not be imbued with some implicit meaning; various cultures associate different importance with the name parts, and the degree to which systems must care about name parts around the world varies widely.

    <x xmlns="http://www.hl7.org/fhir">
      <use> opt code The use of this name</use>
      <text> cond string Text representation of the full name</text>
      <part> cond  <!-- Zero+ A part of a name -->
       <type> opt code Type of name part (see below)</type>
       <value> mand string The content of the name part</value>
      </part>
      <period> opt Interval(dateTime) Time period when name was/is in use</period>
    </x>

Terminology Bindings

- HumanName.use is bound to the concept domain NameUse: "The use of a human name". Possible values:

  usual | Known as/conventional/the one you normally use
  official | The formal name as registered in an official (government) registry, but which name might not be commonly used. May be called legal name.
  temp | A temporary name. A name valid time can provide more detailed information. This may also be used for temporary names assigned at birth or in emergency situations.
  anonymous | Anonymous assigned name, alias, or pseudonym (used to protect a person's identity for privacy reasons)
  old | This name is no longer in use (or was never correct, but retained for records)
  maiden | A name used prior to marriage. Marriage naming customs vary greatly around the world. This name use is for use by applications that collect and store maiden names. Though the concept of maiden name is often gender specific, the use of this term is not gender specific. The use of this term does not imply any particular history for a personâ€˜s name, nor should the maiden name be determined algorithmically

- HumanName.part.type is bound to the concept domain NamePartType: "Type of a part of a human name". Possible values:

  family | Family name, this is the name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.
  given | Given name. NOTE Not to be called first name since given names do not always come first. .
  title | Part of the name that is acquired as a title due to academic, legal, employment or nobility status etc. NOTE Title name parts include name parts that come after the name, such as qualifications.

The text element specifies the entire name as it should be represented. This may be provided instead of or as well as specific part elements. Every part must have a value.

Use

Either text or at least one part is required unless a dataAbsentReason flag is provided on the name element.

Example

Full name of Peter James Chalmers, with a preferred name of James.

      <x>
        <use>usual official</use>
        <part>
          <type>given</type>
          <value>Peter</value>
        </part>
        <part>
          <type>given</type>
          <value>James</value>
        </part>
        <part>
          <type>family</type>
          <value>Chalmers</value>
        </part>
      </x>

See further examples

## Address

A postal address. There is a variety of postal address formats defined around the world. This format defines a superset that is the basis for addresses all around the world Note: address is for postal addresses, not physical locations.

    <x xmlns="http://www.hl7.org/fhir">
      <use> opt code The use of this address</use>
      <text> cond string Text representation of the address</text>
      <part> cond  <!-- Zero+ -->
       <type> opt code Type of address part (see below)</type>
       <value> mand string The content of the address part</value>
      </part>
      <period> opt Interval(dateTime) Time period when address was/is in use</period>
    </x>

Terminology Bindings

- Address.use is bound to the concept domain AddressUse: "The use of an address". Possible values:

  home | A communication address at a home.
  work | An office address. First choice for business related contacts during business hours.
  temp | A temporary address. The period can provide more detailed information.
  old | This address is no longer in use (or was never correct, but retained for records)

- Address.part.type is bound to the concept domain AddressPartType: "Type of address part". Possible values:

  part | Part of an address line (typically used with an extension that further defines the meaning of the part).
  line | A line of an address (typically used for street names & numbers, unit details, delivery hints etc) .
  city | The name of the city, town, village, or other community or delivery centre.
  state | 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).
  country | Country. ISO 3166 3 letter codes can be used in place of a full country name.
  zip | A postal code designating a region defined by the postal service.
  dpid | A value that uniquely identifies the postal address. (often used in barcodes).

The text element specifies the entire address as it should be represented. This may be provided instead of or as well as specific part elements. Every part must have a value.

Use

Either text or at least one part is required unless a dataAbsentReason flag is provided on the address element.

Example

HL7 office's address.

      <x>
       <use>work primary</use>
       <text>
           1050 W Wishard Blvd
           RG 5th floor
           Indianapolis, IN 46240
         </html>
       </text>
       <part>
         <type>city</type>
         <value>Indianapolis</value>
       </part>
       <part>
         <type>state</type>
         <value>IN</value>
       </part>
       <part>
         <type>zip</type>
         <value>46240</value>
       </part>
      </x>

See further examples

## Contact

All kinds of technology mediated contact details for a person or organisation, including telephone, email, etc.

    <x xmlns="http://www.hl7.org/fhir">
      <system> cond code What kind of contact this is</system>
      <value> cond string The actual contact details</value>
      <use> opt code How to use this address</use>
      <period> opt Interval(dateTime) Time period when the contact was/is in use</period>
    </x>

Terminology Bindings

- Contact.system is bound to the concept domain ContactSystem: "What kind of contact this is". Possible values:

  phone | the value is a telephone number used for voice calls. Use of full international numbers starting with + is recommended to enable automatic dialing support but not required.
  fax | the value is a fax machine. Use of full international numbers starting with + is recommended to enable automatic dialing support but not required.
  email | the value is an email address
  url | The value is a url. This is intended for various personal contacts including blogs, twitter, facebook etc. Do not use for email addresses

- Contact.use is bound to the concept domain ContactUse: "How to use this address". Possible values:

  home | A communication contact at a home; attempted contacts for business purposes might intrude privacy and chances are one will contact family or other household members instead of the person one wishes to call. Typically used with urgent cases, or if no other contacts are available.
  work | An office contact. First choice for business related contacts during business hours.
  temp | A temporary contact. The period can provide more detailed information.
  old | This contact is no longer in use (or was never correct, but retained for records)
  mobile | A telecommunication device that moves and stays with its owner. May have characteristics of all other use codes, suitable for urgent matters, not the first choice for routine business

The value should be a properly formatted telephone number according to ITU-T E.123, but this is frequently not possible due to legacy data and/or recording methods.

Use

A value is required unless a dataAbsentReason flag is provided on the contact element. A system is required if a value is provided.

Example

Phone number for some one who works at home:

      <x>
       <system>phone</system>
       <value>+15556755745</value>
       <use>home</use>
      </x>

See further examples

## Schedule

A schedule that specifies an event that may occur multiple times. Schedules are not used for recording when things did happen, but when they are expected or requested to occur. A schedule can be either a list of events - intervals on which the event occurs, or a single event with repeating criteria, or just repeating criteria with no actual event.

Note: a possible enhancement to this is to have the repeat content repeat with each event. This is richer and more complex - is the added functionality useful?

    <x xmlns="http://www.hl7.org/fhir">
      <event> mand Zero+ Interval(dateTime) When the event occurs</event>
      <repeat> opt  <!-- Only if there is none or one event -->
       <frequency> cond integer Event occurs frequency times per duration</frequency>
       <when> cond code Event occurs duration from common life event</when>
       <duration> mand Duration repeating or event-related duration</duration>
       <count> cond integer number of times to repeat</count>
       <end> cond dateTime when to stop repeats</end>
      </repeat>
    </x>

Terminology Bindings

- Schedule.repeat.when is bound to the concept domain EventTiming: "A real world event that a schedule is related to". Possible values:

  HS | event occurs duration before the hour of sleep (or trying to)
  WAKE | event occurs duration after waking
  AC | event occurs duration before a meal (from the latin ante cibus)
  ACM | event occurs duration before breakfast (from the latin ante cibus matutinus)
  ACD | event occurs duration before lunch (from the latin ante cibus diurnus)
  ACV | event occurs duration before dinner (from the latin ante cibus vespertinus)
  PC | event occurs duration after a meal (from the latin post cibus)
  PCM | event occurs duration after breakfast (from the latin post cibus matutinus)
  PCD | event occurs duration after lunch (from the latin post cibus diurnus)
  PCV | event occurs duration after dinner (from the latin post cibus vespertinus)

If events are specified, at least a low must be specified for each event. If no high is specified, the event is assumed to last a limited but unknown time as clinically relevant.

If the schedule has repeating criteria, the repeat can occur a given number of times per the specified duration, or in relation to some real world event. Also, if the event repeats, a time to end the schedule can be specified, either by specifying a count number of times it can occur, or a date at which to end the schedule. If no end condition is specified, the Schedule will terminate on some criteria which is expressed elsewhere.

There are 3 rules concerning the contents of a Schedule:

1. There can only be a repeat element if there is none or one event
2. Only one of frequency and when can be present
3. Only one of count and end can be present

Use

At least one event or a repeat is required unless a dataAbsentReason flag is provided on the Schedule element. If a repeat is present, either frequency or when is required.

Example

A series of appointments for radiotherapy:

      <x>
        <event>
          <low>2012-01-07T09:00</low>
          <high>2012-01-07T13:00</high>
        </event>
        <event>
          <low>2012-01-14T09:00</low>
          <high>2012-01-14T13:00</high>
        </event>
        <event>
          <low>2012-01-22T11:00</low>
          <high>2012-01-22T15:00</high>
        </event>
      </x>

BID (twice a day) (no start or end specified):

      <x>
       <repeat>
         <frequency>2</frequency>
         <duration>
           <value>1</value>
           <units>day</units>
           <code>d</code>
           <system>urn:hl7-org:sid/ucum</system>
         </duration>
       </repeat>
      </x>

1/2 an hour before breakfast for 10 days from 23-Dec 2011:

      <x>
        <event>
          <low>2011-12-23</low>
        </event>
        <repeat>
          <when>ACM</when>
          <duration>
            <value>30</value>
            <units>min</units>
            <code>min</code>
            <system>urn:hl7-org:sid/ucum</system>
          </duration>
          <end>2012-01-02</end>
        </repeat>
      </x>

Note that the end date is inclusive like the high date of an Interval.

## Schema & UML models

Data Types Schema.

With regard to the UML models, see notes about the UML Object models, and particularly the note regarding the UML representation of dataAbsentReason

### Change History

- 20-Mar 2011: Removed version from system in Coding - version and module pushed to extensions
- 19-Mar 2011: Renamed dateTime to instant, humanDate to dateTime, and introduced date.

This is an old version of FHIR retained for archive purposes. Do not use for anything else
Implementers are welcome to experiment with the content defined here, but should note that the contents are subject to change without prior notice.
© HL7.org 2011 - 2012. FHIR v0.01 generated on Mon, May 14, 2012 09:48+1000.