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
Official URL: https://nih-ncpi.github.io/ncpi-fhir-ig-2/StructureDefinition/ncpi-person | Version: 0.1.0 | |||
Draft as of 2024-11-25 | Computable Name: NcpiPerson |
Person
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.
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.
Unique participant identifiers are essential to joining the information about a single entity's (i.e., person's) involvement in multiple research studies.
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 |
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:
Description of Profiles, Differentials, Snapshots and how the different presentations work.
This structure is derived from Person
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Person | 0..* | Person | A generic person record | |
id | 1..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 | |
Documentation for this format |
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Person | 0..* | Person | A generic person record | |
id | Σ | 1..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 |
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 | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
target | 1..1 | Reference(NCPI Participant) | The participant we are describing | |
Documentation for this format |
Id | Grade | Path(s) | Details | Requirements |
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.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-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() |
Name | Flags | Card. | Type | Description & Constraints | ||||
---|---|---|---|---|---|---|---|---|
Person | 0..* | Person | A generic person record | |||||
id | Σ | 1..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 | ||||
language | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): IETF language tag
| |||||
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |||||
contained | 0..* | Resource | Contained, inline Resources dom-r4b: Containing new R4B resources within R4 resources may cause interoperability issues if instances are shared with R4 systems | |||||
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. | |||||
Documentation for this format |
Path | Conformance | ValueSet | URI | |||
Person.language | preferred | CommonLanguages
http://hl7.org/fhir/ValueSet/languages from the FHIR Standard | ||||
Person.gender | required | AdministrativeGenderhttp://hl7.org/fhir/ValueSet/administrative-gender|4.3.0 from the FHIR Standard | ||||
Person.link.assurance | required | IdentityAssuranceLevelhttp://hl7.org/fhir/ValueSet/identity-assuranceLevel|4.3.0 from the FHIR Standard |
Id | Grade | Path(s) | Details | Requirements |
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.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-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() | |
dom-r4b | warning | Person.contained | Containing new R4B resources within R4 resources may cause interoperability issues if instances are shared with R4 systems : ($this is Citation or $this is Evidence or $this is EvidenceReport or $this is EvidenceVariable or $this is MedicinalProductDefinition or $this is PackagedProductDefinition or $this is AdministrableProductDefinition or $this is Ingredient or $this is ClinicalUseDefinition or $this is RegulatedAuthorization or $this is SubstanceDefinition or $this is SubscriptionStatus or $this is SubscriptionTopic) implies (%resource is Citation or %resource is Evidence or %resource is EvidenceReport or %resource is EvidenceVariable or %resource is MedicinalProductDefinition or %resource is PackagedProductDefinition or %resource is AdministrableProductDefinition or %resource is Ingredient or %resource is ClinicalUseDefinition or %resource is RegulatedAuthorization or %resource is SubstanceDefinition or %resource is SubscriptionStatus or %resource is SubscriptionTopic) | |
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
Differential View
This structure is derived from Person
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Person | 0..* | Person | A generic person record | |
id | 1..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 | |
Documentation for this format |
Key Elements View
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Person | 0..* | Person | A generic person record | |
id | Σ | 1..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 |
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 | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
target | 1..1 | Reference(NCPI Participant) | The participant we are describing | |
Documentation for this format |
Id | Grade | Path(s) | Details | Requirements |
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.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-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() |
Snapshot View
Name | Flags | Card. | Type | Description & Constraints | ||||
---|---|---|---|---|---|---|---|---|
Person | 0..* | Person | A generic person record | |||||
id | Σ | 1..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 | ||||
language | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): IETF language tag
| |||||
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |||||
contained | 0..* | Resource | Contained, inline Resources dom-r4b: Containing new R4B resources within R4 resources may cause interoperability issues if instances are shared with R4 systems | |||||
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. | |||||
Documentation for this format |
Path | Conformance | ValueSet | URI | |||
Person.language | preferred | CommonLanguages
http://hl7.org/fhir/ValueSet/languages from the FHIR Standard | ||||
Person.gender | required | AdministrativeGenderhttp://hl7.org/fhir/ValueSet/administrative-gender|4.3.0 from the FHIR Standard | ||||
Person.link.assurance | required | IdentityAssuranceLevelhttp://hl7.org/fhir/ValueSet/identity-assuranceLevel|4.3.0 from the FHIR Standard |
Id | Grade | Path(s) | Details | Requirements |
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.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-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() | |
dom-r4b | warning | Person.contained | Containing new R4B resources within R4 resources may cause interoperability issues if instances are shared with R4 systems : ($this is Citation or $this is Evidence or $this is EvidenceReport or $this is EvidenceVariable or $this is MedicinalProductDefinition or $this is PackagedProductDefinition or $this is AdministrableProductDefinition or $this is Ingredient or $this is ClinicalUseDefinition or $this is RegulatedAuthorization or $this is SubstanceDefinition or $this is SubscriptionStatus or $this is SubscriptionTopic) implies (%resource is Citation or %resource is Evidence or %resource is EvidenceReport or %resource is EvidenceVariable or %resource is MedicinalProductDefinition or %resource is PackagedProductDefinition or %resource is AdministrableProductDefinition or %resource is Ingredient or %resource is ClinicalUseDefinition or %resource is RegulatedAuthorization or %resource is SubstanceDefinition or %resource is SubscriptionStatus or %resource is SubscriptionTopic) | |
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
Other representations of profile: CSV, Excel, Schematron