This page is part of the HL7 FHIR Implementation Guide: minimal Common Oncology Data Elements (mCODE) Release 1 - US Realm | STU1 (v1.16.0: STU 2 Ballot 1) based on FHIR R4. The current version which supercedes this version is 2.0.0. For a full list of available versions, see the Directory of published versions
Most mCODE profiles are based on US Core profiles defined in the US Core Implementation Guide (v3.1.1). For example, CancerPatient is based on the US Core Patient profile. Because of the way profiles work in FHIR, any resource that validates against an mCODE profile that is based a US Core profile will automatically be in compliance with the US Core profile.
Where US Core does not provide an appropriate base profile, mCODE profiles FHIR resources. An example is CancerDiseaseStatus, based on Observation because US Core does not provide a profile for non-laboratory observations.
Profile | Based on US Core? | Immediate Parent Profile |
---|---|---|
Brachytherapy Treatment Phase | yes | US Core Procedure |
Cancer Disease Status | no | Observation |
Cancer Genetic Variant | yes | US Core Laboratory Result Observation |
Cancer Genomics Report | yes | US Core Diagnostic Report Lab |
Cancer Patient | yes | US Core Patient |
Cancer-Related Medication Administration | no | Medication Administration |
Cancer-Related Medication Request | yes | US Core Medication Request |
Cancer-Related Surgical Procedure | yes | US Core Procedure |
Cancer Stage Group | no | Observation |
Comorbidities Parent | no | Observation |
Comorbidities Elixhauser | no | Comorbidities Parent |
ECOG Performance Status | no | Observation |
Genetic Specimen | no | Specimen |
Genomic Region Studied | yes | US Core Laboratory Result Observation |
Karnofsky Performance Status | no | Observation |
mCODE Patient Bundle | no | Bundle |
Primary Cancer Condition | yes | US Core Condition |
Radiotherapy Course Summary | yes | US Core Procedure |
Secondary Cancer Condition | yes | US Core Condition |
Teleradiotherapy Treatment Phase | yes | US Core Procedure |
TNM Distant Metastases Category | no | Observation |
TNM Primary Tumor Category | no | Observation |
TNM Regional Nodes Category | no | Observation |
Tumor | no | BodyStructure |
Tumor Marker Test | yes | US Core Laboratory Result Observation |
Tumor Size | no | Observation |
Tumor Specimen | no | Specimen |
Each mCODE expresses requirements and expectations for implementers on the level of entire profiles and individual data elements within those profiles. The following requirements apply to every profile and data element that is implemented (supported) by a Sender or Receiver. For definition of what mCODE data elements must be implemented, see Obligation to Implement.
The following rules apply to Senders:
As an example of #4, the conformance requirements for PrimaryCancerCondition are:
Condition.code
is in the value set (PrimaryOrUncertainBehaviorCancerDisorderVS
)PrimaryOrUncertainBehaviorCancerDisorderVS MUST conform to the profile.The second statement is intended to discourage an mCODE Data Sender from creating different representation for data that should fall into the scope of mCODE. Compliance to this kind of condition is difficult to enforce, so it is expressed as a SHOULD.
The following rules apply to Receivers:
Regarding #4, there are several ways the Receiver can identify the correct profile to use for validation:
meta.profile
. Every Data Sender SHOULD populate this element.This section describes conformance requirements in terms of which profiles and data elements must (or should or may) be implemented by adopters of mCODE.
mCODE defines Obligation to Implement (OTI) as follows:
OTI is related to the FHIR concept of Must Support (MS), however, the relationship between OTI and MS is not one-to-one. The appearance of an MS flag (displayed as S in IG profile pages) does not necessarily imply OTI, and OTI may be attached to elements that lack MS flags.
To see which elements have MS flags, consult the “Snapshot Table” view of the profile. The “Differential Table” view hides MS flags inherited from the parent profile. The “Snapshot Table (Must Support)” view reflects the IG Publisher’s display of elements with MS flags, which may or may not coincide with OTI.
The following rule determines which profiles have OTI:
The following rules determine which data elements have OTI:
Data elements in mCODE that are not OTI optionally MAY be implemented. If a data element is implemented, whether it is OTI or not, the profile must be interpreted as if an MS flag were present on that element. For example, (TumorMarkerTest.performer
)TumorMarkerTest does not have an MS flag, but a Receiver may implement the capability to display it. In this example, because this element is a Reference data type with no MS flag on any referenced resource or profile (case #7 in the Obligation to Implement Summary), the Receiver is obligated to implement all resources or profiles in the Reference unless outside the scope of the Receiver’s capability statement, namely, Practitioner, PractitionerRole, Organization, CareTeam, Patient, and RelatedPerson.
An mCODE data element is required if any of the following criteria are met:
In other words, a data element may be 1..1
, but if it is contained by an optional element, then it is not required unless its containing element is actually present.
The following table summarizes how Obligations to Implement (OTI) derive from MS flags in a supported profile. Processing requirements for Senders and Receivers for all implemented elements are defined above. For the sake of completeness, this table covers certain cases not seen in mCODE.
# | MS-Flagged Element | Data Sender (Server) Obligation to Implement? | Data Receiver (Client) Obligation to Implement? | Example |
---|---|---|---|---|
1 | Top level element, or nested element whose parents are all MS | Yes | Yes | CancerDiseaseStatus.focus or CancerRelatedMedicationRequest.dosageInstruction.text |
2 | Element is a nested (child) element and there is no MS flag on its parent element | OTI only if the Sender elects to implement the parent element | OTI only if the Receiver elects to implement the parent element | US Core Patient version 3.2 Patient.telecom.system |
3 | Element is a complex data type (such as CodeableConcept) with no MS flag on any immediate sub-element | OTI on at least one sub-element, and SHOULD implement every sub-element for which the server might possess data | OTI on every sub-element (since the Receiver cannot anticipate which sub-elements might be populated) | PrimaryCancerCondition.code |
4 | Element is a complex data type with an MS flag on one or more immediate sub-elements | OTI on only the sub-elements that are explicitly flagged | same | CancerPatient.name |
5 | Element is a choice [x] type with no MS flag on any choice | OTI on at least one datatype choice, and SHOULD implement every datatype for which the server might possess data | OTI on all datatype choices (since the Receiver cannot anticipate which sub-elements might be populated) | CancerPatient.deceased[x] |
6 | Element is a choice [x] type with an MS flag on one or more choice | OTI only on the datatype choice(s) that are explicitly flagged | same | US Core Laboratory Result Observation Profile version 3.2 Observation.value[x] |
7 | Element is a Reference() data type with no MS flag on any referenced resource or profile | OTI on all resources or profiles in the reference that are in Sender’s capability statement | OTI on all resources or profiles in the reference unless they are outside the scope of the Receiver’s capability statement | Tumor.extension[mcode-condition-related].value[x] |
8 | Element is a Reference() data type with an MS flag on one or more of the referenced types | OTI only on the resources or profiles in the reference that are explicitly MS-flagged, and only if they are in the Sender’s capability statement | OTI only on the resources or profiles in the reference that are explicitly MS-flagged, and only if they are in the Receiver’s capability statement | US Core DocumentReference Profile version 3.2 DocumentReference.author |
9 | Element is a backbone data type | No OTI on sub-elements unless they are explicitly MS-flagged | same | SDC QuestionnaireResponse.item (subelement QuestionResponse.item.definition is not MS) |
10 | Element is an array that is sliced, with no MS flag on any slice | MUST be able to populate the array, but no OTI on any particular slice | OTI on array and its contents, including any or all defined slices. | |
11 | Element is an array that is sliced, with MS flags on one or more slices | OTI only on the slices that have MS flags | same | CancerStageGroup.hasMember |
12 | Element that has MS flag is a slice and the containing array does not have an MS flag | No OTI on the slice | same | US Core Patient Profile version 3.1.1 Patient.extension:us-core-race (because Patient.extension is not MS) |
Although not common practice, profiles can have MS flags at the very top level (see CancerPatient for example). ↩ ↩2
However, in FHIR, when exchanging ANY resources, systems SHOULD retain unknown extensions when they are capable of doing so, and they they SHOULD retain core elements when they are capable of doing so (see https://www.hl7.org/fhir/extensibility.html#exchange) ↩
When inheriting from another profile, it is possible to set the upper cardinality to zero on an element that was MS in the parent profile. For example, you could inherit from US Core Patient, but forbid the patient’s name for privacy reasons. In this case, neither Sender nor Receiver are expected to populate or support the element – in fact, it would be an error if the element were present. ↩
An example is a Receiver that does not meaningfully process a required element even though it was populated by the Sender. ↩