Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions input/fsh/StructureDefinition.PhdBaseObservation.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ Description: "Common base profile with the elements that are common to the PHD I
* code 1..
* dataAbsentReason ..0
* dataAbsentReason ^short = "This element is populated when the Measurement Status indicates invalid, not available or measurement-ongoing."
* dataAbsentReason ^definition = "Provides a reason why the expected value in the element Observation.value[x] is missing."
* dataAbsentReason ^comment = "The Measurement-Status/status flags indicating invalid, not available, or msmt ongoing will generate this element and cause the value[x] to be absent. The remaining settings of the status values are reported in the meta.security element or interpretation element. Also populated when a numeric value is in error."
* dataAbsentReason ^definition = "Provides a reason why the expected value in the element `Observation.value[x]` is missing."
* dataAbsentReason ^comment = "The Measurement-Status/status flags indicating invalid, not available, or msmt ongoing will generate this element and cause the `value[x]` to be absent. The remaining settings of the status values are reported in the `meta.security` element or `interpretation` element. Also populated when a numeric value is in error."
* dataAbsentReason.coding from http://hl7.org/fhir/ValueSet/data-absent-reason (required)

* derivedFrom ^short = "A source the measurement data is derived from."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Description: "Observations from a PHD where the measurement is an ASN1 BITS valu
* dataAbsentReason.coding contains unsupported 0..1
* dataAbsentReason.coding[unsupported]
* ^short = "For the optional reporting of unsupported bits"
* ^definition = "Provides a reason why the expected value in the element Observation.component.value[x] is missing. In this profile for this component that happens if the PHD does not support this bit and the uploader wishes to report that situation."
* ^definition = "Provides a reason why the expected value in the element `Observation.component.value[x]` is missing. In this profile for this component that happens if the PHD does not support this bit and the uploader wishes to report that situation."
* dataAbsentReason.coding[unsupported] = http://terminology.hl7.org/CodeSystem/data-absent-reason#unsupported
* valueBoolean ^short = "The value of the bit"
* ^definition = "The value of the bit. If the bit is set the value is `true` and if the bit is cleared the value is `false`."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,6 @@ Description: "Observations coming from a PHD where the measurement value is a co
* . ^comment = "This type of measurement is used when the Personal Health Device reports a measurement as an IEEE 11073-10101 code. An example would be the most recent meal context associated with a glucose measurement such as 'breakfast', 'fasting', 'snack', etc. The list of codes for these meal options is finite."
* value[x] only CodeableConcept
* valueCodeableConcept from MDCValueSet (extensible)
// * valueCodeableConcept.coding ^slicing.discriminator.type = #value
// * valueCodeableConcept.coding ^slicing.discriminator.path = "system"
// * valueCodeableConcept.coding ^slicing.rules = #open
// * valueCodeableConcept.coding contains MDCType 1..1
// * valueCodeableConcept.coding[MDCType] ^short = "Required MDC code"
// * valueCodeableConcept.coding[MDCType].system 1..
// * valueCodeableConcept.coding[MDCType].system = "urn:iso:std:iso:11073:10101" (exactly)

Mapping: IEEE-11073-10206-PhdCodedEnumerationObservation
Id: IEEE-11073-10206-PhdCodedEnumerationObservation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ Description: "Observations containing a coincident timestamp."
* ^definition = "Reference to the PHD device for which the coincident timestamp measurement is reported. This element will point to a Device resource following the Phd Device Profile."
* effective[x] ^short = "The current time of the PHG at the current time of the PHD. Absent if PHD is better synchronized"
* effective[x] ^definition = "The time of the PHG at the time the current time of the PHD is ascertained."
* effective[x] ^comment = "This element is absent if the PHD has superior time synchronization relative to the PHG. Wnen this element is absent it indicates that the PHG reported the measurement timestamps of the PHD without modification."
* effective[x] ^comment = "This element is absent if the PHD has superior time synchronization relative to the PHG. When this element is absent it indicates that the PHG reported the measurement timestamps of the PHD without modification."
* value[x] only dateTime or Quantity
* value[x] ^short = "The current time of the PHD as a wallclock time (dateTime), relative time (Quantity), or if a time fault a dataAbsentReason"
* value[x] ^definition = "The current time of the PHD. It will be either a valueDateTime if a wallclock time or a valueQuantity if a relative time or a dataAbsentReason if there is a time fault. The relative time is expressed in microseconds"
* value[x] ^definition = "The current time of the PHD. It will be either a `valueDateTime` if a wallclock time or a `valueQuantity` if a relative time or a `dataAbsentReason` if there is a time fault. The relative time is expressed in microseconds"
* dataAbsentReason.coding ^slicing.discriminator.type = #value
* dataAbsentReason.coding ^slicing.discriminator.path = "$this"
* dataAbsentReason.coding ^slicing.rules = #open
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Description: "Observations coming from a PHD where the measurement is a set of n
* code 1..
* ^definition = "The MDC code must be translated to the UCUM code."
* dataAbsentReason ^short = "Populated when the component reports a special FLOAT value"
* ^definition = "Provides a reason why the expected value in the nth element Observation.compoundComponent.valueQuantity is missing. This happens when the value sent by the PHD is a special FLOAT value."
* ^definition = "Provides a reason why the expected value in the nth element `Observation.compoundComponent.valueQuantity` is missing. This happens when the value sent by the PHD is a special FLOAT value."
* coding from http://hl7.org/fhir/ValueSet/data-absent-reason (required)
* interpretation
* coding ^slicing.discriminator[0].type = #value
Expand Down
2 changes: 1 addition & 1 deletion input/fsh/StructureDefinition.PhdCompoundObservation.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ Description: "Observations from a PHD where the measurement is a set of numbers
* valueString ^short = "The value of the string component"
* ^definition = "The value of the string component"
* dataAbsentReason ^short = "Populated when the component is missing or invalid"
* ^definition = "Provides a reason why the expected value in the nth element component.value[x] is missing. This happens a.o. when a component reports a special FLOAT value."
* ^definition = "Provides a reason why the expected value in the nth element `component.value[x]` is missing. This can happen when a component reports a special FLOAT value."
* coding from http://hl7.org/fhir/ValueSet/data-absent-reason (required)

* component
Expand Down
4 changes: 2 additions & 2 deletions input/fsh/StructureDefinition.PhdDevice.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ Description: "Profile for the Device Resource for a PHD"
* coding from http://hl7.org/fhir/uv/phd/ValueSet/DeviceTypes11073MDC (required)
* version 1..
* ^short = "The version of the specialization standard supported by the PHD from the System-Type-Spec-List[i].version"
* ^comment = "The version of the specialization comes from the System-Type-Spec-List specialization entry. If a PHD supports multiple versions of the same specialization a separate Device.specialization entry is needed where the systemType elements are repeated. If the PHD reports a generic specialization (using MDC_DEV_SPEC_PROFILE_HYDRA or MDC_DEV_SPEC_PROFILE_GENERIC), the version is the 11073-10206 version."
* ^comment = "The version of the specialization comes from the System-Type-Spec-List specialization entry. If a PHD supports multiple versions of the same specialization a separate `Device.specialization` entry is needed where the systemType elements are repeated. If the PHD reports a generic specialization (using MDC_DEV_SPEC_PROFILE_HYDRA or MDC_DEV_SPEC_PROFILE_GENERIC), the version is the 11073-10206 version."
* version ^short = "A PHD may report firmware, hardware, software, internal protocol, nomenclature and ACOM versions."
* ^comment = "There are several versions that are reported from a PHD. Firmware, Hardware, Protocol (internal, not IEEE 11073-10206), and Software versions come from the System Information object. The nomenclature and ACOM version comes from the ACOM base class. PHDs compliant to this IG report at least one of these versions. A separate version entry is needed for each of the versions reported by the PHD."
* version ^slicing.discriminator[0].type = #value
Expand Down Expand Up @@ -144,7 +144,7 @@ Description: "Profile for the Device Resource for a PHD"
* valueCode from http://hl7.org/fhir/uv/phd/ValueSet/ContinuaPHDInterfaces (extensible)

* property[clockBitProperty] ^short = "Boolean Properties reported by the Clock"
* ^definition = "For each Boolean clock capability reported by a PHD a property element is used."
* ^definition = "For each Boolean clock capability reported by a PHD a `property` element is used."
* type from ASN1ClockBits (required)
* ^short = "Tells what the clock capability item is"
* ^definition = "One of the capabilities of the clock as reported by the PHD."
Expand Down
6 changes: 3 additions & 3 deletions input/fsh/StructureDefinition.PhdNumericObservation.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Description: "Observations from a PHD where the measurement is number"
* ^comment = "Used for non-compound numeric observations from Personal Health Devices."
* value[x] only Quantity
* value 1..
* ^definition = "The decoded FLOAT or SFLOAT value from a PHD measurement containing either a\r\nBasic-Nu-Observed-Value\r\nSimple-Nu-Observed-Value or\r\nNu_observed-Value attribute."
* ^comment = "The implicit precision in the value shall be honored. The MDER encoding used in the above attributes provides this precision. The translating software shall honor that precision when generating this value.\r\nThis element shall be present unless there is an error reported in the Measurement-Status attribute or the MDER encoding represents one of the special FLOAT values. In that case there is a dataAbsentReason element and the valueQuantity element is not present. Note that not all measurement status values are errors resulting in no measurement being reported here; for example the preliminary or verified status."
* ^definition = "The decoded FLOAT or SFLOAT value from a PHD Observation."
* ^comment = "The implicit precision in the value shall be honored. The MDER encoding used in the above attributes provides this precision. The translating software shall honor that precision when generating this value.\r\nThis element shall be present unless there is an error reported in the Measurement-Status attribute or the MDER encoding represents one of the special FLOAT values. In that case there is a `dataAbsentReason` element and the `valueQuantity` element is not present. Note that not all measurement status values are errors resulting in no measurement being reported here; for example the preliminary or verified status."
* system 1..
* system = "http://unitsofmeasure.org" (exactly)
* code 1..
* ^short = "The UCUM code for the units of this measurement."
* ^comment = "The UCUM code needs to be translated from the 11073-10101 code from the device. This translation means that the reporting of units is not future proof."
* dataAbsentReason ^short = "This element is populated for numeric observations when a special FLOAT value is reported that is not a real number."
* ^definition = "Provides a reason why the expected value in the element Observation.valueQuantity is missing. In this case this could also be 'not-a-number', 'positive-infinity', 'negative-infinity' or 'error'."
* ^definition = "Provides a reason why the expected value in the element `Observation.valueQuantity` is missing. In this case this could also be 'not-a-number', 'positive-infinity', 'negative-infinity' or 'error'."
* ^comment = "The values in the http://terminology.hl7.org/CodeSystem/data-absent-reason system do not provide a code that matches the 'not at this resolution' and 'reserved'. In those cases one uses the generic 'error' code. If both a special FLOAT value and a Measurement-Status indicating invalid, not available, or measurement ongoing are received, the Measurement-Status mapping takes precedence."
* extension contains http://hl7.org/fhir/uv/phd/StructureDefinition/Accuracy named Accuracy 0..1
* extension contains http://hl7.org/fhir/uv/phd/StructureDefinition/Confidence95 named Confidence95 0..1
Expand Down
6 changes: 3 additions & 3 deletions input/fsh/StructureDefinition.PhdRtsaObservation.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ Description: "Observations from a PHD where the measurement is a sample array."
* ^comment = "Used for sample array (waveform) observations from Personal Health Devices"
* value[x] only SampledData
* ^comment = "The PhdRtsaObservation is typically used for reporting waveform type data such as an ECG trace, spirometer exhalation rates, pulse oximetry pleth (plethysmograph) waves, etc., though it can be used to report any set of numeric measurements that are periodic. The periodicity is important as the timestamps of each individual entry is known from the start time and the period. Since the amount of data to be transmitted can be large, the data is scaled in such a way to minimize the number of bits taken up by each entry (in practice limited to 8, 16 or 32 bits). This scaling information is sent along with the start time and period in order for the receiver to recover the original data and to obtain the timestamp of each data point. In theory, this data could be sent using a large phdNumericObservation type resources at a much greater cost in bandwidth."
* origin
* ^comment = "The data sent in the ACOM sample array is also scaled. Thus with the proper setting of the valueSampledData.origin.value and valueSampledData.factor, the data from the IEEE PHD device can be placed into the data[i] array without modification."
* origin
* ^comment = "The data sent in the ACOM sample array is also scaled. Thus with the proper setting of the `valueSampledData.origin.value` and `valueSampledData.factor`, the data from the IEEE PHD device can be placed into the `data[i]` array without modification."
* value 1..
* ^short = "Intercept value (with implicit precision)"
* ^definition = "The intercept value with the precision of the data as determined by the device."
Expand All @@ -28,7 +28,7 @@ Description: "Observations from a PHD where the measurement is a sample array."
* dimensions
* ^comment = "This value is filled in by the ACOM number-of-samples-per-period field."
* data ^definition = "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) are not used. The device does not provide such individual values. "
* ^comment = "It is recommended to re-use the scaling from the PHD device as it is likely the scaling was chosen to optimize transmission. If A = real-range.lower-limit, B = real-range.upper-limit, I = scaled-range.lower-limit (integer), J = scaled-range.upper-limit (integer) then valueSampledData.factor is given by (A-B)/(I-J) and valueSampledData.origin.value = A – (A-B)*I/(I-J) and valueSampledData.data[i] = samples[i]"
* ^comment = "It is recommended to re-use the scaling from the PHD device as it is likely the scaling was chosen to optimize transmission. If A = real-range.lower-limit, B = real-range.upper-limit, I = scaled-range.lower-limit (integer), J = scaled-range.upper-limit (integer) then `valueSampledData.factor` is given by (A-B)/(I-J) and `valueSampledData.origin.value` = A – (A-B)*I/(I-J) and `valueSampledData.data[i]` = `samples[i]`"
* lowerLimit
* ^short = "The scaled lower limit of the ACOM sample array when provided by the PHD device."
* ^comment = "The lower limit of the sample array. In ACOM this is the lower limit of the actual-range, but scaled as a normal sample. In GHS this value may be provided as the lower limit Valid Range descriptor."
Expand Down
1 change: 0 additions & 1 deletion input/ignoreWarnings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ Constraint failed: mdc-1: 'A published MDC Code is preferred but private MDC cod

# Reference to external draft code system...
Reference to draft CodeSystem http://hl7.org/fhir/uv/pocd/CodeSystem/measurement-status|0.3.0
Reference to draft CodeSystem urn:iso:std:iso:11073:10101|2024-12-05 from fhir.tx.support.r4#0.29.0
Reference to draft CodeSystem urn:iso:std:iso:11073:10101|2024-12-05 from fhir.tx.support.r4#0.30.0

# Publisher process choice - can safely be ignored
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ The *Conditional-create Identifier* is defined to prevent data duplication. It c

Ideally the PHG will implement a duplication detection mechanism and filter out any observations that have already been uploaded. One possible mechanism is to record the latest timestamp of any observation received during a connection. Then for a given device and patient and upload destination, on a subsequent connection the PHG can filter out any observations with a timestamp earlier than the recorded latest timestamp of the previous connection. The latest timestamp is then updated given the information received during the current connection. This filter not only saves the server from handling the conditional update transaction but saves bandwidth and upload costs.

Additionally a globally unique identifier can be used in combination with a conditional create operation to prevent duplication of observations on the server when multiple PHGs can upload observations from the same PHD. The identifier is a concatenated string of elements that contain sufficient information to uniquely identify the observation. The identifier is the concatenation of the device identifier, patient identifier, the *PHD* timestamp of the observation, the observation type code, the measurement duration if present, and the list of Supplemental-Types codes if any. Each entry is separated by a dash (-). It is important to use the timestamp of the PHD and not the potentially modified timestamp placed in the Observation.effective[x] element. Two PHGs may have slightly different times which would allow an undesired duplicate observation to appear. Note that for this scheme to work PHDs should NOT change the timestamp of a generated observation.
Additionally a globally unique identifier can be used in combination with a conditional create operation to prevent duplication of observations on the server when multiple PHGs can upload observations from the same PHD. The identifier is a concatenated string of elements that contain sufficient information to uniquely identify the observation. The identifier is the concatenation of the device identifier, patient identifier, the *PHD* timestamp of the observation, the observation type code, the measurement duration if present, and the list of Supplemental-Types codes if any. Each entry is separated by a dash (-). It is important to use the timestamp of the PHD and not the potentially modified timestamp placed in the `Observation.effective[x]` element. Two PHGs may have slightly different times which would allow an undesired duplicate observation to appear. Note that for this scheme to work PHDs should NOT change the timestamp of a generated observation.

|Entry|value|Additional information|
|---|---|---|
Expand Down
Loading