Interoperable Digital Identity and Patient Matching
2.0.0 - STU 2

Interoperable Digital Identity and Patient Matching - Downloaded Version 2.0.0 See the Directory of published versions

## Resource Profile: IDI Patient L2

Official URL: http://hl7.org/fhir/us/identity-matching/StructureDefinition/IDI-Patient-L2 | Version: 2.0.0
Standards status: Trial-use | Maturity Level: 2 | Computable Name: IDIPatientL2

(Level 2 weighting) The goal of this profile is to describe a data-minimized version of Patient used to convey information about the patient for Identity Matching utilizing the $idi-match operation, and prescribe a minimum set of data elements which, when consistent with an identity verification event performed at IAL2/IDIAL2 or higher, meet a combined 'weighted level' of at least 10

Usages:

- Use this Profile: IDI Match Input Parameters
- Examples for this Profile: Patient/ExamplePatientL2

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.

- Key Elements Table
- Differential Table
- Snapshot Table
- Statistics/References
- All

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
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 | Whether this patient's record is in active use
name | Σ C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
deceased[x] | ?!Σ | 0..1 |  | Indicates if the individual is deceased or not
deceasedBoolean |  |  | boolean |
deceasedDateTime |  |  | dateTime |
link | ?!Σ | 0..* | BackboneElement | Link to another patient resource that concerns the same actual person
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
other | Σ | 1..1 | Reference(Patient | RelatedPerson) | The other patient or related person resource that the link refers to
type | Σ | 1..1 | code | replaced-by | replaces | refer | seealso Binding: LinkType (required): The type of link between this patient resource and another patient resource.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Patient.link.type | Base | required | LinkType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Patient | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Patient | 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 | Patient | 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 | Patient | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Patient | 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()`
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`

This structure is derived from Patient

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
meta |  |  |  |
Slices for profile |  | 0..* | canonical(StructureDefinition) | Profiles this resource claims to conform to Slice: Unordered, Open by value:$this
profile:assertedProfile |  | 0..1 | canonical(StructureDefinition) | Profiles this resource claims to conform to Required Pattern: http://hl7.org/fhir/us/identity-matching/StructureDefinition/IDI-Patient-L2
identifier |  |  |  |
type |  | 1..1 | CodeableConcept | Description of identifier Binding: Identity Identifier Value Set (extensible)
value |  | 1..1 | string | The value that is unique
name | C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Patient.identifier.type | Base | extensible | Identity Identifier Value Set | 📦2.0.0 | This IG

#### Constraints

Id | Grade | Path(s) | Description | Expression
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
versionId | Σ | 0..1 | id | Version specific identifier
lastUpdated | Σ | 0..1 | instant | When the resource version last changed
source | Σ | 0..1 | uri | Identifies where the resource comes from
Slices for profile | Σ | 0..* | canonical(StructureDefinition) | Profiles this resource claims to conform to Slice: Unordered, Open by value:$this
profile:assertedProfile | Σ | 0..1 | canonical(StructureDefinition) | Profiles this resource claims to conform to Required Pattern: http://hl7.org/fhir/us/identity-matching/StructureDefinition/IDI-Patient-L2
security | Σ | 0..* | Coding | Security Labels applied to this resource Binding: All Security Labels (extensible): Security Labels from the Healthcare Privacy and Security Classification System.
tag | Σ | 0..* | Coding | Tags applied to this resource Binding: CommonTags (example): Codes that represent various types of tags, commonly workflow-related; e.g. "Needs review by Dr. Jones".
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): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
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 | An identifier for this patient
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
use | ?!Σ | 0..1 | code | usual | official | temp | secondary | old (If known) Binding: IdentifierUse (required): Identifies the purpose for this identifier, if known .
type | Σ | 1..1 | CodeableConcept | Description of identifier Binding: Identity Identifier Value Set (extensible)
system | Σ | 0..1 | uri | The namespace for the identifier value Example General: http://www.acme.com/identifiers/patient
value | Σ | 1..1 | string | The value that is unique Example General: 123456
period | Σ | 0..1 | Period | Time period when id is/was valid for use
assigner | Σ | 0..1 | Reference(Organization) | Organization that issued id (may be just text)
active | ?!Σ | 0..1 | boolean | Whether this patient's record is in active use
name | Σ C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
telecom | Σ | 0..* | ContactPoint | A contact detail for the individual
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 of birth for the individual
deceased[x] | ?!Σ | 0..1 |  | Indicates if the individual is deceased or not
deceasedBoolean |  |  | boolean |
deceasedDateTime |  |  | dateTime |
address | Σ | 0..* | Address | An address for the individual
maritalStatus |  | 0..1 | CodeableConcept | Marital (civil) status of a patient Binding: Marital Status Codes (extensible): The domestic partnership status of a person.
multipleBirth[x] |  | 0..1 |  | Whether patient is part of a multiple birth
multipleBirthBoolean |  |  | boolean |
multipleBirthInteger |  |  | integer |
photo |  | 0..* | Attachment | Image of the patient
contact | C | 0..* | BackboneElement | A contact party (e.g. guardian, partner, friend) for the patient Constraints: pat-1
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
relationship |  | 0..* | CodeableConcept | The kind of relationship Binding: PatientContactRelationship (extensible): The nature of the relationship between a patient and a contact person for that patient.
name |  | 0..1 | HumanName | A name associated with the contact person
telecom |  | 0..* | ContactPoint | A contact detail for the person
address |  | 0..1 | Address | Address for the contact person
gender |  | 0..1 | code | male | female | other | unknown Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
organization | C | 0..1 | Reference(Organization) | Organization that is associated with the contact
period |  | 0..1 | Period | The period during which this contact person or organization is valid to be contacted relating to this patient
communication |  | 0..* | BackboneElement | A language which may be used to communicate with the patient about his or her health
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
language |  | 1..1 | CodeableConcept | The language which can be used to communicate with the patient about his or her health Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
preferred |  | 0..1 | boolean | Language preference indicator
generalPractitioner |  | 0..* | Reference(Organization | Practitioner | PractitionerRole) | Patient's nominated primary care provider
managingOrganization | Σ | 0..1 | Reference(Organization) | Organization that is the custodian of the patient record
link | ?!Σ | 0..* | BackboneElement | Link to another patient 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
other | Σ | 1..1 | Reference(Patient | RelatedPerson) | The other patient or related person resource that the link refers to
type | Σ | 1..1 | code | replaced-by | replaces | refer | seealso Binding: LinkType (required): The type of link between this patient resource and another patient resource.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Patient.meta.security | Base | extensible | SecurityLabels | 📍4.0.1 | FHIR Std.
Patient.meta.tag | Base | example | Common Tags | 📍4.0.1 | FHIR Std.
Patient.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Patient.identifier.use | Base | required | IdentifierUse | 📍4.0.1 | FHIR Std.
Patient.identifier.type | Base | extensible | Identity Identifier Value Set | 📦2.0.0 | This IG
Patient.gender | Base | required | AdministrativeGender | 📍4.0.1 | FHIR Std.
Patient.maritalStatus | Base | extensible | MaritalStatus | 📍4.0.1 | FHIR Std.
Patient.contact.relationship | Base | extensible | Patient Contact Relationship | 📍4.0.1 | FHIR Std.
Patient.contact.gender | Base | required | AdministrativeGender | 📍4.0.1 | FHIR Std.
Patient.communication.​language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Patient.link.type | Base | required | LinkType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Patient | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Patient | 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 | Patient | 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 | Patient | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Patient | 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()`
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`
pat-1 | error | Patient.contact | SHALL at least contain a contact's details or a reference to an organization | `name.exists() or telecom.exists() or address.exists() or organization.exists()`

This structure is derived from Patient

Summary

Mandatory: 0 element(2 nested mandatory elements)

Slices

This structure defines the following Slices:

- The element 1 is sliced based on the value of Patient.meta.profile

Maturity: 2

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
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 | Whether this patient's record is in active use
name | Σ C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
deceased[x] | ?!Σ | 0..1 |  | Indicates if the individual is deceased or not
deceasedBoolean |  |  | boolean |
deceasedDateTime |  |  | dateTime |
link | ?!Σ | 0..* | BackboneElement | Link to another patient resource that concerns the same actual person
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized
other | Σ | 1..1 | Reference(Patient | RelatedPerson) | The other patient or related person resource that the link refers to
type | Σ | 1..1 | code | replaced-by | replaces | refer | seealso Binding: LinkType (required): The type of link between this patient resource and another patient resource.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Patient.link.type | Base | required | LinkType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Patient | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Patient | 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 | Patient | 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 | Patient | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Patient | 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()`
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`

Differential View

This structure is derived from Patient

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
meta |  |  |  |
Slices for profile |  | 0..* | canonical(StructureDefinition) | Profiles this resource claims to conform to Slice: Unordered, Open by value:$this
profile:assertedProfile |  | 0..1 | canonical(StructureDefinition) | Profiles this resource claims to conform to Required Pattern: http://hl7.org/fhir/us/identity-matching/StructureDefinition/IDI-Patient-L2
identifier |  |  |  |
type |  | 1..1 | CodeableConcept | Description of identifier Binding: Identity Identifier Value Set (extensible)
value |  | 1..1 | string | The value that is unique
name | C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Patient.identifier.type | Base | extensible | Identity Identifier Value Set | 📦2.0.0 | This IG

#### Constraints

Id | Grade | Path(s) | Description | Expression
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`

Snapshot View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Patient | C | 0..* | Patient | Patient information to be supplied to $match operation conforming to Level 2 weighting of information Constraints: idi-L1
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
versionId | Σ | 0..1 | id | Version specific identifier
lastUpdated | Σ | 0..1 | instant | When the resource version last changed
source | Σ | 0..1 | uri | Identifies where the resource comes from
Slices for profile | Σ | 0..* | canonical(StructureDefinition) | Profiles this resource claims to conform to Slice: Unordered, Open by value:$this
profile:assertedProfile | Σ | 0..1 | canonical(StructureDefinition) | Profiles this resource claims to conform to Required Pattern: http://hl7.org/fhir/us/identity-matching/StructureDefinition/IDI-Patient-L2
security | Σ | 0..* | Coding | Security Labels applied to this resource Binding: All Security Labels (extensible): Security Labels from the Healthcare Privacy and Security Classification System.
tag | Σ | 0..* | Coding | Tags applied to this resource Binding: CommonTags (example): Codes that represent various types of tags, commonly workflow-related; e.g. "Needs review by Dr. Jones".
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): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
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 | An identifier for this patient
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
use | ?!Σ | 0..1 | code | usual | official | temp | secondary | old (If known) Binding: IdentifierUse (required): Identifies the purpose for this identifier, if known .
type | Σ | 1..1 | CodeableConcept | Description of identifier Binding: Identity Identifier Value Set (extensible)
system | Σ | 0..1 | uri | The namespace for the identifier value Example General: http://www.acme.com/identifiers/patient
value | Σ | 1..1 | string | The value that is unique Example General: 123456
period | Σ | 0..1 | Period | Time period when id is/was valid for use
assigner | Σ | 0..1 | Reference(Organization) | Organization that issued id (may be just text)
active | ?!Σ | 0..1 | boolean | Whether this patient's record is in active use
name | Σ C | 0..* | HumanName | A name associated with the patient Constraints: idi-2
telecom | Σ | 0..* | ContactPoint | A contact detail for the individual
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 of birth for the individual
deceased[x] | ?!Σ | 0..1 |  | Indicates if the individual is deceased or not
deceasedBoolean |  |  | boolean |
deceasedDateTime |  |  | dateTime |
address | Σ | 0..* | Address | An address for the individual
maritalStatus |  | 0..1 | CodeableConcept | Marital (civil) status of a patient Binding: Marital Status Codes (extensible): The domestic partnership status of a person.
multipleBirth[x] |  | 0..1 |  | Whether patient is part of a multiple birth
multipleBirthBoolean |  |  | boolean |
multipleBirthInteger |  |  | integer |
photo |  | 0..* | Attachment | Image of the patient
contact | C | 0..* | BackboneElement | A contact party (e.g. guardian, partner, friend) for the patient Constraints: pat-1
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
relationship |  | 0..* | CodeableConcept | The kind of relationship Binding: PatientContactRelationship (extensible): The nature of the relationship between a patient and a contact person for that patient.
name |  | 0..1 | HumanName | A name associated with the contact person
telecom |  | 0..* | ContactPoint | A contact detail for the person
address |  | 0..1 | Address | Address for the contact person
gender |  | 0..1 | code | male | female | other | unknown Binding: AdministrativeGender (required): The gender of a person used for administrative purposes.
organization | C | 0..1 | Reference(Organization) | Organization that is associated with the contact
period |  | 0..1 | Period | The period during which this contact person or organization is valid to be contacted relating to this patient
communication |  | 0..* | BackboneElement | A language which may be used to communicate with the patient about his or her health
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
language |  | 1..1 | CodeableConcept | The language which can be used to communicate with the patient about his or her health Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
preferred |  | 0..1 | boolean | Language preference indicator
generalPractitioner |  | 0..* | Reference(Organization | Practitioner | PractitionerRole) | Patient's nominated primary care provider
managingOrganization | Σ | 0..1 | Reference(Organization) | Organization that is the custodian of the patient record
link | ?!Σ | 0..* | BackboneElement | Link to another patient 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
other | Σ | 1..1 | Reference(Patient | RelatedPerson) | The other patient or related person resource that the link refers to
type | Σ | 1..1 | code | replaced-by | replaces | refer | seealso Binding: LinkType (required): The type of link between this patient resource and another patient resource.
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Patient.meta.security | Base | extensible | SecurityLabels | 📍4.0.1 | FHIR Std.
Patient.meta.tag | Base | example | Common Tags | 📍4.0.1 | FHIR Std.
Patient.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Patient.identifier.use | Base | required | IdentifierUse | 📍4.0.1 | FHIR Std.
Patient.identifier.type | Base | extensible | Identity Identifier Value Set | 📦2.0.0 | This IG
Patient.gender | Base | required | AdministrativeGender | 📍4.0.1 | FHIR Std.
Patient.maritalStatus | Base | extensible | MaritalStatus | 📍4.0.1 | FHIR Std.
Patient.contact.relationship | Base | extensible | Patient Contact Relationship | 📍4.0.1 | FHIR Std.
Patient.contact.gender | Base | required | AdministrativeGender | 📍4.0.1 | FHIR Std.
Patient.communication.​language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Patient.link.type | Base | required | LinkType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Patient | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Patient | 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 | Patient | 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 | Patient | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Patient | 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()`
idi-2 | error | Patient.name | Either the given or family name SHALL be present | `given.exists() or family.exists()`
idi-L1 | error | Patient | Requestors asserting compliance with this Invariant level are also thereby indicating that all included demographics are consistent with an identity verification event performed as part of a documented process that is compliant with this IG. Combined weighted values of included elements must have a minimum value of 10 (see Patient Weighted Elements table). Note that the logic for computing weights is somewhat imperfect, particularly considering that it does not confirm that exactly the expected coded type is the one that exists in a match request; this is acceptable because it will not in itself lead to mismatches, though it may give requestors an overly-optimistic sense of their input quality. | `iif(identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5 > 10, 10, identifier.where(value.exists() and(type.coding.where(code = 'PPN' or code = 'DL' or code = 'STID'))).count() * 5) + iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) = 1, 4, iif(((address.exists(use = 'home') and address.line.exists() and(address.postalCode.exists() or(address.state.exists() and address.city.exists()))).toInteger() + (identifier.type.coding.exists(code != 'PPN' and code != 'DL' and code != 'STID') and identifier.value.exists()).toInteger() + (telecom.exists(system = 'email') and telecom.value.exists()).toInteger() + (telecom.exists(system = 'phone') and telecom.value.exists()).toInteger() + (photo.exists()).toInteger()) > 1, 5, 0)) + (name.family.exists() and name.given.exists()).toInteger() * 3 + (birthDate.exists().toInteger() * 2) >= 10`
pat-1 | error | Patient.contact | SHALL at least contain a contact's details or a reference to an organization | `name.exists() or telecom.exists() or address.exists() or organization.exists()`

This structure is derived from Patient

Summary

Mandatory: 0 element(2 nested mandatory elements)

Slices

This structure defines the following Slices:

- The element 1 is sliced based on the value of Patient.meta.profile

Maturity: 2

Other representations of profile: CSV, Excel, Schematron