NCPI FHIR Implementation Guide v2
0.1.0 - ci-build

NCPI FHIR Implementation Guide v2 - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Resource Profile: NCPI Sample

Official URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/ncpi-sample Version: 0.1.0
Draft as of 2025-03-24 Computable Name: NCPISample

FHIR Profile for NCPI Sample

Basic Information

Key Guidelines

The NCPI Sample profile is based on the standard resource type, Specimen and encompasses biospecimen collection, sample information, and aliquot information. Biospecimen collection information can be excluded if unavailable. However, if there is no parent sample, collection information must be included, even if the value is unknown.

Added Profile Restrictions
  • There are 3 Unique Identifiers in the collected sample profile: one for Biospecimen Collection, Sample, and Aliquot, respectively. These IDs are different than the participant from whom this sample was derived.
  • The NCPI Sample profile includes collection information. If this data is unavailable, you should set collection method to "unknown".
FHIR Mappings

The following fields from the shared data model are to be mapped into the NCPI Collected Sample as follows:

Biospecimen Collection:

Logical Model Property Cardinality NCPI Sample Mapping Usage Guidance Notes
sampleGenerated 1..1 MISSING Sample that was generated from this collection event  
participant 1..1 subject The participant from whom the biospecimen was taken  
ageAtCollection 0..1 collection.collected The age at which this biospecimen was collected. Could be expressed with a term, an age, or an age range.  
method 0..1 collection.method The approach used to collect the biospecimen Recommended to use LOINC
site 0..1 collection.bodySite The location of the specimen collection  
spatial 0..1 extension[biospecimen-spatial] Any spatial/location qualifiers URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/biospecimen-spatial
laterality 0..1 extension[biospecimen-laterality] Laterality information for the site URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/biospecimen-laterality

Sample:

Logical Model Property Cardinality NCPI Sample Mapping Usage Guidance Notes
sampleId 1..1 identifier Unique ID for this sample  
participant 1..1 subject The participant from whom the biospecimen was taken  
parentSample 0..* parent The Sample from which this Sample was derived  
type 1..1 type The type of material of which this Sample is comprised  
processing 0..* processing Processing that was applied to the Parent Sample or from the Biospecimen Collection that yielded this distinct sample  
availabilityStatus 0..1 status Can this Sample be requested for further analysis? URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/aliquot-availability
storageMethod 0..1 collection.method The approach used to collect the biospecimen Recommended to use Hl7VSSpecimenCondition
quantity 0..1 collection.quantity The total quantity of the specimen  

Aliquot:

Logical Model Property Cardinality NCPI Sample Mapping Usage Guidance Notes
aliquotId 1..1 container.identifier Unique ID for this aliquot  
sample 1..1 MISSING The sample of which this tube is a part.  
availabilityStatus 0..1 extension[aliquot-availability] Can this Sample be requested for further analysis? URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/aliquot-availability
volume 0..1 container.specimenQuantity What is the volume of the Aliquot?  
concentration 0..1 extension[aliquot-concentration] What is the concentration of the analyte in the Aliquot? URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/aliquot-concentration

Usage:

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

NameFlagsCard.TypeDescription & Constraintsdoco
.. Specimen C 0..* Specimen Sample for analysis
dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources
dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
dom-5: If a resource is contained in another resource, it SHALL NOT have a security label
dom-6: A resource should have narrative for robust management
collection-no-parent: If there is no parent sample, collection information must be present. If there is collection information present, there should be no parent sample.
parent-no-collection: If there is no collection information, a parent sample must be present. If there is a parent sample present, there should be no collection information.
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
ele-1: All FHIR elements must have a @value or children
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
... identifier Σ 1..1 Identifier Unique ID for this sample
ele-1: All FHIR elements must have a @value or children
... type Σ 1..1 CodeableConcept The type of material of which this Sample is comprised
Binding: hl7VS-specimenType (example): The type of the specimen.


ele-1: All FHIR elements must have a @value or children
... subject Σ 1..1 Reference(Patient | Group | Device | Substance | Location) The participant from whom the biospecimen was taken
ele-1: All FHIR elements must have a @value or children
... parent 0..* Reference(Specimen) The Sample from which this Sample was derived
ele-1: All FHIR elements must have a @value or children
... collection 0..1 BackboneElement Information about how the biospecimen was collected. Collection information may be unknown, but must be included when there is no parent sample
ele-1: All FHIR elements must have a @value or children unless an empty Parameters resource
.... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
..... extension:biospecimen-spatial 0..1 code Any spatial/location qualifiers
URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/biospecimen-spatial
ele-1: All FHIR elements must have a @value or children unless an empty Parameters resource
ext-1: Must have either extensions or value[x], not both
..... extension:biospecimen-laterality 0..1 code Laterality information for the site
URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/biospecimen-laterality
ele-1: All FHIR elements must have a @value or children unless an empty Parameters resource
ext-1: Must have either extensions or value[x], not both
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
.... collected[x] Σ 0..1 dateTime The age at which this biospecimen was collected. Could be expressed with a term, an age, or an age range. (for ages use http://hl7.org/fhir/StructureDefinition/cqf-relativeDateTime)
ele-1: All FHIR elements must have a @value or children
.... quantity 0..1 SimpleQuantity The total quantity of the specimen
ele-1: All FHIR elements must have a @value or children
.... method 1..1 CodeableConcept The approach used to collect the biospecimen (unknown if not provided)
Binding: FHIRSpecimenCollectionMethod (example): The technique that is used to perform the procedure.


ele-1: All FHIR elements must have a @value or children
.... bodySite 0..1 CodeableConcept The location of the specimen collection
Binding: SNOMEDCTBodyStructures (example): SNOMED CT Body site concepts


ele-1: All FHIR elements must have a @value or children
... condition Σ 0..* CodeableConcept How is the Sample stored, eg, Frozen or with additives
Binding: hl7VS-specimenCondition (extensible): Codes describing the state of the specimen.


ele-1: All FHIR elements must have a @value or children

doco Documentation for this format

Terminology Bindings

PathConformanceValueSetURI
Specimen.statusrequiredSpecimenStatus
http://hl7.org/fhir/ValueSet/specimen-status|4.3.0
from the FHIR Standard
Specimen.typeexampleHl7VSSpecimenType
http://terminology.hl7.org/ValueSet/v2-0487
Specimen.collection.methodexampleFHIRSpecimenCollectionMethod
http://hl7.org/fhir/ValueSet/specimen-collection-method
from the FHIR Standard
Specimen.collection.bodySiteexampleSNOMEDCTBodyStructures
http://hl7.org/fhir/ValueSet/body-site
from the FHIR Standard
Specimen.conditionextensibleHl7VSSpecimenCondition
http://terminology.hl7.org/ValueSet/v2-0493

Constraints

IdGradePath(s)DetailsRequirements
collection-no-parenterrorSpecimenIf there is no parent sample, collection information must be present. If there is collection information present, there should be no parent sample.
: parent.empty() implies collection.exists() and collection.exists() implies parent.empty()
dom-2errorSpecimenIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorSpecimenIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where(((id.exists() and ('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url)))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(uri) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorSpecimenIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorSpecimenIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceSpecimenA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
parent-no-collectionerrorSpecimenIf there is no collection information, a parent sample must be present. If there is a parent sample present, there should be no collection information.
: collection.empty() implies parent.exists() and parent.exists() implies collection.empty()

 

Other representations of profile: CSV, Excel, Schematron