Demographic package

Overview

The demographic model illustrated in the UML diagram below is a generalised model of the facts one might expect to see in a demographic server. The purpose of the model is as a specification of a demographic service, either standalone, or a "wrapper" service for an existing system such as a patient master index (PMI). In the latter situation, it is used to add the required openEHR semantics, particularly versioning, to an existing service.

RM demographic
Figure 1. rm.demographic package

The general design is based on the scheme of party and accountability described by [1], and is influenced by clinical adaptations including work done in Australia and HL7v3 (itself influenced by the Fowler models).

One of the main design criteria of the model is that it expresses attributes and relationships of demographic entities which exist regardless of particular clinical involvements or participations in particular events. Participations are meaningful only within the context of the health record or other relevant model where they record context-specific relationships between demographic entities and events in the real world.

Another criterion is that instances of the classes in the model must be serialisable into an EHR Extract in an unambgiuous way. This requires that each PARTY be a self-contained hierarchy of data, in the same way as distinct COMPOSITIONs in the EHR model are distinct hierarchies in an Extract. In order to ensure this condition, PARTY_RELATIONSHIPs must be implemented correctly, so as to prevent endless traversal of all PARTY objects through their relationships, when serialising. See Party Relationships below for details.

Archetyping

The model is designed to be used with archetypes, hence the generic nature of all entities. Every class containing an attribute of the form details:STRUCTURE is a completely archetypable structure. As a result, archetypes can be defined for concepts such as particular kinds of PERSON, ORGANISATION; for actual ROLEs such as "health care practitioner", and for party identities and addresses.

Names and Addresses

Classes have been included for PARTY_IDENTITY and ADDRESS, even though they contain only a link to details, in the form of the generic STRUCTURE class. This is not strictly necessary - it could have been done simply using appropriately named attributes in the classes PARTY and CONTACT - but is done to provide a place to add specific semantics in future releases of the model. It is also expected to make software development easier, since it provides explicit classes to which behaviour and other implementation attributes can be added. Lastly, it allows the notions of PARTY_IDENTITY and ADDRESS to be explicitly used in archetype-authoring tools.

Instances of PARTY_IDENTITY, linked to PARTY by the attribute identities are intended to express the names of people, organisations, and other actors - that is names which are "owned" by the party, e.g. self-declared (in the case of institutions and companies) or by virtue of social relations (names given by parents, tribes etc). Identifiers of Parties given by other organisations, or the state are not represented in this way, and should be recorded in the PARTY.details structure instead (see below).

Party Identification

Identifiers of Parties given by organisations or the state are treated as any other attribute of a Party, i.e. recorded as part of the data in the PARTY.details structure. Identifiers of Party instances in the system are provided in the same way as identifiers of Compositions in the EHR: via the uid attribute (type OBJECT_VERSION_ID) of the containing VERSION. These identifiers are used in all cross-references between Parties, and between Parties and Party_relationships.

Party Relationships

Relationships between parties in the real world may be expressed using PARTY_RELATIONSHIP objects, as illustrated below.

general model
Figure 2. General Relationship Model

Relationships are considered directional, hence the use of the attribute names source and target, however, these names are otherwise neutral, and give no indication as to the meaning of the relationships, such as which party is responsible and which accountable (for comparison, see the demographic models of Fowler [1]). Accordingly, each Party involved in a relationship includes it in its relationships list, if it is at the source end, or in the reverse_relationships list, if at the target end.

The usual way to determine the directionality of a relationship between two Parties is usually by which Party’s actions caused the relationship to come into being. For example, a relationship representing the concept "patient", between a health consumer and a health care organisation would have the consumer as source and the organisation as target.

PARTY_RELATIONSHIPs are stored as part of the data of the PARTY designated as the source. This means that the relationships attribute is by value, while reverse_relationships is by references, as are PARTY_RELATIONSHIP.source and target. The actual kind of reference is via the use of OBJECT_REFs containing HIER_OBJECT_IDs to denote the Version container of a Party, rather than OBJECT_VERSION_IDs, which would denote particular versions. Logically this implements the semantic that such relationships in the real world are between continuants, i.e. the real Parties, not just one of their version instances in a demographic system.

Versioning Semantics

The class PARTY and its descendants ACTOR and ROLE are all potentially versioned in a demographic system. A Version of a PARTY includes all the compositional parts, such as identities, contacts, Party relationships of which it is the source. Every Party is stored in its own Version container.

Class Definitions

PARTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

PARTY (abstract)

Description

Ancestor of all Party types, including real world entities and their roles. A Party is any entity which can participate in an activity. The name attribute inherited from LOCATABLE is used to indicate the actual type of party (note that the actual names, i.e. identities of parties are indicated in the identities attribute, not the name attribute).

It is strongly recommended that the inherited attribute uid be populated in PARTY objects, using the UID copied from the object_id() of the uid field of the enclosing VERSION object.
For example, the ORIGINAL_VERSION.uid 87284370-2D4B-4e3d-A3F3-F303D2F4F34B::uk.nhs.ehr1::2 would be copied to the uid field of the PARTY object.

Inherit

LOCATABLE

Attributes

Signature

Meaning

1..1

identities: List<PARTY_IDENTITY>

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

0..1

contacts: List<CONTACT>

Contacts for this party.

0..1

details: ITEM_STRUCTURE

All other details for this Party.

0..1

reverse_relationships: List<LOCATABLE_REF>

References to relationships in which this Party takes part as target.

0..1

relationships: List<PARTY_RELATIONSHIP>

Relationships in which this Party takes part as source.

Functions

Signature

Meaning

1..1

type (): DV_TEXT

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

Type_valid: type = name

Identities_valid: not identities.is_empty

Contacts_valid: contacts /= Void implies not contacts.is_empty

Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

Is_archetype_root: is_archetype_root

Uid_mandatory: uid /= Void

PARTY (abstract)

Ancestor of all Party types, including real world entities and their roles. A Party is any entity which can participate in an activity. The name attribute inherited from LOCATABLE is used to indicate the actual type of party (note that the actual names, i.e. identities of parties are indicated in the identities attribute, not the name attribute).

It is strongly recommended that the inherited attribute uid be populated in PARTY objects, using the UID copied from the object_id() of the uid field of the enclosing VERSION object.
For example, the ORIGINAL_VERSION.uid 87284370-2D4B-4e3d-A3F3-F303D2F4F34B::uk.nhs.ehr1::2 would be copied to the uid field of the PARTY object.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

contacts: List<CONTACT> [0..1]

Contacts for this party.

details: ITEM_STRUCTURE [0..1]

All other details for this Party.

reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

Type_valid: type = name

Identities_valid: not identities.is_empty

Contacts_valid: contacts /= Void implies not contacts.is_empty

Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

Is_archetype_root: is_archetype_root

Uid_mandatory: uid /= Void

{
    "name": "PARTY",
    "documentation": "Ancestor of all Party types, including real world entities and their roles. A Party is any entity which can participate in an activity. The `_name_` attribute inherited from `LOCATABLE` is used to indicate the actual type of party (note that the actual names, i.e. identities of parties are indicated in the `_identities_` attribute, not the `_name_` attribute).\n\nNOTE: It is strongly recommended that the inherited attribute `_uid_` be populated in `PARTY` objects, using the UID copied from the `_object_id()_` of the `_uid_` field of the enclosing `VERSION` object. +\nFor example, the `ORIGINAL_VERSION.uid` `87284370-2D4B-4e3d-A3F3-F303D2F4F34B::uk.nhs.ehr1::2`  would be copied to the `_uid_` field of the `PARTY` object.",
    "is_abstract": true,
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "identities": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "identities",
            "documentation": "Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.",
            "is_mandatory": true,
            "type_def": {
                "container_type": "List",
                "type": "PARTY_IDENTITY"
            },
            "cardinality": {
                "lower": 1,
                "upper_unbounded": true
            }
        },
        "contacts": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "contacts",
            "documentation": "Contacts for this party.",
            "type_def": {
                "container_type": "List",
                "type": "CONTACT"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "details": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "details",
            "documentation": "All other details for this Party.",
            "type": "ITEM_STRUCTURE"
        },
        "reverse_relationships": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "reverse_relationships",
            "documentation": "References to relationships in which this Party takes part as target.",
            "type_def": {
                "container_type": "List",
                "type": "LOCATABLE_REF"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "relationships": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "relationships",
            "documentation": "Relationships in which this Party takes part as source.",
            "type_def": {
                "container_type": "List",
                "type": "PARTY_RELATIONSHIP"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "functions": {
        "type": {
            "name": "type",
            "documentation": "Type of party, such as  `PERSON`,  `ORGANISATION`, etc. Role name, e.g.  general practitioner ,  nurse ,  private citizen . Taken from inherited `_name_` attribute.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "DV_TEXT"
            }
        }
    },
    "invariants": {
        "Type_valid": "type = name",
        "Identities_valid": "not identities.is_empty",
        "Contacts_valid": "contacts /= Void implies not contacts.is_empty",
        "Relationships_validity": "relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)",
        "Reverse_relationships_validity": "reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository (\"demographics\").all_party_relationships.has_object (item) and then repository(\"demographics\").all_party_relationships.object (item).target = self))",
        "Is_archetype_root": "is_archetype_root",
        "Uid_mandatory": "uid /= Void"
    }
}
PARTY

VERSIONED_PARTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

VERSIONED_PARTY

Description

Static type formed by binding generic parameter of VERSIONED_OBJECT<T> to PARTY.

Inherit

VERSIONED_OBJECT

VERSIONED_PARTY

Static type formed by binding generic parameter of VERSIONED_OBJECT<T> to PARTY.

Inherits: VERSIONED_OBJECT

Attributes

VERSIONED_OBJECT.uid: HIER_OBJECT_ID [1..1]

Unique identifier of this version container in the form of a UID with no extension. This id will be the same in all instances of the same container in a distributed environment, meaning that it can be understood as the uid of the virtual version tree.

VERSIONED_OBJECT.owner_id: OBJECT_REF [1..1]

Reference to object to which this version container belongs, e.g. the id of the containing EHR or other relevant owning entity.

VERSIONED_OBJECT.time_created: DV_DATE_TIME [1..1]

Time of initial creation of this versioned object.

Functions

VERSIONED_OBJECT.version_count (): Integer [1..1]

Return the total number of versions in this object.

VERSIONED_OBJECT.all_version_ids (): List<OBJECT_VERSION_ID> [1..1]

Return a list of ids of all versions in this object.

VERSIONED_OBJECT.all_versions (): List<VERSION<T>> [1..1]

Return a list of all versions in this object.

VERSIONED_OBJECT.has_version_at_time (
a_time: DV_DATE_TIME[1]
): Boolean [1..1]

True if a version for time a_time exists.

VERSIONED_OBJECT.has_version_id (
a_version_uid: OBJECT_VERSION_ID[1]
): Boolean [1..1]

True if a version with a_version_uid exists.

VERSIONED_OBJECT.version_with_id (
a_version_uid: OBJECT_VERSION_ID[1]
): VERSION

Pre: has_version_id (a_ver_id) [1..1]

Return the version with uid = a_version_uid.

VERSIONED_OBJECT.is_original_version (
a_version_uid: OBJECT_VERSION_ID[1]
): Boolean

Pre: has_version_id(a_ver_id) [1..1]

True if version with a_version_uid is an ORIGINAL_VERSION.

VERSIONED_OBJECT.version_at_time (
a_time: DV_DATE_TIME[1]
): VERSION

Pre: has_version_at_time (a_time) [1..1]

Return the version for time a_time.

VERSIONED_OBJECT.revision_history (): REVISION_HISTORY [1..1]

History of all audits and attestations in this versioned repository.

VERSIONED_OBJECT.latest_version (): VERSION [1..1]

Return the most recently added version (i.e. on trunk or any branch).

VERSIONED_OBJECT.latest_trunk_version (): VERSION [1..1]

Return the most recently added trunk version.

VERSIONED_OBJECT.trunk_lifecycle_state (): DV_CODED_TEXT

Post: Result = latest_trunk_version.lifecycle_state [1..1]

Return the lifecycle state from the latest trunk version. Useful for determining if the version container is logically deleted.

VERSIONED_OBJECT.commit_original_version (
a_contribution: OBJECT_REF[1],
a_new_version_uid: OBJECT_VERSION_ID[1],
a_preceding_version_id: OBJECT_VERSION_ID[1],
an_audit: AUDIT_DETAILS[1],
a_lifecycle_state: DV_CODED_TEXT[1],
a_data: T[1],
signing_key: String[1]
): void

Pre: all_version_ids.has (a_preceding_version_uid) or else version_count = 0 [1..1]

Add a new original version.

VERSIONED_OBJECT.commit_original_merged_version (
a_contribution: OBJECT_REF[1],
a_new_version_uid: OBJECT_VERSION_ID[1],
a_preceding_version_id: OBJECT_VERSION_ID[1],
an_audit: AUDIT_DETAILS[1],
a_lifecycle_state: DV_CODED_TEXT[1],
a_data: T[1],
an_other_input_uids: List<OBJECT_VERSION_ID>[1],
signing_key: String[1]
): void

Pre: all_version_ids.has (a_preceding_version_uid) or else version_count = 0 [1..1]

Add a new original merged version. This commit function adds a parameter containing the ids of other versions merged into the current one.

VERSIONED_OBJECT.commit_imported_version (
a_contribution: OBJECT_REF[1],
an_audit: AUDIT_DETAILS[1],
a_version: ORIGINAL_VERSION[1]
): void [1..1]

Add a new imported version. Details of version id etc come from the ORIGINAL_VERSION being committed.

VERSIONED_OBJECT.commit_attestation (
an_attestation: ATTESTATION[1],
a_ver_id: OBJECT_VERSION_ID[1],
signing_key: String[1]
): void

Pre: has_version_id(a_ver_id) and is_original_version(a_ver_id) [1..1]

Add a new attestation to a specified original version. Attestations can only be added to Original versions.

Invariants

VERSIONED_OBJECT.Version_count_valid: version_count >= 0

VERSIONED_OBJECT.All_version_ids_valid: all_version_ids.count = version_count

VERSIONED_OBJECT.All_versions_valid: all_versions.count = version_count

VERSIONED_OBJECT.Latest_version_valid: version_count > 0 implies latest_version /= Void

VERSIONED_OBJECT.Uid_validity: extension.is_empty

{
    "name": "VERSIONED_PARTY",
    "documentation": "Static type formed by binding generic parameter of `VERSIONED_OBJECT<T>` to `PARTY`. ",
    "ancestors": [
        "VERSIONED_OBJECT"
    ]
}
VERSIONED_PARTY

ROLE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

ROLE

Description

Generic description of a role performed by an Actor. The role corresponds to a competency of the Party. Roles are used to define the responsibilities undertaken by a Party for a purpose. Roles should have credentials qualifying the performer to perform the role.

Inherit

PARTY

Attributes

Signature

Meaning

0..1

time_validity: DV_INTERVAL<DV_DATE>

Valid time interval for this role.

1..1

performer: PARTY_REF

Reference to Version container of Actor playing the role.

0..1

capabilities: List<CAPABILITY>

The capabilities of this role.

Invariants

Capabilities_valid: capabilities /= Void implies not capabilities.empty

ROLE

Generic description of a role performed by an Actor. The role corresponds to a competency of the Party. Roles are used to define the responsibilities undertaken by a Party for a purpose. Roles should have credentials qualifying the performer to perform the role.

Inherits: Any, PATHABLE, LOCATABLE, PARTY

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

time_validity: DV_INTERVAL<DV_DATE> [0..1]

Valid time interval for this role.

performer: PARTY_REF [1..1]

Reference to Version container of Actor playing the role.

capabilities: List<CAPABILITY> [0..1]

The capabilities of this role.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

Capabilities_valid: capabilities /= Void implies not capabilities.empty

{
    "name": "ROLE",
    "documentation": "Generic description of a role performed by an Actor. The role corresponds to a competency of the Party. Roles are used to define the responsibilities undertaken by a Party for a purpose. Roles should have credentials qualifying the performer to perform the role.",
    "ancestors": [
        "PARTY"
    ],
    "properties": {
        "time_validity": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "time_validity",
            "documentation": "Valid time interval for this role.",
            "type_def": {
                "root_type": "DV_INTERVAL",
                "generic_parameters": [
                    "DV_DATE"
                ]
            }
        },
        "performer": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "performer",
            "documentation": "Reference to Version container of Actor playing the role.",
            "is_mandatory": true,
            "type": "PARTY_REF"
        },
        "capabilities": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "capabilities",
            "documentation": "The capabilities of this role.",
            "type_def": {
                "container_type": "List",
                "type": "CAPABILITY"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "invariants": {
        "Capabilities_valid": "capabilities /= Void implies not capabilities.empty"
    }
}
ROLE

PARTY_RELATIONSHIP Class

  • Definition

  • Effective

  • BMM

  • UML

Class

PARTY_RELATIONSHIP

Description

Generic description of a relationship between parties.

Inherit

LOCATABLE

Attributes

Signature

Meaning

0..1

details: ITEM_STRUCTURE

The detailed description of the relationship.

1..1

target: PARTY_REF

Target of relationship.

0..1

time_validity: DV_INTERVAL<DV_DATE>

Valid time interval for this relationship.

1..1

source: PARTY_REF

Source of relationship.

Functions

Signature

Meaning

1..1

type (): DV_TEXT

Type of relationship, such as employment, authority, health provision

Invariants

Source_valid: source /= Void and then source.relationships.has (self)

Target_valid: target /= Void and then not target.reverse_relationships.has (self)

Type_validity: type = name

PARTY_RELATIONSHIP

Generic description of a relationship between parties.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

details: ITEM_STRUCTURE [0..1]

The detailed description of the relationship.

target: PARTY_REF [1..1]

Target of relationship.

time_validity: DV_INTERVAL<DV_DATE> [0..1]

Valid time interval for this relationship.

source: PARTY_REF [1..1]

Source of relationship.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

type (): DV_TEXT [1..1]

Type of relationship, such as employment, authority, health provision

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

Source_valid: source /= Void and then source.relationships.has (self)

Target_valid: target /= Void and then not target.reverse_relationships.has (self)

Type_validity: type = name

{
    "name": "PARTY_RELATIONSHIP",
    "documentation": "Generic description of a relationship between parties.",
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "details": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "details",
            "documentation": "The detailed description of the relationship.",
            "type": "ITEM_STRUCTURE"
        },
        "target": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "target",
            "documentation": "Target of relationship.",
            "is_mandatory": true,
            "type": "PARTY_REF"
        },
        "time_validity": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "time_validity",
            "documentation": "Valid time interval for this relationship.",
            "type_def": {
                "root_type": "DV_INTERVAL",
                "generic_parameters": [
                    "DV_DATE"
                ]
            }
        },
        "source": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "source",
            "documentation": "Source of relationship.",
            "is_mandatory": true,
            "type": "PARTY_REF"
        }
    },
    "functions": {
        "type": {
            "name": "type",
            "documentation": "Type of relationship, such as  employment,  authority,  health provision ",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "DV_TEXT"
            }
        }
    },
    "invariants": {
        "Source_valid": "source /= Void and then source.relationships.has (self)",
        "Target_valid": "target /= Void and then not target.reverse_relationships.has (self)",
        "Type_validity": "type = name"
    }
}
PARTY_RELATIONSHIP

PARTY_IDENTITY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

PARTY_IDENTITY

Description

An identity owned by a Party, such as a person name or company name, and which is used by the Party to identify itself. Actual structure is archetyped.

Inherit

LOCATABLE

Attributes

Signature

Meaning

1..1

details: ITEM_STRUCTURE

The value of the identity. This will often taken the form of a parseable string or a small structure of strings.

Functions

Signature

Meaning

1..1

purpose (): DV_TEXT

Purpose of identity, e.g. legal , stagename, nickname, tribal name, trading name. Taken from value of inherited name attribute.

Invariants

Purpose_valid: purpose = name

PARTY_IDENTITY

An identity owned by a Party, such as a person name or company name, and which is used by the Party to identify itself. Actual structure is archetyped.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

details: ITEM_STRUCTURE [1..1]

The value of the identity. This will often taken the form of a parseable string or a small structure of strings.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

purpose (): DV_TEXT [1..1]

Purpose of identity, e.g. legal , stagename, nickname, tribal name, trading name. Taken from value of inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

Purpose_valid: purpose = name

{
    "name": "PARTY_IDENTITY",
    "documentation": "An identity  owned  by a Party, such as a person name or company name, and which is used by the Party to identify itself. Actual structure is archetyped.",
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "details": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "details",
            "documentation": "The value of the identity. This will often taken the form of a parseable string or a small structure of strings.",
            "is_mandatory": true,
            "type": "ITEM_STRUCTURE"
        }
    },
    "functions": {
        "purpose": {
            "name": "purpose",
            "documentation": "Purpose of identity, e.g. legal ,  stagename,  nickname,  tribal name,  trading name. Taken from value of inherited `_name_` attribute.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "DV_TEXT"
            }
        }
    },
    "invariants": {
        "Purpose_valid": "purpose = name"
    }
}
PARTY_IDENTITY

CONTACT Class

  • Definition

  • Effective

  • BMM

  • UML

Class

CONTACT

Description

Description of a means of contact of a Party. Actual structure is archetyped.

Inherit

LOCATABLE

Attributes

Signature

Meaning

1..1

addresses: List<ADDRESS>

A set of address alternatives for this contact purpose and time validity combination.

0..1

time_validity: DV_INTERVAL<DV_DATE>

Valid time interval for this contact descriptor.

Functions

Signature

Meaning

1..1

purpose (): DV_TEXT

Purpose for which this contact is used, e.g. mail, daytime phone, etc. Taken from value of inherited name attribute.

Invariants

Purpose_valid: purpose = name

CONTACT

Description of a means of contact of a Party. Actual structure is archetyped.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

addresses: List<ADDRESS> [1..1]

A set of address alternatives for this contact purpose and time validity combination.

time_validity: DV_INTERVAL<DV_DATE> [0..1]

Valid time interval for this contact descriptor.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

purpose (): DV_TEXT [1..1]

Purpose for which this contact is used, e.g. mail, daytime phone, etc. Taken from value of inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

Purpose_valid: purpose = name

{
    "name": "CONTACT",
    "documentation": "Description of a means of contact of a Party. Actual structure is archetyped.",
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "addresses": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "addresses",
            "documentation": "A set of address alternatives for this contact purpose and time validity combination.",
            "is_mandatory": true,
            "type_def": {
                "container_type": "List",
                "type": "ADDRESS"
            },
            "cardinality": {
                "lower": 1,
                "upper_unbounded": true
            }
        },
        "time_validity": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "time_validity",
            "documentation": "Valid time interval for this contact descriptor.",
            "type_def": {
                "root_type": "DV_INTERVAL",
                "generic_parameters": [
                    "DV_DATE"
                ]
            }
        }
    },
    "functions": {
        "purpose": {
            "name": "purpose",
            "documentation": "Purpose for which this contact is used, e.g. mail,  daytime phone, etc. Taken from value of inherited `_name_` attribute.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "DV_TEXT"
            }
        }
    },
    "invariants": {
        "Purpose_valid": "purpose = name"
    }
}
CONTACT

ADDRESS Class

  • Definition

  • Effective

  • BMM

  • UML

Class

ADDRESS

Description

Address of contact, which may be electronic or geographic.

Inherit

LOCATABLE

Attributes

Signature

Meaning

1..1

details: ITEM_STRUCTURE

Archetypable structured address.

Functions

Signature

Meaning

1..1

type (): DV_TEXT

Type of address, e.g. electronic, locality. Taken from value of inherited name attribute.

Invariants

Type_valid: type = name

ADDRESS

Address of contact, which may be electronic or geographic.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

details: ITEM_STRUCTURE [1..1]

Archetypable structured address.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

type (): DV_TEXT [1..1]

Type of address, e.g. electronic, locality. Taken from value of inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

Type_valid: type = name

{
    "name": "ADDRESS",
    "documentation": "Address of contact, which may be electronic or geographic.",
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "details": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "details",
            "documentation": "Archetypable structured address.",
            "is_mandatory": true,
            "type": "ITEM_STRUCTURE"
        }
    },
    "functions": {
        "type": {
            "name": "type",
            "documentation": "Type of address, e.g. electronic,  locality. Taken from value of inherited `_name_` attribute.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "DV_TEXT"
            }
        }
    },
    "invariants": {
        "Type_valid": "type = name"
    }
}
ADDRESS

CAPABILITY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

CAPABILITY

Description

Capability of a role, such as ehr modifier, health care provider. Capability should be backed up by credentials.

Inherit

LOCATABLE

Attributes

Signature

Meaning

1..1

credentials: ITEM_STRUCTURE

The qualifications of the performer of the role for this capability. This might include professional qualifications and official identifications such as provider numbers etc.

0..1

time_validity: DV_INTERVAL<DV_DATE>

Valid time interval for the credentials of this capability.

CAPABILITY

Capability of a role, such as ehr modifier, health care provider. Capability should be backed up by credentials.

Inherits: Any, PATHABLE, LOCATABLE

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

credentials: ITEM_STRUCTURE [1..1]

The qualifications of the performer of the role for this capability. This might include professional qualifications and official identifications such as provider numbers etc.

time_validity: DV_INTERVAL<DV_DATE> [0..1]

Valid time interval for the credentials of this capability.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

{
    "name": "CAPABILITY",
    "documentation": "Capability of a role, such as  ehr modifier,  health care provider. Capability should be backed up by credentials.",
    "ancestors": [
        "LOCATABLE"
    ],
    "properties": {
        "credentials": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "credentials",
            "documentation": "The qualifications of the performer of the role for this capability. This might include professional qualifications and official identifications such as provider numbers etc.",
            "is_mandatory": true,
            "type": "ITEM_STRUCTURE"
        },
        "time_validity": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "time_validity",
            "documentation": "Valid time interval for the credentials of this capability.",
            "type_def": {
                "root_type": "DV_INTERVAL",
                "generic_parameters": [
                    "DV_DATE"
                ]
            }
        }
    }
}
CAPABILITY

ACTOR Class

  • Definition

  • Effective

  • BMM

  • UML

Class

ACTOR (abstract)

Description

Ancestor of all real-world types, including people and organisations. An actor is any real-world entity capable of taking on a role.

Inherit

PARTY

Attributes

Signature

Meaning

0..1

languages: List<DV_TEXT>

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

0..1

roles: List<PARTY_REF>

Identifiers of the Version container for each Role played by this Party.

Invariants

Roles_valid: roles /= Void implies not roles.is_empty

Legal_identity_exists: has_legal_identity

ACTOR (abstract)

Ancestor of all real-world types, including people and organisations. An actor is any real-world entity capable of taking on a role.

Inherits: Any, PATHABLE, LOCATABLE, PARTY

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

languages: List<DV_TEXT> [0..1]

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

roles: List<PARTY_REF> [0..1]

Identifiers of the Version container for each Role played by this Party.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

Roles_valid: roles /= Void implies not roles.is_empty

Legal_identity_exists: has_legal_identity

{
    "name": "ACTOR",
    "documentation": "Ancestor of all real-world types, including people and organisations. An actor is any real-world entity capable of taking on a role.",
    "is_abstract": true,
    "ancestors": [
        "PARTY"
    ],
    "properties": {
        "languages": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "languages",
            "documentation": "Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).",
            "type_def": {
                "container_type": "List",
                "type": "DV_TEXT"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "roles": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "roles",
            "documentation": "Identifiers of the Version container for each Role played by this Party.",
            "type_def": {
                "container_type": "List",
                "type": "PARTY_REF"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "invariants": {
        "Roles_valid": "roles /= Void implies not roles.is_empty",
        "Legal_identity_exists": "has_legal_identity"
    }
}
ACTOR

PERSON Class

  • Definition

  • Effective

  • BMM

  • UML

Class

PERSON

Description

Generic description of persons. Provides a dedicated type to which Person archetypes can be targeted.

Inherit

ACTOR

PERSON

Generic description of persons. Provides a dedicated type to which Person archetypes can be targeted.

Inherits: Any, PATHABLE, LOCATABLE, PARTY, ACTOR

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

ACTOR.languages: List<DV_TEXT> [0..1]

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

ACTOR.roles: List<PARTY_REF> [0..1]

Identifiers of the Version container for each Role played by this Party.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

ACTOR.Roles_valid: roles /= Void implies not roles.is_empty

ACTOR.Legal_identity_exists: has_legal_identity

{
    "name": "PERSON",
    "documentation": "Generic description of persons. Provides a dedicated type to which Person archetypes can be targeted.",
    "ancestors": [
        "ACTOR"
    ]
}
PERSON

ORGANISATION Class

  • Definition

  • Effective

  • BMM

  • UML

Class

ORGANISATION

Description

Generic description of organisations. An organisation is a legally constituted body whose existence (in general) outlives the existence of parties considered to be part of it.

Inherit

ACTOR

ORGANISATION

Generic description of organisations. An organisation is a legally constituted body whose existence (in general) outlives the existence of parties considered to be part of it.

Inherits: Any, PATHABLE, LOCATABLE, PARTY, ACTOR

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

ACTOR.languages: List<DV_TEXT> [0..1]

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

ACTOR.roles: List<PARTY_REF> [0..1]

Identifiers of the Version container for each Role played by this Party.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

ACTOR.Roles_valid: roles /= Void implies not roles.is_empty

ACTOR.Legal_identity_exists: has_legal_identity

{
    "name": "ORGANISATION",
    "documentation": "Generic description of organisations. An organisation is a legally constituted body whose existence (in general) outlives the existence of parties considered to be part of it.",
    "ancestors": [
        "ACTOR"
    ]
}
ORGANISATION

GROUP Class

  • Definition

  • Effective

  • BMM

  • UML

Class

GROUP

Description

A group is a real world group of parties which is created by another party, usually an organisation, for some specific purpose. A typical clinical example is that of the specialist care team, e.g. cardiology team . The members of the group usually work together.

Inherit

ACTOR

GROUP

A group is a real world group of parties which is created by another party, usually an organisation, for some specific purpose. A typical clinical example is that of the specialist care team, e.g. cardiology team . The members of the group usually work together.

Inherits: Any, PATHABLE, LOCATABLE, PARTY, ACTOR

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

ACTOR.languages: List<DV_TEXT> [0..1]

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

ACTOR.roles: List<PARTY_REF> [0..1]

Identifiers of the Version container for each Role played by this Party.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

ACTOR.Roles_valid: roles /= Void implies not roles.is_empty

ACTOR.Legal_identity_exists: has_legal_identity

{
    "name": "GROUP",
    "documentation": "A group is a real world group of parties which is created by another party, usually an organisation, for some specific purpose. A typical clinical example is that of the specialist care team, e.g.  cardiology team . The members of the group usually work together.",
    "ancestors": [
        "ACTOR"
    ]
}
GROUP

AGENT Class

  • Definition

  • Effective

  • BMM

  • UML

Class

AGENT

Description

Generic concept of any kind of agent, including devices, software systems, but not humans or organisations.

Inherit

ACTOR

AGENT

Generic concept of any kind of agent, including devices, software systems, but not humans or organisations.

Inherits: Any, PATHABLE, LOCATABLE, PARTY, ACTOR

Attributes

LOCATABLE.name: DV_TEXT [1..1]

Runtime name of this fragment, used to build runtime paths. This is the term provided via a clinical application or batch process to name this EHR construct: its retention in the EHR faithfully preserves the original label by which this entry was known to end users.

LOCATABLE.archetype_node_id: String [1..1]

Design-time archetype identifier of this node taken from its generating archetype; used to build archetype paths. Always in the form of an at-code, e.g. at0005. This value enables a 'standardised' name for this node to be generated, by referring to the generating archetype local terminology.

At an archetype root point, the value of this attribute is always the stringified form of the archetype_id found in the archetype_details object.

LOCATABLE.uid: UID_BASED_ID [0..1]

Optional globally unique object identifier for root points of archetyped structures.

LOCATABLE.links: List<LINK> [0..1]

Links to other archetyped structures (data whose root object inherits from ARCHETYPED, such as ENTRY, SECTION and so on). Links may be to structures in other compositions.

LOCATABLE.archetype_details: ARCHETYPED [0..1]

Details of archetyping used on this node.

LOCATABLE.feeder_audit: FEEDER_AUDIT [0..1]

Audit trail from non-openEHR system of original commit of information forming the content of this node, or from a conversion gateway which has synthesised this node.

PARTY.identities: List<PARTY_IDENTITY> [1..1]

Identities used by the party to identify itself, such as legal name, stage names, aliases, nicknames and so on.

PARTY.contacts: List<CONTACT> [0..1]

Contacts for this party.

PARTY.details: ITEM_STRUCTURE [0..1]

All other details for this Party.

PARTY.reverse_relationships: List<LOCATABLE_REF> [0..1]

References to relationships in which this Party takes part as target.

PARTY.relationships: List<PARTY_RELATIONSHIP> [0..1]

Relationships in which this Party takes part as source.

ACTOR.languages: List<DV_TEXT> [0..1]

Languages which can be used to communicate with this actor, in preferred order of use (if known, else order irrelevant).

ACTOR.roles: List<PARTY_REF> [0..1]

Identifiers of the Version container for each Role played by this Party.

Functions

(abstract) Any.is_equal (
other: Any[1]
): Boolean [1..1]

Value equality: return True if this and other are attached to objects considered to be equal in value.

Parameters
other

Other object for comparison.

Any.equal alias "=", "==" (
other: Any[1]
): Boolean [1..1]

Reference equality for reference types, value equality for value types.

Parameters
other

Other object for comparison.

Any.instance_of (
a_type: String[1]
): Any [1..1]

Create new instance of a type.

Any.type_of (
an_object: Any[1]
): String [1..1]

Type name of an object as a string. May include generic parameters, as in "Interval<Time>".

Any.not_equal alias "!=", "≠" (
other: Ordered[1]
): Boolean [1..1]

True if current object not equal to other. Returns not equal().

PATHABLE.parent (): PATHABLE [1..1]

Parent of this node in a compositional hierarchy.

PATHABLE.item_at_path (
a_path: String[1]
): Any

Pre: path_unique (a_path) [1..1]

The item at a path (relative to this item); only valid for unique paths, i.e. paths that resolve to a single item.

PATHABLE.items_at_path (
a_path: String[1]
): List<Any> [0..1]

List of items corresponding to a non-unique path.

PATHABLE.path_exists (
a_path: String[1]
): Boolean

Pre: not a_path.is_empty [1..1]

True if the path exists in the data with respect to the current item.

PATHABLE.path_unique (
a_path: String[1]
): Boolean

Pre: path_exists (a_path) [1..1]

True if the path corresponds to a single item in the data.

PATHABLE.path_of_item (
a_loc: PATHABLE[1]
): String [1..1]

The path to an item relative to the root of this archetyped structure.

LOCATABLE.concept (): DV_TEXT [1..1]

Clinical concept of the archetype as a whole (= derived from the archetype_node_id' of the root node)

LOCATABLE.is_archetype_root (): Boolean [1..1]

True if this node is the root of an archetyped structure.

PARTY.type (): DV_TEXT [1..1]

Type of party, such as PERSON, ORGANISATION, etc. Role name, e.g. general practitioner , nurse , private citizen . Taken from inherited name attribute.

Invariants

LOCATABLE.Links_valid: links /= Void implies not links.is_empty

LOCATABLE.Archetyped_valid: is_archetype_root xor archetype_details = Void

LOCATABLE.Archetype_node_id_valid: not archetype_node_id.is_empty

PARTY.Type_valid: type = name

PARTY.Identities_valid: not identities.is_empty

PARTY.Contacts_valid: contacts /= Void implies not contacts.is_empty

PARTY.Relationships_validity: relationships /= Void implies (not relationships.is_empty and then relationships.for_all (r | r.source = self)

PARTY.Reverse_relationships_validity: reverse_relationships /= Void implies (not reverse_relationships.empty and then reverse_relationships.for_all (item | repository ("demographics").all_party_relationships.has_object (item) and then repository("demographics").all_party_relationships.object (item).target = self))

PARTY.Is_archetype_root: is_archetype_root

PARTY.Uid_mandatory: uid /= Void

ACTOR.Roles_valid: roles /= Void implies not roles.is_empty

ACTOR.Legal_identity_exists: has_legal_identity

{
    "name": "AGENT",
    "documentation": "Generic concept of any kind of agent, including devices, software systems, but not humans or organisations.",
    "ancestors": [
        "ACTOR"
    ]
}
AGENT

Instance Examples

In the following instance examples, the values of the attributes uid, source, target, and reverse_relationships are not meant to be taken as literally valid OBJECT_IDs - for the purposes of clarity, simple integers have been used.

Parties

Person

The diagram below illustrates a possible set of instances for a PERSON, with home and work contact information. There are separate archetypes for the PERSON, each ADDRESS, and each PARTY_IDENTITY. In the following figure, "meaning" is the meaning from the value of the archetype_node_id attribute, functionally derived from the archetype local ontology.

person demographics
Figure 3. Person Demographic Information

Group

The figure below illustrates the demographic information for a cadiac surgery team in a hospital. The group includes a head surgeon, anaesthetist, assistant surgeon, and presumably others (not shown). Each of these members of the team have an employment relationship with the hospital (shown only for one surgeon, in the interests of clarity).

group demographics
Figure 4. Group Demographics

Relationships

Patient

The figure below shows a simple way of representing the patient relationship between a person and a health care organisation.

simple patient relationship
Figure 5. Simple Patient Relationship

The following diagram shows the same logical relationship, but with both Parties acting through Roles, representing their status as healthcare consumer and healthcare provider respectively. Each of these Roles has associated credentials which document its official nature within the healthcare system.

roles and credentials
Figure 6. Patient Relationship with Roles and Credentials

References

  • [1] M. Fowler, Analysis Patterns: Reusable Object Models. Addison Wesley, 1997.