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 Person

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

Person

Key Guidelines

In situations where a person participates in multiple studies that have participant data scoped in an exclusive way within one or more projects, we have a Person entity. It is functionally a “group” of Participants that are all describing one “actual” person. This is especially to support situations where access policies about that participant might be conflicting and cases where the data itself about the participant might conflict but cannot be adjudicated by the repository.

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.

  • ID should be a globally unique identifier associated with the person. This practice is intended to make constructing queries for the same person compatible across different servers (such as QA vs PROD) but also to make the resource URLs more meaningful.

Unique participant identifiers are essential to joining the information about a single entity's (i.e., person's) involvement in multiple research studies.

FHIR Mappings

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

Logical Model Property Cardinality NCPI FHIR Mapping Usage Guidance Notes
Person 1..1 id Required It is strongly recommended for the Person ID to be a unique identifier with an appropriate system
Participant 0..1 link.target Required It is strongly recommended for the Participant ID to be a unique identifier with an appropriate system
Study Participation

The conventional FHIR mechanism to link Patient resources to a ResearchStudy is through the use of a ResearchSubject resource. Let's use GREGoR data as an example: NCPI Person "PS_000" which represents the "actual" person participating in a study is linked to a specific research study via NCPI Participant, "GSS123456". In this case, GSS123456 is connected to PS_000 by link.target and if PS_000 participanted in another study, their other unique NCPI Participant ID could be similarly linked. NCPI Study Participant connects NCPI Research Study, relevant Access Policies, and an NCPI Participant into a single profile while NCPI Study Group contains a list of Study Participants.

For further information, see the Participant, Research Study, and Person examples:

NCPI Profile Link to GREGoR Example
Research Study Example JSON
Research Study Group Example JSON
Study Participant Example JSON
Participant Example JSON GSS123456, Example JSON GSS654321
Person Example JSON

Usage:

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraintsdoco
.. Person 0..* Person A generic person record
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
... id Σ 1..1 id Unique participant identifier
... 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
... link 1..* BackboneElement Link to a resource that concerns the same actual person
ele-1: All FHIR elements must have a @value or children unless an empty Parameters resource
.... 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
.... target 1..1 Reference(NCPI Participant) The participant we are describing
ele-1: All FHIR elements must have a @value or children

doco Documentation for this format

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorPersonIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorPersonIf 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-4errorPersonIf 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-5errorPersonIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practicePersonA 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()

 

Other representations of profile: CSV, Excel, Schematron

Notes: