NIH-NCPI / ncpi-model-forge

🔥 The Project Forge FHIR model
Apache License 2.0
4 stars 5 forks source link

Representing Biospecimens #22

Open allisonheath opened 3 years ago

allisonheath commented 3 years ago

Requester information

Please provide the following information:

cc @liberaliscomputing @nicholasvk @youngnm @baileyckelly

RobertJCarroll commented 3 years ago

Do you have a list of fields from your source data? Some idea of prevalence and importance would also be helpful to review the fit!

bwalsh commented 3 years ago

https://www.hl7.org/fhir/valueset-body-site.html points at snomed codes. This is an important item for consensus. Likewise for collection method. https://www.hl7.org/fhir/valueset-specimen-collection-method.html

bwalsh commented 3 years ago

Tumor/normal is a common use case. Is this supported?

RobertJCarroll commented 3 years ago

Hi @bwalsh - Those are "Example" bindings, which means there is no weight given to the provided valuesets. You can tell because of the (Example) listed after the valueset links on the Specimen resource page. More info is available here: https://www.hl7.org/fhir/terminologies.html#strength

Re consensus, we may provide a list of our own in the IG, but it's not strictly necessary. This is where I expect we'll need to provide some of the terminology services you brought up on the call- there are likely structured links among common vocabs.

RobertJCarroll commented 3 years ago

Re tumor/normal- nothing obvious stands out to me here, but it seems like it really ought to exist. Not sure if I'm missing something.

allisonheath commented 3 years ago

Right now we've been using NCIt for specimen terminologies, as we reused a lot from the GDC. We have also done some light mapping to Uberon for anatomical site for comparative/model organism work. Not opposed to snomed (other than the licensing issues that pop up from time to time), especially as we're likely going to start getting data from clinically sequenced samples.

Also I guess to note - we keep the consent linked to the specific specimen, this is the level that dbGaP keeps it at and helps to distinguish if different specimens were take from the same person under different consents.

On a per-specimen basis, yes it can handle normal samples and tumor samples. But @bwalsh are you talking about knowing what specimen pairs were (or should be) used for analysis? Or being able to query to find availability of tumor/normal pairs? Or something else?

And here are our current list of fields:

entity property
biospecimen age_at_event_days
biospecimen composition
biospecimen concentration_mg_per_ml
biospecimen consent_type
biospecimen dbgap_consent_code
biospecimen external_sample_id
biospecimen kf_id
biospecimen method_of_sample_procurement
biospecimen ncit_id_anatomical_site
biospecimen ncit_id_tissue_type
biospecimen participant_id
biospecimen sequencing_center_id
biospecimen source_text_anatomical_site
biospecimen source_text_tissue_type
biospecimen source_text_tumor_descriptor
biospecimen spatial_descriptor
biospecimen uberon_id_anatomical_site
biospecimen visible
biospecimen volume_ul
aliquot analyte_type
aliquot concentration_mg_per_ml
aliquot external_aliquot_id
aliquot external_sample_id
aliquot shipment_date
aliquot shipment_origin
aliquot volume_ul
aliquot kf_id
RobertJCarroll commented 3 years ago

For CMG, we advocated for UBERON codes.

@allisonheath I think the question was "How do you indicate in FHIR if a Specimen is tumor or normal?".

liberaliscomputing commented 3 years ago

Here is an example of a KFDRC specimen using FHIR:

{
  "resourceType": "Specimen",
  "id": "bs-001-no-phi",
  "meta": {
    "profile": [
      "http://fhir.kids-first.io/StructureDefinition/kfdrc-specimen-no-phi"
    ],
    "versionId": "0.1.0",
    "lastUpdated": "2020-07-20T20:58:16.025096+00:00"
  },
  "extension": [
    {
      "url": "http://fhir.kids-first.io/StructureDefinition/age-at-event",
      "valueAge": {
        "value": 2750,
        "unit": "d",
        "system": "http://unitsofmeasure.org",
        "code": "days"
      }
    },
    {
      "url": "http://fhir.kids-first.io/StructureDefinition/concentration",
      "valueQuantity": {
        "value": 0.05,
        "unit": "mg/mL"
      }
    }
  ],
  "identifier": [
    {
      "system": "https://kf-api-dataservice.kidsfirstdrc.org/biospecimens?study_id=SD_BHJXBDQK",
      "value": "571312"
    }
  ],
  "type": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0487",
        "code": "TISS",
        "display": "Tissue"
      }
    ],
    "text": "Solid Tissue"
  },
  "subject": {
    "reference": "Patient/pt-001-no-phi"
  },
  "collection": {
    "quantity": {
      "value": 50.0,
      "unit": "uL"
    },
    "bodySite": {
      "coding": [
        {
          "system": "http://snomed.info/sct",
          "code": "21483005",
          "display": "Structure of central nervous system"
        }
      ],
      "text": "Central Nervous System"
    },
    "method": {
      "coding": [
        {
          "system": "http://snomed.info/sct",
          "code": "129314006",
          "display": "Biopsy - action"
        }
      ],
      "text": "Biopsy"
    }
  }
}

We've added two extensions:

Re collection.bodySite: Given the use of SNOMED CT is an example (not required) and the attribute's data type is CodeableConcept, I am down for putting as many codes from authoritative ontologies as possible. So, the above example can be:

{
  "collection": {
    "bodySite": {
      "coding": [
        {
          "system": "http://snomed.info/sct",
          "code": "21483005",
          "display": "Structure of central nervous system"
        },
        {
          "system": "http://purl.obolibrary.org/obo/ncit.owl",
          "code": "NCIT:C12438",
          "display": "Central Nervous System"
        },
        {
          "system": "http://purl.obolibrary.org/obo/uberon.owl",
          "code": "UBERON:0001017",
          "display": "central nervous system"
        }
      ],
      "text": "Central Nervous System"
    }
  }
}

Re tumor/normal: Specimen has a type attribute which is pre-bound to a v2 Specimen Type ValuetSet. Again, the use of this ValueSet is not required, but it is pretty inclusive. The above example also use this ValueSet to code TISS. This ValueSet also includes:

{
  "code": "TUMOR",
  "display": "Tumor"
}

But, it doesn't have a code for Normal. We can do something like the followings:

  1. Tumor tissue
{
  "type": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0487",
        "code": "TISS",
        "display": "Tissue"
      },
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0487",
        "code": "TUMOR",
        "display": "Tumor"
      }
    ],
    "text": "Tumor Tissue"
  }
}
  1. Normal tissue
{
  "type": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0487",
        "code": "TISS",
        "display": "Tissue"
      }
    ],
    "text": "Normal Tissue"
  }
}
RobertJCarroll commented 3 years ago

Ah, thanks. Type makes sense. I didn't think about it further after seeing it included things like blood!