{
  "resourceType": "StructureDefinition",
  "meta": {
    "lastUpdated": "2017-12-08T11:07:29.764+00:00"
  },
  "extension": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
      "valueCode": "oo"
    }
  ],
  "url": "http://pchalliance.org/phdfhir/StructureDefinition/PhdCompoundNumericObservation",
  "name": "PhdCompoundNumericObservation",
  "status": "draft",
  "date": "2017-06-02T18:29:52.39367+00:00",
  "fhirVersion": "3.0.0",
  "kind": "resource",
  "abstract": false,
  "type": "Observation",
  "baseDefinition": "http://pchalliance.org/phdfhir/StructureDefinition/PhdBaseObservation",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Observation",
        "path": "Observation",
        "definition": "The PhdCompoundNumericObservation reports PHD measurements that contain one of either a Compound-Basic-Nu-Observed-Value, Compound-Simple-Nu-Observed-Value, or Compound-Nu-Observed-Value attribute.",
        "comment": "Used for compound numeric observations from Personal Health Devices"
      },
      {
        "id": "Observation.meta",
        "path": "Observation.meta",
        "min": 1
      },
      {
        "id": "Observation.meta.profile",
        "path": "Observation.meta.profile",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "PhdCompoundNumericObservation"
            }
          ],
          "rules": "open"
        },
        "min": 1
      },
      {
        "id": "Observation.meta.profile:phdProfile",
        "path": "Observation.meta.profile",
        "sliceName": "phdProfile",
        "min": 1,
        "max": "1",
        "fixedUri": "PhdCompoundNumericObservation"
      },
      {
        "id": "Observation.identifier",
        "path": "Observation.identifier",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value"
            }
          ],
          "ordered": true,
          "rules": "open"
        }
      },
      {
        "id": "Observation.identifier:conditionalCreateIdentifier",
        "path": "Observation.identifier",
        "sliceName": "conditionalCreateIdentifier",
        "short": "Unique identifier of this measurment for a given patient and device",
        "definition": "An identifier created from a combination of the measurement parameters like sensor time stamp, type code, each compound value, units code, patient and device identifiers, and selected elements of any facet component elements.",
        "comment": "This value is used in the conditional create to prevent data duplication. PHDs will often re-send already sent data for a variety of reasons. This element is required unless the metric measurement contains no time stamp or is a measurement containing a time stamp that is real time. By real time the time stamp reported by the PHD must be later than the current time reported by the PHD before any measurements are received. Temporarily stored data from IEEE 11073 20601 devices, which are required to delete the data after sending, can also be considered real time. Temporarily stored data from Bluetooth Low Energy Health devices may be resent so these cannot be considered as real time.",
        "requirements": "Allows observations to be distinguished in a selective enough manner to prevent resource duplication.",
        "max": "1"
      },
      {
        "id": "Observation.identifier:conditionalCreateIdentifier.value",
        "path": "Observation.identifier.value",
        "min": 1
      },
      {
        "id": "Observation.status",
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint",
            "valueString": "default: final"
          }
        ],
        "path": "Observation.status",
        "comment": "The value shall be set to 'final' unless a Measurement-Status attribute indicates that the measurement is preliminary. In that case this field shall be set to 'preliminary'"
      },
      {
        "id": "Observation.code.coding:11073Type",
        "path": "Observation.code.coding",
        "sliceName": "11073Type",
        "comment": "For compound 11073-20601 metric numeric measurements, this code is obtained from the partition and term code of the Type attribute. The 32-bit 11073-10101 code value is given by partition * 2 **16 + term code.\r\n\r\nIt is this value that is placed in the code.coding.code element for this 11073Type slice"
      },
      {
        "id": "Observation.value[x]",
        "path": "Observation.value[x]",
        "max": "0"
      },
      {
        "id": "Observation.dataAbsentReason",
        "path": "Observation.dataAbsentReason",
        "definition": "Provides a reason why no measurement compoundComponent elements are present. This situation only happens if the Measurement-Status attribute indicates a generic error and the measurement attribute is a Compound-Basic/Simple-Nu-Observed-Value.",
        "comment": "Special values reported in the Compound-Basic/Simple-Nu-Observed-Value are handled individually in each compoundComponent element and are not considered generic. The Compound-Nu-Observed-Value has its own status entry and overrides the Measurement-Status attribute so there will always be compoundComponent elements in that case."
      },
      {
        "id": "Observation.dataAbsentReason.coding.system",
        "path": "Observation.dataAbsentReason.coding.system",
        "min": 1
      },
      {
        "id": "Observation.dataAbsentReason.coding.code",
        "path": "Observation.dataAbsentReason.coding.code",
        "min": 1
      },
      {
        "id": "Observation.component",
        "path": "Observation.component",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "code.coding.code"
            }
          ],
          "ordered": false,
          "rules": "open"
        }
      },
      {
        "id": "Observation.component:compoundComponent",
        "path": "Observation.component",
        "sliceName": "compoundComponent",
        "short": "Compound entry components",
        "definition": "Each compoundComponent contains one of the N constituents of the compound measurement. These entries are NOT present if a Measurement-Status attribute indicates an error.",
        "comment": "A compound measurement is a measurement that requires more than one value to represent it, such as an acceleration which has an x, y, and z components. The Blood pressure is also represented as a compound measurement, containing systolic, diastolic and MAP components. One combines all the compound elements together to describe the measurement. The Metric-Id-List entry n and Compound-Basic/Simple-Nu-Observed-Value entry n are ordered such that the code that describes each entry n is computed from the partition of the Type attribute and the term code of the Metric-Id-List attribute. In the case of the Compound-Nu-Observed-Value, the term code comes from the Compound-Nu-Observed-Value.metric sub-component.",
        "requirements": "Handles a measurement that needs more than one numeric value to describe it.."
      },
      {
        "id": "Observation.component:compoundComponent.code.coding",
        "path": "Observation.component.code.coding",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "system"
            }
          ],
          "ordered": true,
          "rules": "open"
        },
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:11073Type",
        "path": "Observation.component.code.coding",
        "sliceName": "11073Type",
        "short": "The 11073-10101 code for the measurement",
        "comment": "For compound 11073-20601 metric numeric measurements, this code is obtained from the partition of the Type attribute and the term code of the nth element of the Metric-Id-List attribute. The 32-bit 11073-10101 code value is given by partition * 2 **16 + term code.  It is this value that is placed in the *.code.coding.code element for this 11073Type slice",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:11073Type.system",
        "path": "Observation.component.code.coding.system",
        "min": 1,
        "fixedUri": "urn:iso:std:iso:11073:10101"
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:11073Type.code",
        "path": "Observation.component.code.coding.code",
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:LoincCoding",
        "path": "Observation.component.code.coding",
        "sliceName": "LoincCoding",
        "max": "1"
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:LoincCoding.system",
        "path": "Observation.component.code.coding.system",
        "min": 1,
        "fixedUri": "http://loinc.org"
      },
      {
        "id": "Observation.component:compoundComponent.code.coding:LoincCoding.code",
        "path": "Observation.component.code.coding.code",
        "comment": "Required if the measurement is a vital sign",
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.value[x]",
        "path": "Observation.component.valueQuantity",
        "type": [
          {
            "code": "Quantity"
          }
        ]
      },
      {
        "id": "Observation.component:compoundComponent.value[x]:valueQuantity.value",
        "path": "Observation.component.valueQuantity.value",
        "definition": "The value of nth element of the compound attribute. The value element for the nth compoundComponent is missing if the attribute sends a special value or the Compound-Nu-Observed-Value status element indicates an error.",
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.value[x]:valueQuantity.unit",
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable",
            "valueBoolean": true
          }
        ],
        "path": "Observation.component.valueQuantity.unit",
        "definition": "A human-readable form of the unit which should be the UCUM code"
      },
      {
        "id": "Observation.component:compoundComponent.value[x]:valueQuantity.system",
        "path": "Observation.component.valueQuantity.system",
        "definition": "The unit code shall use the MDC system",
        "min": 1,
        "fixedUri": "urn:iso:std:iso:11073:10101"
      },
      {
        "id": "Observation.component:compoundComponent.value[x]:valueQuantity.code",
        "path": "Observation.component.valueQuantity.code",
        "definition": "The MDC code obtained from partition 4 and the term code given by the Unit-Code attribute unless it is a Compound-Nu-Observed-Value in which case the unit code comes from the unit element of the attribute.",
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.dataAbsentReason",
        "path": "Observation.component.dataAbsentReason",
        "definition": "Provides a reason why the expected value in the nth element Observation.compoundComponent.valueQuantity is missing. This could be a NaN (Not a Number), PINF (Positive infinity), NINF (Negative infinity)  or an error condition indicated by the status field of the Compound-Nu-Observed-Value.",
        "comment": "The current values in the http://hl7.org/fhir/data-absent-reason system do not provide the same detailed set of options reported in the numeric attributes. For example, the PINF, NINF, and not at this resolution special values have no matching codes. In those cases one uses the generic 'error' code."
      },
      {
        "id": "Observation.component:compoundComponent.dataAbsentReason.coding.system",
        "path": "Observation.component.dataAbsentReason.coding.system",
        "min": 1
      },
      {
        "id": "Observation.component:compoundComponent.dataAbsentReason.coding.code",
        "path": "Observation.component.dataAbsentReason.coding.code",
        "min": 1
      },
      {
        "id": "Observation.component:accuracyComponent",
        "path": "Observation.component",
        "sliceName": "accuracyComponent",
        "definition": "This component shall be present if the accuracy attribute is present.",
        "max": "1"
      },
      {
        "id": "Observation.component:accuracyComponent.code.coding",
        "path": "Observation.component.code.coding",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "code"
            }
          ],
          "ordered": true,
          "rules": "open"
        },
        "min": 1
      },
      {
        "id": "Observation.component:accuracyComponent.code.coding:11073Type",
        "path": "Observation.component.code.coding",
        "sliceName": "11073Type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Observation.component:accuracyComponent.code.coding:11073Type.system",
        "path": "Observation.component.code.coding.system",
        "min": 1,
        "fixedUri": "urn:iso:std:iso:11073:10101"
      },
      {
        "id": "Observation.component:accuracyComponent.code.coding:11073Type.code",
        "path": "Observation.component.code.coding.code",
        "definition": "The code for the accuracy attribute is 67914",
        "min": 1,
        "fixedCode": "67914"
      },
      {
        "id": "Observation.component:accuracyComponent.code.coding:11073Type.display",
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable",
            "valueBoolean": true
          }
        ],
        "path": "Observation.component.code.coding.display",
        "definition": "Should include the reference identifier for the Accuracy-Attribute MDC_ATTR_NU_ACCUR_MSMT"
      },
      {
        "id": "Observation.component:accuracyComponent.value[x]:valueQuantity",
        "path": "Observation.component.valueQuantity",
        "sliceName": "valueQuantity",
        "min": 1,
        "type": [
          {
            "code": "Quantity"
          }
        ]
      },
      {
        "id": "Observation.component:accuracyComponent.value[x]:valueQuantity.value",
        "path": "Observation.component.valueQuantity.value",
        "definition": "This is the value of the accuracy attribute. The value is Mder FLOAT encoded and shall be expressed to the precision indicated by the Mder FLOAT.",
        "min": 1
      },
      {
        "id": "Observation.component:accuracyComponent.value[x]:valueQuantity.unit",
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable",
            "valueBoolean": true
          }
        ],
        "path": "Observation.component.valueQuantity.unit",
        "definition": "A human-readable form of the unit. One should put the UCUM code for the units in this display string. It shall match the UCUM code in Observation.valueQuantity.unit if UCUM is used there."
      },
      {
        "id": "Observation.component:accuracyComponent.value[x]:valueQuantity.system",
        "path": "Observation.component.valueQuantity.system",
        "definition": "The unit code shall use the MDC system",
        "min": 1,
        "fixedUri": "urn:iso:std:iso:11073:10101"
      },
      {
        "id": "Observation.component:accuracyComponent.value[x]:valueQuantity.code",
        "path": "Observation.component.valueQuantity.code",
        "definition": "The units are given by the units of the measurement so this shall have the code as in Observation.valueQuantity.code",
        "min": 1
      },
      {
        "id": "Observation.component:accuracyComponent.dataAbsentReason",
        "path": "Observation.component.dataAbsentReason",
        "max": "0"
      }
    ]
  }
}