Note: This release is in preview. Features described here don’t become generally available until the latest general availability date that Salesforce announces for this release. Before then, and where features are noted as beta, pilot, or developer preview, we can’t guarantee general availability within any particular time frame or at all. Make your purchase decisions only on the basis of generally available products and features.
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 |