Observation
FHIR V4.0 - Clinical Data Model Mapping
Here’s how the fields defined by FHIR for observation map to the fields in Salesforce.
| Observation Resource | Salesforce Field | Type | Salesforce Cardinality | Notes |
|---|---|---|---|---|
| identifier | N/A | N/A | N/A | Not supported |
| basedOn | CareObservation.BasedOnId | Polymorphic Lookup: MedicationRequest, ClinicalServiceRequest | 0.1 |
While FHIR defines observation.basedOn as a zero-to-many reference, the Salesforce implementation is a zero-to-one text field. Only references to medication request and clinical service request records are supported. |
| partOf | CareObservation.PartOfId | Polymorphic Lookup: MedicationStatement, PatientImmunization, PatientMedicalProcedure | 0.1 |
While FHIR defines observation.partOf as a zero-to-many reference, the Salesforce implementation is a zero-to-one text field. Only references to medication statement, patient immunization, and patient medical procedure records are supported. |
| status | CareObservation.ObservationStatus | Picklist | 1.1 | While FHIR defines observation.status as a reference to code set bundle, the Salesforce implementation is a picklist. |
| category | CareObservation.Category | Picklist | 0.1 | While FHIR defines observation.category as a zero-to-many reference to code set bundle, the Salesforce implementation is a zero-to-one picklist. |
| code | CareObservation.CodeId | Lookup: CodeSet | 1.1 | While FHIR defines observation.code as a one-to-one reference to code set bundle, Salesforce implements this as three separate CodeSet reference fields. The first one is a one-to-one field, while the other two are zero-to-one fields. |
| CareObservation.AdditionalCode1Id | Lookup: CodeSet | 0.1 | ||
| CareObservation.AdditionalCode2Id | Lookup: CodeSet | 0.1 | ||
| subject | CareObservation.ObservedSubjectId | Master-Detail: Account | 1.1 | The Salesforce implementation of observation.subject supports references to only patients. |
| focus | N/A | N/A | N/A | Not supported |
| encounter | CareObservation.EncounterId | Lookup: ClinicalEncounter | 0.1 | N/A |
| effective.effectiveDateTime | CareObservation.EffectiveDateTime | DateTime | 0.1 | N/A |
| effective.effectivePeriod | CareObservation.EffectiveDateTime | DateTime | 0.1 | Because Salesforce doesn’t support a native period data type, the observation.effective.effectivePeriod field is flattened into a set of effective date and end date fields. |
| CareObservation.EndDateTime | DateTime | 0.1 | ||
| effective.effectiveTiming | N/A | N/A | N/A | Not supported |
| effective.effectiveInstant | N/A | N/A | N/A | Not supported |
| issued | CareObservation.IssuedDateTime | DateTime | 0.1 | Because Salesforce doesn’t support a native instant data type, the observation.issued FHIR resource is implemented as a date time field in Salesforce. |
| performer | CareObservation.ObserverId | Polymorphic Lookup: Account, Healthcare Provider | 0.1 |
While FHIR defines observation.performer as a zero-to-many resource, the Salesforce implementation is a zero-to-one reference to Account and Healthcare Provider. References to care teams are not supported. |
| resultsInterpreter | CareObservation.InterpretedById | Lookup: CarePerformer | 0.1 | While FHIR defines observation.resultsInterpreter as a zero-to-many resource, the Salesforce implementation is a zero-to-one reference to CarePerformer. |
| value | CareObservation.ObservedValueType | Static Picklist | 0.1 | A Salesforce-original field that determines whether the value stored in CareObservation.ObservedValueNumerator and CareObservation.ObservedValueDenominator is a range, ratio, or quantity. This field is used only when the data entered for observation.value is one these data types. |
| CareObservation.ObservedValueNumerator | Double | 0.1 |
Because Salesforce doesn’t support native range, ratio, and quantity data types, the observation.value FHIR resource is flattened to a set of numerator, denominator, and unit fields for this type of data. The Salesforce implementation of observation.value doesn’t support observation.value.valueSampleData and observation.value.valueTime. CareObservation.ObservedValueUnitId is a duplicate field that stores the same information as CareObservation.UnitOfMeasureId. Use only one of these two fields to specify the unit of a quantity value. |
|
| CareObservation.ObservedValueDenominator | Double | 0.1 | ||
| CareObservation.ObservedValueUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| CareObservation.ObservedValueDenominator | Lookup: CodeSetBundle | 0.1 | N/A | |
| CareObservation.NumbericValue | Double | 0.1 | N/A | |
| CareObservation.ObservedValueText | String | 0.1 | N/A | |
| CareObservation.IsOutcomePositive | Boolean | 0.1 | CareObservation.IsObserved is a duplicate field that can store the same information. Use only one of these two fields. | |
| CareObservation.ObservationStartTime | DateTime | 0.1 |
CareObservation.ObservationStartTime is used for both observation.component.value.valueDateTime and observation.component.value.valuePeriod. Because Salesforce doesn’t support a native period data type, the observation.value.valuePeriod FHIR resource is flattened to a set of start and end dates. |
|
| CareObservation.ObservationEndTime | DateTime | 0.1 | ||
| dataAbsentReason | N/A | N/A | N/A | Not supported |
| interpretation | CareObservation.ValueInterpretation | Picklist | 0.1 | While FHIR defines observation.interpretation as a zero-to-many code set bundle, the Salesforce implementation is a zero-to-one picklist. |
| note | N/A | N/A | N/A | Not supported |
| bodySite | CareObservation.BodySiteId | Lookup: CodeSetBundle | 0.1 | N/A |
| method | CareObservation.MethodId | Lookup: CodeSetBundle | 0.1 | N/A |
| specimen | N/A | N/A | N/A | Not supported |
| device | CareObservation.DeviceId | Lookup: Asset | 0.1 | References to device metrics records aren’t supported. |
| referenceRange.low | CareObservation.LowerBaselineValue | Double | 0.1 | Because Salesforce doesn’t support a native quantity data type, the observation.referenceRange.low FHIR resource is flattened to a set of value and unit fields for this type of data. |
| CareObservation.BaselineUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| referenceRange.high | CareObservation.UpperBaselineValue | Double | 0.1 | Because Salesforce doesn’t support a native quantity data type, the observation.referenceRange.high FHIR resource is flattened to a set of value and unit fields for this type of data. |
| CareObservation.BaselineUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| referenceRange.type | N/A | N/A | N/A | Not supported |
| referenceRange.appliesTo | N/A | N/A | N/A | Not supported |
| referenceRange.age | N/A | N/A | N/A | Not supported |
| referenceRange.text | CareObservation.BaselineValueText | String | 0.1 | N/A |
| hasMember | CareObservation.RelatedObservationId | Lookup: CareObservation | 0.1 |
While FHIR defines observation.hasMember as a zero-to-many resource, the Salesforce implementation is zero-to-one. Only references to observation records are supported. |
| derivedFrom | CareObservation.DerivationSourceId | Lookup: CareObservation, DiagnosticSummary | 0.1 |
While FHIR defines observation.derivedFrom as a zero-to-many resource, the Salesforce implementation is zero-to-one. |
| component | CareObservationComponent | Object | 0.M | The component information for a care observation is represented as CareObservationComponent records that reference the CareObservation record using their Identifier.CareObservationId field. |
| component.code | CareObservationComponent.ComponentTypeCodeId | Lookup: CodeSetBundle | 1.1 | N/A |
| component.value | CareObservationComponent.ValueType | Static Picklist | 0.1 | A Salesforce-original field that determines whether the value stored in CareObservationComponent.ObservedValueNumerator and CareObservationComponent.ObservedValueDenominator is a range, ratio, or quantity. This field is used only when the data entered for observation.component.value is one these data types. |
| CareObservationComponent.ObservedValueNumerator | Double | 0.1 |
Because Salesforce doesn’t support native range, ratio, and quantity data types, the observation.component.value FHIR resource is flattened to a set of numerator, denominator, and unit fields for this type of data. The Salesforce implementation of observation.component.value doesn’t support observation.component.value.valueSampleData and observation.component.value.valueTime. |
|
| CareObservationComponent.ObservedValueDenominator | Double | 0.1 | ||
| CareObservationComponent.ObservedValueUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| CareObservationComponent.ObservedValueCodeId | Lookup: CodeSetBundle | 0.1 | N/A | |
| CareObservationComponent.NumericValue | Double | 0.1 | N/A | |
| CareObservationComponent.ObservedValueText | String | 0.1 | N/A | |
| CareObservationComponent.IsObserved | Boolean | 0.1 | N/A | |
| CareObservationComponent.ObservationStartTime | DateTime | 0.1 |
CareObservationComponent.ObservationStartTime is used for both observation.component.value.valueDateTime and observation.component.value.valuePeriod. Because Salesforce doesn’t support a native period data type, the observation.component.value.valuePeriod FHIR resource is flattened to a set of start and end dates. |
|
| CareObservationComponent.ObservationEndTime | DateTime | 0.1 | ||
| component.dataAbsentReason | CareObservationComponent.MissingDataReason | String | 0.1 | While FHIR defines observation.component.dataAbsentReason as a code set bundle reference, the Salesforce implementation is a text field. |
| component.interpretation | CareObservationComponent.ValueInterpretation | Lookup: CodeSetBundle | 0.1 | While FHIR defines observation.component.interpretation as a code set bundle reference, the Salesforce implementation is a picklist. |
| component.referenceRange.low | CareObservationComponent.LowerBaselineValue | Double | 0.1 | Because Salesforce doesn’t support a native quantity data type, the observation.component.referenceRange.low FHIR resource is flattened to a set of value and unit fields for this type of data. |
| CareObservationComponent.BaselineUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| component.referenceRange.high | CareObservationComponent.UpperBaselineValue | Double | 0.1 | Because Salesforce doesn’t support a native quantity data type, the observation.component.referenceRange.high FHIR resource is flattened to a set of value and unit fields for this type of data. |
| CareObservationComponent.BaselineUnitId | Lookup: UnitOfMeasure | 0.1 | ||
| component.referenceRange.type | N/A | N/A | N/A | Not supported |
| component.referenceRange.appliesTo | N/A | N/A | N/A | Not supported |
| component.referenceRange.age | N/A | N/A | N/A | Not supported |
| component.referenceRange.text | CareObservationComponent.BaselineValueText | String | 0.1 | N/A |