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 File Meta Data

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

Representation of file metadata for NCPI

Key Guidelines

The NCPI File Metadata profile is based on the standard resource type, Observation and is intended to represent information about the file metadata associated with a file.

Added Profile Restrictions

In order to ensure that our resources are interoperable across studies, we have employed a number of restrictions that should make consuming Patient resources more consistent.

The NCPI File Metadata profile is essentially a collection of slices built on one another.

This IG supports FASTQ, BAM/CRAM, MAF, VCF, and Proteomics file types, all of which use the NCPI File Metadata profile as its Parent. Each file has a set of expectations for pieces of information to include based on the specific needs of each file type.

FHIR Mappings

The following fields from the shared data model are to be mapped to the NCPI File Metadata as shown below:

Logical Model Property Cardinality NCPI FHIR Mapping Usage Guidance Notes
parent_file 1..1 focus A Reference to a file to which the metadata is related  
assay_strategy BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component e.g., Whole Genome Sequencing  
platform_instrument BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component e.g., Illumina HiSeq2000  
library_prep BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component e.g., polyA  
library_selection BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component    
strandedness BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component stranded, unstranded  
target_region BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component    
is_paired_end BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component True, False  
adaptor_trimmed BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component True, False  
reference_genome BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component GRCh37, GRCh38  
workflow_type BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component e.g., alignment, somatic  
workflow_tool BAM/CRAM, FASTQ, MAF, Proteomics, VCF Observation.component e.g., BAM-MEM, GATK-Haplotype Caller  
specimen_collection BAM/CRAM, FASTQ, MAF, Proteomics, VCF Extension Reference(Any) e.g., Reference(Participant_ID)  

Usage:

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation C 0..* Observation Measurements and simple assertions
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
obs-6: dataAbsentReason SHALL only be present if Observation.value[x] is not present
obs-7: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present
... 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
... status ?!Σ 1..1 code registered | preliminary | final | amended +
Binding: ObservationStatus (required): Codes providing the status of an observation.


ele-1: All FHIR elements must have a @value or children
... focus Σ 1..1 Reference(Resource) What the observation is about, when it is not about the subject of record
ele-1: All FHIR elements must have a @value or children

doco Documentation for this format

Terminology Bindings

PathConformanceValueSetURI
Observation.statusrequiredObservationStatus
http://hl7.org/fhir/ValueSet/observation-status|4.3.0
from the FHIR Standard
Observation.codeexampleLOINCCodes (a valid code from LOINC)
http://hl7.org/fhir/ValueSet/observation-codes
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorObservationIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorObservationIf 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-4errorObservationIf 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-5errorObservationIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceObservationA 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()
obs-6errorObservationdataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorObservationIf Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present
: value.empty() or component.code.where(coding.intersect(%resource.code.coding).exists()).empty()

 

Other representations of profile: CSV, Excel, Schematron