NCPI FHIR Implementation Guide v2
0.2.0 - ci-build

NCPI FHIR Implementation Guide v2 - Local Development build (v0.2.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.2.0
Draft as of 2025-12-03 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

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id Σ 0..1 id Unique participant identifier
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... target 1..1 Reference(NCPI Participant) The participant we are describing

doco Documentation for this format

Constraints

Id Grade Path(s) Description Expression
dom-2 error Person If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Person 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 contained.where((('#'+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(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Person If 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-5 error Person If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Person A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Person

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id 0..1 id Unique participant identifier
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... target 1..1 Reference(NCPI Participant) The participant we are describing

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id Σ 0..1 id Unique participant identifier
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier 0..* Identifier A human identifier for this person
... name Σ 0..* HumanName A name associated with the person
... telecom Σ 0..* ContactPoint A contact detail for the person
... gender Σ 0..1 code male | female | other | unknown
Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
... birthDate Σ 0..1 date The date on which the person was born
... address 0..* Address One or more addresses for the person
... photo 0..1 Attachment Image of the person
... managingOrganization Σ 0..1 Reference(Organization) The organization that is the custodian of the person record
... active ?!Σ 0..1 boolean This person's record is in active use
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... target 1..1 Reference(NCPI Participant) The participant we are describing
.... assurance 0..1 code level1 | level2 | level3 | level4
Binding: IdentityAssuranceLevel (required): The level of confidence that this link represents the same actual person, based on NIST Authentication Levels.

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Person.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Person.gender Base required AdministrativeGender 📍4.0.1 FHIR Std.
Person.link.assurance Base required IdentityAssuranceLevel 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Person If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Person 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 contained.where((('#'+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(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Person If 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-5 error Person If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Person A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Person

Summary

Mandatory: 1 element

Structures

This structure refers to these other structures:

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id Σ 0..1 id Unique participant identifier
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... target 1..1 Reference(NCPI Participant) The participant we are describing

doco Documentation for this format

Constraints

Id Grade Path(s) Description Expression
dom-2 error Person If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Person 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 contained.where((('#'+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(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Person If 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-5 error Person If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Person A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Differential View

This structure is derived from Person

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id 0..1 id Unique participant identifier
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... target 1..1 Reference(NCPI Participant) The participant we are describing

doco Documentation for this format

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Person 0..* Person A generic person record
... id Σ 0..1 id Unique participant identifier
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier 0..* Identifier A human identifier for this person
... name Σ 0..* HumanName A name associated with the person
... telecom Σ 0..* ContactPoint A contact detail for the person
... gender Σ 0..1 code male | female | other | unknown
Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
... birthDate Σ 0..1 date The date on which the person was born
... address 0..* Address One or more addresses for the person
... photo 0..1 Attachment Image of the person
... managingOrganization Σ 0..1 Reference(Organization) The organization that is the custodian of the person record
... active ?!Σ 0..1 boolean This person's record is in active use
... link 1..* BackboneElement Link to a resource that concerns the same actual person
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... target 1..1 Reference(NCPI Participant) The participant we are describing
.... assurance 0..1 code level1 | level2 | level3 | level4
Binding: IdentityAssuranceLevel (required): The level of confidence that this link represents the same actual person, based on NIST Authentication Levels.

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Person.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Person.gender Base required AdministrativeGender 📍4.0.1 FHIR Std.
Person.link.assurance Base required IdentityAssuranceLevel 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Person If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Person 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 contained.where((('#'+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(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error Person If 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-5 error Person If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Person A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Person

Summary

Mandatory: 1 element

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron

Notes: